\DeclareUnicodeCharacter 處出現未定義的控制序列錯誤

\DeclareUnicodeCharacter 處出現未定義的控制序列錯誤

我正在嘗試使用 Semantics and Pragmatics 期刊提供的文檔類文件編寫一個文件http://info.semrag.org/style。但是,我什至無法編譯他們提供的範例模板...每當我嘗試LaTeX在其上運行時,都會收到以下錯誤:

ERROR: Undefined control sequence.

--- TeX said ---
./sp.cls:107:
Undefined control sequence.
<recently read> \DeclareUnicodeCharacter 

l.107 \DeclareUnicodeCharacter
                              {2011}{\mbox{-}\nobreak\hskip0pt}

我在auctexoverleaf.com 上嘗試過,但錯誤仍然存在。

奇怪的是,我找不到任何與\DeclareUnicodeCharacterGoogle搜尋引起的「未定義的控制序列」錯誤相關的內容。這對我來說沒有意義,因為顯然 TeX 引擎認為\DeclareUnicodeCharacter根本不是一個有效的命令,而文檔類文件以及互聯網上的各種示例只是直接使用這個命令,沒有任何問題。當與最新版本的 TeX 引擎一起使用時,文檔類文件是否有問題,或者我是否有配置錯誤?


編輯:編譯日誌:https://www.dropbox.com/s/49mkenzngua0we0/sp-template.log?dl=0

答案1

巨集\DeclareUnicodeCharacter定義在套件中inputenc當載入編碼utf8。所以通常在使用之前您需要以下行\DeclareUnicodeCharacter

\usepackage[utf8]{inputenc}

但在本例中,sp.cls已經包含\RequirePackage[utf8]{inputenc}第 103 行,它在第 107 行使用,因此即使不明確添加該行,\DeclareUnicodeCharacter您也應該能夠進行編譯sp-template.texpdflatex

然而,如果使用xelatexlualatex引擎(基於 Unicode 且預設為utf8)進行編譯,則該inputenc套件將被忽略,並且(僅)在錯誤日誌中列印警告:

% xelatex sp-template.tex
This is XeTeX, Version 3.14159265-2.6-0.99998 (TeX Live 2017) (preloaded format=xelatex)
 restricted \write18 enabled.
entering extended mode
(./sp-template.tex
LaTeX2e <2017-04-15>
Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
(./sp.cls
Document Class: sp 2015/01/04 v.3.0 Class for Semantics & Pragmatics
(/usr/local/texlive/2017/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2017/texmf-dist/tex/latex/base/size12.clo)) (/usr/local/texlive/2017/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty) (/usr/local/texlive/2017/texmf-dist/tex/latex/base/textcomp.sty (/usr/local/texlive/2017/texmf-dist/tex/latex/base/ts1enc.def)) (/usr/local/texlive/2017/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/local/texlive/2017/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/local/texlive/2017/texmf-dist/tex/latex/base/fontenc.sty (/usr/local/texlive/2017/texmf-dist/tex/latex/base/t1enc.def) (/usr/local/texlive/2017/texmf-dist/tex/latex/lm/t1lmr.fd)) (/usr/local/texlive/2017/texmf-dist/tex/latex/psnfss/mathptmx.sty) (/usr/local/texlive/2017/texmf-dist/tex/latex/base/inputenc.sty

Package inputenc Warning: inputenc package ignored with utf8 based engines.

)
! Undefined control sequence.
<recently read> \DeclareUnicodeCharacter 

l.107 \DeclareUnicodeCharacter
                              {2011}{\mbox{-}\nobreak\hskip0pt}
? 

(請注意以“Package inputenc warning”開頭的行。在我看來,這是一個錯誤是有道理的,但可能的作者inputenc選擇將其設為警告,因為使用 編寫的許多文件inputenc都有機會在基於Unicode的系統上工作引擎如果inputenc根本不做任何事。

所以你需要要么

  1. 使用 pdfTeX 引擎編譯您的文件,或者
  2. 如果您想使用 XeTeX/LuaTeX 進行編譯,請sp.cls刪除以下行:

    \DeclareUnicodeCharacter{2011}{\mbox{-}\nobreak\hskip0pt}
    

    (請注意,添加它是為了處理連字符問題對於基於 Unicode 的引擎來說不太可能有這種情況,因為大概沒有人會在 U+2011 之後定義連字符),而且這些行也用來\ifpdf表示“非 PostScript 輸出”,但不幸的是排除了 XeTeX但不是 LuaTeX(可以刪除它們,因為breakurl不需要):

    % If the author is using postscript (discouraged), then load the
    % breakurl package, else don't load it.
    \RequirePackage{ifpdf}
    \ifpdf
    \else
      \RequirePackage{breakurl}
    \fi
    

(請注意,如果您將原始.tex檔案發送給其他人,例如期刊,那麼您不應該選擇後一個選項:一般來說,如果您向期刊提交論文,您不應該弄亂他們的樣式檔案但如果您不打算將文件發送給任何人,而只是為了自己的娛樂而將其排版為期刊風格,那麼您可以做任何您喜歡的事情。

相關內容