使用 \hfill 对标题部分进行左对齐和右对齐时控制文本溢出

使用 \hfill 对标题部分进行左对齐和右对齐时控制文本溢出

我正在用纯 (Xe)TeX 创建一个模板,该模板的第一行必须包含位置和参考编号。位置左对齐,参考编号右对齐。(参见下面的示例 1。)

如果这两个都很短,我可以使用:

{\it Location}: UK \hfill {\it Ref}: Xyz

但是,如果其中任何一个太长,以致 TeX 无法将它们放入同一行,它就会将参考数字溢出到下一行(示例 2)。

通常这是处理一行中文本过多问题的最佳方法,但由于这些文档最终的外观,这不是我想要的。

我希望前半部分溢出到下一行,这样引用数就始终完全在第一行(示例 3)。如果引用数的大小始终是静态的,那么这将相对容易,但它可能会发生很大变化(例如示例 4)。

在纯 TeX 中是否有明显的方法来做到这一点?我想不出解决这个问题的好方法,除非将参考数字放在一个框中,计算其大小,从线宽中减去该数字,然后将另一个数字放入该宽度的框中,这似乎是一种相当复杂的方法。

任何有关方法的指示都非常感谢。谢谢!

例子

答案1

我们可以使用\parshape原始形状,以及不规则的右形状。该命令\parshape后面必须跟一个整数nn维度对;比如

\parshape 3
   0pt 3cm
   4pt \dimexpr 3cm+4pt\relax
   8pt \dimexpr 3cm+8pt\relax

将给出一个段落形状,其中第一行从左边距开始,长度为 3cm,第二行从左边距右侧 4pt 开始,长度为 3cm+4pt,第三行向右推一点,长度稍长。第三行之后的行将遵循与第三行相同的规范。

在我们的例子中,我们需要零缩进,但第一行必须更短才能容纳引用。我们可以测量引用的宽度并添加间隙,例如 1em:

\setbox0=\hbox{{\it Ref\/}: #2}

我们将获得参考的宽度,因此

\parshape 2 0pt \dimexpr\hsize-1em\relax 0pt \hsize

将生成一个段落,留出所需的空间。

\def\entry#1#2{% #1 = location -- #2 = ref
  \setbox0=\hbox{{\it Ref\/}: #2}%
  \vbox{\parindent=0pt % no indent
        \rightskip 0pt plus 6em % raggedright
        \spaceskip .3333em \xspaceskip .5em\relax % no flexible space
        \language255 % no hyphenation
        \hsize=5.5cm % overall size
        \parshape=2 0pt \dimexpr\hsize-\wd0-1em\relax 0pt \hsize
        \leavevmode\rlap{\line{\hfil\box0}}{\it Location\/}: #1\par}}

\entry{UK}{Xyz}
\medskip
\entry{Oxford Street, UK}{Xyz}
\medskip
\entry{Oxford Street, UK}{Xxxx Yyyy Xyz}
\bye

还进行了一些调整:例如,\rightskip比给出的更强\raggedright(需要进行一些实验来找到最佳尺寸)。参考放在开头,\rlap{\line{\hfill\box0}}以便与右边距齐平,但不占用空间。

在此处输入图片描述

答案2

你能用 吗\halign?例如,如果你需要紧密的列并且可以换行,那么你可以\vbox在序言中使用 :

\newdimen\locwd
\locwd=3cm
\newdimen\refwd
\refwd=3cm
\halign{\vbox{\parindent0pt\hsize\locwd\raggedright{\it Location\/}: #\hfil}&
  \quad\hfil\vbox{\parindent0pt\hsize\refwd\raggedright{\it Ref\/}: #}\cr
UK& Xyz\cr
Oxford Street, UK& Xyz\cr
Oxford Street, UK& Xxxx Yyyy Zzz\cr
}
\bye

答案3

这是一个起点。未解决的问题是示例 4,因为我不知道如何使长引用向左延伸到地址块中。

为了演示目的,我将整体宽度限制为 8 厘米,但您可以轻松将其设置为\hsize

\documentclass{article}

\def\locref#1#2{\hbox to 8cm
    {\vtop{\hsize=4cm\noindent\raggedright {\it Location:}\hfill #1}
     \hfill\quad{\it Ref:} #2}}

\begin{document} 
\locref{UK}{12345453}

\locref{London, Oxford Street, UK}{12345453}

\locref{London, Oxford Street, United Kingdom}{12345453}

\locref{London, Oxford Street, United Kingdom}{12345453-123454}

\locref{London, Oxford Street, United Kingdom}{12345453-12345453-12345453}
\end{document}

在此处输入图片描述

相关内容