我正在嘗試使用 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}
我在auctex
overleaf.com 上嘗試過,但錯誤仍然存在。
- 「空模板」:http://info.semprag.org/examples/sp-template.tex
- 文檔類文件:https://raw.githubusercontent.com/semprag/tex/master/sp.cls
奇怪的是,我找不到任何與\DeclareUnicodeCharacter
Google搜尋引起的「未定義的控制序列」錯誤相關的內容。這對我來說沒有意義,因為顯然 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.tex
。pdflatex
然而,如果使用xelatex
或lualatex
引擎(基於 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
根本不做任何事。
所以你需要要么
- 使用 pdfTeX 引擎編譯您的文件,或者
如果您想使用 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
檔案發送給其他人,例如期刊,那麼您不應該選擇後一個選項:一般來說,如果您向期刊提交論文,您不應該弄亂他們的樣式檔案但如果您不打算將文件發送給任何人,而只是為了自己的娛樂而將其排版為期刊風格,那麼您可以做任何您喜歡的事情。