tabu 和 tabularx 兼容性 - 用于 htlatex、tex4ht 以及 tabu 和 tabularx 之间的迁移

tabu 和 tabularx 兼容性 - 用于 htlatex、tex4ht 以及 tabu 和 tabularx 之间的迁移

是否可以更新 tabularx 环境,以便它采用 tabularx 样式参数?或者反过来?

\begin{tabularx}{\textwidth}{ ... }
% ...
\end{tabularx}

\begin{tabu} to \linewidth { ... }
% ...
\end{tabu}

就像是:

\renewenvironment{tabularx}{\begin{tabu} to #1 ...}{\end{tabu}}

或者

\renewenvironment{tabu}{\begin{tabularx}{#1} ...}{\end{tabularx}}

这将有助于我查明 tabularx 包是否可用于 tex4ht,tabu 包是否可用于 pdflatex。我知道 tabu 似乎更强大,但乍一看,似乎大多数 tabu 参数都可以定义,因此在生成 html 表时它们将被忽略。

答案1

如果你想改变\begin{tabu} to <dimen>\begin{tabularx}{<dimen}同时保持正常tabu环境,你可以这样做

\documentclass{article}
\usepackage{tabularx,tabu}

\makeatletter
\let\originaltabu\tabu
\def\tabu#1#{%
  \setbox\z@=\hbox#1{}%
  \ifdim\wd\z@=\z@
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\originaltabu}%
  {\let\endtabu\endtabularx\tabularx{\wd\z@}}%
}
\makeatother

\begin{document}

\begin{tabu}{|c|c|c|}
aa & bbbb & ccc \\
1 & 0 & 2
\end{tabu}

\bigskip

\begin{tabu} to 8cm{|X|X|X|}
aa & bbbb & ccc \\
1 & 0 & 2
\end{tabu}

\end{document}

我要求的作者tabu避免使用语法to <dimen>,但他不愿意接受这个建议。然而,吸收所有标记直到第一个括号的技巧允许我们利用(也许是滥用)\hbox接受这种语法的事实。

因此第一个tabu执行\setbox0=\hbox{}\z@对于数字或长度为零的框,是内部的),并且框的宽度为零。因此,遵循“true”部分并\originaltabu执行。

第二个tabu则相反,它确实发生了变化\setbox0=\hbox to 8cm{},并且盒子的宽度变成了 8 厘米,因此接下来是“false”部分,导致对 进行(局部)重新定义,\endtabu\endtabularx执行\tabularx{8cm},之后列说明符被吸收。

我添加垂直规则只是为了更好地显示结果,而不是因为我推荐使用它们(实际上,我并不推荐)。

在此处输入图片描述

答案2

我不明白为什么,但这似乎有效:

  \let\tabuo\tabu
  \let\endtabuo\endtabu
  \renewenvironment{tabu}[2]{\tabuo to #1 {#2}}{\endtabuo}

\LetLtxMacro用代替会更安全吗\let

那么反过来它又如何工作呢(即定义一个映射到 tabularx 语法的 tabu 环境)?

编辑:也许我也用另一种方式解决了这个问题,但仅限于它被一个空格隔开并且to确实一直存在的情况。

\def\tabu #1  to  #2#3{\tabularx{#2}{#3}}
\let\endtabu\endtabularx

或者

\def\tabu #1#2  #3#4{\tabularx{#3}{#4}}
\let\endtabu\endtabularx

\def有人能告诉我TeX后面双空格的魔力是什么吗?

相关内容