如何配置 tex4ht 以接受 TeX 路径中的宏?

如何配置 tex4ht 以接受 TeX 路径中的宏?

我正在使用建议的配置这个答案导入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> 

在此处输入图片描述

相关内容