我在用着tex4ht
将 LaTeX 转换为 (X)HTML。Tex4ht 会自动生成无法直接转换为文本的方程式的图像。
问题:生成的图像的文件名以及相应的“alt”文本毫无意义。
想:一种在 LaTeX 代码中嵌入生成图像的文件名以及“alt”文本的方法。
部分解决方案:我设法通过在公式前使用命令?来定义文件名\NextPictureFile{NameToBeUsed}
。但我无法指定“alt”文本。有什么建议吗?
当然,一种选择是手动编辑生成的 HTML 页面以指定“alt”文本。但由于这需要在许多可更新的 LaTeX 文件上进行,这意味着必须再次指定所有“alt”,即使对原始文件进行微小更新也是如此。
答案1
Tex4ht
使用命令\Picture
...\EndPicture
将封闭的文本转换为图像。命令形式为
\Picture*[alt text]{align="center}
some text
\EndPicture
将产生
<img src="myfile01x.png" alt="alt text" align="center />
包含myfile01x.png
文本“一些文本”。
根据 tex4ht常问问题,你可以使用类似的代码
\newtoks\eqtoks
\def\AltMath#1${\eqtoks{#1}%
\Picture*[\HCode{\the\eqtoks}]{ align="middle"}$#1$\EndPicture$}
\Configure{$}{}{}{\expandafter\AltMath}
将数学的 TeX 代码排版为替代文本。我们可以对其进行修改,使其与显示数学配合使用,并使用我们自己的包含替代文本的宏。
创建文件myalt.cfg
:
\Preamble{xhtml}
\begin{document}
\def\MyDisplay{\leavevmode\EndP\HCode{<!--l. \the\inputlineno-->\Hnewline}\IgnorePar\Tg<div class="math-display">}
\def\EndMyDisplay{\HCode{<!--l. \the\inputlineno-->\Hnewline}\Tg</div>}
\def\AltMathII#1{%
\Picture*[\HCode{\the\myalt}]{}$$#1$$\EndPicture$$%
}
\def\AltMath#1$${\AltMathII{#1}}
\def\AltMathI#1\]{\AltMathII{#1}\egroup\EndMyDisplay}
\Configure{$$}{\MyDisplay}{\EndMyDisplay}{\expandafter\AltMath}
\Configure{[]}{\MyDisplay$$\AltMathI}{$$}
\Css{.math-display{
text-align:center;
margin: 5px;
}}
\EndPreamble
然后myalt.sty
包含宏,设置替代文本和文件名:
\ProvidesPackage{myalt}
\newtoks\myalt
\newcommand\mymathinfo[2]{%
\NextPictureFile{#1}
\myalt{#2}
}
现在您可以使用
\documentclass{article}
\usepackage{myalt}
\begin{document}
Hello world
\mymathinfo{hello}{hello world}
$$a=\frac{\sqrt{4b}}{c}$$
\mymathinfo{world}{cool}
$$
\forall x \in X, \quad \exists y \leq \epsilon
$$
\end{document}
编译
htlatex myfile "myalt"
导致:
<!--l. 8--><p class="noindent" >Hello world
</p><!--l. 10-->
<div class="math-display">
<img
src="hello.png" alt="hello world" />
<!--l. 10-->
</div>
<!--l. 12-->
<div class="math-display">
<img
src="world.png" alt="cool" />
<!--l. 14-->
</div>