根据输出类型有条件地输出长表?

根据输出类型有条件地输出长表?

lualatex我有一个文档需要以 PDF 格式(使用)和 HTML 格式(使用)输出make4ht

该文档包含一个长表格,因此我使用tabuPDF 格式的包。不幸的是,该包似乎不适用于tex4ht。因此我在几个地方使用了逻辑:

\ifdefined\HCode
% HTML branch...
\else
% PDF branch...
\fi

除长桌子外,这种方法效果很好。

这是我的 MWE:

\ifdefined\HCode
    \documentclass{book}
\else
    \documentclass[11pt,a4paper]{book}
    \usepackage{longtable}
    \usepackage{tabu}
\fi

\begin{document}

% Define table header differently if we are produced HTML or PDF
\ifdefined\HCode
  %for HTML
  \begin{tabular}{|l|l|}
  \hline
  A & B \\
  \hline
\else 
  % For PDF
  \begin{longtabu} to \linewidth {|X|X|}
  \hline
  \rowfont A & B \\ \hline 
  \hline
  \endhead
\fi

1 & 2 \\ \hline
3 & 4 \\ \hline

% Close correctly the table depending on output
\ifdefined\HCode
  % for HTML
  \end{tabular}
\else 
  % For PDF
  \end{longtabu}
\fi

\end{document}

从理论上讲,这应该可以正常运行,并且在使用时可以正常工作make4ht doc.tex

但是,执行时lualatex doc.tex,我得到:

Runaway argument?
\global \advance \c@LT@chunks \@ne \global \LT@rows \z@ \setbox \z@ \vbox \ETC.

! Forbidden control sequence found while scanning use of \LT@nofcols.
<inserted text> 
\par 
l.35      \end{tabular}

? 

请注意,如果我注释掉\ifdefined逻辑并单独运行 PDF 或 HTML 逻辑,它在两种情况下都可以正常工作。只有在执行此操作时才会失败。

答案1

您可以根据引擎以不同的方式定义新环境:

\ifdefined\HCode
    \documentclass{book}
\else
    \documentclass[11pt,a4paper]{book}
    \usepackage{longtable}
    \usepackage{tabu}
\fi

\ifdefined\HCode
\newenvironment{maybelongtable}
  {\begin{tabular}{|l|l|}\hline A&B \\\hline}
  {\end{tabular}}
\else
\newenvironment{maybelongtable}
  {\begin{longtabu} to \linewidth {|X|X|}
  \hline
  \rowfont A & B \\ \hline 
  \hline
  \endhead}
  {\end{longtabu}}
\fi

\begin{document}

\begin{maybelongtable}
1 & 2 \\ \hline
3 & 4 \\ \hline
\end{maybelongtable}

\end{document}

相关内容