使用 Verse 包和行号

使用 Verse 包和行号

有人有办法让行号只显示在行的第一部分吗verse?一个简化的例子:

\documentclass[11pt, a5paper]{article}
\usepackage{verse}
\begin{document}
\settowidth{\versewidth}{That the mountains may bring prosperity t\'o the p\'eople,}
\begin{verse}[\versewidth]
\verselinenumbersleft
\poemlines{1}
I will bless the L\'ord at \'all times; *\\>
his praise shall e\underline{\textit{ver}} b\'e in m\'y mouth.\\!
I will gl\'ory \'in the Lord; *\\>
let the hum\underline{\textit{ble}} h\'ear and r\'ejoice.\\!
Proclaim with me the gr\'eatness \'of the Lord; *\\>
let us exalt \underline{his} n\'ame tog\'ether.\\!
\end{verse}
\end{document}

这给了我每行诗句重复的诗句编号。我只希望每个数字的第一个出现。我认为我对要verse使用的包没有任何特别的依赖,所以其他路线可能会更好!

答案1

verse包裹重新定义\\为在其后提供的选项数作为条件。但是,无论选择什么,它总是先打印数字。

我们可以通过重新定义什么\\来干预。由于\\在其他各个地方(不仅仅是在环境内部verse)使用,因此该包将其定义为其他地方的一部分\@vscentercr。下面的重新定义将行号部分移动到提供所需输出的位置:

在此处输入图片描述

\documentclass{article}

\usepackage{verse}

\makeatletter
\renewcommand{\@vscentercr}{%
  \ifhmode \unskip\else \@nolnerr\fi
  \@vsifgt{\@vstypelinenum\verselinebreak}{%
    \incr@vsline
    \par\@ifstar{\nobreak\@vsxcentercr}{%
      \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}%
    }%
  }%
}
\makeatother

\begin{document}

\settowidth{\versewidth}{That the mountains may bring prosperity t\'o the p\'eople,}
\begin{verse}[\versewidth]
  \verselinenumbersleft
  \poemlines{1}
  I will bless the L\'ord at \'all times; *\\>
  his praise shall e\underline{\textit{ver}} b\'e in m\'y mouth.\\!
  I will gl\'ory \'in the Lord; *\\>
  let the hum\underline{\textit{ble}} h\'ear and r\'ejoice.\\!
  Proclaim with me the gr\'eatness \'of the Lord; *\\>
  let us exalt \underline{his} n\'ame tog\'ether.\\!
\end{verse}

\end{document}

下列etoolbox补丁对提供了类似的重新定义\@vscentercr

\usepackage{etoolbox}

\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\@vscentercr}{\@vstypelinenum}{}{}{}
\patchcmd{\@vscentercr}{\verselinebreak}{\@vstypelinenum\verselinebreak}{}{}
\makeatother

相关内容