如何用拉伸因子概括 \dotfill?

如何用拉伸因子概括 \dotfill?

\stretch{someFactor}是 rubber-space 命令的泛化,\hfill因为它\hfill是特殊情况\stretch{1.0}。(实际上我对带星号的版本\hspace*{\fill}\hspace{\fill}版本更感兴趣,因为我希望能够在行尾强制留一个空格。)

\dotfill是一种类似物,\hfill用间隔开的点填充与用空白空间填充的\dotfill水平空间相同。\hfill

我想定义一个\stretchDotfill{someFactor}命令,用间隔点填充与\stretch{someFactor}用空白空间填充相同的空间。

请注意,我的问题与“如何更改点间距\dotfill”改变点间距不会影响\dotfill填充空间的长度;它只会改变相同长度的水平空间内的点的密度。

我理解的定义\dotfill是:

\leavevmode \cleaders \hb@xt@ .44em{\hss .\hss }\hfill \kern \z@

我使用\meaning\stretch并得到的结果大致如下:

macro:#1-¿\z@ \@plus #1fill\relax

(我正在使用 Overleaf,但我不完全信任它给我的字符。例如,它给了我而不是\。我修复了这些问题,但我不确定¿。)

但是,我不知道如何继续。

[我为什么要这样做?我正在编写一个标题页横幅生成器,其中一行内有离散的水平框,横幅生成器可以使用它\stretch来微调相邻框之间的间距(或一端的框与较近边缘之间的间距)。我想要一个“调试模式”来使空间可见。如果我可以概括为接受拉伸因子,\stretch我想我会这样做。(如果我只用它来控制间距,我会使用它进行调试。)]\dotfill\dotfill\hfill\dotfill

答案1

如果你尝试,latexdef -s dotfill stretch你会得到答案

> latexdef -s dotfill stretch
% latex.ltx, line 617:
\def\dotfill{%
  \leavevmode
  \cleaders \hb@xt@ .44em{\hss.\hss}\hfill
  \kern\z@}

% latex.ltx, line 1629:
\def\stretch#1{\z@ \@plus #1fill\relax}

回想一下,\hfill相当于\hskip 0pt plus 1fill\relax,并且定义会立即出现:

\makeatletter
\newcommand{\dotfillstretch}[1]{%
  \leavevmode
  \cleaders\hb@[email protected]{\hss.\hss}\hskip\z@\@plus #1fill
  \kern\z@
}
\makeatother

测试文件:

\documentclass{article}

\makeatletter
\newcommand{\dotfillstretch}[1]{%
  \leavevmode
  \cleaders\hb@[email protected]{\hss.\hss}\hskip\z@\@plus #1fill
  \kern\z@
}
\makeatother

\begin{document}

\noindent X\dotfill X

\noindent
A\dotfillstretch{1}B\dotfillstretch{2}C\dotfillstretch{3}D

\end{document}

在此处输入图片描述

相关内容