歌曲包出現錯誤

歌曲包出現錯誤

這裡我從歌曲包手冊中取得了 LaTeX 代碼

\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}

早些時候它被用來成功運行,沒有任何錯誤,但更新包後它顯示錯誤訊息,如下所示 在此輸入影像描述

答案1

\usepackage{ifpdf}您可以透過新增before來解決該問題\usepackage[<options>]{songs}

由於最近添加了代碼,因此代碼失敗

\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
}

過去只使用“假”分支。問題在於「true」分支被放置在條件語句內。也就是說,定義為

\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}

由於ifpdf.sty在所有最近的完整 TeX 發行版中都找到了 ,因此\ifeof測試返回 false,因此\@iffileonpath{#1}{#2}{#3}跳過 行。這樣做時,TeX 仍然會記錄條件:因為它正在跳過

\@iffileonpath{ifpdf.sty}{\ifpdf\SB@pdftrue\fi}{...}

the\fi被視為匹配\ifx\input@path\@undefined,因為\ifpdf尚未定義為條件。

程式碼應該是,如果作者對提供(不太好的)測試很挑剔,以防ifpdf.sty找不到,

\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
}

相關內容