私は、ジャーナル「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
が、エラーは同じままでした。
- 「空のテンプレート」:http://info.semprag.org/examples/sp-template.tex
- ドキュメント クラス ファイル:https://raw.githubusercontent.com/semprag/tex/master/sp.cls
不思議なことに、Google で検索しても「未定義の制御シーケンス」エラーに関連するものは見つかりませんでした\DeclareUnicodeCharacter
。これは私には理解できません。どうやら TeX エンジンはこれをまったく\DeclareUnicodeCharacter
有効なコマンドではないと考えているようですが、ドキュメント クラス ファイルやインターネット上のさまざまな例では、このコマンドを問題なく直接使用しています。最新バージョンの TeX エンジンで使用するとドキュメント クラス ファイルに何か問題があるのでしょうか、それとも私が何かを誤って構成したのでしょうか。
編集: コンパイルログ:https://www.dropbox.com/s/49mkenzngua0we0/sp-template.log?dl=0
答え1
マクロは\DeclareUnicodeCharacter
パッケージ内で定義されるinputenc
utf8
エンコードをロードするとしたがって、通常は を使用する前に次の行が必要です\DeclareUnicodeCharacter
。
\usepackage[utf8]{inputenc}
しかし、この場合は、すでに103行目にsp.cls
行が含まれています。\RequirePackage[utf8]{inputenc}
前に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」で始まる行に注意してください。これはエラーである方が理にかなっていると思いますが、で作成された多くのファイルは、 が何もしない場合でも Unicode ベースのエンジンで動作する可能性があるため、 の作成者はinputenc
これを警告にすることを選択したと思われます。)inputenc
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
、後者のオプションを選択しないでください。また、一般に、ジャーナルに論文を投稿する場合は、ジャーナルのスタイル ファイルを変更しないでください。ただし、ファイルを誰にも送信せず、単に自分の楽しみのためにジャーナルのスタイルでタイプセットする場合は、好きなようにできます。)