![如何使用 siunitx 声明特定语言环境的单元?](https://linux22.com/image/401093/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20siunitx%20%E5%A3%B0%E6%98%8E%E7%89%B9%E5%AE%9A%E8%AF%AD%E8%A8%80%E7%8E%AF%E5%A2%83%E7%9A%84%E5%8D%95%E5%85%83%EF%BC%9F.png)
我正在用 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}