使用 itemize 时,htlatex 会忽略 item 语句中括号中的值

使用 itemize 时,htlatex 会忽略 item 语句中括号中的值

在 Latex 中我有以下语句:

\begin{itemize}
\item[P)] Lorem ipsum dolor sit amet
\item[E)] Pellentesque interdum eros in erat
\item[Q)] Vestibulum ante ipsum primis
\end{itemize}

pdflatex 产生以下正确输出:

在此处输入图片描述

htlatex(HTML 输出)生成项目符号而不是 item 语句括号中的定义值:

在此处输入图片描述

有人知道如何才能在 html 中获得与 PDF 中显示的相同的输出吗?

答案1

enumerateTeX4ht 默认删除了和的项目标签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 文档:

在此处输入图片描述

相关内容