我正在尝试找到一种方法来确定(比如在序言的末尾)babel 和 polyglossia 已加载哪些语言,包括主要语言和所有其他语言。有多种方法可以检测是否已加载特定语言,但我需要一种方法来枚举已加载的所有语言。了解这些软件包内部原理的人有什么想法吗?
答案1
使用 Babel:
\documentclass{article}
\usepackage[english,ngerman,russian]{babel}
\begin{document}
\makeatletter Loaded languages: \bbl@loaded
\end{document}
我没有看到 polyglossia 中有任何代码可以提供这样的列表,因此可能需要修补 polyglossia,或者您可以提出功能请求。
添加
我现在也测试了一些变体。修饰符似乎在列表中被忽略(这可能是您想要的),并且主要语言是列表中的第一个语言:
\documentclass{article}
\usepackage[latin.medieval,english,main=ngerman,russian]{babel}
\begin{document}
\makeatletter Loaded languages: \bbl@loaded
\end{document}
答案2
我写了tracklang
包来帮助我的包解决这类信息。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british,canadien]{babel}
\usepackage{tracklang}
\begin{document}
\AnyTrackedLanguages
{Root Languages.
\ForEachTrackedLanguage{\thislang}{Language: \thislang. }
Dialects.
\ForEachTrackedDialect{\thisdialect}{Dialect: \thisdialect. }
}
{No language options detected.}
\end{document}
得出的结果为:
这也适用于translator
:
\documentclass[british,canadien]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{translator}
\usepackage{tracklang}
\begin{document}
\AnyTrackedLanguages
{Root Languages.
\ForEachTrackedLanguage{\thislang}{Language: \thislang. }
Dialects.
\ForEachTrackedDialect{\thisdialect}{Dialect: \thisdialect. }
}
{No language options detected.}
\end{document}
生成结果:
或者根本没有语言包,但在文档类(或tracklang
)选项列表中可以识别语言名称:
\documentclass[british,canadien]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tracklang}
\begin{document}
\AnyTrackedLanguages
{Root Languages.
\ForEachTrackedLanguage{\thislang}{Language: \thislang. }
Dialects.
\ForEachTrackedDialect{\thisdialect}{Dialect: \thisdialect. }
}
{No language options detected.}
\end{document}
这产生的结果与前面的示例相同。
还适用于ngerman
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
\usepackage{tracklang}
\begin{document}
\AnyTrackedLanguages
{Root Languages.
\ForEachTrackedLanguage{\thislang}{Language: \thislang. }
Dialects.
\ForEachTrackedDialect{\thisdialect}{Dialect: \thisdialect. }
}
{No language options detected.}
\end{document}
生成结果:
不幸的是,polyglossia
没有提供访问方言选项的便捷方式,因此只能检测根语言:
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage[variant=uk]{english}
\usepackage{tracklang}
\begin{document}
\AnyTrackedLanguages
{Root Languages.
\ForEachTrackedLanguage{\thislang}{Language: \thislang. }
Dialects.
\ForEachTrackedDialect{\thisdialect}{Dialect: \thisdialect. }
}
{No language options detected.}
\end{document}
生成结果: