我想为我的用 LaTeX3 编写的包添加 TeX4ht 支持。
在 .4ht 文件内切换安全吗\ExplSyntaxOn
?我最后应该将其关闭吗?
如果它不安全,我应该如何继续重新定义(使用经典语法)具有 LaTeX3 名称(带下划线)的宏
答案1
\ExplSyntaxOn
和是智能命令,可将重新定义字符的 catcode 恢复为其先前的值,因此即使在catcode 为 的文件\ExplSyntaxOff
中也可以安全地使用它们。我们可以使用以下包对其进行测试:.4ht
:
letter
hello.sty
\RequirePackage{xparse}
\ExplSyntaxOn
\DeclareDocumentCommand\hello {m}{
\hello:n{#1}
}
\cs_new:Npn \hello:n #1{hello\ LaTeX3:\ #1}
\ExplSyntaxOff
\def\sample{old sample}
定义了两个文档命令\hello
,一个使用功能,第二个使用普通的,只是为了表明它可以工作,我们可以使用此配置文件进行测试:\sample
LaTeX3
\def
hello.4ht
\NewConfigure{hello}{2}
\NewConfigure{sample}{2}
\ExplSyntaxOn
\cs_set:Npn \hello:n #1{\a:hello hello\ tex4ht:\ #1\b:hello}
\ExplSyntaxOff
\Configure{hello}{\HCode{<span class="hello">}}{\HCode{</span>}}
\pend:def\sample{\a:sample}
\append:def\sample{\b:sample}
\Configure{sample}{\HCode{<span class="sample">}}{\HCode{</span>}}
\hello
被重新定义为打印文本“hello tex4ht: and content of two hooks, which are later configured to insert
span element with
class=hello attribute. To show that
tex4ht command works as usual,
\sample is redefined as well,
\pend:def and
\append:def` 在重新定义的宏的开头和结尾插入内容。
现在我们可以展示一些测试文档:
\documentclass{article}
\usepackage{hello}
\begin{document}
\hello{world} and \sample
\end{document}
结果:
<!--l. 5--><p class="noindent" ><span class="hello">hello tex4ht: world</span> and <span class="sample">old sample</span></p>