Error de secuencia de control no definido en \DeclareUnicodeCharacter

Error de secuencia de control no definido en \DeclareUnicodeCharacter

Estoy intentando escribir un archivo utilizando el archivo de clase de documento proporcionado por la revista Semantics and Pragmatics enhttp://info.semprag.org/style. Sin embargo, ni siquiera puedo compilar la plantilla de ejemplo que proporcionan... Siempre que intento ejecutarla LaTeX, aparece el siguiente error:

ERROR: Undefined control sequence.

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

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

Lo intenté con auctexy en overleaf.com pero el error siguió siendo el mismo.

Curiosamente, no pude encontrar nada relacionado con el error de "secuencia de control indefinida" causado por \DeclareUnicodeCharacterbuscar en Google. Esto no tiene sentido para mí ya que aparentemente los motores TeX simplemente piensan que \DeclareUnicodeCharacterno es un comando válido en absoluto, mientras que el archivo de clase de documento, así como varios ejemplos en Internet, simplemente usan este comando directamente sin ningún problema. ¿Hay algún problema con el archivo de clase de documento cuando se usa con la versión más reciente del motor TeX o configuré mal algo?


EDITAR: El registro de compilación:https://www.dropbox.com/s/49mkenzngua0we0/sp-template.log?dl=0

Respuesta1

La macro \DeclareUnicodeCharacterestá definida en el paquete.inputenccuando se carga con la utf8codificación. Normalmente necesitas la siguiente línea antes de usar \DeclareUnicodeCharacter:

\usepackage[utf8]{inputenc}

Sin embargo, en este caso, sp.clsya contiene la línea \RequirePackage[utf8]{inputenc}103,antesse utiliza \DeclareUnicodeCharacteren la línea 107, por lo que debería poder compilar sp-template.texincluso pdflatexsin agregar explícitamente la línea.

Sin embargo, si compila con los motores xelatexo lualatex(que están basados ​​en Unicode y por defecto son utf8), entonces el inputencpaquete se ignora y (solo) se imprime una advertencia en el registro de errores:

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

(Tenga en cuenta la línea que comienza con "Advertencia de entrada de paquete". En mi opinión, tiene sentido que esto sea un error, pero probablemente los autores inputencoptaron por convertirlo en una advertencia porque muchos archivos escritos con inputenctienen la posibilidad de funcionar en formato Unicode. motores si inputencsimplemente no hace nada.)

Entonces necesitas

  1. compila tu archivo con el motor pdfTeX, o
  2. Si deseas compilar con XeTeX/LuaTeX, hackea sp.clspara eliminar la siguiente línea:

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

    (tenga en cuenta que se agregó para tratar conun problema de separación de palabrasque es poco probable que tenga con un motor basado en Unicode ya que presumiblemente nadie definiría la separación de palabras después de U+2011) y también estas líneas que suelen \ifpdfsignificar "salida no PostScript" pero desafortunadamente excluye XeTeXpero no LuaTeX(Está bien eliminarlos porquebreakurlno es necesario):

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

(Tenga en cuenta que si envía el .texarchivo fuente a otra persona, como la revista, entonces no debe elegir la última opción: y, en general, si envía artículos a revistas, no debe alterar sus archivos de estilo. . Pero si no vas a enviar el archivo a nadie y simplemente lo vas a componer al estilo del diario para tu propia diversión, puedes hacer lo que quieras.)

información relacionada