如何在不在 \title 中对 \\ 进行硬编码的情况下实现标题内的换行?

如何在不在 \title 中对 \\ 进行硬编码的情况下实现标题内的换行?

虽然我确实需要在文档标题页的标题内使用换行符(我正在使用该类book),但我想避免在传递给命令的参数中使用硬编码换行符\title,原因有三:

  1. 出于可维护性的考虑,我总是努力将形式和内容分开。
  2. 标题可能需要插入到文档的其他位置,即不需要换行的地方。
  3. 我将我的头衔传递给\hypersetup{pdftitle=...}hyperref返回一个警告,

PDF 字符串 (PDFDocEnconding) 中不允许使用标记:(超级引用)删除“\\”

如果标题包含一些\\,我想将编译警告的数量限制到最低限度。

在将标题插入到文档的某个位置后,如何才能在标题内的特定位置实现换行?没有\\命令中是否包含硬编码\title{...}?最佳做法是什么?

\documentclass{book}

\author{Me, me, me}
%\title{Me, myself, and I}      % compiles without mishap; strictly content
\title{Me,\\ myself, \\ and I}  % compilation warnings occur; form and content are mixed

\usepackage{kantlipsum}
\usepackage{hyperref}
\makeatletter
\hypersetup{
    pdftitle = \@title,
}
\makeatother

\begin{document}
    \maketitle
    \kant
\end{document}

答案1

如果您总是希望将某些短语“绑定在一起”,请使用~(波浪号 = tie)而不是它们之间的空格。有时这可以鼓励换行,但有时您最终会得到一个过满的框,并且仍然必须明确地换行。

(这与教科书中推荐的方法相同,用于防止“ Dr.~No”和“ Figure~1”等内容在行末断开。)

实际结果取决于\title参数的处理方式;拉伸必须具有足够的灵活性来定义,这取决于文档类。

答案2

最简单的方法是使用选项,并且周围pdfusetitle不带空格:\\\title

\documentclass{book}

\usepackage{kantlipsum}
\usepackage[pdfusetitle]{hyperref}

\author{Me, me, me}
\title{Me,\\myself,\\and I}

\begin{document}
    \maketitle
    \kant
\end{document}

的结果pdfinfo

Title:          Me, myself, and I
Author:         Me, me, me

否则,有\texorpdfstring

\title{My,\texorpdfstring{\\}{ }myself,\texorpdfstring{\\}{ }and I}

或者也\pdfstringdefDisableCommands可以使用,例如:

\pdfstringdefDisableCommands{\def\\#1{ #1}}

这是用于带选项的标题的定义pdfusetitle,它支持以下形式:

\title{Me,\\myself,\\and I}
\title{Me,\\ myself,\\ and I}

如果您希望有更多空间:

\pdfstringdefDisableCommands{\let\\\@firstofone}
\title{Me, \\ myself, \\ and I}

这个参数的窍门在于,TeX 不接受空格作为未分隔的参数。因此后面的空格\\会被吞掉。

空格是原因之一,\\未提供hyperref并发出警告。常用技巧(\unskip\ignorespaces、...)在 PDF 字符串生成中不起作用。

相关内容