将 tabu 与 htlatex 结合使用

将 tabu 与 htlatex 结合使用

我正在尝试将我的 Latex 文档导出为 HTML,但在使用禁忌环境

作为测试用例,我使用以下源文件

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{tabu}

\begin{document}

\begin{table}[htbp]
  \begin{tabu} to \textwidth{X[1,m,c]|X[1,m,c]}
    A & B \\
    \hline
    1 & 2 \\
  \end{tabu}
  \caption{Some test table-}
  \label{tab:test}
\end{table}

\end{document}

然后通过make4ht作为包装器(从我得到的结果来看,它与直接使用相同htlatex),这会导致以下错误消息:

Package tabu Warning: \@arrayright is missing from the
(tabu)                definition of \endarray.
(tabu)                Comptability with delarray.sty is broken. on input line 6
.

! Argument of \g:Advance has an extra }.
<inserted text>
                \par
l.6 \begin{document}

?

我目前使用的命令

make4ht -uf html5 -d html test.tex "fn-in"

关于其他几个软件包,我读到了一些关于重新定义环境以应对此类错误的内容。有人能告诉我如何对 tabu 进行这样的操作吗?

旁注:

  • 输出不必完全对齐等。我可以在 HTML 输出上运行另一个脚本。但我至少需要一个有效的表结构。
  • 我希望保留tabu原始来源,因为有时 PDF 输出需要它。我更喜欢使用一些仅在使用 HTML 转换时适用的(重新)定义。

答案1

的问题tabu是它重新定义了很多 LaTeX 宏,这与 的是一样的tex4ht。而且它们相互冲突。为 、tex4ht、创建补丁文件tabu.4ht以便编译示例文档而不出现错误非常困难:

% we must suppress \everyrow redefintion by tabu, so some macro patching is necessary
\def\tabu@AtBeginDocument{
\ifdefined\CT@arc@ \else \let\CT@arc@  \relax \fi
\ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi
 \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@
% \everyrow{}%
}

\let\orig:hline\hline
\def\tabu@firstline{\orig:hline}
\def\tabu@firsthline{\orig:hline}
\def\tabu@lastline  {\orig:hline}
\def\tabu@lasthline {\orig:hline}
% there is a clash between tabu and tex4ht on \hline handling
% we will just use \cr in place of \hline
\def\tabu@hline {\cr}% \tabu@hline

% this is basically a rewrite of the \tabu@select macro
% the original code just crashed everything
\def\tabu@select {%
        \expandafter \tabuthepreamble
}% \tabu@select


\def\tabu@setup{\tabu@alloc@
    \ifcase \tabu@nested
        \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@
            \let\tabu@afterendpar \par
        \fi\fi\fi
        \def\tabu@aligndefault{c}
        \tabu@init 
        \tabu@indent
    \else       % <nested tabu>
        \def\tabu@aligndefault{t}
        \let\tabudefaulttarget \linewidth
    \fi
    \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined
    \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
    %\everycr{} % don't let tabu redefine \everycr
   \let\@startpbox \tabu@startpbox % for nested tabu inside longtabu...
             \let\@endpbox   \tabu@endpbox   % idem "    "    "    "    "    "
             \let\@tabarray  \tabu@tabarray  % idem "    "    "    "    "    "
    \tabu@setcleanup 
    % \tabu@setreset % this causes issues
}% \tabu@setup

基本上,它会阻止某些tabu宏的执行。这并不理想,因为它会丢失有关表格规则和边框的信息,但至少它会生成一个有效的表格。还有一个问题:它仍然会破坏一些低级tex4ht定义,我无法在tabu.4ht文件中修复它。它需要使用该no-halign选项进行修复。因此文件的编译可能如下所示:

 make4ht -uf html5 -d html test.tex "fn-in,no-halign"

结果如下:

在此处输入图片描述

相关内容