Неопределенная ошибка последовательности управления в \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}

Я попробовал и с помощью auctexoverleaf.com, и на нем, но ошибка осталась прежней.

Странно, но я не смог найти ничего, связанного с ошибкой "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просто ничего не делает.)

Итак, вам нужно либо

  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файл кому-то еще, например, в журнал, то вам не следует выбирать последний вариант: и вообще, если вы отправляете статьи в журналы, вам не следует вмешиваться в их файлы стилей. Но если вы не собираетесь отправлять файл кому-либо и просто оформляете его в стиле журнала для собственного развлечения, вы можете делать все, что захотите.)

Связанный контент