使用 \ConfigureList 在 tex4ht 中为 itemsep 配置 itemize

使用 \ConfigureList 在 tex4ht 中为 itemsep 配置 itemize

问题是调整逐项列表中项目的垂直空间。

\begin{itemize}\itemsep2em
\item first 
\item second 
\end{itemize}

这在 LaTex 中有效,但在使用 tex4ht 生成的 html 中无效。应该在序言中添加哪些配置,例如使用\ConfigureList

答案1

tex4ht更注重逻辑标记,而不是pdf和中完全相同的外观html。在这种情况下,我将定义新环境,然后可以对其进行配置,tex4ht并使用定义垂直间距CSS。示例文件:

\documentclass{article}    
\usepackage{mydefinitions}
\begin{document}    
\begin{myitemize}
  \item first
  \item second
\end{myitemize}
\end{document}

myitemize使用自定义环境。它在包中定义mydefinitions.sty

\ProvidesPackage{mydefinitions}

\newenvironment{myitemize}{\itemize\itemsep2em}{\enditemize}

\endinput

它可以使用进行配置\ConfigureList。我们可以将配置文件放入mydefinitions.4ht

\ConfigureList{myitemize}
{\ifvmode\IgnorePar\fi\EndP\HCode{<ul class="myitemize">}\ShowPar\bgroup\def\finli{}}
{\ifvmode\IgnorePar\fi\EndP\finli\egroup\HCode{</ul>}}
{\ShowPar\finli\HCode{<li>}\par\def\finli{\EndP\HCode{</li>}}\DeleteMark}{}

\Css{.myitemize li + li{margin-top: 2em;}}

看起来有点复杂,但实际上并不复杂,我们需要解决的问题是段落,所以这些都是\EndP\ShowPar\IgnorePar命令。最有趣的事情发生在第四个参数中:

{\ShowPar\finli\HCode{<li>}\par\def\finli{\EndP\HCode{</li>}}\DeleteMark}

它插入在每个项目的开头。\finli命令用于插入<li>元素的结束标记。它默认为空,因此不会插入到第一个项目中。\DeleteMark用于删除由 LaTeX 插入的“■”字符。

\Css命令规定第二个和后续项目上方应有2em空间。

所结果的HTML

 <ul class="myitemize"><li>
 <!--l. 9--><p class="noindent" >
 first
 </p></li><li>
 <!--l. 10--><p class="noindent" >
 second</p></li></ul>

并呈现页面:

在此处输入图片描述

相关内容