lua 代码在表中打印中间规则

lua 代码在表中打印中间规则

在下面的 MWE 中,我尝试打印\midrule表格中的每一行(在我的实际实现中,它可能或可能不会取决于某些代码),但它不会编译。我发现我可以\luadirect在每一行上使用 调用@,而且我可以手动调用luadirect来打印\midrule。但是数组不允许我通过 机制打印\midrule@怎么luadirect回事?

编辑:解决方案要求我通过我制作的宏\midrule进行打印,因为在我的实际实现中,我需要在(可能)打印之前运行一些 Lua 代码 - 为了给出一个最小的例子,这些细节被排除在外。\luadirect\midruleX

@wipet 的解决方案不适用于\luadirect并且有其他不良副作用。他们声称\mirdule必须是 之后的第一件事\cr,但是,此解决方案似乎通过一些\noalign\aftergroup技巧避免了这种情况:https://tex.stackexchange.com/a/182959/186406

\documentclass[parskip=full]{scrartcl}
\usepackage{array,booktabs,makecell,luacode}

\begin{document}

\def\miduleX{\luadirect{tex.print('\\midrule')}}
% \def\miduleX{\noalign{\luadirect{tex.print('\\aftergroup\\midrule')}}}  % this did not solve


\begin{tabular}{l}
  Hello \\\miduleX  % works via manual usage
\end{tabular}

\begin{tabular}{l@{\luadirect{tex.print('foobar')}}}  % tex.print text works
  Hello \\
\end{tabular}

\def\foo{bar}
\begin{tabular}{l@{\luadirect{tex.print('\\foo')}}}  % tex.print other definitions works
  Hello \\
\end{tabular}

{\everycr={\midrule} \toksdef\everycr=0
\begin{tabular}{l}  % compiles but is not what I want
   Hello \\     % 1) midrule appears on top and bottom, not what I want
   \makecell{1\\2}
\end{tabular}   % and 2) luadirect not used, and 3) makecell is affected
}

% {\everycr={\midruleX} \toksdef\everycr=0
% \begin{tabular}{l}  % proposed solution does not work with my luadirect requirement
%   Hello \\     
% \end{tabular}
% }

%% this is the interface I want
\begin{tabular}{l@{\miduleX}}  % not working
  Hello \\
\end{tabular}

\end{document}

答案1

您的\luadirect在这里无关紧要。您可以直接替换,\midrule效果\luadirect{tex.print(\\midrule)}相同。

\midrule定义为的宏\noalign{...},并且此基元只能放在基元之后\cr\halign\\从 LaTeX 的角度来看,在表格环境中之后)。您不能将其放在的序言中\halign

如果你确实想要\midrule在每一个之后\cr,你可以尝试这个技巧:

{\everycr={\midrule} \toksdef\everycr=0
\begin{tabular}{l}  % works
   Hello \\
\end{tabular}
}

答案2

\def\midruleXaux{\luadirect{tex.print('\\midrule')}}
\def\miduleX{\aftergroup\aftergroup\aftergroup\midruleXaux}

可以解决问题。不过我不知道怎么做——我希望得到解释。

相关内容