我使用一个代码(可在末尾找到)来表示法语传统的长引文。当我在这么长的引文中使用法语引号时,xetex
如果我babel
使用法语选项加载,编译时不会出现任何问题,错误消息
\xpg@nospace 的参数有一个额外的}。
加载时polyglossia
。编译时也会发生同样的情况lualatex,
,但错误消息不同,开头为
包灵魂错误:重建失败。
如果我在文档的序言中定义,问题就会消失:
\newcommand*{\og}{«{}} \newcommand*{\fg}{{}»}
如果将长引用中的法语引号替换为\og
...。\fg
polyglossia
所以我怀疑和之间存在冲突soul
——或者我的使用方式soul
。我首先在 fr.comp.text.tex 上发帖,但没有得到解决方案。
谨致问候,B. Alfonsi
代码(和最小示例):
\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 支持。