
Ich verwende einen Code – der am Ende zu finden ist – für lange Zitate in der französischen Tradition. Wenn ich französische Anführungszeichen innerhalb eines so langen Zitats verwende, habe ich kein Problem beim Kompilieren, xetex
wenn ich mit der französischen Option lade babel
, und die Fehlermeldung
Das Argument \xpg@nospace hat ein zusätzliches }.
beim Laden von polyglossia
. Dasselbe passiert beim Kompilieren mit , lualatex,
allerdings mit einer anderen Fehlermeldung, beginnend mit
Fehler bei Paket Soul: Die Rekonstruktion ist fehlgeschlagen.
Das Problem verschwindet, wenn ich in der Präambel des Dokuments definiere:
\newcommand*{\og}{«{}} \newcommand*{\fg}{{}»}
und wenn die französischen Anführungszeichen innerhalb des Langzitats durch \og
… ersetzt werden \fg
.
polyglossia
Ich vermute also, dass ein Konflikt zwischen und besteht soul
– oder meine Art der Verwendung von soul
. Ich habe zuerst auf fr.comp.text.tex gepostet, aber keine Lösung gefunden.
Freundliche Grüße, B. Alfonsi
Code (und Minimalbeispiel):
\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}
Antwort1
Es scheint sich hierbei um eine Inkompatibilität zwischen der Funktionsweise soul
und der \XeTeXinterchartoks
Implementierung der Funktion in Polyglossia für Französisch im Hinblick auf die Guillemets zu handeln.
Wenn ich am Ende der Präambel sage
\makeatletter
\appto\blockextras@french{%
\XeTeXinterchartoks \french@punctguillstart 4095 = {\nobreakspace\ignorespaces}%
}
\appto\inlineextras@french{%
\XeTeXinterchartoks \french@punctguillstart 4095 = {\nobreakspace\ignorespaces}%
}
\makeatother
(im Grunde unter Verwendung babel
der 3.9-Definition) verschwindet der Fehler. Polyglossia verwendet dort, \xpg@nospace
dass ein Argument gelesen wird, was wahrscheinlich für Verwirrung sorgt soul
.
Natürlich funktioniert das nicht mit LuaLaTeX, dafür benötigen Sie babel
. Ich rate Ihnen jedoch, es babel
trotzdem zu verwenden, es spricht nichts dagegen, insbesondere jetzt, da Version 3.9 XeLaTeX-Unterstützung einführt.