斯洛伐克语(和捷克语)babel 给出了 cmidrule 和 cline 的问题

斯洛伐克语(和捷克语)babel 给出了 cmidrule 和 cline 的问题

我尝试在该包中使用斯洛伐克语booktabs

我们来看几个案例。

  1. slovak包含在选项中babel

    \usepackage[english,slovak]{babel}
    

    或者

    \usepackage[slovak,english]{babel}
    

    或者

    \usepackage[slovak]{babel}`
    
  2. “斯洛伐克” 不包含在选项中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

czechans语言使连字符处于活动状态,因此可以将其用作允许(即在换行符中重复连字符)工作的slovak宏。如果您不需要,可以按照以下步骤停用连字符:\splithyphens\splithyphens

\usepackage[english,slovak]{babel}
\AtBeginDocument{\shorthandoff{-}}

稍后您可以使用以下方法再次激活它:

\shorthandon{-}

相关内容