我尝试在该包中使用斯洛伐克语booktabs
。
我们来看几个案例。
slovak
包含在选项中babel
\usepackage[english,slovak]{babel}
或者
\usepackage[slovak,english]{babel}
或者
\usepackage[slovak]{babel}`
“斯洛伐克” 不包含在选项中
babel
\usepackage[english]{babel}
同样地,有两种情况\cmidrule
A.\cmidrule{2-3}
包含在表中
B.\cmidrule{2-3}
未包含在表中
如果同时包含( slovak
+ )(情况 1A),则会发生以下错误\cmidrule
Paragraph ended before \@@@cmidrule was complete
(以及许多其他错误)
在其他情况下(1B、2A 和 2B)(NOslovak
或 NO \cmidrule
),则pdflatex
成功
有人知道为什么 1A 是错误的吗?
以及如何一起使用slovak
和\cmidrule
(情况1A)?
\documentclass[10pt]{book}
\usepackage[english,slovak]{babel}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{ccc}
A & B & C \\
%\cmidrule{2-3}
A & B & C \\
\end{tabular}
\end{document}
我有 Win7,TeXstudio 2.5.2
答案1
slovak
的(以及的czech
)模块不仅babel
会中断\cmidrule
,还会中断内核命令\cline
(可能还有许多其他命令)。
由于主动词-
用于连字,因此它在表格中的作用并不重要。下面的技巧似乎可以解决问题:
\documentclass[10pt]{book}
\usepackage[english,slovak]{babel}
\usepackage{booktabs}
\usepackage{etoolbox}
\preto\tabular{\shorthandoff{-}}
\begin{document}
\begin{tabular}{ccc}
A & B & C \\
\cmidrule{2-3}
A & B & C \\
\cline{1-2}
A & B & C \\
\end{tabular}
\end{document}
一种侵入性较小的破解方法是更改 和 定义中的分隔符\@@@cmidrule
:\@cline
\documentclass[10pt]{book}
\usepackage[english,slovak]{babel}
\usepackage{booktabs}
\usepackage{regexpatch}
\makeatletter
% Change the `-` delimiter to an active character
\xpatchparametertext\@@@cmidrule{-}{\cA-}{}{}
\xpatchparametertext\@cline{-}{\cA-}{}{}
\makeatother
\begin{document}
\begin{tabular}{ccc}
A & B & C \\
\cmidrule{2-3}
A & B & C \\
\cline{1-2}
A & B & C \\
\end{tabular}
\end{document}
无软件包版本(无需软件包也能工作\unexpanded
):
\documentclass{article}
\usepackage[slovak]{babel}
\usepackage{booktabs}
\makeatletter
\begingroup
\toks0=\expandafter{\@cline{#1}-{#2}\@nil}
\@ifpackageloaded{booktabs}{%
\toks2=\expandafter{\@@@cmidrule[{#1}-{#2}]{#3}{#4}}%
}{}
\catcode`-=\active
\edef\x{\gdef\unexpanded{\@cline#1-#2\@nil}{\the\toks0}}\x
\@ifpackageloaded{booktabs}{%
\edef\x{\gdef\unexpanded{\@@@cmidrule[#1-#2]#3#4}{\the\toks2}}\x
}{}
\endgroup
\makeatother
\begin{document}
\begin{tabular}{ccc}
A & B & C \\
\cmidrule{2-3}
A & B & C \\
\cline{1-2}
A & B & C \\
\end{tabular}
\end{document}
补丁与的加载无关booktabs
,但当然必须将其放置在之后。
答案2
该选项会使角色slovak
变为-
活跃角色。
\@@@cmidrule
内部用来\cmidrule
拆分参数的宏2-3
是用catcode (默认)-
定义的。-
12
\@@@cmidrule
以下代码只是用 active重新定义-
。
代码
\documentclass[10pt]{book}
\usepackage[english,slovak]{babel}
\usepackage{booktabs}
\begingroup
\makeatletter
\catcode`\-=\active
\AtBeginDocument{
\def\@@@cmidrule[#1-#2]#3#4{\global\@cmidla#1\relax
\global\advance\@cmidla\m@ne
\ifnum\@cmidla>0\global\let\@gtempa\@cmidrulea\else
\global\let\@gtempa\@cmidruleb\fi
\global\@cmidlb#2\relax
\global\advance\@cmidlb-\@cmidla
\global\@thisrulewidth=#3
\@setrulekerning{#4}
\ifnum\@lastruleclass=\z@\vskip \aboverulesep\fi
\ifnum0=`{\fi}\@gtempa
\noalign{\ifnum0=`}\fi\futurenonspacelet\@tempa\@xcmidrule}
}
\endgroup
\begin{document}
\begin{tabular}{ccc}
A & B & C \\
\cmidrule{2-3}
A & B & C \\
\end{tabular}
\end{document}
答案3
遇到了同样的问题。
正如其他人所说,问题源于使用捷克语(或斯洛伐克语)babel。
一些捷克论坛我找到了这个修复程序:
\begin{table}
\catcode`\-=12
\begin{tabular}{|c|c|c|}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9 \\
\end{tabular}
\end{table}
它将字符的类别改-
回到其应在的位置。
此更改可以全局进行,也可以仅在表中进行。
答案4
czech
ans语言使连字符处于活动状态,因此可以将其用作允许(即在换行符中重复连字符)工作的slovak
宏。如果您不需要,可以按照以下步骤停用连字符:\splithyphens
\splithyphens
\usepackage[english,slovak]{babel}
\AtBeginDocument{\shorthandoff{-}}
稍后您可以使用以下方法再次激活它:
\shorthandon{-}