\DeclareUnicodeCharacter で未定義の制御シーケンス エラーが発生しています

\DeclareUnicodeCharacter で未定義の制御シーケンス エラーが発生しています

私は、ジャーナル「Semantics and Pragmatics」で提供されているドキュメントクラスファイルを使用してファイルを書き込もうとしています。http://info.semprag.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}

overleaf.comと の両方を試しましたauctexが、エラーは同じままでした。

不思議なことに、Google で検索しても「未定義の制御シーケンス」エラーに関連するものは見つかりませんでした\DeclareUnicodeCharacter。これは私には理解できません。どうやら TeX エンジンはこれをまったく\DeclareUnicodeCharacter有効なコマンドではないと考えているようですが、ドキュメント クラス ファイルやインターネット上のさまざまな例では、このコマンドを問題なく直接使用しています。最新バージョンの TeX エンジンで使用するとドキュメント クラス ファイルに何か問題があるのでしょうか、それとも私が何かを誤って構成したのでしょうか。


編集: コンパイルログ:https://www.dropbox.com/s/49mkenzngua0we0/sp-template.log?dl=0

答え1

マクロは\DeclareUnicodeCharacterパッケージ内で定義されるinputencutf8エンコードをロードするとしたがって、通常は を使用する前に次の行が必要です\DeclareUnicodeCharacter

\usepackage[utf8]{inputenc}

しかし、この場合は、すでに103行目にsp.cls行が含まれています。\RequirePackage[utf8]{inputenc}前に107 行目でを使用しているため、明示的に行を追加しなくても\DeclareUnicodeCharacterコンパイルできるはずですsp-template.texpdflatex

しかしxelatex、またはlualatexエンジン (Unicode ベースでデフォルトは)を使用してコンパイルするとutf8inputencパッケージは無視され、エラー ログに警告のみが出力されます。

% 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」で始まる行に注意してください。これはエラーである方が理にかなっていると思いますが、で作成された多くのファイルは、 が何もしない場合でも Unicode ベースのエンジンで動作する可能性があるため、 の作成者はinputencこれを警告にすることを選択したと思われます。)inputencinputenc

だから、あなたは

  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、後者のオプションを選択しないでください。また、一般に、ジャーナルに論文を投稿する場合は、ジャーナルのスタイル ファイルを変更しないでください。ただし、ファイルを誰にも送信せず、単に自分の楽しみのためにジャーナルのスタイルでタイプセットする場合は、好きなようにできます。)

関連情報