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
오류는 동일하게 유지되었습니다.
- "빈 템플릿":http://info.semprag.org/examples/sp-template.tex
- 문서 클래스 파일:https://raw.githubusercontent.com/semprag/tex/master/sp.cls
이상하게도 구글링을 통해 발생한 '정의되지 않은 제어 순서' 오류와 관련된 내용을 찾을 수 없었습니다 \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.tex
pdflatex
하지만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
.)
그래서 당신은 다음 중 하나를 수행해야합니다
- pdfTeX 엔진으로 파일을 컴파일하거나
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
후자의 옵션을 선택해서는 안 됩니다. 일반적으로 저널에 논문을 제출하는 경우 스타일 파일을 망쳐서는 안 됩니다. 그러나 파일을 누구에게도 보낼 생각이 없고 단순히 재미를 위해 저널 스타일로 조판하는 경우에는 원하는 대로 할 수 있습니다.)