![如何配置 tex4ht 以接受 TeX 路径中的宏?](https://linux22.com/image/431893/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20tex4ht%20%E4%BB%A5%E6%8E%A5%E5%8F%97%20TeX%20%E8%B7%AF%E5%BE%84%E4%B8%AD%E7%9A%84%E5%AE%8F%EF%BC%9F.png)
我正在使用建议的配置这个答案导入Macros.tex
包含一组\newcommand
要使用 MathJax 处理的宏的文件。只要主 LaTeX 文件和Macros.tex
位于同一文件夹中,它就可以工作。如果Macros.tex
位于 tex 路径上的其他地方,pdflatex
则会找到它,但tex4ht
无法找到。
.sty
和文件.cfg
可以位于 TeX 路径上的任何位置,但两个.tex
文件必须位于同一文件夹中,否则宏不会包含在 HTML 文件中。 有没有办法在此设置中使用全局宏文件?
test.tex
\documentclass{article}
\usepackage{MyMacros}
\begin{document}
$ \frac{\diff x}{\diff y} $
\end{document}
Macros.tex
\newcommand\diff{\mathop{}\!\mathrm{d}}
MyMacros.sty
\ProvidesPackage{MyMacros}
\input{Macros.tex}
\endinput
myconfig.cfg
\Preamble{xhtml,mathjax}
\Configure{@BODY}{\IgnorePar
\HCode{\detokenize{\(}}
\special{t4ht*<Macros.tex}
\HCode{\detokenize{\)}}
\par
}
\begin{document}
\EndPreamble
答案1
您的Macros.tex
文件应逐字包含在tex4ht
命令中。它不支持使用 KPSE 库来搜索文件(它在某些用途上支持它,但显然不支持使用 请求的文件\special{t4ht*<
)。
幸运的是,我们可以使用 LuaTeX 中包含的 KPSE 库来找到您的文件:
\Preamble{xhtml,mathjax}
\Configure{@BODY}{\IgnorePar
\HCode{\detokenize{\(}}
\special{t4ht*<\directlua{tex.print(kpse.find_file("Macros.tex"))}}
\HCode{\detokenize{\)}}
\par
}
\begin{document}
\EndPreamble
重要的一行是:
\special{t4ht*<\directlua{tex.print(kpse.find_file("Macros.tex"))}}
kpse.find_file
返回在 TeX 路径中找到的文件的完整路径,tex.print
将其打印到输入,以便\special
命令获取正确的路径。
这是生成的 HTML 文件:
<body>
\( \newcommand\diff{\mathop{}\!\mathrm{d}} \)
<!-- l. 4 --><p class='indent'> \( \frac {\diff x}{\diff y} \) </p>
</body>