TeX4ht 和 LaTeX3 - 它们能一起使用吗?

TeX4ht 和 LaTeX3 - 它们能一起使用吗?

我想为我的用 LaTeX3 编写的包添加 TeX4ht 支持。

在 .4ht 文件内切换安全吗\ExplSyntaxOn?我最后应该将其关闭吗?

如果它不安全,我应该如何继续重新定义(使用经典语法)具有 LaTeX3 名称(带下划线)的宏

答案1

\ExplSyntaxOn和是智能命令,可将重新定义字符的 catcode 恢复为其先前的值,因此即使在catcode 为 的文件\ExplSyntaxOff中也可以安全地使用它们。我们可以使用以下包对其进行测试:.4ht:letterhello.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,一个使用功能,第二个使用普通的,只是为了表明它可以工作,我们可以使用此配置文件进行测试:\sampleLaTeX3\defhello.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 insertspan element withclass=hello attribute. To show thattex4ht 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&#x00A0;tex4ht:&#x00A0;world</span> and <span class="sample">old sample</span></p>

相关内容