我的论文标题排版在方框中,文本对齐,除了最后一行,它是右对齐的(来自这里):
% Justify all lines in paragraph, except last line right aligned
\newcommand*{\justlastragged}{%
\leftskip=0pt plus 1fil
\rightskip=-\leftskip
\parfillskip=\leftskip
\parindent=0pt}
这样做效果很好,但有时会导致标题不好看,因为空间被拉得太长。例如,请参见下面的图片:
在这种情况下,我只想让顶行左对齐。我不想将文本默认设置为左对齐(而不是两端对齐),因为这样其他标题的排版就不那么好看了(即那些只需要稍微拉伸的标题)。
我尝试过spaceskip
,但只要添加哪怕是最微小的“加号”拉伸,上图中的空间就会扩大,以至于整行都被填满。我尝试过的另一件事是手动添加换行符,但在这种情况下,标题被视为两个段落,并且两行都右对齐。
有什么方法可以实现我想要的吗?能够设置最大拉伸量的限制似乎不错,但我找不到类似的东西。
编辑:现在使用最少的样本:
\documentclass[a4paper, 11pt]{article}
\usepackage[T1]{fontenc}
% Justify all lines in paragraph, except last line right aligned
\newcommand*{\justlastragged}{%
\leftskip=0pt plus 1fil
\rightskip=-\leftskip
\parfillskip=\leftskip
\parindent=0pt}
% Left-align all lines in paragrahp, except last line right aligned
\newcommand*{\leftlastragged}{%
\leftskip=0pt plus 1fil
\rightskip=0pt plus 1fill
\parfillskip=0pt plus -1fill
\parindent=0pt}
\newcommand{\titlelayoutA}{\justlastragged \Large \scshape \bfseries}
\newcommand{\titlelayoutB}{\leftlastragged \Large \scshape \bfseries}
\begin{document}
% Using justified text
\parbox{2.5cm}{Justified}
\fbox{\parbox{3.2cm}{\titlelayoutA This is just a test}} % Look good
\hspace{0.5em}
\fbox{\parbox{3.2cm}{\titlelayoutA This does not fit}} % Looks bad
\vspace*{2em}
% Using left aligned
\parbox{2.5cm}{Left-aligned}
\fbox{\parbox{3.2cm}{\titlelayoutB This is just a test}} % Looks bad
\hspace{0.5em}
\fbox{\parbox{3.2cm}{\titlelayoutB This does not fit}} % Looks good
\end{document}
答案1
如果命令 TeX 填充一定宽度(例如,为了对齐一行),它将使用所有可用的可拉伸胶水。
胶水中指定的拉伸量仅用于计算线的不良程度,但是如果你说
\hbox to 5em{M\hskip 1em plus 1em M}
胶水将被拉伸至完成任务所需的程度。为了简单起见,我们假设“M”的宽度为 1em;要填充的空间为 5em,但材料仅覆盖 3em;因此胶水必须拉伸 2em,因此拉伸因子为 2,这导致不良度为 800(不良度约为拉伸因子立方的 100 倍,但如果该数字超过 10000,则为 10000)。
没有办法告诉 TeX 限制胶水的可拉伸性,除非添加一些其他(有限的)胶水,以便它不需要超出规定的限制。
可以多次排版一行,直到不良度为 100,这意味着拉伸因子为 100。该宏\nostretch
有两个参数:第一个是允许的最大宽度,第二个是要排版的文本。
\def\nostretch#1#2{%
\begingroup\hbadness=10000 % don't report high badness
\dimen0=#1\relax
\setbox0=\hbox to\dimen0{#2}\count255=\badness
\loop\ifnum\count255>100
\advance\dimen0-.5pt
\setbox0=\hbox to\dimen0{#2}\count255=\badness
% \hbox{\copy0\ -- \the\count255}% for debugging
\repeat
\box0
\endgroup
}
\nostretch{5em}{M\hskip 1em plus 1em M}
\bye
如果删除调试行中的注释,您将看到计算结果:
最后一行是没有调试时打印的内容;两个 M 之间有 2 em 的空格(实际上不是,因为字体中 M 的宽度不是 1em cmr10
)。可以使用任何粘连,包括单词间空格。