Se produjo un error en el paquete de canciones.

Se produjo un error en el paquete de canciones.

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. ingrese la descripción de la imagen aquí

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.styse encuentra en todas las distribuciones TeX completas recientes, la prueba devuelve falso, por lo que se omite \ifeofla 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 \ficonsidera coincidente \ifx\input@path\@undefinedporque \ifpdfaú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.styno 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
}

información relacionada