将 \dotfill 或 \(c/x)leaders 与不同位数的页码对齐

将 \dotfill 或 \(c/x)leaders 与不同位数的页码对齐

我需要手动创建类似于目录的内容。为此,我需要点引线从“章节”的文本转到此“章节”的页码。我尝试使用\dotfill\leaders\cleaders\xleaders实现它。

我得到\dotfill了这个:

点对齐

我想将所有点引线对齐到与指向 3 位数字 (130) 的“最短”引线行相同的点。在图像上,您可以看到这些引线根据以下情况对齐到不同的点:

  1. 该行末尾有多少位数字
  2. 即使行末的数字相同,文本的长度也要高于前导符

\dotfill通过将 替换为,第二个问题似乎会有所改善\leaders,但它仍然存在(除非只是我的眼睛在捉弄我),但使用\leaders并不能解决第一个问题:

\领导者对齐

我想我可以通过使用类似的东西来实现完美的对齐tabular,但如果可能的话,我想保持简单,而不需要处理表格。

以下是 MWE 展示的我目前尝试过的所有内容,其中带注释的\mypara定义是我测试过的替代方案:

\documentclass{book}

\newcommand\myleaders{\leavevmode\kern3pt\leaders\hbox{.}\hfill\kern6pt}
\newcommand\mycleaders{\leavevmode\kern3pt\cleaders\hbox{.}\hfill\kern6pt}
\newcommand\myxleaders{\leavevmode\kern3pt\xleaders\hbox{.}\hfill\kern6pt}

% \def \mypara#1#2{\noindent#1~~\dotfill~~#2}
\def \mypara#1#2{\noindent#1\myleaders#2}
% \def \mypara#1#2{\noindent#1\mycleaders#2}
% \def \mypara#1#2{\noindent#1\myxleaders#2}

\def \mycomment#1{\noindent\textbf{#1}:}

\begin{document}

\mycomment{1, 2 or 3 digits}

\mypara{This is a text}{1}

\mypara{This is a text}{30}

\mypara{This is a text}{130}

\mycomment{Different text}

\mypara{This is just short text}{30}

\mypara{This is a little bit longer text}{30}

\mypara{This is quite long text that goes on and on}{30}

\mycomment{1, 2 or 3 digits combined with different text}

\mypara{This is just short text}{1}

\mypara{This is a little bit longer text}{30}

\mypara{This is quite long text that goes on and on}{130}

\end{document}

无论行末有多少位数字,我怎样才能选择结束的\leaders位置?\dotfill

答案1

正如 egreg 在评论中向您建议的那样,您可以将数字放在一个具有固定宽度的框中,这样无论其内容如何,​​领导者都会始终停在该距离处。

因此,像这样重写您的命令:

\def\mypara#1#2{\noindent#1\myleaders\makebox[3mm][r]{#2}}

得到以下结果

在此处输入图片描述

相关内容