将源标题添加到 longtable 并使用 make4ht 进行编译时出现问题

将源标题添加到 longtable 并使用 make4ht 进行编译时出现问题

以下示例将源标题添加到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 代码的普通代码。

结果如下:

在此处输入图片描述

相关内容