如何确定哪些语言已被 babel 或 polyglossia 加载?

如何确定哪些语言已被 babel 或 polyglossia 加载?

我正在尝试找到一种方法来确定(比如在序言的末尾)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}

生成结果:

语言和方言的形象,都只是英语

相关内容