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
会自动调用它。tex4ht
mycommands.sty
对于每个配置,您需要提供三项内容:
创建配置钩子。这是通过
\NewConfigure{sample}{2}
这将创建配置挂钩
\a:sample
和\b:sample
。重新定义命令以包含配置挂钩:
\renewcommand\sample[1]{\a:sample#1\b:sample}
为钩子提供默认配置
\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
,此方法最好仅用于测试目的。