babel colidindo com booktabs e tabularx em ambiente personalizado

babel colidindo com booktabs e tabularx em ambiente personalizado

Eu tenho um documento como este, que é compilado normalmente:

\documentclass{article}

\usepackage{booktabs}
\usepackage{tabularx}

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

\begin{document}

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

\end{document}

Eu também preciso \usepackage[italian]{babel}, mas se eu fizer isso e depois compilar, recebo o seguinte erro:

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

e na saída do PDF a tabela possui dois \bottomorules, o primeiro alinhado com a tabela, e o segundo movido para a esquerda:

insira a descrição da imagem aqui

Como posso resolver isso?

Atualizar:o erro ocorre apenas se o babel for usado em italiano, todos os outros idiomas que tentei funcionam bem.

Responder1

O problema é etoolboxque é carregado por italiano. Ele insere um gancho no código do ambiente final e o tabularx não gosta disso.

Com a versão de desenvolvimento do latex, que você pode usar chamando- pdflatex-devo de funciona, seu código de gancho é mais robusto.

Alternativamente, você pode tentar o argumento b do 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}

informação relacionada