无法使 fancyhdr 与 pandoc + yaml 标头一起工作

无法使 fancyhdr 与 pandoc + yaml 标头一起工作

我正在尝试使用 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 的字符串。有待测试。

相关内容