使用 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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti