Тест на пустой, возможно детализированный аргумент в табу

Тест на пустой, возможно детализированный аргумент в табу

По какой-то причине я не могу проверить, является ли #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 уже являются парбоксами?

введите описание изображения здесь

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

Связанный контент