我正在尝试创建一个宏来生成手册的标题页。在最简单的情况下,标题应该是这样的
{\huge
\textbf{\productname{} \manualtitle{}}
}
但我希望换行符适用以下规则:
- 如果整个标题适合一行,请不要将其拆分。
- 如果
manualtitle
适合放在一行但是不能与 放在一起productname
,则在两者之间换行。 - 如果
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}