Prueba de argumento vacío posiblemente detallado en tabú

Prueba de argumento vacío posiblemente detallado en tabú

Por alguna razón, no puedo probar si #2está vacío en el siguiente tabucaso de uso. Un

\ifx incompleto; todo el texto fue ignorado después de la línea 14

se lanza ejecutando el siguiente código.

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

Respuesta1

Esto parece tener algo que ver con la forma en que tabuse examina el contenido de las células. Agregar un par de aparatos ortopédicos ayuda.

También cambié la prueba de vacío por algo más seguro.

\newcommand\test[2]{%
  \begin{tabu}{XX}
  #1 &
  {\if\relax\detokenize{#2}\relax 
     empty%
   \else
    \begin{minipage}[t]{\linewidth}#2\end{minipage}%
   \fi}
  \end{tabu}}

Respuesta2

Tienes

 \ifx&

cuando TeX ve que &la celda termina y Tex cambia en el código que finaliza la definición de la columna. Entonces, aquí \ifxcompararemos los dos primeros tokens en la definición de cierre del Xtipo de columna en tabú. Lo siguiente utiliza una prueba más segura para vacío.

Aparte de eso, no está claro por qué querrías poner una minipágina en una columna X, ya que las columnas X ya son parboxes.

ingrese la descripción de la imagen aquí

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

información relacionada