
Aquí he tomado el código LaTeX del manual del paquete de canciones.
\documentclass{article}
\usepackage[chorded]{songs}
\noversenumbers
\begin{document}
\songsection{Worship Songs}
\begin{songs}{}
\beginsong{Doxology}[by={Louis Bourgeois and Thomas Ken}, sr={Revelation 5:13}, cr={Public domain.}]
\beginverse
\[G]Praise God, \[D]from \[Em]Whom \[Bm]all \[Em]bless\[D]ings \[G]flow;
\[G]Praise Him, all \[D]crea\[Em]tures \[C]here \[G]be\[D]low;
\[Em]Praise \[D]Him \[G]a\[D]bove, \[G]ye \[C]heav’n\[D]ly \[Em]host;
\[G]Praise Fa\[Em]ther, \[D]Son, \[Am]and \[G/B G/C]Ho\[D]ly \[G]Ghost.
\[C]A\[G]men.
\endverse
\endsong
\end{songs}
\end{document}
Anteriormente se utilizaba para ejecutarse correctamente sin ningún error, pero después de actualizar los paquetes muestra mensajes de error como se muestra a continuación.
Respuesta1
Resuelve el problema agregando \usepackage{ifpdf}
antes \usepackage[<options>]{songs}
.
El código falla debido a lo agregado recientemente.
\IfFileExists{ifpdf.sty}{\RequirePackage{ifpdf}\ifpdf\SB@pdftrue\fi}{
\ifx\pdfoutput\undefined\else
\ifx\pdfoutput\relax\else
\ifnum\pdfoutput<\@ne\else
\SB@pdftrue
\fi
\fi
\fi
}
En el pasado sólo se utilizaba la rama "falsa". El problema es que la rama "verdadera" se coloca dentro de un condicional. Es decir, la definición dice
\long\def \IfFileExists#1#2#3{%
\openin\@inputcheck#1 %
\ifeof\@inputcheck
\ifx\input@path\@undefined
\def\reserved@a{#3}%
\else
\def\reserved@a{\@iffileonpath{#1}{#2}{#3}}%
\fi
\else
\closein\@inputcheck
\edef\@filef@und{#1 }%
\def\reserved@a{#2}%
\fi
\reserved@a}
Dado que ifpdf.sty
se encuentra en todas las distribuciones TeX completas recientes, la prueba devuelve falso, por lo que se omite \ifeof
la línea con . \@iffileonpath{#1}{#2}{#3}
Al hacerlo, TeX todavía toma notas de los condicionales: dado que se salta
\@iffileonpath{ifpdf.sty}{\ifpdf\SB@pdftrue\fi}{...}
se \fi
considera coincidente \ifx\input@path\@undefined
porque \ifpdf
aún no se ha definido como condicional.
El código debería ser, si el autor es exigente en proporcionar una prueba (no tan buena) en caso de que ifpdf.sty
no se encuentre,
\IfFileExists{ifpdf.sty}{\RequirePackage{ifpdf}\csname ifpdf\endcsname\SB@pdftrue\csname fi\endcsname}{
\ifx\pdfoutput\undefined\else
\ifx\pdfoutput\relax\else
\ifnum\pdfoutput<\@ne\else
\SB@pdftrue
\fi
\fi
\fi
}