使用 package 时colortbl
,命令\hdotsfor
会失败(部分),在点部分前后留下太多空白。mwe
\documentclass{book}
\usepackage{colortbl}
\usepackage{amsmath}
\begin{document}
\[
\begin{pmatrix}
1&a_{11}&\dots&a_{1n}\\
\hdotsfor{4}\\
1&a_{r1}&\dots&a_{rn}
\end{pmatrix} = r.
\]
\end{document}
生产
删除包裹后colortbl
一切就正常了:
我理解这可能与\leader
s 和/或胶水, 哪个是colortbl
在文档中明确提到,所以这可能是一个功能,而不是一个错误。
问题:有没有简单的解决方法,删除酒吧colortbl
?
答案1
由于\hdotsfor
它只为 AMS 对齐而设计,并且colortbl
颜色对它们不起作用,我认为最简单的方法是添加
\makeatletter
\def\hdots@for#1#2{\multicolumn{#2}c%
{\m@th\[email protected]\mkern-#1\dotsspace@
\xleaders\hbox{$\m@th\mkern#1\dotsspace@.\mkern#1\dotsspace@$}%
\hskip\z@\@plus 1filll
\mkern-#1\dotsspace@}%
}
\makeatother
加载后,您的序言amsmath
会使这些伸展filll
而不是fill
粘合,这意味着在弹性之战中,colortbl
点获胜。
如果您想要一个\hdotfill
即使在其后面有一个 colortbl 面板也能正常工作的版本,那么就需要做更多的工作。
答案2
与@DavidCarlisle 的答案相同,但使用etoolbox
以及它的\patchcmd
命令修补(代替) 代码amsmath.sty
\usepackage{etoolbox}
\makeatletter
\patchcmd{\hdots@for}{\hfill}{\hskip\z@\@plus 1filll}{}{}
\makeatother
这必须后也amsmath
。