タブー内の空の可能性のある項目別引数のテスト

タブー内の空の可能性のある項目別引数のテスト

#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 は列定義を終了するコードに切り替わります。したがって、ここでは、列タイプ\ifxの終了定義の最初の 2 つのトークンが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}

関連情報