在非常明确的点处打破一条线

在非常明确的点处打破一条线

我正在尝试创建一个宏来生成手册的标题页。在最简单的情况下,标题应该是这样的

{\huge
\textbf{\productname{} \manualtitle{}}
}

但我希望换行符适用以下规则:

  1. 如果整个标题适合一行,请不要将其拆分。
  2. 如果manualtitle适合放在一行但是不能与 放在一起productname,则在两者之间换行。
  3. 如果manualtitle长度超过该行,则在productname 自动中断manualtitle但不带连字符。

\newline我知道如何使用和hyphenrules环境手动使其各部分工作sloppypar,但我找不到满足所有三个要求的解决方案。

所要求的最小示例:

\documentclass[a4paper, 12pt]{report}

\usepackage[paper=a4paper,
            left=25mm,
            right=25mm,
            top=25mm,
            bottom=25mm,
            showframe]{geometry}

\usepackage[english]{babel}

\setlength\parindent{0pt}

\newcommand{\product}{PRODUCT}
\newcommand{\manualtitle}{User Manual}

\newcommand{\printtitle}{
  \vspace{2em}

  {\huge
    \textbf{\product{} \manualtitle{}}
  }
}

\begin{document}

\printtitle

\renewcommand{\manualtitle}{More Important User Manual}
\printtitle

\renewcommand{\manualtitle}{Even Way More Important User Manual}
\printtitle

\end{document}

期望输出:

期望输出

答案1

这是一个可能的解决方案:

\documentclass[a4paper, 12pt]{report}

\usepackage[paper=a4paper,
            left=25mm,
            right=25mm,
            top=25mm,
            bottom=25mm,
            showframe]{geometry}

\usepackage[english]{babel}

\setlength\parindent{0pt}

\newcommand{\product}{PRODUCT}
\newcommand{\manualtitle}{User Manual}

\newcommand{\printtitle}{%
  \par
  \vspace*{2em}%
  \par\begingroup\raggedright
  \huge\bfseries
  \sbox0{\let\\\relax\product{} \manualtitle}%
  \ifdim\wd0>\linewidth
    \product\\
    \manualtitle
    \par
  \else
    \box0
  \fi
  \endgroup
}

\begin{document}

\printtitle

\renewcommand{\manualtitle}{More Important User Manual}
\printtitle

\renewcommand{\manualtitle}{Even Way More Important User Manual}
\printtitle

\renewcommand{\manualtitle}{Even Way More Important \\ User Manual}
\printtitle

\end{document}

在此处输入图片描述

相关内容