答案1
enumerate
TeX4ht 默认删除了和的项目标签itemize
,因为 HTML 不支持默认用于显示列表的元素中的自定义标签。
这是环境的默认配置itemize
:
\ConfigureList{itemize}%
{\EndP\HCode{<ul \a:LRdir
class="\getClass{itemize}itemize\expandafter\the
\csname @itemdepth\endcsname">}%
\afterGetClass{itemize}%
\PushMacro\end:itm
\global\let\end:itm=\empty}
{\PopMacro\end:itm \global\let\end:itm \end:itm
\ifvmode \IgnorePar\fi
\EndP\HCode{</li></ul>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
{\HCode{<li class="\getClass{li}itemize">}\afterGetClass{li}}
虽然有点晦涩,但重点是:
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
该\DeleteMark
命令会删除标签,因此如果我们想保留标签,可以将其删除。我们还需要生成与<ul>
和不同的元素<li>
,因为它们不支持自定义标签。相反,我们可以只使用普通<div>
元素和一些 CSS 来实现正确的渲染。
该配置文件mycfg.cfg
包含此命令的修改版本,具有不同的 HTML 标签和相应的 CSS:
\Preamble{xhtml}
\catcode`\:=11
\ConfigureList{itemize}%
{\EndP\HCode{<div \a:LRdir
class="custom-itemize"><div class="item-head">}%
\PushMacro\end:itm \global\let\end:itm=\empty}
{\PopMacro\end:itm \global\let\end:itm \end:itm
\ifvmode \IgnorePar\fi
\EndP\HCode{</div></div>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</div>\Tg<div class="item-head">}}
{\HCode{</div><div class="item-content">}}
\Css{.item-head{float:left;width:2em;clear:left;}}
\Css{.item-content{margin-left:2em;}}
\catcode`\:=12
\begin{document}
\EndPreamble
使用编译
make4ht -c myconfig.cfg filename.tex
这是渲染后的 HTML 文档: