Tabu에서 빈 항목별 인수를 테스트합니다.

Tabu에서 빈 항목별 인수를 테스트합니다.

어떤 이유로 #2다음 tabu사용 사례에서는 비어 있는지 테스트할 수 없습니다. 안

미완성 \ifx; 14행 이후의 모든 텍스트가 무시되었습니다.

다음 코드를 실행하면 발생합니다.

\documentclass{article}
\usepackage{tabu}
\usepackage[english]{babel}

\newcommand \test [2]{%
%Works
%#1  \ifx&#2& empty \else  {\begin{minipage}[t]{\linewidth}#2\end{minipage}} \fi

% Doesn't with Arg A
\begin{tabu}{XX} #1 & \ifx&#2& empty \else  {\begin{minipage}[t]{\linewidth}#2\end{minipage}} \fi \end{tabu}
}

\begin{document}%
\test{A}{\begin{itemize}\item Test\end{itemize}} % Arg A
%\test{A}{}
\end{document}

답변1

tabu이는 셀 내용을 검사하는 방법과 관련이 있는 것 같습니다 . 한 쌍의 버팀대를 추가하면 도움이 됩니다.

또한 공허함 테스트를 더 안전한 것으로 변경했습니다.

\newcommand\test[2]{%
  \begin{tabu}{XX}
  #1 &
  {\if\relax\detokenize{#2}\relax 
     empty%
   \else
    \begin{minipage}[t]{\linewidth}#2\end{minipage}%
   \fi}
  \end{tabu}}

답변2

당신은

 \ifx&

TeX가 셀 끝을 확인 &하고 열 정의를 끝내는 코드에서 Tex가 전환됩니다. 따라서 여기서는 tabu의 열 유형 \ifx종료 정의에서 처음 두 토큰을 비교합니다 X. 다음은 비어 있음에 대한 더 안전한 테스트를 사용합니다.

그 외에도 X 열이 이미 parbox이므로 X 열에 미니페이지를 넣으려는 이유가 명확하지 않습니까?

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

\documentclass{article}
\usepackage{tabu}
\usepackage[english]{babel}

\makeatletter
\newcommand \test [2]{%
\begin{tabu}{XX}%
#1&%
\def\tmp{#2}%
\ifx\tmp\@empty
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{empty}%
{\begin{minipage}[t]{\linewidth}#2\end{minipage}}%
\end{tabu}}
\makeatother

\begin{document}%
\test{A}{\begin{itemize}\item Test\end{itemize}} % Arg A
\test{A}{}
\end{document}

관련 정보