当第一个单元格为 \multicolumn 时表格行前的逻辑

当第一个单元格为 \multicolumn 时表格行前的逻辑

这与之前的问题答案是埃格尔我想要排版以下内容,但不要在单元格 (1,0) 和 (3,0) 周围添加 vline:

在此处输入图片描述

原则上,使用下面的代码可以做到这一点。但是,\refstepcounter之前的调用\multicolumn给出了\omit相关错误,就像上一个问题。尝试了各种各样的方法,但总的来说,问题是,当该行中的第一个单元格是给定的\multicolumn,显然\multicolumn必须是扩展中的第一个命令时,如何在单个宏中影响每个表行的一些逻辑?

\documentclass{article}
\usepackage{longtable}

\newcounter{tablerowi}
\NewExpandableDocumentCommand{\mc}{m}{\multicolumn{1}{l}{#1}}
\NewExpandableDocumentCommand{\tableRow}{smm}{%
  \IfBooleanTF{#1}{%
    \mc{} & \mc{#3} & \mc{\thetablerowi} \\
  }{%
    \refstepcounter{tablerowi}
    \mc{#2} & \mc{#3} & \mc{\thetablerowi} \\
  } 
}

\begin{document}
\begin{longtable}[c]{|p{2.5cm}|p{2.5cm}|p{2.5cm}|}    
    \hline
    month & name & month \#\\\hline
    \tableRow{November}{Election Day}
    \tableRow*{November}{Thanksgiving}
    \tableRow{December}{Advent}
    \tableRow*{December}{Christmas}\hline
\end{longtable}
\end{document}

答案1

您已经在问题本身中陈述了问题。\refstepcounter{tablerowi}之前不能有\mc

解决方法:(奇怪但有效)

%! TEX program = lualatex
\documentclass{article}
\usepackage{longtable}

\newcounter{tablerowi}
\NewExpandableDocumentCommand{\mc}{m}{\multicolumn{1}{l}{#1}}
\NewExpandableDocumentCommand{\tableRow}{smm}{%
  \IfBooleanTF{#1}{%
    \mc{} & \mc{#3} & \mc{\thetablerowi} \\
  }{%
    \mc{\refstepcounter{tablerowi}#2} & \mc{#3} & \mc{\thetablerowi} \\
    %\mc{#2}\refstepcounter{tablerowi} & \mc{#3} & \mc{\thetablerowi} \\  % this works too as long as tablerowi is not used inside #2
  } 
}

\begin{document}
\begin{longtable}[c]{|p{2.5cm}|p{2.5cm}|p{2.5cm}|}    
    \hline
    month & name & month \#\\\hline
    \tableRow{November}{Election Day}
    \tableRow*{November}{Thanksgiving}
    \tableRow{December}{Advent}
    \tableRow*{December}{Christmas}\hline
\end{longtable}
\end{document}

相关内容