lualatex
我有一个文档需要以 PDF 格式(使用)和 HTML 格式(使用)输出make4ht
。
该文档包含一个长表格,因此我使用tabu
PDF 格式的包。不幸的是,该包似乎不适用于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}