我意识到包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}