使用Pandoc使用自定义序言将Markdown转换为LaTeX


16

我知道我可以使用-H--include-in-header命令在生成的输出中包括自定义前导。现在的问题是Pandoc包含了我的序言,但在其前面放了另一个序言:

\documentclass{article}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\ifxetex
  \usepackage{fontspec,xltxtra,xunicode}
  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
\else
  \ifluatex
    \usepackage{fontspec}
    \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
  \else
    \usepackage[utf8]{inputenc}
  \fi
\fi
\ifxetex
  \usepackage[setpagesize=false, % page size defined by xetex
              unicode=false, % unicode breaks when used with xetex
              xetex]{hyperref}
\else
  \usepackage[unicode=true]{hyperref}
\fi
\hypersetup{breaklinks=true, pdfborder={0 0 0}}
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em}  % prevent overfull lines
\setcounter{secnumdepth}{0}

[... my preamble ...]

我知道这是default.latexPandoc从其templates文件夹加载的默认LaTeX前言()。当我使用--include-after-bodywith 时,也会发生同样的事情\end{document}

这是我正在使用的命令:

pandoc -o output.tex input.txt --include-before-body=header.tex --include-after-body=footer.tex

Answers:


20

正如您所发现的,--include-in-header将文本添加到Pandoc的LaTeX模板中指定的序言中。有几种方法可以做您想做的事情。

  1. 如果您想要一个完全自定义的前导,则需要使用以下命令指定模板文件

    pandoc -o output.tex --template=FILE input.txt
    

    模板可以具有变量(例如$title$和更重要的是$body$)和条件。如果您希望获得启发,可以使用以下命令签出默认模板

    pandoc -D latex
    
  2. 如果要一劳永逸地使用新模板,可以制作一个default.latex模板,将其命名为,然后将其放在模板目录中(~/.pandoc/templates/在UNIX机器上)。在这种情况下,您需要通过调用来指定要使用模板

    pandoc -o output.tex --standalone input.txt
    
  3. 如果您不想完全处理模板,则可以运行

    pandoc -o output.tex input.txt
    

    结果将是一个纯LaTeX文档,即没有序言,\begin{document}或者\end{document}。然后,您可以自己添加序言。请注意,使用此方法时,所有元数据(标题,作者)都将丢失。

有关如何制作和使用模板的详细信息,请参见Pandoc的出色手册页

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.