我将尝试说明我想要实现的目标。我想要一个像这样工作的诗歌环境/页面样式——标题(如果有)放置在标题占位符(紫色)中。
诗歌的主体位于页面的中央(灰色)。
这与诗歌的宽度或长度无关,直到从标题到诗歌的距离达到一定长度(绿色)。之后,中心移到下方,这样诗歌就会填满页面直至下边缘(蓝色)。
对于没有标题的诗歌,我应该能够选择将它们填充到标题占位符底部 - 绿线长度或直到标题占位符顶部。
基本上我应该能够测量诗歌中最宽的一行,然后如果将其放在与最宽行一样宽的框中,它会有多长。定位计算应该足够简单。我想我可以使用来定位我的框。textpos
你有什么建议吗?
答案1
除了几何之外没有任何包
这缺少环境的许多功能verse
,但具有您需要的所有属性。可能需要进行一些调整,我设置的尺寸有点随意pass
。几何学使其接受默认的类设置,但允许我们使用它的功能,特别是\newgeometry
。
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[pass]{geometry}
\newsavebox\poembox
\newsavebox\poemtitlebox
\newcommand{\settitle}[1]{%
\vbox{\let\\\cr\halign{\hfil##\hfil\cr#1\crcr}}}
\newenvironment{poem}[1]
{\newpage\newgeometry{margin=0pt}%
\sbox\poemtitlebox{\settitle{#1}}%
\setbox\poembox=\vbox\bgroup
\obeylinescr\halign\bgroup##\hfil\cr}
{\crcr\egroup\egroup
\ifdim\dimexpr\ht\poemtitlebox+\ht\poembox>.7\pdfpageheight\relax
\displacedpoem
\else
\centeredpoem
\fi
\clearpage\restoregeometry}
\def\obeylinescr{\catcode`\^^M=13
\begingroup\lccode`\~=`\^^M\lowercase{\endgroup\let~}\cr}
\def\centeredpoem{\vbox to 0pt{\vspace*{1cm}\centerline{\box\poemtitlebox}\vss}
\vfill\centerline{\box\poembox}\vfill}
\def\displacedpoem{\vspace*{1cm}\centerline{\box\poemtitlebox}
\vfill\centerline{\box\poembox}\vspace*{1cm}}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]
\begin{poem}{La vispa Teresa\\\emph{Luigi Sailer}}
La vispa Teresa
avea tra l’erbetta
A volo sorpresa
gentil farfalletta
E tutta giuliva
stringendola viva
gridava distesa:
``L'ho presa! L'ho presa!''.
A lei supplicando
l'afflitta gridò:
``Vivendo, volando
che male ti fo?
Tu sì mi fai male
stringendomi l'ale!
Deh, lasciami! Anch'io
son figlia di Dio!''.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
\end{poem}
\lipsum[3-4]
\begin{poem}{La vispa Teresa\\\emph{Luigi Sailer}}
La vispa Teresa
avea tra l’erbetta
A volo sorpresa
gentil farfalletta
E tutta giuliva
stringendola viva
gridava distesa:
``L'ho presa! L'ho presa!''.
A lei supplicando
l'afflitta gridò:
``Vivendo, volando
che male ti fo?
Tu sì mi fai male
stringendomi l'ale!
Deh, lasciami! Anch'io
son figlia di Dio!''.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
\end{poem}
\begin{poem}{La vispa Teresa\\\emph{Luigi Sailer}}
La vispa Teresa
avea tra l’erbetta
A volo sorpresa
gentil farfalletta
E tutta giuliva
stringendola viva
gridava distesa:
``L'ho presa! L'ho presa!''.
A lei supplicando
l'afflitta gridò:
``Vivendo, volando
che male ti fo?
Tu sì mi fai male
stringendomi l'ale!
Deh, lasciami! Anch'io
son figlia di Dio!''.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
\end{poem}
\begin{poem}{La vispa Teresa\\\emph{Luigi Sailer}}
La vispa Teresa
avea tra l’erbetta
A volo sorpresa
gentil farfalletta
E tutta giuliva
stringendola viva
gridava distesa:
``L'ho presa! L'ho presa!''.
A lei supplicando
l'afflitta gridò:
``Vivendo, volando
che male ti fo?
Tu sì mi fai male
stringendomi l'ale!
Deh, lasciami! Anch'io
son figlia di Dio!''.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
Teresa pentita
allenta le dita:
``Va', torna all'erbetta,
gentil farfalletta''.
Confusa, pentita,
Teresa arrossì,
dischiuse le dita
e quella fuggì.
\end{poem}
\end{document}
使用诗包裹
\usepackage{verse}
\newenvironment{versepoem}[2]
{\newpage\newgeometry{margin=0pt}%
\sbox\poemtitlebox{\settitle{#1}}%
\settowidth{\versewidth}{#2}
\setbox\poembox=\vbox\bgroup\hsize=\versewidth
\begin{verse}[\versewidth]}
{\end{verse}\egroup\showthe\wd\poembox
\ifdim\dimexpr\ht\poemtitlebox+\ht\poembox>.7\pdfpageheight\relax
\displacedpoem
\else
\centeredpoem
\fi
\clearpage\restoregeometry}
...
\begin{versepoem}{La vispa Teresa (versepoem)\\\emph{Luigi Sailer}}{``L'ho presa! L'ho presa!''.}
La vispa Teresa\\
avea tra l’erbetta\\
A volo sorpresa\\
gentil farfalletta\\
E tutta giuliva\\
stringendola viva\\
gridava distesa:\\
``L'ho presa! L'ho presa!''.
A lei supplicando\\
l'afflitta gridò:\\
``Vivendo, volando\\
che male ti fo?\\
Tu sì mi fai male\\
stringendomi l'ale!\\
Deh, lasciami! Anch'io\\
son figlia di Dio!''.\\
Teresa pentita\\
allenta le dita:\\
``Va', torna all'erbetta,\\
gentil farfalletta''.\\
Confusa, pentita,\\
Teresa arrossì,\\
dischiuse le dita\\
e quella fuggì.
\end{versepoem}
环境versepoem
需要两个参数:标题和最宽诗句。除了环境的定义之外,前面的所有代码都是必需的poem
。当然也是\usepackage{verse}
必需的。
答案2
这verse
包提供了大量设置诗歌的方法。因此,对于设置诗歌本身,您可能应该使用它。verse
通过明确将诗句宽度设置为最长行的长度来处理水平居中。它不会自动执行此操作。
这是一份示例文档,供您参考。不过,长诗的垂直间距比较棘手;简单地将诗节换行即可\vfill
完成部分工作,但对于需要最小间隙的长诗则不然。
对于非常短的诗,这种格式看起来有点奇怪,在我看来,在这种情况下你可能想要\vfil
首先使用vfill
。
\documentclass{article}
\usepackage{verse}
\renewcommand{\poemtoc}{subsection}
\begin{document}
\poemtitle{A Limerick}
\settowidth{\versewidth}{There was an old party of Lyme}
\vfill
\begin{verse}[\versewidth]
There was an old party of Lyme \\
Who married three wives at one time. \\
\vin When asked: `Why the third?' \\
\vin He replied: `One’s absurd, \\
And bigamy, sir, is a crime.'
\end{verse}
\vfill
\end{document}