Pandoc + xelatex + 模板 导出PDF

一、准备工作

准备事项 事项说明
操作系统 macOS 12.6.3
LaTex 环境 MacTex 2022 - full
Pandoc 环境 Pandoc 3.1.1
Markdown 环境 Obsidian 1.1.16
Obsidian Pandoc 插件 Pandoc Plugin 0.4.1

1. 下载 MacTex

最新完整版下载路径:https://mirrors.nju.edu.cn/CTAN/systems/mac/mactex/MacTeX.pkg

2. 下载 Pandoc

最新完整版下载路径:
https://objects.githubusercontent.com/github-production-release-asset-2e65be/571770/19718443-2762-44ce-ae67-cf8f08eab30b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230308%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230308T073030Z&X-Amz-Expires=300&X-Amz-Signature=388d44609095106e4cb7693bd0fdbd52d0540bffff60b292e934358ecd31cec9&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=571770&response-content-disposition=attachment%3B%20filename%3Dpandoc-3.1.1-macOS.pkg&response-content-type=application%2Foctet-stream

3. 下载 Obsidian

在 Obsidian 中文社区 下载最新版的 Obsidian

4. 下载 Pandoc Plugin 插件

在 GitHub 下载最新版本的 Pandoc Plugin 插件

5. 环境安装

MacTex、Pandoc 和 Obsidian 的安装方法都非常的简单,在此不在赘述。在此重点讲一下 Obsidian 中 Pandoc 插件的安装。

  1. 关闭安全模式,启用第三方插件。

  2. 单击文件夹图标进入存放插件的文件夹。

  3. 手工创建 obsidian-pandoc 文件夹,将下来得到的 main.jsmainifest.jsonstyles.css 放至该文件夹即可。

  4. 单击刷新图标

  5. 开启 Pandoc Plugin

经过上述五个步骤,Pandoc for Obsidian 插件就安装好了,具体的配置将在后续讲解。

二、模板配置

1. 添加中文字体支持

使用 Nova 等文本编辑器打开 eisvogel.latex 模板文件,查找 \else % if not pdftex,在 $else$ 后添加中文字支持语句。

\usepackage[fallback]{xeCJK}
\setCJKmainfont{STFangsong}[BoldFont=STHeiti, ItalicFont=STKaiti]
\setCJKfallbackfamilyfont{rm}{STFangsong}
\usepackage[default]{sourcesanspro}
\usepackage{sourcecodepro}

\setCJKmainfont{STFangsong}[BoldFont=STHeiti, ItalicFont=STKaiti]的意思是,将中文字体改为华文仿宋,加粗格式改为华文黑体,倾斜格式改为华文楷体。基于 latex 理念,汉字没有斜体,所谓的斜体汉字,是通过几何变换得到非常粗糙,不满足严格排版要求,而西文的斜体指的是 Italy 字系,因此此处也是遵循了该理念。该三种字体也可以换成系统中的其他字体,大家可以根据喜好自行选择自己喜欢的字体。

\setCJKfallbackfamilyfont{rm}{STFangsong} 的字体要与第二行的主字体保持一致。

在 macOS 中,可以通过 【关于本机 – 系统报告 – 字体】中找到系统内置的所有字体,复制字体的唯一名称到上述两行语句中。

修改完成后的结果如下所示,需要注意添到的位置

\else % if not pdftex
  $if(mainfont)$
  $else$
  \usepackage[fallback]{xeCJK}
  \setCJKmainfont{STFangsong}[BoldFont=STHeiti, ItalicFont=STKaiti]
  \setCJKfallbackfamilyfont{rm}{STFangsong}
  \usepackage[default]{sourcesanspro}
  \usepackage{sourcecodepro}

2. 设置首行缩进

\begin{document} 前面添加如下代码:

\usepackage{ctex} %调用中文字体宏包
\usepackage{indentfirst} %调用首行缩进宏包
\setlength{\parindent}{2em} %设置首行缩进为2字符

\begin{document}

3. 直接转换成 PDF

找到这一条代码:

pdfcreator={LaTeX via pandoc with the Eisvogel template}}

改为:

pdfcreator={LaTeX via pandoc}}

三、Pandoc 配置

1. 获取 pandoc 安装路径

找开终端,通过输入 which pandoc 命令获取 pandoc 的安装路径。

2. 获取 xelatex 安装路径

找开终端,通过输入 which xelatex 命令获取 xelatex 的安装路径。

3. 配置 Pandoc Plugin

在 Obsidian 第三方插件 Pandoc Plugin 中进行配置。

--template /Users/kevin/Documents/Markdown/.obsidian/eisvogel.latex --listings

注意,在 Pandoc Plugin 插件中,--template 后的路径是不需要使用引号 "" 括起来的。具体路径按你自己放置 eisvogel.latex 文件的实现路径为准。

到此为止,Pandoc Plugin 的配置就完成,可以通过命令面板找到 Pandoc: Export PDF via LaTex 导出 PDF 了。

4. 测试导出 PDF 功能是否正常

即可将当前 Markdown 文档导出至指定的导出文件夹,如果在 Pandoc Plugin 中没有设置 Export folder 则导出至 Markdown 文档所在的文件夹。如果过程没有报错,正常导出 PDF 文件,即所有配置正确,如果遇到报错,请重新检查上述 3 个步骤的操作是正常。

eisvogel.latex 模板使用方法

1. 增加默认封面页

需在 Markdown 第一行开始定义 YAML 区,前面不能有任何内容和空行,YAML 区的内容如下:

---
title: "标题"
author: [作者]
date: "日期"
subject: "主题"
keywords: [标签]
subtitle: "副标题"
lang: "cn"
titlepage: true
---

titlepage: true 表示增加封面页,没有后续参数设置表示增加默认的封面页。

2. 增加自定义封面页

---
title: "标题"
author: [作者]
date: "日期"
subject: "主题"
keywords: [标签]
subtitle: "副标题"
lang: "cn"
titlepage: true
titlepage-color: "3C9F53"
titlepage-text-color: "FFFFFF"
titlepage-rule-color: "000000"
titlepage-rule-height: 2
titlepage-background: "background.pdf"
---

titlepage-color: "3C9F53" 设置封面页的背景颜色,颜色值要求采用十六进制方式表示,使用 titlepage-background 不用设置 titlepage-color,否则可能会存在背景图片盖不住背景颜色而达不到预期效果。

titlepage-text-color: "FFFFFF" 设置封面页的字体颜色

titlepage-rule-color: "000000" 设置封面页水平分隔线颜色

titlepage-rule-height: 0 设置封面页水平分隔线高度(即线条粗细)

titlepage-background: "background.pdf" 设置封面页的背景

3. 在封面页增加 logo

---
title: "标题"
author: [作者]
date: "日期"
subject: "主题"
keywords: [标签]
subtitle: "副标题"
lang: "cn"
titlepage: true,
titlepage-text-color: "7137C8"
titlepage-rule-color: "7137C8"
titlepage-rule-height: 2
titlepage-logo: "logo.pdf"
logo-width: 30mm
---

titlepage-logo: "logo.pdf" 表示增加指定的 logo

logo-width: 30mm 表示 logo 的宽度设置为 30mm

上述介绍了三种常用的使用方法,一般而言已经够用了,要想了解更多的使用方法请自行查阅 eisvogel.latex 模板的帮助文档。

安装配置失败问题总结

  1. MacTex 需要安装完整版,不能安装基础版,且不要使用 TexLive 工具升级宏包,否则会出现缺包或宏包版本不符的情况。

  2. Pandoc Plugin 模板参数中模板路径不正确,不需要使用引号 "" 括起来。

  3. 模板配置时添加的语句位置放错,不符合排版程序规范。

若导出 PDF 出在报错,可从以上三个方面进行排查。若做到以上三点,正常情况下是可以成功使用模板导出 PDF 的。

模板存在的问题总结

使用该模板导出的 PDF,在美观程序上比 Obsidian 自带的 PDF 导出功能导出的 PDF 有很大的进步,但由于本人没有学习过 LaTex 排版,存在以下几点本人不太满意的地方:

  1. 页边距采用的是标准学术风格,上下左右边距对我希望的输出不太一致,我希望能把上下左右边距调小一点,调到我希望的效果。

  2. 表格输出也是标准的学术风格,表格宽度自适应内容,表格居中显示,换页时在下一页表格不会显示标题,我希望的是换页时在下一页的表格有标题,不管表格跨了多少页,每页的表格都有标题,再就是根据我个人的排版习惯,表格要占满页宽,原表格宽度较小时,列宽按原比例分配占满页宽,表格宽度较大已占满页宽时按原样输出,最后就是表格标题强制不换行。

  3. 图片的标题是靠左显示的,不是很美观,希望改为居中显示,这样较符合一般排版要求。

除了上述三个问题之外,整体而言使用这个模板导出 PDF 还是非常美观,总体上是满意的。若有 LaTex 的排版专家,看否则指导在下解决上述问题,万分感谢。

2 个赞

上传不了图片,所以大家凑合看看吧

您这种方式导出的pdf中有书签信息吗?

请问能导出图片、excalidraw等内容吗

今天看到你的文章刚好在研究这个问题可以在页眉页脚位置添加,这样就可以设置边距了。
\usepackage{geometry}
\geometry{a4paper,left=25mm,right=20mm,top=25mm,bottom=25mm}

搜索$if(disable-header-and-footer)$
$else$添加到下面