我正在用 Overleaf (pdfLaTeX) 中的 LaTeX 编写一本书,使用tufte-book
document 类型。为了制作标题页,我有以下代码:
\documentclass[notoc,symmetric]{tufte-book}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\title{Sliiightly Long Title \\ \LARGE With A Subtitle}
\begin{document}
\maketitle
格式工作正常,但标题在呈现的 PDF 中出现了难看的黑条,如下所示:
检查警告,我发现我得到了Overfull \hbox (8.42856pt too wide)
。我可以手动将字体大小设置为\Huge
,但它太小了,看起来很糟糕。 \HUGE
看起来moresize
还不错,但我在书的其余部分将标题放在了页眉中,它也会出现\HUGE
在那里。(它还会将副标题\LARGE
放在页眉中,但我认为我实际上有点喜欢那里的效果,所以我保留了它。)
最终,我只想摆脱因过满而产生的黑条\hbox
。(为什么在这种情况下会这样做,我不认为当我过满时我通常会看到这种情况\hbox
?)有人知道这样做的方法吗,最好是一种不会弄乱我的运行头或完全破坏标题格式的方法?
答案1
\end{document}
当我添加以完成代码时,我无法重现问题中的问题。我收到过满\hbox
警告,但输出中没有出现灰色或黑色块。我所知道的唯一可能导致这种情况的事情是如果您使用了该选项,因为 LaTeX 会使用边距中的块直观地draft
指示坏块的位置。\hbox
因此,我的答案试图消除警告。由于我无法在输出中重现该块,因此我无法诊断其原因或尝试解决问题。因此,我也无法说消除坏盒是否会消除该块。但是,它确实消除了警告。
买者自负
我会考虑做如下的事情:
调整标题的字母间距,使得这里的大写字母间距不太大
\allcaps
(下面,我使用 150 而不是 200,但您需要根据需要进行调整);\newcommand{\titleallcapsspacing}[1]{\textls[150]{#1}}% adjust this as appropriate
\fontsize{36}{40}\selectfont\par\noindent\textcolor{darkgray}{\titleallcapsspacing{\MakeTextUppercase{\thanklesstitle}}}%
\subtitle
根据字幕的类别创建一个新的宏\title
;\newcommand\@subtitle{} \newcommand\plainsubtitle{} \newif\if@subtitle \newcommand{\subtitle}[2][]{% \@subtitletrue \gdef\@subtitle{#2}% \begingroup % TODO store contents of \thanks command \renewcommand{\thanks}[1]{}% swallow \thanks contents \protected@xdef\thanklesssubtitle{#2}% \endgroup \ifthenelse{\isempty{#1}}% {\renewcommand{\plainsubtitle}{\thanklesstitle}}% use thankless subtitle {\renewcommand{\plainsubtitle}{#1}}% use provided plain-text subtitle }
定制
\maketitlepage
使用\subtitle
;\if@subtitle \smallskip\par \LARGE\textcolor{darkgray}{\allcaps{\thanklesssubtitle}}% \fi
如果合适的话,调整页眉、页脚或任何要合并的内容的定义
\plainsubtitle
(下面没有显示,因为我不知道你有什么或没有什么,或者你在这里想要什么或不想要什么,但显然,\LARGE
如果你真的愿意,你可以使用或其他东西,虽然副标题比标题大似乎很奇怪——或者也许我误解了你的意思)。
然后你可以写类似
\title{Sliiightly Long Title}
\subtitle{With A Subtitle}
\maketitle
产生以下结果,没有坏框。
代码:
\documentclass[notoc,symmetric,british]{tufte-book}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\makeatletter
\newcommand{\titleallcapsspacing}[1]{\textls[150]{#1}}% adjust this as appropriate
\renewcommand{\maketitlepage}[0]{%
\cleardoublepage
{%
\sffamily
\begin{fullwidth}%
\fontsize{18}{20}\selectfont\par\noindent\textcolor{darkgray}{\allcaps{\thanklessauthor}}%
\vspace{11.5pc}%
\fontsize{36}{40}\selectfont\par\noindent\textcolor{darkgray}{\titleallcapsspacing{\MakeTextUppercase{\thanklesstitle}}}%
\if@subtitle
\smallskip\par
\LARGE\textcolor{darkgray}{\allcaps{\thanklesssubtitle}}%
\fi
\vfill
\fontsize{14}{16}\selectfont\par\noindent\allcaps{\thanklesspublisher}%
\end{fullwidth}%
}
\thispagestyle{empty}%
\clearpage
}
\newcommand\@subtitle{}
\newcommand\plainsubtitle{}
\newif\if@subtitle
\newcommand{\subtitle}[2][]{%
\@subtitletrue
\gdef\@subtitle{#2}%
\begingroup
% TODO store contents of \thanks command
\renewcommand{\thanks}[1]{}% swallow \thanks contents
\protected@xdef\thanklesssubtitle{#2}%
\endgroup
\ifthenelse{\isempty{#1}}%
{\renewcommand{\plainsubtitle}{\thanklesstitle}}% use thankless subtitle
{\renewcommand{\plainsubtitle}{#1}}% use provided plain-text subtitle
}
\makeatother
\title{Sliiightly Long Title}
\subtitle{With A Subtitle}
\begin{document}
\maketitle
\end{document}
另一种方法是使用changepage
包(该包已经由类加载)来调整边距\maketitlepage
。
另一种选择是单独使用\includepdf{}
和生成标题页,完全取消\maketitle
。没有特别的理由不这样做。如果您只需要进行微小调整,那是一回事,但是,如果您需要更彻底的更改,单独的文件可能是可行的方法。由于标题页基本上是一次性的,因此手动指定格式的常见缺点不适用。