\NewDocumentCommand의 \rowcolor

\NewDocumentCommand의 \rowcolor

\rowcolor로 정의된 매크로를 래핑하는 것은 불가능해 보이지만 \NewDocumentCommand에서는 모든 것이 괜찮습니다 \newcommand. 이거 고칠 수 있나요?

\documentclass{article}

\usepackage[table]{xcolor}
\usepackage{xparse}

\NewDocumentCommand{\rowI}{}{
    \rowcolor{blue}
}
%\newcommand{\rowI}{
%   \rowcolor{green}
%}

\begin{document}
\begin{tabular}{lll}
    \rowI 1 & 2 & 3 \\
    1 & 2 & 3 \\
\end{tabular}
\end{document}

오류는 문제 자체 가 아닌 문제의 원인인 \NewDocumentCommand것 같습니다 .xparse\rowcolor

답변1

\rowcolorin 의 정의는 colortbl.sty다음과 같습니다.

\def\rowcolor{%
  \noalign{\ifnum0=`}\fi
  \global\let\CT@do@color\CT@@do@color
  \@ifnextchar[\CT@rowa\CT@rowb}

따라서 우리는 그것이 로 시작한다는 것을 알 수 있습니다 \noalign. TeX가 정렬을 수행할 때( 의 경우와 같이 기본 으로 ) \halign행 을 끝내는 행(테이블 프리앰블에 의해 생성된 행 포함)을 tabular스캔할 때 다음 토큰을 확장하여 다음 토큰 을 확장합니다. . 이것이 or 에 대한 선택적 인수가 작동하는 방식입니다. TeX는 확장 할 수 없는 다른 토큰을 찾을 때까지 계속해서 토큰을 확장합니다 .\cr\omit\noalign\hline\\\multicolumn\noalign\omit

\NewDocumentCommand이라는 e-TeX 기능을 사용한다는 것을 알아야 합니다 \protected. 접두어로 정의된 매크로는 \protected위의 검색 메커니즘에 관한 한 확장할 수 없는 토큰인 것처럼 작동합니다. \relax당분간은 와 동등한 것으로 간주되지만 이 예비 조회가 끝난 후에는 정상적으로 확장됩니다.

\protected(. 의 매크로에서도 동일한 동작이 발생합니다 \edef.)

그래서,절대\NewDocumentCommand(대체 텍스트의 시작 부분에) 항목을 포함하는 매크로 로 정의합니다 .~ 해야 하다\multicolumn, \hline, \cline( 의 명령을 만드는 규칙에도 동일하게 적용됨 booktabs) 또는 \rowcolorof 와 같은 정렬 셀에서 첫 번째가 됩니다 colortbl.

위의 동일한 제한 사항은 선택적 인수를 갖도록 정의된 명령에 적용됩니다 . 왜냐하면 해당 명령은 지연된 방식으로 확장되어 / \newcommand검색을 중단하기 때문입니다 .\omit\noalign

\newcommand(선택적 인수 없이) 또는 선택적인 인수가 정말로 필요한 경우 \DeclareExpandableDocumentCommandof를 사용 xparse하십시오(그러나 이 경우 제한 사항에 대해서는 문서를 확인하십시오. 예를 들어 선택적 인수 다음에 필수 인수가 필요합니다).

관련 정보