테이블의 매크로 확장 순서

테이블의 매크로 확장 순서

나는 큰 테이블(약 300개 항목)을 가지고 있습니다. 때로는 (특정 열에 대해) 동일한 값을 가진 일련의 항목이 있는 경우도 있습니다. 이런 경우에는 값을 생략해야 합니다. 내 모든 값은 다른 곳에서 사용되는 변수에 저장되므로 단순히 제거할 수는 없습니다. 이를 극복하기 위해 내 가치를 유지하기 위한 임시 명령을 만들었습니다. 내 솔루션을 일반 텍스트로 테스트하면 원하는 결과를 얻을 수 있습니다. 그러나 테이블에 솔루션을 적용하면 결과가 잘못되었습니다.

MWE(생략된 값의 위치를 ​​더 잘 확인하기 위해 점을 표시했습니다):

\documentclass{article}
\usepackage{ifthen}

\begin{document}

\newcommand{\myval}{}

\newcommand{\setMyVal}[1]{\renewcommand{\myval}{#1}}

\newcommand{\printOnlyFirstOccurence}[1]{
    \ifthenelse{\equal{\myval}{#1}}
        {.}
        {\setMyVal{#1}\myval}%else
}

Outside table:

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}



Behaviour inside table:

\begin{table}[h!]
\centering
\begin{tabular}{c|c} \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
\end{tabular}

\end{table}

\end{document}

위의 예에서는 테이블 외부에서 다음을 얻었습니다.

ㅏ . 비. . .

내가 얻은 테이블 내부 :

에 . . .

누군가 이 동작을 설명할 수 있나요?

답변1

\myval정렬 셀은 그룹을 형성하므로 다른 셀로 이동하자마자 재정의가 잊어집니다. 의 정의에 \gdef\myval{.}대신 사용하십시오 . 당신 과 함께라면 지역적 재정의만 얻을 수 있습니다.\renewcommand{\myval}{#1}\setMyVal\renewcommand

\documentclass{article}
\usepackage{ifthen}

\begin{document}

\newcommand{\myval}{}

\newcommand{\setMyVal}[1]{\gdef\myval{#1}}

\newcommand{\printOnlyFirstOccurence}[1]{
    \ifthenelse{\equal{\myval}{#1}}
        {.}
        {\setMyVal{#1}\myval}%else
}

Outside table:

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}



Behaviour inside table:

\begin{table}[h!]
\centering
\begin{tabular}{c|c} \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
\end{tabular}

\end{table}

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보