如何使标准 LaTeX 模板适应 Pandoc(在 Docker 容器中,不使用 RStudio/knitr )

如何使标准 LaTeX 模板适应 Pandoc(在 Docker 容器中,不使用 RStudio/knitr )

我想使用 Pandoc 将 Markdown 文本文件转换为使用 LaTeX 模板的精美格式的 PDF。我希望能够在未来未知的机器上重复执行此操作,因此我使用官方 Pandoc Docker 镜像通过 Docker 容器执行此操作,这是推荐的这里。我已经成功地让它工作了Eisvogel Pandoc Latex 模板...

——但我对如何使用标准 LaTeX 模板感到困惑,比如那些免费提供的模板http://www.latextemplates.com/(具体来说这个)或由学术期刊提供(例如这个),考虑到我对 Markdown、Pandoc 和 Docker 的特定配置(可以从它的 git 存储库)。

具体来说,我认为我有两个问题:

  1. 上面提到的“标准模板”在我看来并不完全是模板——它们包括带有 LaTeX 标记的示例文本。我如何提取任何必要的内容以将其映射到 Markdown + Pandoc LaTeX 模板范例上?

  2. 它们使用多个.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/

相关内容