我正在写一本书,并在我的 .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>
在浏览器中: