Я пытаюсь написать файл, используя файл класса документа, предоставленный журналом 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}
Я попробовал и с помощью auctex
overleaf.com, и на нем, но ошибка осталась прежней.
- «Пустой шаблон»:http://info.semprag.org/examples/sp-template.tex
- Файл класса документа:https://raw.githubusercontent.com/semprag/tex/master/sp.cls
Странно, но я не смог найти ничего, связанного с ошибкой "undefined control sequence", вызванной \DeclareUnicodeCharacter
гуглением. Для меня это не имеет смысла, поскольку, по-видимому, движки TeX просто считают, что \DeclareUnicodeCharacter
это вообще недопустимая команда, в то время как файл класса документа, а также различные примеры в Интернете просто используют эту команду напрямую без каких-либо проблем. Что-то не так с файлом класса документа при использовании с новейшей версией движка TeX, или я что-то неправильно настроил?
EDIT: Журнал компиляции: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,доон использует \DeclareUnicodeCharacter
строку 107, поэтому вы сможете скомпилировать 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
файл кому-то еще, например, в журнал, то вам не следует выбирать последний вариант: и вообще, если вы отправляете статьи в журналы, вам не следует вмешиваться в их файлы стилей. Но если вы не собираетесь отправлять файл кому-либо и просто оформляете его в стиле журнала для собственного развлечения, вы можете делать все, что захотите.)