
我使用一個代碼(可在末尾找到)用於法國傳統中的長引用。當我在這麼長的引文中使用法語引號時,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
(基本上是使用babel
3.9 的定義),錯誤消失。 Polyglossia 在那裡使用\xpg@nospace
讀取參數,這可能是令人困惑的地方soul
。
當然,這不適用於 LuaLaTeX,您需要babel
.不過,我的建議是無論如何都要使用babel
,這沒有什麼問題,特別是現在 3.9 版本引入了 XeLaTeX 支援。