我想使用 Pandoc 将 Markdown 文本文件转换为使用 LaTeX 模板的精美格式的 PDF。我希望能够在未来未知的机器上重复执行此操作,因此我使用官方 Pandoc Docker 镜像通过 Docker 容器执行此操作,这是推荐的这里。我已经成功地让它工作了Eisvogel Pandoc Latex 模板...
——但我对如何使用标准 LaTeX 模板感到困惑,比如那些免费提供的模板http://www.latextemplates.com/(具体来说这个)或由学术期刊提供(例如这个),考虑到我对 Markdown、Pandoc 和 Docker 的特定配置(可以从它的 git 存储库)。
具体来说,我认为我有两个问题:
上面提到的“标准模板”在我看来并不完全是模板——它们包括带有 LaTeX 标记的示例文本。我如何提取任何必要的内容以将其映射到 Markdown + Pandoc LaTeX 模板范例上?
它们使用多个
.tex
文件和/或附带.cls
文件。如何将它们放到正确的位置,以便容器化的 Pandoc 进程可以找到它们?
这个问题解决了类似的问题,但特别感兴趣的是使用 RStudio。
答案1
1.
pandoc latex 模板只是一个常规 latex 文件,其中包含一些占位符变量。您可以使用 打印默认模板pandoc -D latex > default.latex
。
这意味着,您可以使用任何现有的乳胶文件并只需添加这些变量即可制作模板。
让我们来看看这个最小的乳胶文档mwe.tex
:
\documentclass{article}
\begin{document}
Here is some text.
\end{document}
现在您可以Here is some text
用替换$body$
并执行echo "Here is some different text" | pandoc --template mwe.tex -s --to latex
,您将看到,它$body$
已被文本替换。
这样,您就可以用任何 latex 文件制作 pandoc 模板。只需用 pandoc 变量替换 latex 文件中的文本和命令即可。当然,您需要加载 pandoc 使用的所有包!您可以查阅默认模板,了解 pandoc 通常需要什么。
模板引擎的详细工作原理以及可用的变量已记录在手册中:https://pandoc.org/MANUAL.html#templates
2.
将文件存储在哪里? Pandoc 在当前目录和数据目录中查找文件。pandoc -v
将打印系统上的数据目录。 如果您的数据目录是$HOME/.local/share/pandoc
,则模板将位于以下位置:$HOME/.local/share/pandoc/templates
答案2
另一种方法是让pandoc
完成其工作,然后由 (LaTeX) 模板完成其工作。让模板为main.tex
。你把 放在\include{contents.tex}
而不是主体中,即 和\begin{document}
之间\end{document}
。
然后继续contents.tex
使用生成pandoc
。当您使用 Docker 时,我希望您可以轻松地自动化所有这些操作。这是我的看法,使用make
:
main.pdf : main.tex contents.tex
latexmk -pdf main
contents.tex : document.md
pandoc -f markdown+smart+raw_tex -t latex $< -o $@
clean :
rm -f contents.*
latexmk -pdf -C main
答案3
关于 (2),将.cls
文件放在哪里以便 Docker 化的 Pandoc 进程能够找到它们的问题,DG 帮助我(在我们继续聊天讨论中)理解它们需要由 TeX 找到,而不是由 Pandoc 找到。
为了让 TeX 能够找到它们,它们需要位于某个子文件夹中/texmf/
(在这个特定的 Docker 容器中——为了在任何系统上找到相关位置,kpsewhich -var-value TEXMFHOME
)。
因此,如果我在构建 Docker 映像时.cls
在一个名为的文件夹中有一些文件cls
,那么在 Dockerfile 中添加以下行就可以了:
COPY ./cls/* \
/texmf/tex/latex/cls/