\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}