考虑以下代码:
\documentclass{book}
\textwidth 5.75in
\usepackage{verse}
\begin{document}
\thispagestyle{empty}
\LARGE
\vskip 25pt
\begin{center}
\textbf{Casey at the Bat}
\end{center}
\vspace*{5pt}
%\addtolength{\leftmargini}{60pt}
\begin{center}
\begin{verse}
Oh, somewhere in this favoured land \\
the sun is shining bright, \\
The band is playing somewhere, \\
and somewhere hearts are light;
\vskip 10pt
And somewhere men are laughing, \\
and somewhere children shout, \\
But there is no joy in Mudville--- \\
mighty Casey has struck out.
\end{verse}
\end{center}
\end{document}
产生
正如您所见,尽管\begin{center} \end{center}
我使用了,但诗节并没有居中。
我知道,如果我取消注释该命令%\addtolength{\leftmargini}{60pt}
,然后直观地调整数量直到得到看起来可以接受的结果,我就能近似地得到我想要的结果;但是,我想自动执行此操作,就像将小页面或 tikzpicture 置于中心一样。
问题:有没有一种相当简单且自动的方式可以将诗节置于中心?如果可以,我该怎么做?
谢谢。
答案1
你问,
有没有一种合理简单的方法可以将诗节集中起来?
如果诗包加载后,verse
环境会采用一个可选参数,该参数会告知 LaTeX 节的平均长度,进而影响节的水平定位。该参数应为长度变量或宏;包verse
提供了一个为此目的调用的宏\versewidth
。此机制应与center
环境结合使用。(附言:如果您想在环境内允许分页符verse
,则应使用\centering
,而不是\begin{center}...\end{center}
。)
您的查询进一步询问是否存在自动的水平居中的方法。\versewidth
机制是不是全自动;不过,我认为这完全没问题,也不算缺点,因为从印刷术上讲,您真正想要实现的是“视觉”居中,而不是“数学”居中。一组诗节是否“看起来居中”取决于几个因素,而不仅仅是诗节中最宽或平均长度。在下面的例子中,经过几次试运行后,我选择了第二长诗节的长度作为基础\versewidth
。您的审美偏好可能与我的不同。
以下屏幕截图中的框架线由展示架包裹。
\documentclass{book}
\setlength{\textwidth}{5.75in}
\usepackage{verse}
\usepackage{showframe} % draw framelines around text block
\begin{document}
\begingroup % localize scope of '\centering' and '\LARGE' directives
\centering
\LARGE
\settowidth{\versewidth}{And somewhere men are laughing,} % 2nd-longest stanza
\textbf{Casey at the Bat}
\vspace{0.5\baselineskip}
\begin{verse}[\versewidth] % <-- note the optional argument
Oh, somewhere in this favoured land \\
the sun is shining bright, \\
The band is playing somewhere, \\
and somewhere hearts are light;
And somewhere men are laughing, \\
and somewhere children shout, \\
But there is no joy in Mudville--- \\
mighty Casey has struck out.
\end{verse}
\endgroup
\end{document}