
#2
何らかの理由で、次のtabu
ユースケース ではが空かどうかをテストできません。
不完全な \ifx; 14 行目以降のテキストはすべて無視されました
次のコードを実行するとスローされます。
\documentclass{article}
\usepackage{tabu}
\usepackage[english]{babel}
\newcommand \test [2]{%
%Works
%#1 \ifx& empty \else {\begin{minipage}[t]{\linewidth}#2\end{minipage}} \fi
% Doesn't with Arg A
\begin{tabu}{XX} #1 & \ifx& 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}