測試禁忌中可能為空的逐項參數

測試禁忌中可能為空的逐項參數

由於某種原因,我無法測試#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將比較禁忌中列類型的結束定義中的前兩個標記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}

相關內容