Erro de sequência de controle indefinido em \DeclareUnicodeCharacter

Erro de sequência de controle indefinido em \DeclareUnicodeCharacter

Estou tentando escrever um arquivo usando o arquivo de classe de documento fornecido pela revista Semantics and Pragmatics emhttp://info.semprag.org/style. No entanto, não consigo nem compilar o modelo de exemplo que eles fornecem... Sempre que tento executá LaTeX-lo, recebo o seguinte erro:

ERROR: Undefined control sequence.

--- TeX said ---
./sp.cls:107:
Undefined control sequence.
<recently read> \DeclareUnicodeCharacter 

l.107 \DeclareUnicodeCharacter
                              {2011}{\mbox{-}\nobreak\hskip0pt}

Tentei com auctexe em overleaf.com, mas o erro permaneceu o mesmo.

Estranhamente, não consegui encontrar nada relacionado ao erro de "sequência de controle indefinida" causado pelo \DeclareUnicodeCharacterGoogle. Isso não faz sentido para mim, já que aparentemente os motores TeX simplesmente acham que \DeclareUnicodeCharacternão é um comando válido, enquanto o arquivo de classe do documento, bem como vários exemplos na Internet, apenas usam esse comando diretamente, sem qualquer problema. Há algo errado com o arquivo de classe do documento quando usado com a versão mais recente do mecanismo TeX ou configurei algo incorretamente?


EDIT: O log de compilação:https://www.dropbox.com/s/49mkenzngua0we0/sp-template.log?dl=0

Responder1

A macro \DeclareUnicodeCharacteré definida no pacoteinputencquando carregado com a utf8codificação. Então normalmente você precisa da seguinte linha antes de usar \DeclareUnicodeCharacter:

\usepackage[utf8]{inputenc}

Neste caso, porém, o sp.clsjá contém a linha \RequirePackage[utf8]{inputenc}na linha 103,antesele usa \DeclareUnicodeCharacterna linha 107, então você deve ser capaz de compilar sp-template.texmesmo pdflatexsem adicionar explicitamente a linha.

No entanto, se você compilar com os motores xelatexou lualatex(que são baseados em Unicode e o padrão é utf8), o inputencpacote será ignorado e (apenas) um aviso será impresso no log de erros:

% 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}
? 

(Observe a linha que começa com "Package inputenc warning". Na IMO, faz sentido que isso seja um erro, mas provavelmente os autores inputencoptaram por torná-lo um aviso porque muitos arquivos escritos com inputenctêm chance de funcionar em Unicode-based motores se inputencsimplesmente não fizer nada.)

Então você precisa

  1. compilar seu arquivo com o mecanismo pdfTeX, ou
  2. se você deseja compilar com XeTeX/LuaTeX, hackeie sp.clspara remover a seguinte linha:

    \DeclareUnicodeCharacter{2011}{\mbox{-}\nobreak\hskip0pt}
    

    (observe que foi adicionado para lidar comum problema de hifenizaçãoque é improvável que você tenha com um mecanismo baseado em Unicode, pois provavelmente ninguém definiria a hifenização após U+2011) e também essas linhas que significam \ifpdf“saída não-PostScript”, mas infelizmente excluem XeTeXmas não LuaTeX(eles podem ser removidos porquebreakurlNão é necessário):

    % If the author is using postscript (discouraged), then load the
    % breakurl package, else don't load it.
    \RequirePackage{ifpdf}
    \ifpdf
    \else
      \RequirePackage{breakurl}
    \fi
    

(Observe que se você estiver enviando o .texarquivo fonte para outra pessoa, como o periódico, então você não deve escolher a última opção: e em geral, se você estiver enviando artigos para periódicos, você não deve mexer com seus arquivos de estilo . Mas se você não vai enviar o arquivo para ninguém e está simplesmente compondo-o no estilo do diário para sua própria diversão, você pode fazer o que quiser.)

informação relacionada