处理有理数时如何转换 LaTeX 变量和字符串?我找到了很多整数的工作示例,但没有找到有理数的工作示例。
\documentclass[12pt]{article}
\begin{document}
\newcommand{\stress}{223.032}
\stress
\end{document}
产生输出“223.032”。我找到了 numprint 包来格式化数字字符串并附加单位等,但如何处理实际值?像这样:
\documentclass[12pt]{article}
\begin{document}
\newcommand{\stress}{223.032}
% convert to numeric variable
\stressval=\value{\stress}
% do st with the number
\doublestressval=2*\stressval
% convert to string variable
\doublestress=\tostring{\doublestressval}
% print result
\doublestressval
\end{document}
答案1
这是定义和使用变量的相当通用的方法。我加载siunitx
以显示值,因为它比 强大得多numprint
。
\documentclass[12pt]{article}
\usepackage{siunitx}
\ExplSyntaxOn
\NewDocumentCommand{\definevars}{m}
{% #1 = key-value list
\prop_set_from_keyval:Nn \l_gluge_vars_prop { #1 }
\prop_map_inline:Nn \l_gluge_vars_prop
{
\fp_zero_new:c { l__gluge_vars_##1_fp }
\fp_set:cn { l__gluge_vars_##1_fp } { ##2 }
}
}
\NewExpandableDocumentCommand{\usevar}{m}
{
\fp_use:c { l__gluge_vars_#1_fp }
}
\ExplSyntaxOff
\definevars{
stress=223.032,
doublestress=2*\usevar{stress},
mpv=1.256637062e-6,
}
\begin{document}
The double stress is \qty{\usevar{doublestress}}{\pascal}
The magnetic permeability in vacuum is
\qty[exponent-mode=scientific]{\usevar{mpv}}{\henry\per\meter}
\end{document}
你可以使用\definevars
任意数量的指令。当然,如果你使用指令\usevar
来定义新变量,那么之前的指令必须已经定义。