Markdown PDF를 마 개조하여 출력을 좋은 느낌으로 한다
샘플은 이쪽
1. 이미지·표에 캡션을 붙여 번호를 자동으로 흔들도록 한다
.vscode/extensions/yzane.markdown-pdf-1.4.4/node_modules/markdown-it/lib/renderer.js
의Renderer.prototype.renderToken
를 다음과 같이 다시 씁니다.renderer.js
Renderer.prototype.renderToken = function renderToken(tokens, idx, options) {
var nextToken,
result = '',
needLf = false,
token = tokens[idx];
// Tight list paragraphs
if (token.hidden) {
return '';
}
// Insert a newline between hidden paragraph and subsequent opening
// block-level tag.
//
// For example, here we should insert a newline before blockquote:
// - a
// >
//
if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {
result += '\n';
}
if (token.tag === 'img') {
result += '<figure class=image>\n';
}
// Add token name, e.g. `<img`
result += (token.nesting === -1 ? '</' : '<') + token.tag;
if (token.nesting === -1 && token.tag === 'table') {
TableCaption = true;
}
if (TableCaption) {
result += ' class=caption';
}
// Encode attributes, e.g. `<img src="foo"`
result += this.renderAttrs(token);
// Add a slash for self-closing tags, e.g. `<img src="foo" /`
if (token.nesting === 0 && options.xhtmlOut) {
result += ' /';
}
// Check if we need to add a newline after this tag
if (token.block) {
needLf = true;
if (token.nesting === 1) {
if (idx + 1 < tokens.length) {
nextToken = tokens[idx + 1];
if (nextToken.type === 'inline' || nextToken.hidden) {
// Block-level tag containing an inline tag.
//
needLf = false;
} else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {
// Opening tag + closing tag of the same type. E.g. `<li></li>`.
//
needLf = false;
}
}
}
}
result += needLf ? '>\n' : '>';
if (token.tag === 'img') {
result += '\n<figcaption>' + '図' + (++imageCount) + '. ' + token.attrs[token.attrIndex('alt')][1] + '</figcaption>\n'
result += '</figure>';
}
if (result === '<p class=caption>') {
result += '表' + (++tableCount) + '. ';
TableCaption = false;
}
return result;
};
번호를 자동으로 흔들기 위해 전역적으로 이러한 변수를 정의하고,
var imageCount = 0;
var tableCount = 0;
var TableCaption = false;
function Renderer()
안에 imageCount = 0;
tableCount = 0;
를 추가합니다.
또한
.vscode/extensions/yzane.markdown-pdf-1.4.4/styles/markdown.css
markdown.css
.image {
margin-left: auto;
margin-right: auto;
text-align: center;
}
.caption {
text-align: center;
}
그리고 추가합니다.
이제 이미지의 alt 요소와
</table>
바로 뒤의 <p>
요소가 캡션 문자열로 처리됩니다.예를 들어, 이 코드는
sumple.md
![ジュース1](img/juice.jpg)
![ジュース2](img/juice.jpg)
||1|
|-|-|
|1|1|
1マス計算1
||1|
|-|-|
|1|1||
1マス計算2
이렇게 출력됩니다.
2. 수식을 쓸 수 있도록 한다
Mathjax를 소개합니다.
.vscode/extensions/yzane.markdown-pdf-1.4.4/template/template.html
template.html
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$', '$']],
},
messageStyle: "none",
TeX: {
equationNumbers: {
autoNumber: "AMS"
}
}
});
</script>
를 추가합니다.
그러면 다음 코드가
sumple2.md
$O(\log n)$
$$
\begin{equation}
\int(\log x)dx = \frac{1}{x} + C
\end{equation}
$$
$O(\log n)$
$$
\begin{equation}
\int(\log x)dx =\frac{1}{x} + C
\end{equation}
$$
로 출력됩니다. (아래의 식에는 식 번호가 붙습니다)
3. 표지를 만드는
#
를 메인 타이틀로 취급합니다. 기타 표지에 필요한 요소도 좋은 느낌으로 출력되도록합니다..vscode/extensions/yzane.markdown-pdf-1.4.4/styles/markdown.css
markdown.css
h1{
text-align: center;
font-size: 4em;
}
.subtitle {
margin-top: 3em;
font-size: 3em;
text-align: center;
}
.cover {
margin-top: 3em;
margin-left: auto;
margin-right: auto;
text-align: center;
font-size: 2em;
page-break-after: always;
}
추가하면 다음 코드가
sumple3.md
# Main Title
<div class=subtitle>Sub Title</div>
<div class=cover>
<p> 日付: 1970/1/1 </p>
<p> 報告者氏名: ugis </p>
</div>
이렇게 출력됩니다. cover 클래스를 가진 div 요소로 페이지 나누기가 들어가기 때문에 이것이 그대로 표지가 됩니다. 1
이것에 관해서는 더 좋은 방법이 있을 것 같기 때문에, 아는 분은 가르쳐 주시면 기쁩니다. ↩
Reference
이 문제에 관하여(Markdown PDF를 마 개조하여 출력을 좋은 느낌으로 한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ugis_prog/items/9637fa74ed9553ddd197텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)