我有一个这样的文档,可以正常编译:
\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 加载了 which。它在最终环境代码中插入了一个钩子,而 tabularx 不喜欢这样。
使用latex的开发版本,你可以通过调用pdflatex-dev
它来使用,它的钩子代码更加健壮。
或者你可以尝试 xparser 的 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}