项目列表和 tex4ebook 的问题

项目列表和 tex4ebook 的问题

我正在写一本书,并在我的 .cls 中创建了一个新的环境对话框,如下所示:

\RequirePackage{enumitem}
\newlist{dialog}{itemize}{1}
\setlist[dialog]{label=---,left = 0pt}

当我尝试使用 tex4ebook 生成电子书时,对话框行末尾没有换行符(所有对话框行都是相同的)。没有消息错误。

如果我尝试在 itemize 环境中在我的文档中创建一个简单的列表,则一切正常,所以我认为我的对话框环境存在问题,但我不知道是什么问题。我确切地说,使用 xetex 创建的 pdf 是可以的。

答案1

您没有提供 MWE,因此这里有一些小样本:

\documentclass{article}
\RequirePackage{enumitem}
\newlist{dialog}{itemize}{1}
\setlist[dialog]{label=---,left = 0pt}
\begin{document}
\begin{dialog}
\item Hello World
\item Hello, hello
\end{dialog}
\end{document}

编译此示例时,您将获得以下 HTML 代码:

<body>
— Hello World
— Hello, hello
    
</body> 

如您所见,列表周围没有 HTML 标签,因此它在浏览器中呈现在一行上。您需要为所有自定义列表提供配置,以便插入合适的 HTML 元素。

当您使用自定义文本作为标签时,您可以使用<dl>元素

所有列表均使用\ConfigureList命令进行配置。摘自文档:

\ConfigureList.....................5

   #1   type of list (e.g., itemize, description, enumerate,
                            list, trivlist)
   #2   before list
   #3   after  list
   #4   before label
   #5   after label

配置文件如下所示:

\Preamble{xhtml}
\ConfigureList{dialog}
{\ifvmode\IgnorePar\fi\EndP\HCode{<dl class="dialog">}\par\ShowPar
\def\enddialoglabel{}
}
{\ifvmode\IgnorePar\fi\EndP\enddialoglabel\HCode{</dl>}}
{\enddialoglabel\HCode{<dt>}\def\enddialoglabel{\EndP\HCode{</dd>}}}
{\HCode{</dt><dd>}\par\ShowPar\AnchorLabel}
\Css{.dialog{display:grid;grid-template-columns: 1em 1fr;}}

\begin{document}
\EndPreamble

它创建<dl class="dialog">元素。有很多命令被使用。\ifvmode\IgnorePar\fi\EndP在列表前关闭段落。我们定义命令\enddialoglabel来为前一个项目插入结束标记。它在每个项目的开头使用,因此它最初是空的,然后重新定义以插入结束标记。\AnchorLabel插入命令的链接目的地\label

我们使用 CSS 网格在同一行上显示标签和文本,因为它们默认位于不同的行上。

编译使用:

make4ht -c mycfg.cfg 文件名.tex

这是最终的 HTML:

<body>
   <dl class='dialog'> <dt>
— </dt><dd>
<a id='x1-2x'></a>
   <!-- l. 7 --><p class='noindent'>Hello World
   </p></dd><dt>
— </dt><dd>
<a id='x1-3x'></a>
   <!-- l. 8 --><p class='noindent'>Hello, hello</p></dd></dl>

在浏览器中:

在此处输入图片描述

相关内容