自定义 tex4ht 生成 html,用 Calibre 转换成 epub

自定义 tex4ht 生成 html,用 Calibre 转换成 epub

我正在尝试准备将 html 转换为 epub,遇到了一些问题,希望得到帮助。希望将几个相关问题放在一个帖子中是可以的。

最简单的是引用环境不会缩进两个边距(左侧的缩进也不够)。我编写了一个 .cfg 文件,我认为我已经解决了这个问题。以下是我使用的:

\Preamble{html}
\begin{document}
\Css { .quotation { margin-bottom:0.25em; margin-top:0.25em; margin-left:4em; margin-right:4em } }
\EndPreamble

接下来是图表和表格。tex4ht 在表格前后插入一个 hr 标签。这不是 css 的一部分,而是由 tex4ht 生成的单独标签。我还没有找到可以自定义它的地方。我可以在 emacs 中从 html 中删除它们,但这似乎不是正确的方法。这是一个相当简单的例子,展示了规则(以及引号缩进)。

\documentclass{book}

\begin{document}

\chapter{Simple Example}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec
odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla
quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent
mauris. Fusce nec tellus sed augue semper porta. Mauris
massa. Vestibulum lacinia arcu eget nulla.

\begin{quotation}
Default book style icreases the left and right margins for quotations
by a noticeable amount. The css generated by tex4ht only increases the
left margin by one em. The attached .cfg increases this to 4 em.

\end{quotation}

Sed lectus. Integer euismod lacus luctus magna. Quisque cursus, metus
vitae pharetra auctor, sem massa mattis sem, at interdum magna augue
eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia Curae; Morbi lacinia molestie dui.
amet mauris.

\begin{table}
\begin{center}
\hbox{
\begin{tabular}{|l|c|c|}\hline
entry1&entry2&entry3\\
entry4&entry5&entry6\\ \hline
\end{tabular}}
\end{center}
\caption{a caption}
\end{table}


Morbi in dui quis est pulvinar ullamcorper. Nulla facilisi. Integer
lacinia sollicitudin massa. Cras metus. Sed aliquet risus a
tortor. 

\end{document}

[编辑 2] 我非常确定所有浮点数都会生成 hr 标签。通过反复试验,我找到了 html4.4ht 文件,其中包含以下代码:

\Configure{float}
   {\ifOption{refcaption}{}{\csname par\endcsname\ShowPar \leavevmode}}
   {\:xhtml{\IgnorePar\EndP}\HCode{<hr class="float"\xml:empty><div
     class="float"\Hnewline>}}
   {\ifvmode \IgnorePar \fi\EndP
    \HCode{</div><hr
        class="endfloat" />}\csname par\endcsname\ShowPar}

假设 \HCode 宏定义 html 输出,我删除了 hr 标签:

\Configure{float}
   {\ifOption{refcaption}{}{\csname par\endcsname\ShowPar \leavevmode}}
   {\:xhtml{\IgnorePar\EndP}\HCode{<div
     class="float"\Hnewline>}}
   {\ifvmode \IgnorePar \fi\EndP
    \HCode{</div>}\csname par\endcsname\ShowPar}

当我用这个配置文件运行 htlatex 时,我在 begin{table} 中的 \begin{center} 上收到错误。如果不对配置文件进行此更改,它就可以正常运行,这与编辑有关,但由于我不太明白这里发生了什么,所以我完全不知道如何修复它。

[结束编辑2]

[编辑3]

问题不在于 \Configure 语句的更改,而在于 .cfg 文件中存在 \Configure 语句。即使我逐字复制 \Configure 语句,在遇到 \begin{center} 时仍会出错。错误是“缺少 $ 插入”

[结束编辑3]

图表和表格的标题不在浮动页面上,但在转换为 epub 后立即出现在下一页上。这是可以在 tex4ht 中修复的 html 问题,还是 Calibre 解释 html 的方式存在问题?

(更新至 Calibre 的当前版本已修复此问题)

我应该生成 xhtml 而不是 html 吗?

我将非常感激能够提供有关定制 tex4ht 的良好文档的指针。

答案1

您已正确识别浮点配置的代码。由于命令,它在配置文件中不起作用。名称中\:xhtml的宏仅在文件中起作用,因为它们在这里有所不同。如果您想在文件外使用它,您需要将字符设置为类别 11,这样它就可以在命令名称中使用。:.4ht\catcode4ht\catcode:

\Preamble{html}
\def\makecolonletter{%
  \edef\makecolonother{\catcode\string`\string : \the\catcode\string`\:\relax}
  \catcode`\:=11\relax%
}
\def\makecolonother{}

\makecolonletter
\Configure{float}
   {\ifOption{refcaption}{}{\csname par\endcsname\ShowPar \leavevmode}}
   {\:xhtml{\IgnorePar\EndP}\HCode{<div
     class="float"\Hnewline>}}
   {\ifvmode \IgnorePar \fi\EndP
    \HCode{</div>}\csname par\endcsname\ShowPar}
\makecolonother
\begin{document}
\Css { .quotation { margin-bottom:0.25em; margin-top:0.25em; margin-left:4em; margin-right:4em } }
\EndPreamble

我已经定义了命令\makecolonletter\makecolonother,它们负责设置 catcode。现在您可以在名称中带有冒号的命令\makecolonletter之前使用,不要忘记使用来恢复冒号。\Configure\makecolonother\catcode

似乎仅当模式开启时才会\:xhtml扩展它的参数,否则,参数会被丢弃。xhtml

当你想要制作时epub,你肯定应该使用xhtml模式,因为它是格式epub所基于的。

相关内容