背景

背景

背景

正在使用 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_inlinetex_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

itex2MMLTeX4ht都将 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

使用$$也有效。

相关内容