虽然我确实需要在文档标题页的标题内使用换行符(我正在使用该类book
),但我想避免在传递给命令的参数中使用硬编码换行符\title
,原因有三:
- 出于可维护性的考虑,我总是努力将形式和内容分开。
- 标题可能需要插入到文档的其他位置,即不需要换行的地方。
- 我将我的头衔传递给
\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 字符串生成中不起作用。