西班牙语 Babel 和单元格与百分比符号对齐

西班牙语 Babel 和单元格与百分比符号对齐

我意识到包spanish的选项babel在对齐表格单元格时会产生百分比符号的错误行为。

此代码生成下表:

\documentclass{article}
\begin{document}
    \begin{tabular}{|c|c|c|}
        \hline
        \% & \% header & header \% \\
        \hline
        xxxxxxxxxxx & xxxxxxxxxxx & xxxxxxxxxxx \\
        \hline
    \end{tabular}
\end{document}

表确定

但是,添加西班牙babel包会产生这样的结果:此代码会生成下表:

\documentclass{article}
\usepackage[spanish]{babel}
\begin{document}
    \begin{tabular}{|c|c|c|}
        \hline
        \% & \% header & header \% \\
        \hline
        xxxxxxxxxxx & xxxxxxxxxxx & xxxxxxxxxxx \\
        \hline
    \end{tabular}
\end{document}

表确定

这是怎么回事?有什么办法可以解决吗?

答案1

使用babel-spanish\%被重新定义为首先执行\es@sppercent,然后又开始执行\unskip

在您的上下文中,这会取消列模板的定心胶水,因此另一侧的定心胶水会将所有东西都推到左边。

一个可能更好的定义是,\es@sppercent只有\unskip自然宽度前面的胶水是正的,例如

10 \%

约定俗成地希望排版时使用细间距而不是普通间距。我们可以用 来检查自然宽度\ifdim\lastskip>\z@。这样,\fill粘连就不会被移除。

\documentclass{article}
\usepackage[spanish]{babel}

\makeatletter
\renewcommand\es@sppercent{%
  \leavevmode
  \ifdim\lastskip>\z@ \unskip\fi
  \textormath{$\m@th\,$}{\,}%
}
\makeatother

\begin{document}

\begin{tabular}{|c|c|c|}
\hline
\% & \% header & header \% \\
\hline
xxxxxxxxxxx & xxxxxxxxxxx & xxxxxxxxxxx \\
\hline
\end{tabular}

\end{document}

在此处输入图片描述

一个可能更好的方法是,只有当胶水不具有无限拉伸性时才去除胶水:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{xpatch}

\makeatletter
\renewcommand\es@sppercent{%
  \leavevmode
  \ifnum\gluestretchorder\lastskip=\z@\unskip\fi
  \textormath{$\m@th\,$}{\,}%
}
\makeatother

\begin{document}

\begin{tabular}{|c|c|c|}
\hline
\% & \% header & header \% \\
\hline
xxxxxxxxxxx & xxxxxxxxxxx & xxxxxxxxxxx \\
\hline
\end{tabular}

\end{document}

相关内容