' glossaries
(v4.42) ユーザーマニュアルには次のように記載されています (48 ページ):
注: 複数形が指定されていない場合に複数形を生成するために使用される接尾辞は、
\glspluralsuffix
(一般的なエントリの場合) [...]によって指定されます。つまり、有効なサフィックスは、これらのコマンドを再定義した最後にロードされた言語のものになります。
しかし、次の MCE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french,ngerman,dutch,english]{babel}
\usepackage{glossaries}
\newacronym{gnu}{GNU}{GNU's Not Unix}
\begin{document}
\gls{gnu}
\glspl{gnu}
\end{document}
since の場合はそうではないと指摘しています。
その
.log
ファイルには、最後に読み込まれたファイルが最初に.ldf
読み込まれた言語のファイルであることが示されています。(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-english/glossaries-english.ldf) (/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-dutch/glossaries-dutch.ldf) (/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-german/glossaries-german.ldf) (/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-french/glossaries-french.ldf)
接尾辞は空です。これはフランス語の場合に当てはまりますが、英語、オランダ語、ドイツ語の場合は当てはまりません。
さらに奇妙なのは、言語リストがドキュメント クラス レベルで指定されている場合です。
\documentclass[french,ngerman,dutch,english]{article}
...
\usepackage{babel}
...
ロードされる順序はglossaries-*.ldf
ランダムであるようです:
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-dutch/glossaries-dutch.ldf)
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-english/glossaries-english.ldf)
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-french/glossaries-french.ldf)
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-german/glossaries-german.ldf)
何が起こっているか分かりますか?
答え1
読み込み順序は、tracklang
の追跡された言語/方言のリスト (つまり、識別されたドキュメントの言語/方言のリスト) によって決定されます。
パッケージtracklang
( によって使用されるglossaries
) は、次のようにドキュメントの言語を決定しようとします。
tracklang
次のようなオプションが明示的にロードされる場合:\usepackage[french,ngerman,dutch,english]{tracklang}
または、次のようなドキュメント クラス オプションを選択した場合:
\documentclass[french,ngerman,dutch,english]{article} \usepackage{tracklang}
は、
tracklang.sty
で定義された順序に従って言語または方言を追跡しますtracklang.tex
(定義済み言語と方言の完全なリストは にあります\@tracklang@declaredoptions
)。tracklang.sty
がパッケージ オプションを取得しない場合は、既知の言語パッケージがロードされているかどうかを確認します。まず、\bbl@loaded
(によって提供されるbabel
) が定義されているかどうかを確認します。定義されている場合は、tracklang.sty
リストを反復処理して既知の方言ラベルを追跡するか、認識されないラベルが見つかった場合は警告します。これは、次のことを意味します。\usepackage[french,ngerman,dutch,english]{babel} \usepackage{tracklang}
順序は の順序と一致します
\bbl@loaded
。
たとえば、ドキュメント クラスのオプション:
\documentclass[french,ngerman,dutch,english]{article}
\usepackage{tracklang}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
トランスクリプトには次の内容が記載されています:
> \@tracklang@languages=macro:
->dutch,english,french,german.
l.5 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->dutch,english,french,ngerman.
l.6 \show\@tracklang@dialects
とbabel
:
\documentclass{article}
\usepackage[french,ngerman,dutch,english]{babel}
\usepackage{tracklang}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\show\bbl@loaded
\begin{document}
\end{document}
トランスクリプトには次のように表示されます:
> \@tracklang@languages=macro:
->english,dutch,german,french.
l.6 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->english,dutch,ngerman,french.
l.7 \show\@tracklang@dialects
?
> \bbl@loaded=macro:
->english,dutch,ngerman,french.
l.8 \show\bbl@loaded
したがって、この順序はで指定されbabel
た の順序と一致します\bbl@loaded
。
各方言を明示的に追跡する:
\documentclass{article}
\usepackage{tracklang}
\TrackPredefinedDialect{french}
\TrackPredefinedDialect{ngerman}
\TrackPredefinedDialect{dutch}
\TrackPredefinedDialect{english}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
トランスクリプトには次のように表示されます:
> \@tracklang@languages=macro:
->french,german,dutch,english.
l.9 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->french,ngerman,dutch,english.
l.10 \show\@tracklang@dialects
順序は常に言語/方言が追跡された順序に従いますが、この方法により順序がより明確になります。
パッケージの問題glossaries
は、コマンドがいつ展開されるかを保証する方法がないため、サフィックス コマンドを言語フックに追加できず、どのファイルをロードする必要があるかを決定するために言語パッケージによって提供される順序に従うことしかできないことです。サフィックスは確かに最後にロードされた言語に従いますが、順序がオプション リスト.ldf
で指定された順序と一致することは保証されません。babel