You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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实体&lt;&gt;。等到转成LaTeX的时候,这些实体不会被还原成数学符号,最终PDF里会显示成&lt;而不是<,导致公式失效。

解决方案(按推荐程度排序)

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

火山引擎 最新活动