我正在用 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}