「! \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 for French の動作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 サポートが導入された今では、何も問題はありません。

関連情報