使用Pandoc转换Markdown到PDF的行内数学字体与公式间距问题
问题:Pandoc转PDF时行内数学字体过大、公式间距与Obsidian不符
我用Vim+Markdown替代Obsidian,通过Pandoc将Markdown转为PDF,希望输出样式尽可能贴近Obsidian的PDF效果。目前已通过自定义LaTeX片段调整好页面边距、标题与文本间距,但仍存在两个问题:
- 行内数学字体过大
- 公式(行间、行内)前后的间距和Obsidian输出不一致
对比截图:

我通过pandoc -H style.tex ...命令引入自定义LaTeX代码片段设置样式,曾尝试在公式中写入$\small \vec{E}$调整行内数学字体,但无效。已知Pandoc使用unicode-math包处理LaTeX公式,但未找到调整数学字体大小和公式间距的有效方法。
附:style.tex文件内容
% page setup \usepackage[a4paper, top=2cm, bottom=1.75cm, left=1.75cm, right=1.75cm]{geometry} \usepackage{titlesec} \usepackage{fontspec} % inline code (backticks in md) % taken from https://jdhao.github.io/2019/05/30/markdown2pdf_pandoc/ \linespread{1.15} \definecolor{bgcolor}{HTML}{e0e0e0} \let\oldtexttt\texttt \renewcommand{\texttt}[1]{ \colorbox{bgcolor}{\oldtexttt{#1}} } % change boldfont bold to extrabold % \setmainfont[ % BoldFont={Inter-ExtraBold} % ]{Inter} % change regular font to light font % \setmainfont{Inter light} \newfontfamily\titlefont{Inter}[ UprightFont = *-Regular, BoldFont = *-ExtraBold, ] \newfontfamily\sectionsfont{Inter}[ UprightFont = *-Regular, BoldFont = *-SemiBold, ] \titleformat{\section} {\titlefont\huge\bfseries} {} {0em} {} \titleformat{\subsection} {\sectionsfont\LARGE\bfseries} {} {0em} {} \titleformat{\subsubsection} {\sectionsfont\Large\bfseries} {} {0em} {} \titleformat{\paragraph} {\sectionsfont\large\bfseries}{\theparagraph}{1em}{} \titlespacing*{\paragraph} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex} \titlespacing*{\subsubsection} {0pt}{2.5ex plus 1ex minus .2ex}{1.5ex plus .2ex} \titleformat{\subparagraph} {\normalfont\large\bfseries}{\theparagraph}{1em}{} \titlespacing*{\subparagraph} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
附:Pandoc转换后的.tex片段(对应截图内容)
eléctrica que efectúa el campo sobre la partícula. se puede calcular entonces como: \[\frac{w_{a \rightarrow b}}{q_{0}} = - \int_{a}^{b} \vec{e} \cdot d\vec{l} = v_{b} - v_{a} = v_{ab}\] donde \({q_{0}}\) es una pequeña carga puntual, \(v_{a}\) y \(v_{b}\) el potencial por unidad de carga de los puntos \(a\) y \(b\) respectivamente, \(\vec{e}\) el valor del campo eléctrico
解决方法
1. 调整行内数学字体大小
在style.tex中引入unicode-math包,并设置数学字体的缩放比例,匹配Obsidian的行内数学字体大小:
\usepackage{unicode-math} % 将数学字体缩放到正文字体的0.9倍(可根据Obsidian效果微调数值) \setmathfont{Latin Modern Math}[Scale=0.9] % 若使用和正文字体匹配的数学字体(如Inter对应的Inter Math),替换为对应字体名即可
如果需要更精准的控制,也可以重定义行内数学环境:
% 重定义行内数学环境为小号字体 \DeclareRobustCommand{\[}{\begin{math}\small} \DeclareRobustCommand{\]}{\end{math}}
2. 调整公式前后间距
行间公式(\[...\])的上下间距
Obsidian的行间公式前后间距较紧凑,修改以下LaTeX参数即可调整:
% 设置行间公式上下间距,单位用ex或pt,可根据Obsidian效果微调 \setlength{\abovedisplayskip}{1ex} \setlength{\belowdisplayskip}{1ex} % 调整短公式(上下文无换行时)的上下间距 \setlength{\abovedisplayshortskip}{0.5ex} \setlength{\belowdisplayshortskip}{0.5ex}
行内公式的前后空白
调整mathsurround参数,缩小行内公式与普通文本的间距:
% 设置行内公式前后的空白,Obsidian的行内公式间距极小,可设为1pt左右 \setlength{\mathsurround}{1pt}
整合后的style.tex示例
将上述代码整合到原有文件中,完整内容如下:
% page setup \usepackage[a4paper, top=2cm, bottom=1.75cm, left=1.75cm, right=1.75cm]{geometry} \usepackage{titlesec} \usepackage{fontspec} \usepackage{unicode-math} % 调整行内数学字体大小 \setmathfont{Latin Modern Math}[Scale=0.9] % 调整行间公式间距 \setlength{\abovedisplayskip}{1ex} \setlength{\belowdisplayskip}{1ex} \setlength{\abovedisplayshortskip}{0.5ex} \setlength{\belowdisplayshortskip}{0.5ex} % 调整行内公式前后间距 \setlength{\mathsurround}{1pt} % inline code (backticks in md) \linespread{1.15} \definecolor{bgcolor}{HTML}{e0e0e0} \let\oldtexttt\texttt \renewcommand{\texttt}[1]{ \colorbox{bgcolor}{\oldtexttt{#1}} } % 字体设置 \newfontfamily\titlefont{Inter}[ UprightFont = *-Regular, BoldFont = *-ExtraBold, ] \newfontfamily\sectionsfont{Inter}[ UprightFont = *-Regular, BoldFont = *-SemiBold, ] % 标题格式设置 \titleformat{\section} {\titlefont\huge\bfseries} {} {0em} {} \titleformat{\subsection} {\sectionsfont\LARGE\bfseries} {} {0em} {} \titleformat{\subsubsection} {\sectionsfont\Large\bfseries} {} {0em} {} \titleformat{\paragraph} {\sectionsfont\large\bfseries}{\theparagraph}{1em}{} \titlespacing*{\paragraph} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex} \titlespacing*{\subsubsection} {0pt}{2.5ex plus 1ex minus .2ex}{1.5ex plus .2ex} \titleformat{\subparagraph} {\normalfont\large\bfseries}{\theparagraph}{1em}{} \titlespacing*{\subparagraph} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
验证与微调
修改完成后,重新用Pandoc编译:
pandoc -H style.tex --pdf-engine=xelatex your-file.md -o output.pdf
对比Obsidian的PDF效果,微调Scale值、间距参数,直到样式匹配。
内容的提问来源于stack exchange,提问作者mjkloeckner
相关产品推荐
相关产品推荐

