在 LaTeX 入门课程中,有人向我提问,但我当时没有好的答案。提问者对能够以有意义的方式读取 LaTeX 格式方程式的辅助功能软件感兴趣。
例子:
\documentclass{minimal}
\begin{document}
\begin{equation}
x^2 + y^2 = z^2
\end{equation}
\end{document}
当 Okular 屏幕阅读器读取该文档时,听起来像这样:
x2 加 y2 等于 z2
但我们真正展示的应该是这样的:
x 平方加 y 平方等于 z 平方
此类辅助功能选项也适用于其他公式编辑器,例如MathJax. 这个问题被问到前,但由于问题不明确而关闭。因此,请允许我提出具体问题:
有没有:
- PDF 阅读器能够以数学上有意义的方式解释上标和符号等数学惯例?
- 一种可以从 LaTeX 样式中直接大声读出方程式的外部工具?
- LaTeX 中有一个工具,可以向文档的 PDF 版本添加不可见但可听的注释?(类似于图像中的替代文本)
答案1
使用我的新tokcycle
包(https://www.ctan.org/pkg/tokcycle)...当通过 Adobe Reader 朗读时,我发现结果清晰易读。
此 MWE 依赖于您拥有足够新的 LaTeX 安装来支持新的\expanded
原语。如果没有,您可以暂时将定义\tcremap[x]
中的更改为,并将(2 个实例)更改为。此更改的最终效果是保存转换后的文本的标记寄存器将包含类似而不是的内容。也就是说,转换发生在标记寄存器排版时,而不是在放入标记寄存器之前。\speakifytext
\tcremap[1]
\noexpand\pauseafter
\pauseafter
\cytoks
\tcmapto^
, raised to the power
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{tokcycle,amsmath}
\tokcycleenvironment\speakifytext
{\tcremap[x]{##1}}
{\processtoks{##1}}
{\tcremap[1]{##1}}
{\addcytoks{##1}}
\newcommand*\tcmapto[3][\noexpand\pauseafter]{%
\expandafter\def\csname tcmapto\string#2\endcsname{\text{#3 }#1}}
\newcommand*\tcmaptomacro[3][\noexpand\pauseafter]{%
\expandafter\def\csname tcmapto\string#2\endcsname{#3#1}}
\newcommand*\tcremap[2][1]{\ifcsname tcmapto\string#2\endcsname
\addcytoks[#1]{\csname tcmapto\string#2\endcsname}\else\addcytoks{#2}\fi}
\newcommand\pauseafter[1]{\tctestifcatnx#1\relax{#1}{#1,}}
\tcmapto[] ({, left paren,}
\tcmapto[] ){, right paren ,}
\tcmapto ^{, raised to the power}
\tcmapto _{, sub}
\tcmaptomacro[] \frac\readfrac
\newcommand\readfrac[2]{\text{, the fraction, } #1 \text{, divided by, }#2%
\text{, end fraction, }}
\begin{document}
\speakifytext
\section{Making \LaTeX{} Math Audibly Legible}
We use the new tokcycle package to transform math symbols into spoken text.
See if you agree.
\begin{equation}
x_i^2 + y^2 = (z^2 + 1)
\end{equation}
Or this one:
\begin{equation}
Z = \frac{x+1}{2}
\end{equation}
\endspeakifytext
\end{document}
只需删除两行\speakifytext
和\endspeakifytext
,即可恢复原始输出。
另请参阅这个问题,我发现它与此相关:虚假空间是如何被真正利用的?