![測試禁忌中可能為空的逐項參數](https://rvso.com/image/266404/%E6%B8%AC%E8%A9%A6%E7%A6%81%E5%BF%8C%E4%B8%AD%E5%8F%AF%E8%83%BD%E7%82%BA%E7%A9%BA%E7%9A%84%E9%80%90%E9%A0%85%E5%8F%83%E6%95%B8.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
將比較禁忌中列類型的結束定義中的前兩個標記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}