我已经看到这个问题很长时间了,但从来没有真正弄清楚为什么会发生这种情况。
鉴于此 MWE
\documentclass[12pt]{book}
\usepackage{longtable}
\begin{document}
\begin{longtable}[c]{|p{1in}|p{.4in}|p{1.5in}|p{1.5in}|}
\caption{My nice table}\\ \hline
Type of ODE& {\small Count} &Mathematica & Maple\\ \hline
\endfirsthead
\multicolumn{4}{c}{\tablename \thetable{} Percentage solved per Maple ODE type -- continued from previous page}\\\hline
Type of ODE& {\small Count} &Mathematica & Maple\\ \hline
\endhead \hline
\multicolumn{4}{|r|}{Continued on next page}\\\hline
\endfoot \hline
\endlastfoot
A&429&100.00\%&100.00\%\\\hline
C&127&100.00\%&100.00\%
\end{longtable}
\end{document}
使用 lualatex 进行编译
删除foo.*
文件夹中的任何内容(当然除了 foo.tex)并使用进行make4ht
编译
>rm foo.*
rm: remove regular file 'foo.4ct'? y
rm: remove regular file 'foo.4tc'? y
rm: remove regular file 'foo.aux'? y
rm: remove regular file 'foo.css'? y
rm: remove regular file 'foo.dvi'? y
rm: remove regular file 'foo.htm'? y
rm: remove regular file 'foo.idv'? y
rm: remove regular file 'foo.lg'? y
rm: remove regular file 'foo.log'? y
rm: remove regular file 'foo.pdf'? y
rm: remove regular file 'foo.tex'? n
rm: remove regular file 'foo.tmp'? y
rm: remove regular file 'foo.xref'? y
make4ht -ulm default -a debug foo.tex "htm,mathjax"
这很好。没有拉长的线条。
奇怪的是,无论编译多少次,只要不删除上述所有中间文件,现在都会出现拉长的行
make4ht -ulm default -a debug foo.tex "htm,mathjax"
无论文件夹中有什么中间文件,每次编译 latex 文件是否都应该产生相同的输出?我在 Firefox、Edge 和 Chrome 中检查了这一点。
如何确保编译后的输出与上面第一个 HTML 输出相同,而无需每次都删除所有中间文件? 这个问题不会出现在 中lualatex
。
附言:我知道如果上次编译的文件夹中存在某些中间文件(例如 .aux),则可以使用。那么为什么重复编译不能解决这个问题呢?只有当文件夹为空时,我才能第一次获得正确的输出。
TL 2022
答案1
这是一个编译次数很重要的例子。由于表格中有四列,因此需要四次编译才能使连接的单元格正确。在内部,\caption
Longtable 将单元格连接成一行,因此它显示为一行。一旦单元格结构正确,就会执行在表格列周围绘制边框的 CSS 指令。
为了修复此问题,我们需要更改\caption
在 Longtable 中创建的 HTML 代码。我将在 TeX4ht 源中修复它。同时,您可以使用以下配置文件:
\Preamble{xhtml}
\AddToHook{env/longtable/begin}{
\Configure{caption}{\ifvmode\IgnorePar\fi\EndP\HCode{<caption>}\par\ShowPar\HCode{<span class="id">}}{:\ }{\HCode{</span><span class="content">}}{\HCode{</span>}\ifvmode\IgnorePar\fi\EndP\HCode{</caption>}}
}
\Css{caption .id{font-weight:bold;}}
\makeatletter
\catcode`\:=11
\def\LT@makecaption#1#2#3{%
\cptA: #1{\cap:ref{#2}}\if\relax\detokenize{#1}\relax\else\cptB:\fi\cptC:#3\cptD:
\endgraf\vskip\baselineskip
}
\makeatother
\catcode`\:=12
\begin{document}
\EndPreamble
它做了两件事:它配置\caption
为在内部生成<caption>
标签longtable
,而不是默认的<figcaption>
。第二是重新定义,\LT@makecaption
省略了生成虚假表格单元格的代码。
结果如下: