我正在写一本食谱书。我的一些食谱采用英制单位,一些采用美制单位,一些采用公制单位。我想避免手动转换,因为这样会产生错误,但我希望这本书始终使用一种单位。
我还想在构建时指定哪一个,所以我想要一个可以设置为使用这三个中的哪一个的开关。所以我有一个文本,没有条件,但有一个处理标准化和转换的函数。
我知道我可以在 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}