是否可以使定义在表格行的第一个单元格的开头生效(array.sty
如果相关,使用),同时仍为 、 等留出空间\multicolumn
?\hline
当然,问题是这些命令以 开头\omit
,这会因单元格中已输入的任何内容而受到影响。
我已经能够解决这个问题(通过使用全局变量和模拟范围,或者通过创建我自己的多列命令),但我想知道是否有一些简单、非黑客的方式来做到这一点?直观地看,在我看来,没有必要担心单元格中之前是否有定义,因为它不使用未更改的格式……?
我知道在 之前不能有内容\omit
,是的,一般来说你会想放一些东西里面例如\multicoumn
,但是我在这里特别想要的是将定义放在 之前\omit
。(如果这无论如何都不可能,我还有其他不太令人满意的解决方案 :-)
我的想法是,也许存在类似的东西\use_none:n
,可以真正执行定义,但不会在输入流中留下任何标记——也许通过应用\exp_args:No
来\use_none:n
执行定义。
以下是 MWE:
\documentclass{article}
\usepackage{array, expl3}
\begin{document}
\ExplSyntaxOn
% % Problem with \omit
% \begin{tabular}{ll}
% Goodbye, & cruel \\
% \tl_set:Nn \l_mlh_place_tl {World}
% \multicolumn{2}{l}{\l_mlh_place_tl}
% \end{tabular}
%
% % No definition happens
% \begin{tabular}{ll}
% Goodbye, & cruel \\
% \use_none:n { \tl_set:Nn \l_mlh_place_tl {world} }
% \multicolumn{2}{l}{\l_mlh_place_tl}
% \end{tabular}
% Still no definition happens
\begin{tabular}{ll}
Goodbye, & cruel \\
\exp_args:No \use_none:n { \tl_set:Nn \l_mlh_place_tl {world} }
\multicolumn{2}{l}{\l_mlh_place_tl}
\end{tabular}
\ExplSyntaxOff
\end{document}
答案1
如果你不介意全局定义,并且你位于一行的开头,你可以使用
\noalign{\gdef\l_mlh_place_tl {world}}
但要想领先于中间一\multicolumn
排,你可能需要更加努力
\documentclass{article}
\usepackage{array}
\begin{document}
\begin{tabular}{|l|l|l|}
1&2&3\\
Goodbye, & cruel &zzz\\
$\rightarrow$ &
\omit
\def\zzz{WORLD}%
\bgroup\def\omit{\egroup}%
\multicolumn{2}{l|}{\zzz}
\end{tabular}
\end{document}