
У меня есть такой документ, который компилируется нормально:
\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 таблица имеет два \bottomorule
символа s, первый из которых выровнен с таблицей, а второй смещен влево:
Как мне решить эту проблему?
Обновлять:ошибка возникает только если babel используется на итальянском языке, все остальные языки, которые я пробовал, работают хорошо.
решение1
Проблема в том, etoolbox
что загружается italian. Он вставляет хук в код конечной среды, а tabularx это не нравится.
В версии latex для разработки, которую можно использовать, вызвав pdflatex-dev
ее works, ее код хука стал более надежным.
В качестве альтернативы вы можете попробовать b-аргумент 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}