如何使用 siunitx 声明特定语言环境的单元?

如何使用 siunitx 声明特定语言环境的单元?

我正在用 Latex 编写一份多语言文档。

我正在使用 siunitx 包与 babel 结合来处理每个数字和单位相关的数值。

我的目标是宣布一个新单位(例如\帧速率) 将根据所选语言环境输出不同的内容。

我因此想到了这样的事情:

\documentclass[french,english]{book}

\usepackage[utf8]{inputenc}
\usepackage{babel} 
\usepackage{siunitx}

\sisetup{range-units = single}

\addto\extrasfrench{%
\sisetup{locale = FR, group-separator = {\,}, detect-all}%
\DeclareSIUnit[number-unit-product = \text{~}]{\fps}{images\text{~}par\text{~}seconde}}

\addto\extrasenglish{\sisetup{locale = US, group-separator = {,}, detect-all}%
\DeclareSIUnit[number-unit-product = \text{~}]{\fps}{frames\text{~}per\text{~}second}}

\begin{document}

    English: \SIrange{5}{6}{\fps}
    \begin{otherlanguage}{french}

        Français: \SIrange{5}{6}{\fps}

    \end{otherlanguage}

\end{document}

不幸的是,这个想法行不通,因为

\DeclareSIUnit[number-unit-product = \text{~}]{\fps}{frames\text{~}per\text{~}second}

宏然后在文档内执行并导致错误?

任何想法 ?

谢谢。

答案1

您可以使用软件包的功能translator来执行此操作。如果软件包在您的系统中,则会siunitx自动加载它。然后您可以使用以下命令设置单元

\DeclareSIUnit{\fps}{ \translate{frames per second} }

并使用声明翻译

\newtranslation[to = French]{frames per second}{images par seconde}

在您的文档中

示例输出

\documentclass[french,english]{book}

\usepackage[utf8]{inputenc}
\usepackage{babel} 
\usepackage{siunitx}

\sisetup{range-units = single}

\DeclareSIUnit{\fps}{ \translate{frames per second} }

\newtranslation[to = French]{frames per second}{images par seconde}

\addto\extrasfrench{%
\sisetup{locale = FR, group-separator = {\,}, detect-all}}

\addto\extrasenglish{\sisetup{locale = US, group-separator = {,}, detect-all}}

\begin{document}

English: \SIrange{5}{6}{\fps}

\begin{otherlanguage}{french}
  Français: \SIrange{5}{6}{\fps}
\end{otherlanguage}

\end{document}

相关内容