폴리글로시아 + 출력 루틴 = 파일 쓰기 시 잘못된 확장(???)

폴리글로시아 + 출력 루틴 = 파일 쓰기 시 잘못된 확장(???)

다음 사용자 정의 클래스를 사용하는 경우:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{upecha}[2014/09/21 v0.8 tibetan modern pecha class]
\input{size11.clo}
\def\@outputpage{\shipout\vbox{\box\@outputbox}}

다음 테스트 파일로

\documentclass{myclass}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\begin{document}
a
\end{document}

나는 얻다

(./testbug1.aux
! Missing control sequence inserted.
<inserted text> 
\inaccessible 
l.2 ...phenmin =\tw@ \righthyphenmin =\thr@@ \edef e
                                              nglish{english}\def tt{tt}...
?

다음을 포함하는 aux 파일을 사용합니다.

\protect \language =\z@ \lefthyphenmin =\tw@ \righthyphenmin =\thr@@ \edef english{english}\def tt{tt}\def sf{sf}\edef {}\edef English{English}\protect \relax \protect \edef lmr{lmr}\protect \xdef \EU2/lmr/m/n/10.95 {\EU2/lmr/m/n/10.95 }\EU2/lmr/m/n/10.95 \size@update \enc@update \def rm{rm}\language =\l@english \def 21{21}\def September{September}\def September 21, 2014{September 21, 2014}\lefthyphenmin 2\relax \righthyphenmin 3\relax \relax \def Preface{Preface}\def References{References}\def Abstract{Abstract}\def Bibliography{Bibliography}\def Chapter{Chapter}\def Appendix{Appendix}\def Contents{Contents}\def List of Figures{List of Figures}\def List of Tables{List of Tables}\def Index{Index}\def Figure{Figure}\def Table{Table}\def Part{Part}\def encl{encl}\def cc{cc}\def To{To}\def Page{Page}\def see{see}\def see also{see also}\def Proof{Proof}

포함해야 하는 동안

\select@language {english}

aux 파일의 잘못된 정의는 select@language.

나는 polyglossia.sty에서 다음 줄을 비난하고 싶은 유혹을 받았습니다.

\protected@write\@auxout{}{\protect\select@language{#1}}%

\protect으로 바꾸면 \string모든 것이 다시 작동하기 때문입니다. 하지만 가장 이상한 점은 해당 줄에 주석을 달면 이 동작이 사라진다는 것입니다.

\def\@outputpage{\shipout\vbox{\box\@outputbox}}

내 수업 파일에. 또한 기사 클래스를 사용하여 문서에 이 줄을 추가하면 이 오류가 표시되지 않습니다.

그렇다면 여기서 누가 틀렸는가? 내 코드, LaTeX 코어 또는 폴리글로시아? (LuaTeX와 XeLaTeX는 여기서 동일한 동작을 하기 때문에 엔진에서 나온 것이라고는 말할 수 없습니다...)

감사합니다!

답변1

LaTeX 커널은 이에 대해 몇 가지 예방 조치를 취합니다.

\documentclass{myclass}
\usepackage{polyglossia}
\setdefaultlanguage{english}

\makeatletter
\def\@outputpage{%
  \begingroup
  \let\protect\noexpand
  \@resetactivechars
  \shipout\vbox{
    \set@typeset@protect
    \aftergroup \endgroup
    \aftergroup \set@typeset@protect
    \box\@outputbox
  }%
}
\makeatother

\begin{document}
a
\end{document}

여기에 필요한 source2e.pdf이유 와 속임수가 사용되는 이유는 334페이지를 참조하세요 .\let\protect\noexpand\aftergroup

관련 정보