由于某种原因,我无法#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
比较 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}