我班上有一位几乎失明的学生,他很难读懂许多数学符号,例如上标或下标 ($M_1$、$K^3$)。他已经学会了阅读 latex 源代码,这对他来说更容易阅读。为此,我需要所有文档的第二份副本,其中 latex 数学源代码不是编译的,而是作为 pdf 中的输出生成的。例如,他的练习应该是这样的
令 g_1 和 g_2 为 \mathbb{R}^2 中的两条线。
而不是让 $g_1$ 和 $g_2$ 成为 $\mathbb{R}^2$ 中的两条线。
或者
证明 \sum_{i=1}^nn = \frac{n(n+1)}{2}。
而不是证明 $\sum_{i=1}^nn = \frac{n(n+1)}{2}$。
有没有一种简单的方法可以告诉 TeX 简单地忽略数学模式分隔符,而是只输出文件中的实际 tex 代码,而不会产生数十条错误消息?
答案1
对于简单的内联数学,您可以定义一个命令\mymath
,该命令对数学和代码模式有两种不同的定义。使用包打印代码listings
。
代码
\documentclass{article}
\usepackage{listings}
\lstset{
language = [LaTeX]{TeX},
basicstyle=\small\ttfamily,
}
%\NewDocumentCommand{\mymath}{ m }{\ensuremath{#1}}% show math
\NewDocumentCommand{\mymath}{ v }{\lstinline|#1|}% show code
\begin{document}
\mymath{a^2 = b^2 + c^2}
\mymath{e = mc^2}
\mymath{\sum_{i=1}^n n = \frac{n(n+1)}{2}}
\end{document}
结果
答案2
好吧,我们开发的(实验性的!)数学抓取代码几乎可以正常工作:
\DocumentMetadata{testphase=math}
\documentclass{article}
\ExplSyntaxOn
\math_processor:n
{
\texttt{\detokenize{#2}}\quad
}
\ExplSyntaxOff
\begin{document}
Show that $\sum_{i=1}^n n = \frac{n(n+1)}{2}$
\end{document}
只需要扩展代码就可以丢弃打印的输出。
请注意,抓取代码需要最新的 LaTeX(甚至可能是 latex-dev),它还不能在所有数学环境中使用,而且很可能仍有错误。问题应报告在https://github.com/latex3/tagging-project。
另外,您可以尝试标记 PDF。这将添加源代码作为替代文本:
\DocumentMetadata{testphase={phase-III,math}}
\documentclass{article}
\begin{document}
Show that $\sum_{i=1}^n n = \frac{n(n+1)}{2}$
\end{document}
请注意,标记仅适用于一组受限的软件包。同样,可以在 github 上报告问题(包括实际可用时的反馈)。