\vdots、\ldots \cdots 和 \ddots 之间的间距不同

\vdots、\ldots \cdots 和 \ddots 之间的间距不同

放大我这个非常简单的代码,我从来没有注意到通常放在矩阵中的点有不同的间距。垂直点似乎彼此更近。

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\[\begin{pmatrix}
\ldots & 2 & 3\\
a & b & \vdots\\
5 & \ddots & 7
\end{pmatrix}\]
\end{document}

我已经看到了这个老问题的代码a0poster 类中 vdot 的间距并且有一个可能的答案(peraphs),但是它是在 Plain TeX 中定义的。

但是是否可以使用一些补丁(或最初更改点的 LaTeX 代码)来使点具有相同的间距,并根据我的喜好改变它们的距离?

答案1

原始定义见于latex.ltxfontmath.ltx

% \ldots is \let to \dots
\DeclareRobustCommand{\dots}{\ifmmode\mathellipsis\else\textellipsis\fi}
\DeclareMathSymbol{\ldotp}{\mathpunct}{letters}{"3A}
\def\mathellipsis{\mathinner{\ldotp\ldotp\ldotp}}

\DeclareRobustCommand
  \ddots{\mathinner{\mkern1mu\raise7\p@
    \vbox{\kern7\p@\hbox{.}}\mkern2mu
    \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}

\DeclareRobustCommand
  \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
    \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}

并且间距确实有很大差异:

  • \ldots(更准确地说\mathellipsis)有三个\mathpunct原子,加上盒子的自然宽度(它比点本身大得多,见下文);
  • \vdots4pt;
  • \ddots有一种奇怪的混合,即用 表示的硬长度pt和用 表示的灵活长度mu

我可以给出一个或多或少启发式的补丁;这是基于这样的观察:在 CM 中,从到10pt包含12pt句点的框的宽度大约为3pt,而句点本身的宽度大约为1pt。(我强调:大约)。当然,硬编码长度pt会阻止任何字体大小的长度均匀。当然,您可以根据自己的喜好调整参数。

\documentclass[a4paper,12pt]{article}

\usepackage{amsmath} % only for the matrix example

\makeatletter

\def\mathellipsis{\mathinner{{.}\kern2\p@{.}\kern2\p@{.}}}

\DeclareRobustCommand{\ddots}
   {
    \sbox0{.}
    \mathinner{
    \raise\dimexpr2.82\p@+.94\wd0\relax\copy0
    \kern\dimexpr1.41\[email protected]\wd0\relax
    \raise\dimexpr1.41\p@+.47\wd0\relax\copy0
    \kern\dimexpr1.41\[email protected]\wd0\relax
    \box0
    }
}

\DeclareRobustCommand{\vdots}
   {%
    \sbox0{.}%
    \vbox{%
      \offinterlineskip
      \kern2\p@ %<-- this makes the box somewhat higher (plain TeX and LaTeX have 4\p@) 
      \hbox{.}%
      \kern\dimexpr2\p@+.666\wd0\relax
      \hbox{.}%
      \kern\dimexpr2\p@+.666\wd0\relax
      \hbox{.}%
      }%
}

\makeatother

\newcommand{\test}[1]{%
   \begingroup
   \mathsurround=0pt
   \fboxrule=0.2pt
   \fboxsep=-0.2pt
   \fbox{$#1$}
   \sbox0{$#1$}(\the\wd0$\times$\the\ht0)
   \endgroup
}

\begin{document}

% original definition
$|\mathinner{\ldotp\ldotp\ldotp}|$

$|\ldots|$

\fboxrule=0.2pt
\fboxsep=-0.2pt
\mathsurround=0pt

12pt:
\fbox{$\vdots$}
\fbox{$\ldots$}
\fbox{$\ddots$}

11pt:
\small
\fbox{$\vdots$}
\fbox{$\ldots$}
\fbox{$\ddots$}

10pt:
\footnotesize
\fbox{$\vdots$}
\fbox{$\ldots$}
\fbox{$\ddots$}

\end{document}

在此处输入图片描述

当然,当使用其他字体时,这些值将变得完全无用。

这值得吗?我认为不值得。

相关内容