“! \xpg@nospace의 인수에 폴리글로시아가 포함된 추가 }” 오류 메시지가 있습니다.

“! \xpg@nospace의 인수에 폴리글로시아가 포함된 추가 }” 오류 메시지가 있습니다.

나는 프랑스 전통의 긴 인용을 위해 마지막에 있는 코드를 사용합니다. 이렇게 긴 인용문 안에 프랑스어 따옴표를 사용할 때 프랑스어 옵션을 xetex로드하면 컴파일에 문제가 없으며 babel오류 메시지가 나타납니다.

\xpg@nospace의 인수에는 추가 }가 있습니다.

로드할 때 polyglossia. lualatex,다음으로 시작하는 다른 오류 메시지를 사용하여 컴파일할 때도 마찬가지입니다.

패키지 소울 오류: 재구성에 실패했습니다.

문서의 서문에 정의하면 문제가 사라집니다.

\newcommand*{\og}{«{}} \newcommand*{\fg}{{}»}

그리고 긴 인용 안의 프랑스어 인용 부호가 다음 과 같이 바뀌면 \og\fg

polyglossia그래서 나는 와 soul– 또는 나의 사용 방식 사이에 약간의 충돌이 있다고 생각합니다 soul. 처음에 fr.comp.text.tex에 게시했지만 해결책을 얻지 못했습니다.

감사합니다, B. 알폰시

코드(및 최소한의 예):

\documentclass[a4paper,11pt, twoside]{article} 

\usepackage{fontspec}% f 
 \setmainfont{Minion Pro}% 
 %\usepackage[french]{babel} 
 \usepackage{polyglossia} 
 \setmainlanguage{french} 

\usepackage{soulutf8} 
 \usepackage {kvsetkeys} 
 \makeatletter 
 \newsavebox \citeguill@box 
 \define@key {citeguill}{left}[\guillemotleft]{\def\citeguill@left {#1}} 
 \define@key {citeguill}{right}[\guillemotright]{\def\citeguill@right {#1}} 
 \define@key {citeguill}{middle}[\hskip -\fontdimen2\font\mbox \guillemotright\hskip\fontdimen2\font]{\def\citeguill@middle 
 {\setbox\citeguill@box =\hbox {#1}\def\citeguill@middle {\copy 
 \citeguill@box }}% 
 }% \KV@citeguill@middle 
 \newcommand*\citeguillsetup [1]{\def\citeguill@setup {\kvsetkeys 
 {citeguill}{#1}}} 
 \let\citeguill@setup =\relax % 

\newcommand*\citeguill [1][]{% 
 \kvsetkeys{citeguill}{left,right,middle}\citeguill@setup% 
 \kvsetkeys{citeguill}{#1}% 
 \SOUL@setup% 
 \def\SOUL@preamble {\citeguill@middle \citeguill@left }% 
 \def\SOUL@postamble {\citeguill@right }% 
 \def\SOUL@everysyllable {\the\SOUL@syllable }% 
 \def\SOUL@everyspace ##1{##1\nobreak \ 
 \discretionary {\kern-\fontdimen 2\font } 
 {\citeguill@middle } 
 {}}% 
 \def\SOUL@everyhyphen {\discretionary% 
 {\SOUL@setkern \SOUL@hyphkern \SOUL@sethyphenchar } 
 {\citeguill@middle } 
 {}}% 
 \def\SOUL@everyexhyphen ##1{\SOUL@setkern \SOUL@hyphkern 
 \hbox{##1}\discretionary {} 
 {\citeguill@middle } 
 {\SOUL@setkern \SOUL@charkern }}% 
 \SOUL@% 
 }% \citeguill 
 \makeatother 

\begin{document} 

Pour conclure, les rédacteurs de \emph{L’Anti-Mythes} résument bien la question BHL 
telle qu’elle se pose à l’automne 1977 : \citeguill{Que le cynisme séduise, que la 
bêtise paie et que la mode soit au renouveau des idées les plus réactionnaires, cela 
ne suffit pas à expliquer l’extraordinaire exploitation par les médias du phénomène 
«nouveaux philosophes», ni leur impressionnant succès commercial.} 

\end{document}

답변1

이는 길레메와 관련하여 프랑스어용 Polyglossia에서 기능이 구현되는 soul방식과 작동 방식이 호환되지 않는 것 같습니다 .\XeTeXinterchartoks

서문 마지막에 이렇게 말하면

\makeatletter
\appto\blockextras@french{%
  \XeTeXinterchartoks \french@punctguillstart 4095 = {\nobreakspace\ignorespaces}%
}
\appto\inlineextras@french{%
  \XeTeXinterchartoks \french@punctguillstart 4095 = {\nobreakspace\ignorespaces}%
}
\makeatother

(기본적으로 babel's 3.9 정의 사용) 오류가 사라집니다. Polyglossia는 \xpg@nospace논쟁을 읽는 데 사용하는데, 이것이 아마도 혼란을 야기할 것입니다 soul.

물론 이것은 LuaLaTeX에서는 작동하지 않습니다 babel. 그러나 내 조언은 babel어쨌든 사용하라는 것입니다. 특히 버전 3.9에 XeLaTeX 지원이 도입되었으므로 아무런 문제가 없습니다.

관련 정보