」! \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

關於 guillemets,這似乎是法語 Polyglossia 中soul該功能的工作原理和實現方式之間的不相容。\XeTeXinterchartoks

如果我在序言末尾說

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

(基本上是使用babel3.9 的定義),錯誤消失。 Polyglossia 在那裡使用\xpg@nospace讀取參數,這可能是令人困惑的地方soul

當然,這不適用於 LuaLaTeX,您需要babel.不過,我的建議是無論如何都要使用babel,這沒有什麼問題,特別是現在 3.9 版本引入了 XeLaTeX 支援。

相關內容