使用 AddToHook 更改多语种章节名称不起作用

使用 AddToHook 更改多语种章节名称不起作用

我想将chapternamefrom פרק(polyglossia 的默认设置)更改为חלק

因为该.tex文件是使用 LyX 创建的,并且 LyX 编辑器\usepackage{polyglossia} \setdefaultlanguage{}在前言的末尾添加了命令,所以我需要使用钩子将此命令修补到前言的末尾。

我尝试了以下操作,但没有任何变化,我想知道原因。

\documentclass{book}
\usepackage{fontspec}
\newfontfamily\hebrewfont{Arial}[Script=Hebrew]

\AddToHook{package/polyglossia/after}{%
  \gappto\captionshebrew{\renewcommand\chaptername{חלק}}
}

\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}

%\gappto\captionshebrew{\renewcommand\chaptername{חלק}} %<- Actually works

\begin{document}

\chapter{הקדמה}
לורם איפסום דולור סיט אמט
\end{document}

输出 pdf

答案1

添加钩子不会产生任何作用,因为在执行代码时,gloss-hebrew.ldf尚未加载。

因此\gappto只是定义了\captionshebrew这样做\renewcommand,但当gloss-hebrew.ldf加载时,这将被取代

\def\captionshebrew{...}

正确的方法是\gappto 加载语言。

如果你\show\captionshebrew在 after\usepackage{polyglossia}但 before中添加\setmainlanguage{hebrew},则会进入控制台

> \captionshebrew=macro:
->\renewcommand \chaptername {חלק}.

如果你还添加\show\captionshebrew之后\setmainlanguage{hebrew},你会看到

> \captionshebrew=macro:
->\def \prefacename {מבוא}\def \refname {מקורות}\def \abstractname {תקציר}\def
\bibname {ביבליוגרפיה}\def \chaptername {פרק}\def \appendixname {נספח}\def \con
tentsname {תוכן העניינים}\def \listfigurename {רשימת האיורים}\def \listtablenam
e {רשימת הטבלאות}\def \indexname {מפתח}\def \figurename {איור}\def \tablename {
טבלה}\def \partname {חלק}\def \enclname {רצ"ב}\def \ccname {העתקים}\def \headto
name {אל}\def \pagename {עמוד}\def \psname {נ.ב.}\def \seename {ראה}\def \alson
ame {ראה גם}\def \proofname {הוכחה} \def \glossaryname {מילון מונחים}.

你可能会使用\AtBeginDocument

\documentclass{book}
\usepackage{fontspec}
\newfontfamily\hebrewfont{Arial}[Script=Hebrew]

\AtBeginDocument{\gappto\captionshebrew{\renewcommand\chaptername{חלק}}}

\usepackage{polyglossia}

\setdefaultlanguage{hebrew}
\setotherlanguage{english}

\begin{document}

\chapter{הקדמה}
לורם איפסום דולור סיט אמט
\end{document}

在此处输入图片描述

相关内容