itemizeを使用する場合、htlatexはitemステートメントの括弧内の値を無視します

Dec 14 2020

ラテックスでは、次のステートメントがあります。

\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ステートメントの括弧内の定義された値の代わりに箇条書きを生成します。

PDFに示されているのと同じ出力をhtmlで取得する方法を誰かが知っていますか?

回答

1 michal.h21 Dec 14 2020 at 20:35

HTMLは、デフォルトでリストを表示するために使用される要素のカスタムラベルをサポートしていないためenumerate、TeX4htはitemizeデフォルトでアイテムラベルを削除します。

これは、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ドキュメントです。