我正在尝试使用 Pandoc 将我的文档从 Markdown 转换为 PDF。在我的 Markdown 文件的开头,我包含了一个 YAML 标头。似乎每个参数都得到了处理,除了header-includes
。
该主题已在这里讨论:使用 Pandoc 添加页眉和页脚
我无法让它按照这篇文章中解释的方式工作(或者我在网上看到的一些其他文章,或者甚至在阅读了 Pandoc 的文档之后)。我不知道我做错了什么。
设置:
- Mac OS 10.11
- 2015年纺织展
- Pandoc 1.15
Markdown 文件的开头:
---
title: Anonymise agents datas on MySQL for EQualOne
author: Adrien Desprez
abstract: This script is able to anonymise agents datas stored in MySQL portal.
date: July 14th 2016
geometry: margin=2cm
numbersections: yes
header-includes:
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \fancyhead[CO,CE]{This is fancy}
- \fancyfoot[CO,CE]{So is this}
- \fancyfoot[LE,RO]{\thepage}
---
# Prerequisites
* Linux distribution; tested on CentOS 6.7 and Fedora 23
* Python 2.6 or 2.7
* Python modules: yaml, MySQLdb
在默认的乳胶模板上我可以看到header-includes
应该处理该参数:
adrien@datmachine ☻ pandoc -D latex|grep -C 2 "header-includes"
$endif$
\date{$date$}
$for(header-includes)$
$header-includes$
$endfor$
然后我运行以下pandoc
命令:
pandoc -f markdown -t latex --standalone --listings -H ~/Documents/listings-setup.tex -o ~/Documents/readme.pdf ~/git/pro/exploit/scripts/offline/data/anonymise_agents_datas/README.md
PDF 不包含任何页眉或页脚。如果我以详细模式运行并检查生成的 TeX 文件,则没有usepackage{fancyhdr}
提及~/Documents/readme.tex
:
pandoc --verbose -f markdown -t latex --standalone --listings -H ~/Documents/listings-setup.tex -o ~/Documents/readme.tex ~/git/pro/exploit/scripts/offline/data/anonymise_agents_datas/README.md > output.log
该output.log
文件不包含任何有用的信息。
令我惊讶的是,它能pandoc
正确处理我在 YAML 标头上提供给他的每个参数,但名为 的参数header-includes
除外,尽管该参数存在于 Latex 默认模板中。
我错过了什么?
答案1
我最终需要创建一个 Latex 自定义模板。我还有其他自定义需求,可以使用自定义模板轻松满足。
因此,为了创建乳胶自定义模板:
pandoc -D latex > default-template.tex # to store the default template
cp default-template.tex custom-template.tex # to create your own template
然后,编辑custom-template.tex
文件。
要添加带有条件的标题,您可以执行以下操作:
diff --git a/default-template.tex b/custom-template.tex
index 33277c0..629c7a2 100644
--- a/default-template.tex
+++ b/custom-template.tex
@@ -175,9 +175,13 @@ $if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$
\date{$date$}
-$for(header-includes)$
-$header-includes$
-$endfor$
+$if(header-includes)$
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhead{}
+\fancyhead[RO,RE]{Your header content here}
+\fancyfoot[LO,LE]{Your footer content here}
+$endif$
$if(subparagraph)$
$else$
在 Markdown 文件的标题上:
---
header-includes: yes
---
# Some title
Some content.
然后,使用您的乳胶自定义模板生成您的 PDF:
pandoc -f markdown -t latex --standalone --template custom-template.tex -o outputfile.pdf inputfile.md
您可以进一步使用乳胶参数和 YAML 元数据报告标题的内容。
$if(header-includes)$
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyhead[$head-options$]{$head-content$}
\fancyfoot[$foot-options$]{$foot-content$}
$endif$
在你的 Markdown 文件中:
---
header-includes: yes
head-options: RO,RE
foot-options: LO,LE
head-content: Your header content here
foot-content: Your footer content here
---
# Some title
Some content.
不过,我还没有测试过最后一种可能性。也许你必须保护从 Markdown 的 YAML 标头传递到 LaTeX 的字符串。有待测试。