朋友们,请考虑使用以下代码songs
包裹:
\documentclass[a4paper]{book}
\usepackage[lyric]{songs}
\usepackage{lipsum}
\renewcommand{\chorusfont}{\bfseries}
\newindex{titleidx}{cbtitle}
\begin{document}
\showindex{My index}{titleidx}
\begin{songs}{titleidx}
\beginsong{My cool song}[
by={John Doe}]
\beginchorus
\lipsum[4]
\endchorus
\beginverse
\lipsum[4]
\endverse
\endsong
\end{songs}
\end{document}
我被副歌和诗歌中的这句歌词难住了:
我想让后面的几行与组的第一行对齐。我尝试过改变长度\versenumwidth
,但它定义了左侧为诗节编号保留的水平空间。此外,还有合唱缩进,我找不到任何有意义的东西。
有任何想法吗?
答案1
所涉及的长度为\leftskip
和 ,\parindent
它们由 命令使用,而 命令又由和\justifyleft
使用。一种可能的解决方案是重新定义,但也许原始定义在其他地方需要,因此我选择定义一个新命令(我称之为)供 和 使用,以产生所需的结果:\versejustify
\chorusjustify
\justifyleft
\myjustify
\versejustify
\chorusjustify
\documentclass[a4paper]{book}
\usepackage[lyric]{songs}
\usepackage{lipsum}
\renewcommand{\chorusfont}{\bfseries}
\newindex{titleidx}{cbtitle}
\makeatletter
\newcommand\myjustify{%%
\ifSB@inverse\advance\leftskip\versenumwidth\fi%
\SB@cbarshift%
\parindent0pt
}
\makeatother
\renewcommand\versejustify{\myjustify}
\renewcommand\chorusjustify{\myjustify}
\begin{document}
\showindex{My index}{titleidx}
\begin{songs}{titleidx}
\beginsong{My cool song}[
by={John Doe}]
\beginchorus
\lipsum[4]
\endchorus
\beginverse
\lipsum[3]
\endverse
\endsong
\end{songs}
\end{document}
答案2
看起来这是该软件包的预期行为。歌词被分成几行(或者它假设如此),如果歌词在页面上超过一行,则会缩进。与标准 TeX 不同,在歌曲环境中,换行符是非常重要。所以你需要做的就是决定在哪里换行,然后写下类似
\documentclass[a4paper]{book}
\usepackage[lyric]{songs}
\usepackage{lipsum}
\renewcommand{\chorusfont}{\bfseries}
\newindex{titleidx}{cbtitle}
\begin{document}
\showindex{My index}{titleidx}
\begin{songs}{titleidx}
\beginsong{My cool song}[
by={John Doe}]
\beginchorus
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
This is a very long line which is going to break if I'm not careful.
\endchorus
\beginverse
Here we go round the mulberry bush,
Mulberry bush, mulberry bush.
\endverse
\endsong
\end{songs}
\end{document}
但如果你仍然不想要任何缩进,即使是在虚线上,
\parindent=0pt
是你的朋友。