![タブー内の空の可能性のある項目別引数のテスト](https://rvso.com/image/266404/%E3%82%BF%E3%83%96%E3%83%BC%E5%86%85%E3%81%AE%E7%A9%BA%E3%81%AE%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%AE%E3%81%82%E3%82%8B%E9%A0%85%E7%9B%AE%E5%88%A5%E5%BC%95%E6%95%B0%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88.png)
#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}