HTML嵌入LaTeX后小于号转换异常:Pandoc转PDF流程问题
解决HTML嵌入LaTeX转PDF时的小于/大于号转换问题
我刚好碰到过类似的场景,给你梳理下问题根源和可行的解决方案,先上最小可复现示例(MVE):
示例HTML文件(input.html)
<!DOCTYPE html> <html> <body> <p>嵌入LaTeX的分段函数:</p> <div class="latex"> $f(x) = \begin{cases} 1 & x < 0 \\ 0 & x \geq 0 \end{cases}$ </div> <p>原生MathML公式:</p> <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>g</mi> <mo>(</mo> <mi>x</mi> <mo>)</mo> <mo>=</mo> <mn>2</mn> <mi>x</mi> </math> </body> </html>
问题原因
当你用Pandoc把HTML转成Markdown时,它会默认把HTML中的特殊字符(比如<和>)转义成HTML实体<和>。等到转成LaTeX的时候,这些实体不会被还原成数学符号,最终PDF里会显示成<而不是<,导致公式失效。
解决方案(按推荐程度排序)
1. 直接从HTML转LaTeX,跳过Markdown环节
既然最终目标是LaTeX+PDF,没必要多转一次Markdown,直接用Pandoc的html+latex格式解析器,同时给嵌入的LaTeX加上<pre>标签避免转义:
- 修改HTML中的LaTeX部分,用
<pre>包裹:
<pre class="latex"> $f(x) = \begin{cases} 1 & x < 0 \\ 0 & x \geq 0 \end{cases}$ </pre>
- 执行转LaTeX命令:
pandoc input.html -o output.tex --from html+latex
- 最后用pdflatex生成PDF:
pdflatex output.tex
这个方法最直接,既保留了MathML的正常转换,又让嵌入的LaTeX原封不动地传递到最终的LaTeX文件中。
2. 转Markdown时保留原始HTML
如果一定要经过Markdown中间步骤,用Pandoc的--parse-raw参数,它会跳过对HTML内容的转义处理:
# HTML转Markdown,保留原始HTML pandoc input.html -o output.md --parse-raw # Markdown转LaTeX pandoc output.md -o output.tex # 生成PDF pdflatex output.tex
这样转出来的Markdown里,嵌入的LaTeX代码会以原始HTML块的形式存在,后续转LaTeX时不会出现符号转义问题。
3. 手动替换LaTeX中的特殊字符(不推荐)
如果只有少量公式,可以手动把HTML里的<换成LaTeX的\lt,>换成\gt:
<div class="latex"> $f(x) = \begin{cases} 1 & x \lt 0 \\ 0 & x \geq 0 \end{cases}$ </div>
但这个方法缺点很明显:HTML里的LaTeX会显示成x \lt 0而不是正常的数学符号,而且批量修改非常麻烦,只适合临时救急。
内容的提问来源于stack exchange,提问作者DanielTuzes




