以下示例将源标题添加到longtable
。使用 时编译没有错误xelatex
,但m̀ake4ht
使用 时会崩溃。
\documentclass{article}
\usepackage{caption}
\usepackage{longtable}
\newcommand{\source}[1]{%
\captionsetup{skip=0.5ex,position=b}%
\caption*{\textit{#1}}%
}
\begin{document}
\begin{longtable}{lll}
\caption{Example.}
\\
A & B & C \\
D & E & F \\
\source{Test.}
\end{longtable}
\end{document}
编译时的错误信息make4ht
是:
[ERROR] htlatex: ./longtable.tex 17 Misplaced \noalign.
[ERROR] htlatex: ./longtable.tex 17 Misplaced \omit.
日志文件显示:
! Misplaced \noalign.
\n:LT@caption: ->\o:noalign:
\bgroup \gHAdvance \TitleCount 1 \@ifnextchar [...
l.17 \source{Test.}
有补丁吗?
答案1
该命令的作用似乎\source
是在表格下方添加居中文本。由于该\caption*
命令在这种情况下会失败,因此我们可以重新定义\source
以使用有效的命令。
尝试这个配置文件:
\Preamble{xhtml}
\makeatletter
\renewcommand{\source}[1]{%
\AddToHookNext{env/\@currenvir/after}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="source">}#1\HCode{</div>}\par}%
}
\Css{div.source{display:block;text-align:center;margin-left:auto;margin-right:auto;font-style:italic;}}
\makeatother
\begin{document}
\EndPreamble
它使用新的 LaTeX 钩子机制。由于\AddToHookNext
,代码只执行一次。这很重要,因为您不想将源代码插入后续的 longtables。env/\@currenvir/after
在当前环境之后插入代码。因此,它也可以与tabular
其他表环境一起使用。\ifvmode\IgnorePar\fi\EndP\HCode{<div class="source">}#1\HCode{</div>}\par
只是处理段落和插入 HTML 代码的普通代码。
结果如下: