除了几何之外没有任何包

除了几何之外没有任何包

我将尝试说明我想要实现的目标。我想要一个像这样工作的诗歌环境/页面样式——标题(如果有)放置在标题占位符(紫色)中。

诗歌的主体位于页面的中央(灰色)。

在此处输入图片描述

这与诗歌的宽度或长度无关,直到从标题到诗歌的距离达到一定长度(绿色)。之后,中心移到下方,这样诗歌就会填满页面直至下边缘(蓝色)。

对于没有标题的诗歌,我应该能够选择将它们填充到标题占位符底部 - 绿线长度或直到标题占位符顶部。

基本上我应该能够测量诗歌中最宽的一行,然后如果将其放在与最宽行一样宽的框中,它会有多长。定位计算应该足够简单。我想我可以使用来定位我的框。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}

相关内容