制作 pandoc 中的 LaTeX 模板

pandoc 处理部分

翻译一段 pandoc 官网手册上的话:

模板语法

评论

序列 $-- 和行尾之间的任何内容都将被视为注释,并从输出中省略。

定界符

为了在模板中标记变量和控制结构,可以使用 $…$${…} 作为分隔符。样式也可以混合在同一模板中,但是每种情况下,开始和结束定界符必须匹配。分隔符后面可能跟着一个或多个空格或制表符,这些空格或制表符将被忽略。结束定界符后可以跟一个或多个空格或制表符,这些空格或制表符将被忽略。

要在文档中包含文字 $,请使用 $$

内插变量

内插变量的槽是由匹配的定界符包围的变量名。变量名必须以字母开头,可以包含字母、数字、_-.。关键字 itifelseendifforsependfor 不能用作变量名。例子:

$foo$
$foo.bar.baz$
$foo_bar.baz-bim$
$ foo $
${foo}
${foo.bar.baz}
${foo_bar.baz-bim}
${ foo }

带句点的变量名称用于获取结构化变量值。因此,例如,employee.salary 将返回 salary 对象字段的值,即 employee 字段的值。

  • 如果变量的值为简单值,则将逐字呈现。(请注意,没有进行转义;假定调用程序将为输出格式适当地对字符串进行转义。)
  • 如果值是列表,则将这些值连接在一起。
  • 如果该值为地图,true 则将呈现字符串。
  • 每隔一个值将被呈现为空字符串。

条件

条件以 if(variable) 开始(用匹配的分隔符括起来),以 endif 结束(用匹配的分隔符括起来)。它可以选择包含一个 else(包含在匹配的分隔符中)。如果 variable 有非空值,则使用 if 部分,否则使用 else 部分(如果存在)。例子:

$if(foo)$bar$endif$

$if(foo)$
$foo$
$endif$

$if(foo)$
part one
$else$
part two
$endif$

${if(foo)}bar${endif}

${if(foo)}
${foo}
${endif}

${if(foo)}
${ foo.bar }
${else}
no foo!
${endif}

关键字 elseif 可以用来简化复杂的嵌套条件:

$if(foo)$
XXX
$elseif(bar)$
YYY
$else$
ZZZ
$endif$

到了这里,基本可以制作一个自己的(较为简单的)模板了。

pandoc 默认模板

pandoc 默认模板的地址为 https://github.com/jgm/pandoc-templates/blob/master/default.latex,基本上对照着 pandoc 官网的手册,是能够读懂的。

pandoc 提供如此多的选项可能是考虑用户不需要学会如何编写 LaTeX\LaTeX 文件,这种考虑对于 LaTeX\LaTeX 用户可能是多余的。甚至于默认模板的中文处理方式是不太好的(提供了 xeCJK 的选项,不如直接 ctex 宏集,见《处理中文时应该用ctex宏包还是应该用xeCJK宏包?》)。

因此我们可以直接删除大部分内容,只留下我们需要的,再编写自己的模板。

例子

我自己随便弄了个例子:
这是模板文件

% templatex.latex
\documentclass[fontset=fandol]{ctexart}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{unicode-math}
\usepackage{hyperref}
$if(title)$
\title{$title$}
$endif$
$if(author)$
\author{$author$}
$endif$
\begin{document}
\maketitle
\tableofcontents
$body$
\end{document}

这是 markdown 文件

<!-- test.md -->
---
title: 测试
author: 死抠
---

# 测试

## 测试

### 测试

测试 $E=mc^2$

\newpage

test

![测试](test.jpg)

命令行执行

pandoc test.md --template=templatex.latex --pdf-engine=xelatex -o test.pdf

即可完成转换。

优缺点

优点:

  • 输入方便
  • 只需要编写一个模板就能满足自己的需求(通过添加选项来控制加载的宏包、使用的样式)

缺点:

  • 精细控制还是得靠 LaTeX\LaTeX
  • 运行速度慢,比直接纯 LaTeX\LaTeX 编译慢太多
文章作者: sikouhjw
文章链接: https://sikouhjw.github.io/2020/11/11/2020-11-11-pandoc-template/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 sikouhjw.github.io
支付宝捐赠
微信捐赠