Ich versuche, eine Datei mit der Dokumentklassendatei zu schreiben, die von der Zeitschrift Semantics and Pragmatics bereitgestellt wird unterhttp://info.semprag.org/style. Allerdings kann ich die bereitgestellte Beispielvorlage nicht einmal kompilieren ... Immer wenn ich versuche, LaTeX
sie auszuführen, erhalte ich die folgende Fehlermeldung:
ERROR: Undefined control sequence.
--- TeX said ---
./sp.cls:107:
Undefined control sequence.
<recently read> \DeclareUnicodeCharacter
l.107 \DeclareUnicodeCharacter
{2011}{\mbox{-}\nobreak\hskip0pt}
Ich habe es sowohl mit auctex
als auch auf overleaf.com versucht, aber der Fehler blieb derselbe.
- Die „leere Vorlage“:http://info.semprag.org/examples/sp-template.tex
- Die Dokumentklassendatei:https://raw.githubusercontent.com/semprag/tex/master/sp.cls
Seltsamerweise konnte ich beim Googeln nichts zum Fehler „undefinierte Steuersequenz“ finden \DeclareUnicodeCharacter
. Das ergibt für mich keinen Sinn, da die TeX-Engines anscheinend einfach denken, dass es sich \DeclareUnicodeCharacter
überhaupt nicht um einen gültigen Befehl handelt, während die Dokumentklassendatei sowie verschiedene Beispiele im Internet diesen Befehl direkt und ohne Probleme verwenden. Stimmt etwas mit der Dokumentklassendatei nicht, wenn sie mit der neuesten Version der TeX-Engine verwendet wird, oder habe ich etwas falsch konfiguriert?
BEARBEITEN: Das Kompilierungsprotokoll:https://www.dropbox.com/s/49mkenzngua0we0/sp-template.log?dl=0
Antwort1
Das Makro \DeclareUnicodeCharacter
ist im Paket definiertinputenc
beim Laden mit der utf8
KodierungNormalerweise benötigen Sie daher vor der Verwendung die folgende Zeile \DeclareUnicodeCharacter
:
\usepackage[utf8]{inputenc}
In diesem Fall sp.cls
enthält das jedoch bereits die Zeile \RequirePackage[utf8]{inputenc}
in Zeile 103,VorEs wird \DeclareUnicodeCharacter
in Zeile 107 verwendet, daher sollten Sie in der Lage sein, sp-template.tex
damit zu kompilieren pdflatex
, auch ohne die Zeile explizit hinzuzufügen.
Jedochxelatex
, wenn Sie mit den Engines oder kompilieren lualatex
(die Unicode-basiert sind und standardmäßig verwenden utf8
), wird das inputenc
Paket ignoriert und (nur) eine Warnung in das Fehlerprotokoll gedruckt:
% 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}
?
(Beachten Sie die Zeile, die mit „Package inputenc warning“ beginnt. Meiner Meinung nach ist es sinnvoll, dass dies stattdessen ein Fehler ist, aber wahrscheinlich haben die Autoren von sich inputenc
entschieden, daraus eine Warnung zu machen, weil viele mit geschriebene Dateien inputenc
möglicherweise auf Unicode-basierten Engines funktionieren, wenn inputenc
einfach nichts passiert.)
Sie müssen also entweder
- Kompilieren Sie Ihre Datei mit der pdfTeX-Engine, oder
wenn Sie mit XeTeX/LuaTeX kompilieren möchten,
sp.cls
entfernen Sie die folgende Zeile:\DeclareUnicodeCharacter{2011}{\mbox{-}\nobreak\hskip0pt}
(Beachten Sie, dass es hinzugefügt wurde, umein Silbentrennungsproblemwas bei einer Unicode-basierten Engine wahrscheinlich nicht der Fall ist, da vermutlich niemand die Silbentrennung nach U+2011 definieren würde) und auch diese Zeilen, die normalerweise
\ifpdf
„Nicht-PostScript-Ausgabe“ bedeuten, aber leider XeTeX ausschließenaber nicht LuaTeX(Sie können entfernt werden, weilbreakurl
wird nicht benötigt):% If the author is using postscript (discouraged), then load the % breakurl package, else don't load it. \RequirePackage{ifpdf} \ifpdf \else \RequirePackage{breakurl} \fi
(Beachten Sie, dass Sie die letztere Option nicht wählen sollten, wenn Sie die Quelldatei an jemand anderen senden .tex
, z. B. an die Zeitschrift. Und wenn Sie Artikel an Zeitschriften senden, sollten Sie deren Stildateien im Allgemeinen nicht verändern. Wenn Sie die Datei jedoch an niemanden senden und sie nur zu Ihrem eigenen Vergnügen im Stil der Zeitschrift setzen, können Sie tun, was Sie wollen.)