为了在 Pandoc 中创建编号方程式,我倾向于使用纯 LaTeX:
\begin{equation}
a^2 + b^2 = c^2
\end{equation}
在 PDF 格式中,它给出了一个很好的数字方程,但是,这个方程在 HTML 输出中根本没有显示,因为这个方程在\begin
并且被忽略了。我想在 PDF 中保留编号,但希望方程显示在 HTML 中,无论带不带编号。
答案1
github 上有一个扩展:pandoc-crossref
安装它与
cabal update
cabal install pandoc-crossref
或者在 archlinux 中使用哈斯克尔
pacman -Sy pandoc-crossref
你可以使用通过做
$$ math $$ {#eq:label}
[@eq:label]
并编译
pandoc file.md --filter pandoc-crossref -o file.pdf
更多信息请参见文档
或者,如所述https://github.com/jgm/pandoc/issues/1938#issuecomment-74011358您可以用于--mathjax
HTML 渲染
如果你的方程是math.txt
$$ a^2 + b^2 = c^2 $$
创建文件header
<script type="text/x-mathjax-config">
MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "all"} } });
</script>
并编译
pandoc math.txt -t html -s -o test.html --mathjax=https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML -H header
答案2
在 pandoc 中你可以执行以下操作:
(@foo) $a^2 + b^2 = c^2$
As (@foo) says, ...
(@bar) $e = x + y$
这将为您提供 PDF 和 HTML 中的运行方程式数字。但是,方程式不会居中或显示格式。(您可以使用$$
显示数学,但数字可能不会正确排列 - 虽然也许可以使用 CSS 修复这个问题。)
答案3
方程编号和参考文献的另一个选项是pandoc-eqnos筛选。
使用 bash 命令以 root 身份安装 pandoc-eqnos
pip install pandoc-eqnos
要使用标签标记方程式eq:description
,请使用
$$ y = mx + b $$ {#eq:description}
前缀#eq:
是必需的,但description
可以用字母、数字、破折号、斜线和下划线的任意组合替换。
要引用公式,请使用
@eq:description
要应用过滤器,请使用 pandoc 的以下选项:
--filter pandoc-eqnos
详细信息和演示请参见pandoc-eqnosgithub 上的网页。
答案4
使用math2svg
& CSS
这math2svg
Pandoc 的 Lua 过滤器皈依者
LaTeX 数学到MathJax生成
可缩放矢量图形 (SVG)以独立方式插入到输出文档中。SVG 输出为以下任意一种可用的 MathJax 字体。
当 CSS 分页媒体引擎(例如Prince XML) 无法处理 MathJax 所要求的复杂 JavaScript。请参阅:https://www.print-css.rocks有关 CSS 分页媒体的信息,W3C 标准。
下面的示例 CSS 代码中心显示数学运算,同时在右侧添加等式数字。
span.math.display {
display: flex;
justify-content: flex-end;
align-items: center;
}
span.math.display svg {
margin: 0 auto;
max-width: 85%;
}
span.math.display:after {
counter-increment: equation;
content: '(' counter(equation) ')';
font-weight: bold;
}
使用 ConTeXt
如果语境用作生成 PDF 输出的引擎,那么只需在 LaTeX 显示公式前面加上\placeformula
ConTeXt 命令在 Pandoc Markdown 输入中:
\placeformula
$$ a^2 + b^2 = c^2 $$
当需要多种输出格式时,最好使用GNUmakefile
包含sed
命令:
SHELL := /usr/bin/env bash
NAME := $(basename $(wildcard *.md))
all: $(NAME).pdf $(NAME).docx
$(NAME).pdf: $(NAME).md
pandoc \
<(sed 's/^$$$$.*/\\placeformula\n&/' $<) \
--smart --output=$(NAME).tex --to=context
context $(NAME).tex
$(NAME).docx: $(NAME).md
pandoc $< --smart --output=$(NAME).docx