我认为这里有一个错误。
介绍
我使用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包时出现的问题
现在我只想使用tabu
pdfLaTeX 中的包。所以我使用了上面的设置并写道
\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
。
现在比较一下上面的内容,当我只使用 时longtable
。tabu
现在不行。它有效:
\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
好吧,既然你问“为什么”,我相信有两个原因:
包
tabu
在执行之前会预先读取其内容并将其存储在某个位置。这使得内容更像是宏参数而不是环境内容。我不确定{htmlonly}
环境是否可以在宏参数中使用而不会出现任何问题。作为埃格尔指出,
latex2html
它针对各种有问题的环境(浮动、表格等)使用了自己独有的调整,而显然没有对 进行过这样的调整tabu
。您可以向 的维护者提出功能请求latex2html
,因为tabu
与其他表格制作环境没有太大区别,所以不应该出现这样的问题。