
私はフランス語の伝統に従って長い引用文を書くために、最後にあるコードを使っています。このような長い引用文の中でフランス語の引用符を使うと、フランス語オプションで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
(基本的には のbabel
3.9 の定義を使用)、エラーは消えます。Polyglossia は\xpg@nospace
引数を読み込む を使用しますが、これが を混乱させる原因であると考えられますsoul
。
もちろん、これは LuaLaTeX では動作しません。そのためには が必要ですbabel
。しかし、私のアドバイスとしては、とにかく を使用することです。babel
特にバージョン 3.9 で XeLaTeX サポートが導入された今では、何も問題はありません。