\hdotsfor 和 colortbl 之间的交互:错误/功能?

\hdotsfor 和 colortbl 之间的交互:错误/功能?

使用 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}

生产

hdostsfor 失败

删除包裹后colortbl一切就正常了:

hdotsfor 没问题

我理解这可能与\leaders 和/或胶水, 哪个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

相关内容