测试禁忌中的可能分项参数为空

测试禁忌中的可能分项参数为空

由于某种原因,我无法#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比较 tabu 中列类型的结束定义中的前两个标记X,下面使用更安全的空测试。

除此之外,不清楚为什么您要将迷你页面放在 X 列中,因为 X 列已经是 parboxes?

在此处输入图片描述

\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}

相关内容