如何创建平衡且右边不规则的标题线?

如何创建平衡且右边不规则的标题线?

我有一些部分标题(在所有标题级别),它们设置为不对齐且不带连字符。但是行分布不均衡,因此当标题很长时,您可能会发现,比如说,下一行中有一个单词被孤立。

我想要的效果类似于CSStext-wrap: balance

我可以使用ragged2e及其\Centering命令获得良好的生产线平衡,但由于我无法理解的原因,该\RaggedRight命令无法获得相同的结果。

总之我想要:

  • 标题不齐
  • 没有连字符
  • 标题换行时平衡行

解决方案需要在序言中处理,因为文本是从 HTML 自动转换的,所以我无法插入换行符。

梅威瑟:

\documentclass[a4paper]{article}

\usepackage{ragged2e}

\begin{document}

{\tiny normal centering}\\
\parbox{\textwidth}{\section*{\centering This is some random  text to test ragged line balance}}

\vspace{3em}

{\tiny ragged2e Centering}\\
\parbox{\textwidth}{\section*{\Centering This is some random  text to test ragged line balance}}

\vspace{3em}

{\tiny normal raggedright}\\
\parbox{\textwidth}{\section*{\raggedright This is some random  text to test ragged line balance}}

\vspace{3em}

{\tiny ragged2e RaggedRight}\\
\parbox{\textwidth}{\section*{\RaggedRight This is some random  text to test ragged line balance}}

\vspace{3em}

{\tiny this is what I want}\\
\parbox{\textwidth}{\section*{\RaggedRight This is some random  text \\to test ragged line balance}}

\end{document}

截屏:

在此处输入图片描述

答案1

也许不应该在这样的部分内有宏,也许这不是正确的做法,但这似乎是可行的。

\documentclass[a4paper]{article}

\usepackage{ragged2e}

\protected\def\MaybeRight{%
\leftskip     0pt
\rightskip    0pt plus 5em
\spaceskip    \fontdimen2\font
\xspaceskip   \fontdimen2\font
\parfillskip  0pt
\parindent    0pt}

\begin{document}

{\tiny this is what I want}\\
\parbox{\textwidth}{\section*{\RaggedRight This is some random  text \\to test ragged line balance}}

{\tiny this is what I want}\\
\parbox{\textwidth}{\section*{\MaybeRight This is some random  text to test ragged line balance}}

\end{document}

结果

答案2

这是我的链接解决方案的非中心版本:

\documentclass{article}

\newcommand{\balancebox}[2]% #1 = max width, #2 = contents
{\begingroup% save registers
  \dimendef\height=0
  \dimendef\width=1
  \dimendef\test=2
  \settowidth{\test}{#2}% single line check
  \width=#1\relax
  \ifdim\test>\width
    \settoheight{\height}{\parbox{#1}{\raggedright #2}}%
    \loop
      \advance\width by -1em
      \settoheight{\test}{\parbox{\width}{\raggedright #2}}%
      \ifdim\test=\height\repeat
    \advance\width by 1em
  \fi
  \parbox{\width}{\raggedright\strut #2\strut}%
\endgroup}

\begin{document}
\parbox{30mm}{This is some more text\strut}

\balancebox{30mm}{This is some more text}
\end{document}

答案3

经过一番尝试,我找到了一个可行的解决方案,它基于@mickep的答案,但直接应用于节标题,从而避免了出现问题parbox。我不太明白发生了什么,所以欢迎提出任何建议或更正。

  • 创建新\BalancedRagged命令。
  • 通过 应用于章节标题sectsty
  • 包括包,microtype因为这会改变间距。
  • 拉伸\rightskip可调整第一行(几行)的长度:长度越大,越想将单词移到下一行。
  • 拉伸使parfillskip最终的线具有弹性:拉伸越小,越希望最终的线与前面的线的长度相同。
  • \spaceskip比默认值稍微挤压一些,因此有些行在一行而不是两行(参见示例 3)。
  • \xspaceskip在这些例子中似乎没有影响任何事情。
  • \spaceskip和均可省略\xspaceskip,保留默认值。

对于 MWE,为了方便起见,我使用\section显示默认值,然后使用\subsection来显示效果\BalancedRagged

  • 示例 1 表明\BalancedRagged,即使字符数正好填满行长,也不会创建新行。
  • 示例 2 使用默认设置解决了主要问题,消除了孤立问题。
  • 示例 3 和 4 消除了标题中的连字符。
  • 示例 5 表明它也适用于三行标题。
\documentclass[a4paper]{article}

\usepackage{sectsty}
\usepackage{microtype}

\protected\def\BalancedRagged{
\leftskip     0pt
\rightskip    0pt plus 10em
\spaceskip=1\fontdimen2\font plus .5\fontdimen3\font minus 1.5\fontdimen4\font
\xspaceskip=1\fontdimen2\font plus 1\fontdimen3\font minus 1\fontdimen4\font
\parfillskip  0pt plus 15em
\relax
}

\sectionfont{\large}%
\subsectionfont{\large\BalancedRagged}%

\begin{document}

\noindent 1.
\section*{This tests sectional headings which are this exact line length}
\subsection*{This tests sectional headings which are this exact line length}
\bigskip
2. 
\section*{This tests the balancedness of the lines in section headings, etc.}
\subsection*{This tests the balancedness of the lines in section headings, etc.}
\bigskip
3.
\section*{This shows the line’s resistance when it comes to hyphenation}
\subsection*{This shows the line’s resistance when it comes to hyphenation}
\bigskip
4.
\section*{This too shows the line’s resistance when it comes to hyphenation}
\subsection*{This too shows the line’s resistance when it comes to hyphenation}
\bigskip
5.
\section*{This tests the balancedness of the lines in three-line section headings, which, even though you want to avoid them, do occur}
\subsection*{This tests the balancedness of the lines in three-line section headings, which, even though you want to avoid them, do occur}

\end{document}

屏幕截图显示了 BalancedRagged 的​​效果

相关内容