Babel kollidiert mit Booktabs und Tabularx in benutzerdefinierter Umgebung

Babel kollidiert mit Booktabs und Tabularx in benutzerdefinierter Umgebung

Ich habe ein Dokument wie dieses, das normal kompiliert wird:

\documentclass{article}

\usepackage{booktabs}
\usepackage{tabularx}

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

\begin{document}

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

\end{document}

Ich muss das auch tun \usepackage[italian]{babel}, aber wenn ich das mache und dann kompiliere, erhalte ich die folgende Fehlermeldung:

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

und in der PDF-Ausgabe hat die Tabelle zwei \bottomorules, das erste an der Tabelle ausgerichtet und das zweite nach links verschoben:

Bildbeschreibung hier eingeben

Wie kann ich das lösen?

Aktualisieren:der Fehler tritt nur auf, wenn Babel auf Italienisch verwendet wird, alle anderen Sprachen, die ich ausprobiert habe, funktionieren gut.

Antwort1

Das Problem ist etoolbox, dass es von Italienisch geladen wird. Es fügt einen Hook in den Endumgebungscode ein und tabularx mag das nicht.

Bei der Entwicklungsversion von Latex, die Sie durch Aufrufen von pdflatex-dev„Works“ verwenden können, ist der Hook-Code robuster.

Alternativ könnten Sie das b-Argument von xparse versuchen:

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

verwandte Informationen