\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}

overleaf.com에서 모두 시도했지만 auctex오류는 동일하게 유지되었습니다.

이상하게도 구글링을 통해 발생한 '정의되지 않은 제어 순서' 오류와 관련된 내용을 찾을 수 없었습니다 \DeclareUnicodeCharacter. 분명히 TeX 엔진은 \DeclareUnicodeCharacter전혀 유효한 명령이 아니라고 생각하는 반면 문서 클래스 파일과 인터넷의 다양한 예제는 아무런 문제 없이 이 명령을 직접 사용하기 때문에 이것은 나에게 이해가 되지 않습니다 . 최신 버전의 TeX 엔진과 함께 사용할 때 문서 클래스 파일에 문제가 있습니까, 아니면 뭔가 잘못 구성했습니까?


편집: 컴파일 로그: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번째 줄이 포함되어 있습니다.~ 전에107번 라인에서 사용하므로 명시적 으로 해당 라인을 추가하지 않고도 \DeclareUnicodeCharacter컴파일할 수 있습니다 .sp-template.texpdflatex

하지만xelatex, 또는 lualatex엔진(유니코드 기반이며 기본값은 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"으로 시작하는 줄을 참고하세요. IMO에서는 이것이 대신 오류인 것이 합리적이지만 아마도 작성자는 로 작성된 많은 파일이 유니코드 기반에서 작업할 가능성이 있기 inputenc때문에 경고를 선택했을 것입니다. 단순히 아무것도 하지 않는 inputenc경우 엔진 inputenc.)

그래서 당신은 다음 중 하나를 수행해야합니다

  1. pdfTeX 엔진으로 파일을 컴파일하거나
  2. XeTeX/LuaTeX로 컴파일하려면 해킹하여 sp.cls다음 줄을 제거하세요.

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

    (이것은 처리하기 위해 추가되었습니다.하이픈 넣기 문제아마도 U+2011 이후에는 하이픈 넣기를 정의하는 사람이 아무도 없을 것이기 때문에 유니코드 기반 엔진에서는 사용하기 어려울 것입니다.\ifpdf "포스트스크립트가 아닌 출력"을 의미하지만 불행히도 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후자의 옵션을 선택해서는 안 됩니다. 일반적으로 저널에 논문을 제출하는 경우 스타일 파일을 망쳐서는 안 됩니다. 그러나 파일을 누구에게도 보낼 생각이 없고 단순히 재미를 위해 저널 스타일로 조판하는 경우에는 원하는 대로 할 수 있습니다.)

관련 정보