有人有办法让行号只显示在行的第一部分吗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