babel choca con booktabs y tabularx en un entorno personalizado

babel choca con booktabs y tabularx en un entorno personalizado

Tengo un documento como este, que se compila normalmente:

\documentclass{article}

\usepackage{booktabs}
\usepackage{tabularx}

\newenvironment{myenv}
               {\tabularx{\columnwidth}{X}\toprule}
               {\bottomrule\endtabularx}

\begin{document}

\begin{myenv}
    Foo\\
\end{myenv}

\end{document}

También lo necesito \usepackage[italian]{babel}, pero si lo hago y luego compilo, aparece el siguiente error:

! Misplaced \noalign.
\bottomrule ->\noalign 
                       {\ifnum 0=`}\fi \@aboverulesep =\aboverulesep \global...
l.16 \end{myenv}

y en la salida PDF la tabla tiene dos \bottomorules, la primera alineada con la tabla y la segunda movida hacia la izquierda:

ingrese la descripción de la imagen aquí

¿Como puedo resolver esto?

Actualizar:el error ocurre sólo si babel se usa en italiano, todos los demás idiomas que probé funcionan bien.

Respuesta1

El problema es etoolboxcuál lo carga el italiano. Inserta un gancho en el código del entorno final y a tabularx no le gusta esto.

Con la versión de desarrollo de latex, que puedes usar llamándolo pdflatex-devfunciona, su código de enlace es más robusto.

Alternativamente, puedes probar el argumento b de xparse:

\documentclass{article}
\usepackage[italian]{babel}
\usepackage{xparse}
\usepackage{booktabs}
\usepackage{tabularx}

\NewDocumentEnvironment{myenv}{b}
               {\begin{tabularx}{\columnwidth}{X}\toprule #1  \bottomrule\end{tabularx}}
               {}

\begin{document}

\begin{myenv}
    Foo\\
\end{myenv}

\end{document}

información relacionada