![如何改变歌曲编号的位置?](https://linux22.com/image/378782/%E5%A6%82%E4%BD%95%E6%94%B9%E5%8F%98%E6%AD%8C%E6%9B%B2%E7%BC%96%E5%8F%B7%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%9F.png)
如何让只有页数为偶数时歌曲编号才显示在右侧?
\documentclass[10pt,a6paper,twoside]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage[chorded]{songs}
\usepackage{setspace}
\usepackage{import}
\usepackage{xpatch}
\usepackage[top=0.5in, bottom=0.7in, left=0.5in, right=0.5in]{geometry}
\makeatletter
\newcommand\myjustify{%%
\ifSB@inverse\advance\leftskip\versenumwidth\fi%
\SB@cbarshift%
\parindent12pt
}
\renewcommand\chorusjustify{\myjustify}
\newindex{titleidx}{cbtitle}
\newindex{temasidx}{temasidx}
\newauthorindex{authidx}{authidx}
\titleprefixword{¡}
\begin{document}
\begin{songs}{titleidx,authidx}
\songpos{0}
\setlength{\cbarwidth}{0 pt}
\versesep=2pt plus 1pt minus 1pt
\renewcommand{\chorusfont}{\it}
\noversenumbers
\onesongcolumn
\setlength{\songnumwidth}{0.9 cm}
\beginsong{ A Casa Vete}[
by={Anonimo},
sr={Marcos 5:19; Lucas 8:38,39},
cr={\copyright~2017.},
li={Usado con permiso}]
\indexentry[temasidx]{Predicacion}
\indexentry[temasidx]{Evangelio}
\beginverse\singlespacing
A casa vete, y cuenta allí
Que Cristo te libró;
Que tus amigos vean en tí
Lo que él, por gracia, obró.
\endverse
\beginchorus\singlespacing
A casa vete y lo que en ti
Ha hecho Dios, que vean,
Y puede ser que los de allí
Lo buscarán también
\endchorus
\beginverse\singlespacing
A casa vete, y cuenta allí
Que Cristo comprendió
Tu gran necesidad, y así
Su sangre derramó.
\endverse
\beginverse\singlespacing
Ve, cuenta a los de en derredor
Que él satisfará
Sus almas, puesto que en su amor
La cruz sufrido ha.
\endverse
\beginverse\singlespacing
Ve, cuenta a los de más allá
Que en Cristo hay perdón,
Y que él a todos salvará,
Si quieren salvación.
\endverse
\endsong
\beginscripture{Reina-Valera SBT Marcos 5:19}
Mas Jesús no se lo permitió, sino que le dijo: Vete a tu casa, a los tuyos,
y cuéntales cuán grandes cosas el Señor ha hecho contigo, y cómo tuvo misericordia de ti.
\endscripture
\beginsong{ A Jesuscristo ven}[
by={Anonimo},
sr={Revelation 1:1},
cr={\copyright~2017.},
li={Usado con permiso}]
\indexentry[temasidx]{Predicacion}
\indexentry[temasidx]{Evangelio}
\indexentry[temasidx]{Invitación}
\beginverse\singlespacing
A Jesucristo ven sin tardar,
Que entre nosotros hoy él está
Y te convida con dulce afán,
Tierno diciendo:``Ven".
\endverse
\beginchorus\singlespacing
¡Oh cuán grata nuestra reunión!
Cuando al fin en celestial mansión
Con él estemos en comunión,
Gozando eterno bien.
\endchorus
\beginverse\singlespacing
Piensa que él solo puede colmar
Tu triste pecho de gozo y paz,
Y porque anhela tu bienestar
Vuelve a decirte: ``Ven".
\endverse
\beginverse\singlespacing
Su voz escucha sin vacilar,
Y grato acepta lo que hoy te da;
Tal vez mañana no habrá lugar:
No te detengas, ven.
\endverse
\endsong
\end{songs}
\showindex{Indice de Himnos}{titleidx}
\showindex{Indice por autor}{authidx}
\showindex{Indice por temas}{temasidx}
\end{document}
答案1
这很棘手,因为 TeX 有时直到最后写入输出文件时才知道文档内容将打印在哪个页码上(例如,因为它在分页时做出最后一刻的决定将内容移到不同的页面)。解决这个问题的典型方法是编译文档两次,并要求 TeX 记住第一次编译时事物落在哪里,以预测它们在第二次编译时会落在哪里。
以下是针对您的情况的解决方案:
\newcommand\oldmakeprelude{}
\let\oldmakeprelude=\makeprelude
\newcommand\oddmakeprelude{\oldmakeprelude}
\newcommand\evenmakeprelude{\reversedprelude}
{\makeatletter\gdef\makeprelude{%
\expandafter\providecommand\csname songpage-\theSB@songsnum-\thesongnum\endcsname
{\thepage}%
\protected@write\@auxout{}{\string\expandafter\string\gdef
\protect\csname songpage-\theSB@songsnum-\thesongnum\string\endcsname{\thepage}}%
\ifodd\csname songpage-\theSB@songsnum-\thesongnum\endcsname\relax
\oddmakeprelude
\else
\evenmakeprelude
\fi
}}
然后我们只需要提供一个 的定义,\reversedprelude
它是 songs 包代码的副本\makeprelude
,只是末尾交换了歌曲编号和文本位置。以下是从该包的 3.0 版本中提取的此类定义:
\newcommand\reversedprelude{}
{\makeatletter\gdef\reversedprelude{%
\resettitles%
\ifslides%
\hbox to\hsize{{\hfil\stitlefont\relax\songtitle\hfil}}%
\vskip5\p@%
\hbox to\hsize{%
\hfil%
\vbox{%
\divide\hsize\tw@\parskip\p@\relax%
\centering\small\extendprelude%
}%
\hfil%
}%
\else%
\ifdim\songnumwidth>\z@%
\setbox\SB@boxii\hbox{{\SB@colorbox\snumbgcolor{%
\hbox to\songnumwidth{%
\printsongnum{\thesongnum}\hfil%
}%
}}}%
\fi%
\setbox\SB@box\vbox{%
\ifdim\songnumwidth>\z@%
\SB@dimen\wd\SB@boxii%
\advance\SB@dimen3\p@%
\ifpagepreludes\multiply\SB@dimen\tw@\fi%
\advance\hsize-\SB@dimen%
\fi%
\ifpagepreludes\centering\else\SB@raggedright\fi%
\offinterlineskip\lineskip\p@%
{\stitlefont\relax%
\songtitle\par%
\nexttitle%
\foreachtitle{(\songtitle)\par}}%
\ifdim\prevdepth=\z@\kern\p@\fi%
\parskip\p@\relax\tiny%
\extendprelude%
\kern\z@%
}%
\ifdim\songnumwidth>\z@%
\hbox{%
\ifdim\ht\SB@boxii>\ht\SB@box%
\vtop{\box\SB@box}%
\kern3\p@%
\box\SB@boxii%
\else%
\copy\SB@box%
\kern3\p@%
\SB@colorbox\snumbgcolor{\vbox to\ht\SB@box{{%
\hbox to\songnumwidth{%
\printsongnum{\thesongnum}\hfil%
}\vfil%
}}}%
\fi%
}%
\else%
\unvbox\SB@box%
\fi%
\fi%
}}
请记住,这可能会导致您的书籍更改后歌曲编号的位置不正确,直到您编译文档为止两次连续。