在单位之间切换是否有首选方法?

在单位之间切换是否有首选方法?

我正在写一本食谱书。我的一些食谱采用英制单位,一些采用美制单位,一些采用公制单位。我想避免手动转换,因为这样会产生错误,但我希望这本书始终使用一种单位。

我还想在构建时指定哪一个,所以我想要一个可以设置为使用这三个中的哪一个的开关。所以我有一个文本,没有条件,但有一个处理标准化和转换的函数。

我知道我可以在 LuaLaTeX 中做到这一点,但我想避免外部依赖。

问题:我可以在整个 LaTeX 环境(包括新的 LaTeX3 实用程序)中在 LaTeX 的宏语言中执行此操作吗?还是我只能使用外部编程?

(如果有选择,首选方法是什么?)

答案1

以下是我推荐的。你手动定义每个组件的数量两个都单位。例如:

\SetAmount{meat}{\SI{2.2}{\lb}}{\SI{1.0}{\kilo\gram}}
\SetAmount{exercise}{\SI{1}{\mile}}{\SI{1.6}{\kilo\meter}}

设置两个项目:肉类数量和运动量,单位为 。然后要使用这些,请使用\Amount{meat}\Amount{exercise}。如果\def\UseMetricUnits{}定义了度量参数,则输出:

在此处输入图片描述

否则,输出英制金额。

在此处输入图片描述

这样做的好处是不是需要直接转换,但这可能会变得混乱,因为这不是需要更准确数量的科学文献。

代码:

\def\UseMetricUnits{}%
\documentclass{article}
\usepackage{siunitx}

\newcommand{\SetAmount}[3]{%
    \ifdefined\UseMetricUnits
        \expandafter\newcommand\csname Amount #1\endcsname{#3}%
    \else
        \expandafter\newcommand\csname Amount #1\endcsname{#2}%
    \fi
}
\newcommand*{\Amount}[1]{\expandafter\csname Amount #1\endcsname}


%% As SI does not have imperial units, set those up here
\DeclareSIUnit\lb{\text{lb}}%
\DeclareSIUnit\mile{\text{mile}}%

%% Declare the equivalent units
\SetAmount{meat}{\SI{2.2}{\lb}}{\SI{1.0}{\kilo\gram}}
\SetAmount{exercise}{\SI{1}{\mile}}{\SI{1.6}{\kilo\meter}}

\begin{document}
For this recipe we use 
\Amount{meat} of meat.
After you will need to walk
\Amount{exercise} to burn of these calories.
\end{document}

相关内容