カスタム環境で babel が booktabs および tabularx と衝突する

カスタム環境で babel が booktabs および tabularx と衝突する

正常にコンパイルされた次のようなドキュメントがあります。

\documentclass{article}

\usepackage{booktabs}
\usepackage{tabularx}

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

\begin{document}

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

\end{document}

も必要です\usepackage[italian]{babel}が、それを実行してコンパイルすると、次のエラーが発生します。

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

PDF 出力では、表に 2 つ\bottomoruleの があり、最初の 1 つは表に合わせて配置され、2 つ目は左に移動されています。

ここに画像の説明を入力してください

これをどうすれば解決できますか?

アップデート:エラーはイタリア語で babel が使用されている場合にのみ発生し、私が試した他の言語はすべて正常に動作します。

答え1

問題はetoolboxitalian によってロードされるものです。これはエンド環境コードにフックを挿入しますが、tabularx はこれを好みません。

it works を呼び出して使用できる latex の開発バージョンでは、pdflatex-devフック コードがより堅牢になっています。

あるいは、xparse の b 引数を試すこともできます。

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

関連情報