使用 Pandoc 来转换 Markdown 为漂亮的 PDF 格式

2024-08-25 07:08

本文主要是介绍使用 Pandoc 来转换 Markdown 为漂亮的 PDF 格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

安装好 Pandoc

详细可以参考 Pandoc - Installing pandoc。

官网上给出的简单的不修改格式的将 Markdown 转换为 PDF 命令如下:

pandoc -f markdown -t html -o index.pdf

或者通过官方提供的 Docker 镜像来免于安装的环境的烦恼。

docker run --rm -v "$(pwd):/data" pandoc/latex -f markdown -t html -o index.pdf

为了简化,后续的流程在镜像中进行 alias pandoc='docker run --rm -v "$(pwd):/data" pandoc/latex'

自定义样式

参考 Converting Markdown to Beautiful PDF with Pandoc - jdhao’s blog 增加一些自定义的配置之后。

由于 Pandoc 官方提供的 pandoc/latex 镜像有些 latex 包不完整,所以在其基础上,增加了一些 Latex 安装包,制作出新的镜像 5200710/pandoc-latex:latest。

FROM pandoc/latex
RUN tlmgr install quoting || exit 1
  1. 指定中文字体

由于默认的 latex 镜像中不包含中文字体,需要自己手动安装和选择。

fc-list :lang=zh

从列表中找到自己的所选择的字体类型。或者从相关的 fonts 的网站中找到相关的字体文件。

pandoc --latex-engine=xelatex -V mainfont='WenQuanYi Micro Hei' test.md -o test.pdf
  1. 更改 PDF 的 margin
pandoc --pdf-engine=xelatex -V geometry:"top=2cm, bottom=1.5cm, left=2cm,
right=2cm" -o test.pdf test.md
  1. inline code 增加背景色
% change background color for inline code in
% markdown files. The following code does not work well for
% long text as the text will exceed the page boundary
\definecolor{bgcolor}{HTML}{E0E0E0}
\let\oldtexttt\texttt\renewcommand{\texttt}[1]{\colorbox{bgcolor}{\oldtexttt{#1}}
}	

输出文件

构建好之后运行如下的命令:

docker run --rm -v "$(pwd):/data" -v "$HOME/fonts":"/usr/share/fonts" \5200710/pandoc-latex:latest \-f markdown /data/Spark\ 学习记录.md --pdf-engine=xelatex --toc \--highlight-style tango \-V colorlinks -V urlcolor=NavyBlue -V toccolor=NavyBlue \-H head.tex \-V 'mainfont:PingFang SC' -s -o index.pdf

我们来逐步的解释下上面的命令

  1. Docker 命令细节不做过多解释,其中 -v "$HOME/fonts":"/usr/share/fonts" 挂在了本地的 PingFang SC 字体到容器中,用于能够指定对应的字体;
  2. -f markdown 表明输入的文件格式;
  3. --pdf-engine=xelatex 表示采用的 PDF 渲染引擎;
  4. --highlight-style tango 表明采用了那种代码高亮的模板。因为是 PDF 所以才用了只有一点灰度的底色方案;
  5. -V colorlinks -V urlcolor=NavyBlue -V toccolor=NavyBlue 等表明一些链接的配置,默认是没有颜色;
  6. -H head.tex 可以把一些复杂的配置,写到 head.tex 文件中,然后应用。

这里给出一份 head.tex 参考方案。

\usepackage[top=2cm, bottom=1.5cm, left=2cm, right=2cm]{geometry}
% change background color for inline code in
% markdown files. The following code does not work well for
% long text as the text will exceed the page boundary
\definecolor{bgcolor}{HTML}{E0E0E0}
\let\oldtexttt\texttt\renewcommand{\texttt}[1]{\colorbox{bgcolor}{\oldtexttt{#1}}
}% Change the default style of block quote\usepackage{framed}
\usepackage{quoting}\definecolor{bgcolor}{HTML}{DADADA}
\colorlet{shadecolor}{bgcolor}
% define a new environment shadedquotation. You can change leftmargin and
% rightmargin as you wish.
\newenvironment{shadedquotation}
{\begin{shaded*}\quoting[leftmargin=1em, rightmargin=0pt, vskip=0pt, font=itshape]}{\endquoting
\end{shaded*}
}%
\def\quote{\shadedquotation}
\def\endquote{\endshadedquotation}

更多的 latex 变量参考链接 Pandoc - Pandoc User’s Guide。

效果

实际渲染的效果还是不错的,渲染后的 PDF 文件如下。 在这里插入图片描述

错误

错误1: LaTex 提示找不到相关的依赖包

Error producing PDF.
! LaTeX Error: File `quoting.sty' not found.Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)Enter file name: 
! Emergency stop.
<read *> 

提示缺少相关的 quoting

  1. 自动安装,利用 latex 的 Package 管理工具来安装。简单高效

    tlmgr install quoting
    
  2. 手动安装

    1. 前往 CTAN 官网搜素对应的安装包

    2. 下载 安装包之后解压

    3. 进入解压目录下,利用latex命令, 将 .inc.dtx 后缀文件编译为 .sty 文件。

      latex quoting.ins
      
    4. 利用 kpsewhich -var-value TEXMFLOCAL 命令查找系统安装包的路径

      ➜  ~ kpsewhich -var-value TEXMFLOCAL
      /usr/local/texlive/2021basic/texmf-local
      
    5. 将前面的生成的 quoting.dtx 文件,复制到系统安装包的同级 texmf-dist 路径上,如: /usr/local/texlive/2021basic/texmf-dist/tex/latex/quoting 目录下。

    6. 运行 mktexlsr 刷新新增包的状态。一定要运行,否则手动安装的包不生效

错误2: LaTex 提示找不到相关的字体

在转换为PDF的时候,如果输入的是中文,默认不支持,需要手动的指定fonts。

➜  ~ fc-list :lang=zh | grep PingFang
/System/Library/Fonts/PingFang.ttc: PingFang TC,蘋方\-繁,苹方\-繁:style=Regular,標準體,常规体
/System/Library/Fonts/PingFang.ttc: PingFang SC,蘋方\-簡,苹方\-简:style=Regular,標準體,常规体

可以查看系统中安装了哪些中文字体。比如:我系统安装了 PingFang SC 的字体。

错误3:转换 HTML 格式为PDF 的时候可能会导致右边边界中文字符越界

可能的原因是在于,xelatex 默认是英文断行,会导致换行有些问题,需要在 head.tex显示的应用中文断行规则。在xelatex的配置导言区中添加如下指令。

\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
\usepackage[top=2cm, bottom=1.5cm, left=2cm, right=2cm]{geometry}
...

参考

  1. installing - How do I install an individual package on a Linux system? - TeX - LaTeX Stack Exchange

这篇关于使用 Pandoc 来转换 Markdown 为漂亮的 PDF 格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104887

相关文章

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.