tex4ebook:枚举、标识和分页符带来的挑战

tex4ebook:枚举、标识和分页符带来的挑战

我是 tex4ebooks 的新手(第一次使用后我就非常喜欢它了),在正确格式化方面遇到了一些麻烦:

  1. 强制分页对我来说不起作用,即使使用建议的配置这里

  2. 如果我已经对第一项使用了较低级别,则嵌套枚举将无法正常工作(较低级别当前仅从第二行开始,导致第一个句子中出现意外中断,甚至在更改窗口大小时也会发生变化)。

  3. 项目的标识是以一种出乎意料且不太美观的方式完成的(无论是在项目内换行时还是编号变高时,例如 10.)当不使用 enumitem 时,标识看起来很​​好,但是您不能使用 enumitem 选项...

  4. 一些 enumitem 选项(例如 parsep)被忽略,导致项目之间出现不必要的间距 --> 1.2 和 2 之间有较大的间距,但 2. 和 3 之间没有间距。

有办法解决这些问题吗?

这是我的 MWE:

\documentclass{article}

\usepackage{enumitem}

\begin{document}

\textbf{Title}

\mypagebreak

This text should be on a new page.

Issues with enumerations:

\begin{enumerate}[parsep=0.2cm]
\item
\begin{enumerate}[parsep=0.1cm, label=\arabic*]
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\end{enumerate}
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\item Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.
\end{enumerate}

\end{document}

这是我的配置文件:

% save the clearpage before it is redefined by tex4ht
\let\oldclearpage\clearpage
% define macro for newpage insertion
\def\mypagebreak{\Configure{newpage}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="newpage"></div>}}}
\Preamble{xhtml}
% define it for \newpage
\mypagebreak
\Css{.newpage{page-break-before:always;}}
% modify \Configure{BODY} so our confiurations work on all extracted pages
\Configure{@BODY}{\def\clearpage{\bgroup\mypagebreak\oldclearpage\egroup}}
\Configure{@/BODY}{\global\let\clearpage\oldclearpage\Configure{newpage}{}}
\begin{document}
\EndPreamble

如果我使用下面答案中建议的配置文件,那么 Calibre 中的分页符将不再准确地工作,这意味着分页符贯穿文本,将其分成两页,这显然看起来不太好看并且使阅读文本变得相当困难,见下面的图片:

第 1 页:

在此处输入图片描述

第2页:

在此处输入图片描述

此外,我在具有较大表格的页面上遇到了麻烦,但我会针对该问题提出一个单独的问题,因为在使用其他配置时我也遇到了一些表格问题。

答案1

您说得对,enumitems 的默认样式不太好。我们可以尝试使用 CSS 网格来获得正确的样式,但问题是大多数 Epub 查看器不支持现代 CSS 功能,或者仅部分支持。

尝试以下配置:

% save the clearpage before it is redefined by tex4ht
\let\oldclearpage\clearpage
% define macro for newpage insertion
\Preamble{xhtml}
\def\mypagebreak{\Configure{newpage}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="newpage"></div>}}\newpage}
% define it for \newpage
\Css{.newpage{page-break-before:always;}}
% modify \Configure{BODY} so our confiurations work on all extracted pages
\Configure{@BODY}{\def\clearpage{\bgroup\mypagebreak\oldclearpage\egroup}}
\Configure{@/BODY}{\global\let\clearpage\oldclearpage\Configure{newpage}{}}
\Css{dt.enumerate-enumitem{float:none;clear:none;margin:none;}}
\Css{dl.enumerate-enumitem{display:grid; grid-template-columns: 4rem 1fr;}}
\begin{document}
\EndPreamble

只需两个修复:

\def\mypagebreak{\Configure{newpage}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="newpage"></div>}}\newpage}

我们插入\newpage,这将应用分页符的 HTML 代码。

\Css{dt.enumerate-enumitem{float:none;clear:none;margin:none;}}
\Css{dl.enumerate-enumitem{display:grid; grid-template-columns: 4rem 1fr;}}

这些 CSS 指令重置了枚举项的样式,然后打开 CSS 网格。该4rem值会影响项目的缩进。我必须设置一个相当大的值,否则 Calibre 会将项目标签分成两行。

这是 Calibre 中的结果:

在此处输入图片描述

相关内容