From 7cb7508478cdb604e7745e5080a0b1a4282b4e7b Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Tue, 17 Sep 2024 14:08:02 +0200 Subject: [PATCH] Reset \XeTeXlinebreaklocale when nested language is closed Since this is a global setting, it must be explicitly reset. To this end, we introduce the new hook \nestedextras@ which is executed after a nested language has been closed. --- doc/polyglossia.tex | 11 ++++++----- tex/gloss-chinese.ldf | 23 +++++++++++++++++++---- tex/gloss-japanese.ldf | 19 +++++++++++++++---- tex/gloss-korean.ldf | 5 +++++ tex/polyglossia.sty | 3 +++ 5 files changed, 48 insertions(+), 13 deletions(-) diff --git a/doc/polyglossia.tex b/doc/polyglossia.tex index f75874c6..ffc4d07d 100644 --- a/doc/polyglossia.tex +++ b/doc/polyglossia.tex @@ -2330,14 +2330,15 @@ \section{Modifying or extending captions, date formats and language settings} \meta{lang} is activated locally via \cmd\text\meta{lang} command \item \Cmd{\noextras@\meta{lang}} stores macros that are to be executed when the language \meta{lang} is closed + \item \Cmd{\nestedextras@\meta{lang}}\new{2.3} stores macros that are to be executed when a nested language + is closed and \meta{lang} is the active language again. This is useful + for settings that are only possible on global scale. \end{itemize} % -In order to redefine internal macros, we recommend to use the command \cmd\gappto. -For compatibility with \pkg{babel} the command \cmd\addto\ is also available -to the same effect. For instance, to change the \cmd\chaptername\ for language ¦lingua¦, -you can do this: +In order to redefine internal macros, we recommend to use the command \cmd\addto. +For instance, to change the \cmd\chaptername\ for language ¦lingua¦, you can do this: \begin{verbatim} -\gappto\captionslingua{\def\chaptername{Caput}} +\addto\captionslingua{\def\chaptername{Caput}} \end{verbatim} % Note that this needs to be done after the respective language has been loaded with diff --git a/tex/gloss-chinese.ldf b/tex/gloss-chinese.ldf index cf7bd2b4..40d06514 100644 --- a/tex/gloss-chinese.ldf +++ b/tex/gloss-chinese.ldf @@ -310,12 +310,14 @@ \@ifundefined{xpg@orig@XeTeXlinebreakskip}{\newskip\xpg@orig@XeTeXlinebreakskip}{} \xpg@orig@XeTeXlinebreakskip=\XeTeXlinebreakskip \def\chinese@simplified@spacing{% - \XeTeXlinebreaklocale "zh" - \XeTeXlinebreakskip = 0pt plus 0.1em minus 0.01em} + \XeTeXlinebreaklocale "zh"% + \XeTeXlinebreakskip = 0pt plus 0.1em minus 0.01em% + } \let\chinese@traditional@spacing\chinese@simplified@spacing \def\nochinese@spacing{% - \XeTeXlinebreakskip=\xpg@orig@XeTeXlinebreakskip - \XeTeXlinebreaklocale ""} + \XeTeXlinebreakskip=\xpg@orig@XeTeXlinebreakskip% + \XeTeXlinebreaklocale ""% + } \fi \def\noextras@chinese{% @@ -340,5 +342,18 @@ \chinese@simplified@spacing% \fi% } + +\ifxetex + % \XeTeXlinebreaklocale is global, + % so we need to reset after nested language got closed + \def\nestedextras@chinese{% + \ifchinese@traditional + \chinese@traditional@spacing% + \else + \chinese@simplified@spacing% + \fi% + } +\fi + % Based on contributions of Toru Inagaki, Norio Iwase, François Charette diff --git a/tex/gloss-japanese.ldf b/tex/gloss-japanese.ldf index 7a6f966f..1261ba0b 100644 --- a/tex/gloss-japanese.ldf +++ b/tex/gloss-japanese.ldf @@ -248,11 +248,13 @@ \@ifundefined{xpg@orig@XeTeXlinebreakskip}{\newskip\xpg@orig@XeTeXlinebreakskip}{} \xpg@orig@XeTeXlinebreakskip=\XeTeXlinebreakskip \def\japanese@spacing{% - \XeTeXlinebreaklocale "ja" - \XeTeXlinebreakskip = 0pt plus 0.1em minus 0.01em} + \XeTeXlinebreaklocale "ja"% + \XeTeXlinebreakskip = 0pt plus 0.1em minus 0.01em% + } \def\nojapanese@spacing{% - \XeTeXlinebreakskip=\xpg@orig@XeTeXlinebreakskip - \XeTeXlinebreaklocale ""} + \XeTeXlinebreakskip=\xpg@orig@XeTeXlinebreakskip% + \XeTeXlinebreaklocale ""% + } \fi \def\noextras@japanese{% @@ -269,5 +271,14 @@ \japanese@capsformat% \japanese@spacing% } + +\ifxetex + % \XeTeXlinebreaklocale is global, + % so we need to reset after nested language got closed + \def\nestedextras@japanese{% + \japanese@spacing% + } +\fi + % Based on contributions of Toru Inagaki, Norio Iwase, François Charette diff --git a/tex/gloss-korean.ldf b/tex/gloss-korean.ldf index a80c24df..b8013101 100644 --- a/tex/gloss-korean.ldf +++ b/tex/gloss-korean.ldf @@ -432,6 +432,11 @@ \XeTeXlinebreaklocale "" \noextras@korean@common } + % \XeTeXlinebreaklocale is global, + % so we need to reset after nested language got closed + \def\nestedextras@korean{% + \XeTeXlinebreaklocale "ko"% + } \else % luatex \def\inlineextras@korean{\xpg@attr@cjkspacing\xpg@korean@variant\relax} \def\noextras@korean{% diff --git a/tex/polyglossia.sty b/tex/polyglossia.sty index 2fafdc2e..8508b6f9 100644 --- a/tex/polyglossia.sty +++ b/tex/polyglossia.sty @@ -1708,6 +1708,7 @@ \xpg_otherlanguage:nn{ \xpg_alias_add_to_option_i:nn{#2}{#1} }{ #3 } \__xpg_lang_set_text_direction:nn{#3}{#4} \group_end: + \cs_if_exist_use:c{ nestedextras@\languagename } } } \cs_generate_variant:Nn \__xpg_foreignlanguage:nnnn {eeen} @@ -1719,6 +1720,7 @@ \__xpg_otherlanguage:eee { #1 } { #2 } { \xpg_alias_base_lang:n { #2 } } }{ \c_group_end_token% \group_end: does not work here! + \cs_if_exist_use:c{ nestedextras@\languagename } } % internal wrapper @@ -1770,6 +1772,7 @@ \cs_if_exist_use:c{date@bbl@\babelname} \__xpg_lang_set_text_direction:nn{#3}{#4} \group_end: + \cs_if_exist_use:c{ nestedextras@\languagename } } } \cs_generate_variant:Nn \__xpg_textlanguage:nnnn {nnen}