
\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
\rowcolor
in 의 정의는 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
) 또는 \rowcolor
of 와 같은 정렬 셀에서 첫 번째가 됩니다 colortbl
.
위의 동일한 제한 사항은 선택적 인수를 갖도록 정의된 명령에 적용됩니다 . 왜냐하면 해당 명령은 지연된 방식으로 확장되어 / \newcommand
검색을 중단하기 때문입니다 .\omit
\noalign
\newcommand
(선택적 인수 없이) 또는 선택적인 인수가 정말로 필요한 경우 \DeclareExpandableDocumentCommand
of를 사용 xparse
하십시오(그러나 이 경우 제한 사항에 대해서는 문서를 확인하십시오. 예를 들어 선택적 인수 다음에 필수 인수가 필요합니다).