控制Tex4HT 添加的标签

控制Tex4HT 添加的标签

TeX4HT 允许重置 LaTeX 宏以插入 HTML 代码,从而生成干净的 HTML 文档。这很好,但它经常会造成<p>标签混乱,例如:

<p class="noindent" ><hr />Some text</p>

在我设置了插入命令之后<hr />。这里我想<hr />位于任何<p>标签之外。

还有更糟糕的。有时它只是生成完全错误的代码,例如:

<p class="noindent"><span class="small-caps"></p><p class="noindent">Some text</p></span>

在我设置了设置小型大写的命令之后。

有没有办法控制这些<p>标签以使它们正常运行?

答案1

段落处理有点棘手tex4ht。可以在文章中找到一些信息TeX4ht 配置:第一部分

如果带有配置挂钩的命令位于段落的开头,则会出现两个问题。

如果在段落开头插入一些钩子,它必须将

使用文章中描述的一些命令手动标记。代码通常如下所示:

\Configure{chapHook}{%
\ifvmode \IgnorePar\fi \EndP\Tg<h2 class="dvmonth">}{\Tg</h2>\IgnoreIndent}

这将包含没有段落的块级元素,\IgnoreIndent将导致下一个段落有class="noindent"

对于内联元素,它看起来如下:

\Configure{sample}{\ifvmode \ShowPar\fi \HCode{<i>}}{\Tg</i>}

命令可能有错误\Tg<>,导致其内容在之前被获取

标签。解决方案是\HCode在段落开头插入挂钩。

%Wrong, gives: <i><p>
\Configure{sample}{\ifvmode \ShowPar\fi \Tg<i>}{\Tg</i>}
%Good:
\Configure{sample}{\ifvmode \ShowPar\fi \HCode{<i>}}{\Tg</i>}

编辑:正如 Ulrike Fisher 在评论中指出的那样,有一些关于配置的细节。

如果你有一些自定义命令,并且想要为它们提供配置,最好将它们收集到类似这样的包中mycommands.sty。然后你可以提供文件,当你包含时mycommands.4ht会自动调用它。tex4htmycommands.sty

对于每个配置,您需要提供三项内容:

  1. 创建配置钩子。这是通过

    \NewConfigure{sample}{2}

    这将创建配置挂钩\a:sample\b:sample

  2. 重新定义命令以包含配置挂钩:

    \renewcommand\sample[1]{\a:sample#1\b:sample}

  3. 为钩子提供默认配置

    \Configure{sample}{\Tg<tag name>}{\tg</tag name>}

该配置将被用作默认配置。

您可以在自定义配置文件中重新定义默认配置,该文件是在运行时在命令行中指定的tex4ht

我的示例.cfg:

\Preamble{xhtml, charset=utf-8}
\Configure{sample}{\Tg<another tag>}{\Tg</another tag>}
\begin{document}
\EndPreamble

编译为

htlatex myfile "mysample, other options" " -cunihtf -utf8"

最后一种可能性是将配置放在tex文件中的某个块中,该块仅在运行时调用tex4ht

...
\@ifpackageloaded{tex4ht}{
\Configure{sample}{\HCode{<bla bla>}}{\HCode{</bbla bla>}
}{}
...

请注意,有些命令已被禁用,例如\Css,此方法最好仅用于测试目的。

相关内容