背景
正在使用 Markdown 编写包含内联数学语句的文档。该文档将转换为 XHTML,以便使用 ConTeXt 进行后续处理。
问题
XHTML 包含带有内联 TeX 命令的 XML 元素。内联 TeX 命令不会被 ConTeXt 解释,因此输出结果类似于以下内容:
南加州大学
考虑以下缓冲的 XHTML 代码片段(例如,从 Markdown 生成):
\startbuffer[document]
<body>
<p>$N = R_{*} \cdot f_{p} \cdot n_{e} \cdot f_{l} \cdot f_{i} \cdot f_{c} \cdot L$</p>
</body>
\stopbuffer
\startxmlsetups xml:xhtml
\xmlsetsetup{\xmldocument}{*}{-}
\xmlsetsetup{\xmldocument}{body|p}{xml:*}
\stopxmlsetups
\startxmlsetups xml:body \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:p
\xmlflush{#1}\par
\stopxmlsetups
\xmlregistersetup{xml:xhtml}
\starttext
\xmlprocessbuffer{xhtml}{document}{}
\stoptext
想法 1——语法
可以生成导出新 XHTML 元素的文档,例如:
<tex>$N = R_{*} \cdot f_{p} \cdot n_{e} \cdot f_{l} \cdot f_{i} \cdot f_{c} \cdot L$</tex>
或者甚至没有$
标志:
<tex>N = R_{*} \cdot f_{p} \cdot n_{e} \cdot f_{l} \cdot f_{i} \cdot f_{c} \cdot L</tex>
但是,TeX 允许内联$
和块级$$
语法。它们可以分别导出为tex_inline
和tex_block
元素,但这似乎是重复,因为 ConTeXt 已经包含解析逻辑。
想法 2——设置
问题可能出在设置上。变化,例如来自步骤文件,没有导致排版数学:
\startbuffer[document]
<body>
<tex>$N = R_{*} \cdot f_{p} \cdot n_{e} \cdot f_{l} \cdot f_{i} \cdot f_{c} \cdot L$</tex>
</body>
\stopbuffer
\startxmlsetups xml:xhtml
\xmlsetsetup{\xmldocument}{*}{-}
\xmlsetsetup{\xmldocument}{body|p|tex}{xml:*}
\stopxmlsetups
% ...
\startxmlsetups xml:tex
\mathematics{\xmlflush{#1}}
\stopxmlsetups
即使它有效,这种方法也可能存在问题,因为用户可以将(内联)TeX 插入到任何元素中:p、blockquotes、emphasis、strong、td、li 等。
想法 3 - 转换为 MathML
itex2MML和TeX4ht都将 TeX 转换为 MathML,但是不需要这样的步骤。
问题
如何在格式良好的 XHTML 文档中的任何位置嵌入内联/块级 TeX 宏,以便由 ConTeXt 排版这些宏?
(MathML 不是在 Markdown 内部书写的可行选项;之后的转换可能是可行的。)
参考
答案1
以下工作:
% ...
<tex>$N = R_{*} \cdot f_{p} \cdot n_{e} \cdot f_{l} \cdot f_{i} \cdot f_{c} \cdot L$</tex>
% ...
\startxmlsetups xml:tex
\xmlflushcontext{#1}
\stopxmlsetups
使用$$
也有效。