为什么 tabu 包会读取 \begin{htmlonly} 标签内的内容?

为什么 tabu 包会读取 \begin{htmlonly} 标签内的内容?

我认为这里有一个错误。

介绍

我使用latex2html(L2H) 从 LaTeX 构建一些 HTML 页面。添加 L2H 特定的 latex 命令的标准方法如下

\begin{htmlonly}
   % for L2H eyes only
\end{htmlonly}

多年来,这种方法一直运行良好。因此,使用 L2H 和 pdfLaTeX 构建相同 LaTeX 文档的方法是这样做

\documentclass{article}%
\usepackage{html}
\usepackage{ifpdf}
\begin{document}

\begin{htmlonly}
  %l2h only
\end{htmlonly}

%\begin{latexonly}    % WARNING, SPECIAL COMMENT DO NOT REMOVE
 \ifpdf
     %for pdflatex only
  \fi
%\end{latexonly}      % WARNING, SPECIAL COMMENT DO NOT REMOVE

\end{document}

现在我可以做pdflatex foo.tex任何事情latex2html foo.tex,并且都很高兴。

使用tabu包时出现的问题

现在我只想使用tabupdfLaTeX 中的包。所以我使用了上面的设置并写道

\documentclass{article}%
\usepackage{html}
\usepackage{ifpdf}
\usepackage{longtable}
\usepackage{tabu}
\begin{document}

\begin{htmlonly}
 \begin{tabular}{|l|l|}
\end{htmlonly}

%\begin{latexonly}       % WARNING, SPECIAL COMMENT DO NOT REMOVE
 \ifpdf
   \begin{longtabu}{|l|l|}
  \fi
%\end{latexonly}

a&b\\
c&d\\

\begin{htmlonly}
  \end{tabular}
\end{htmlonly}

%\begin{latexonly}   % WARNING, SPECIAL COMMENT DO NOT REMOVE
\ifpdf
  \end{longtabu}
\fi
%\end{latexonly}

\end{document}

现在当我这样做时, pdflatex t9.tex我收到此错误:

(./t9.out) (./t9.out)
! Misplaced alignment tab character &.
<argument>  \fi \par a&
                       b\\ c&d\\ \par \par \begin {htmlonly} 
l.22   \end{tabular}

这意味着tabu正在查看tabular环境。但这个环境不应该被看到tabu

现在比较一下上面的内容,当我只使用 时longtabletabu现在不行。它有效:

\documentclass{article}%
\usepackage{html}
\usepackage{ifpdf}
\usepackage{longtable,tabu}

\begin{document}

\begin{htmlonly}
 \begin{tabular}{|l|l|}
\end{htmlonly}

%\begin{latexonly}   % WARNING, SPECIAL COMMENT DO NOT REMOVE
 \ifpdf
   \begin{longtable}{|l|l|}
  \fi
%\end{latexonly}

a&b\\
c&d\\

\begin{htmlonly}
  \end{tabular}
\end{htmlonly}

%\begin{latexonly}  % WARNING, SPECIAL COMMENT DO NOT REMOVE
\ifpdf
   \end{longtable}
\fi
%\end{latexonly}

\end{document}

现在没有错误

>pdflatex t9.tex 
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian)
 restricted \write18 enabled.
.....
Output written on t9.pdf (1 page, 10799 bytes).
Transcript written on t9.log.
>

问题是: 为什么要tabu读我的htmlonly代码?

我需要使用,longtabu因为我读到它可以用与tabularx我需要的相同的设置制作长表。

我在 Linux mint 14 上使用(TeX Live 2012/Debian)。

答案1

看起来您可以像这样隐藏内部表格代码:

\relax\iffalse{\fi
\begin{htmlonly}
  \end{tabular}
\end{htmlonly}
\relax\iffalse}\fi

答案2

好吧,既然你问“为什么”,我相信有两个原因:

  1. tabu在执行之前会预先读取其内容并将其存储在某个位置。这使得内容更像是宏参数而不是环境内容。我不确定{htmlonly}环境是否可以在宏参数中使用而不会出现任何问题。

  2. 作为埃格尔指出,latex2html它针对各种有问题的环境(浮动、表格等)使用了自己独有的调整,而显然没有对 进行过这样的调整tabu。您可以向 的维护者提出功能请求latex2html,因为tabu与其他表格制作环境没有太大区别,所以不应该出现这样的问题。

相关内容