我正在写与急救相关的文本,其中有很多表达方式,如“/min”(例如“她的心率为 60/min”)等等。
我想用 写出这种数字以siunitx
获得良好的渲染效果,但它需要有一个单位前斜线,否则会在它前面添加一个 1。要显示“60/min”,我必须\relax
在其中添加一个。它工作正常,但我必须多次编写它,我想缩短它。
这是一个例子。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[range-units=single,per-mode=symbol]{siunitx}
\DeclareSIUnit{\permin}{\relax\per\minute}
\begin{document}
Heart rate 1: \qtyrange{60}{100}{\per\minute}.
Heart rate 2: \qtyrange{60}{100}{\relax\per\minute}.
% Heart rate 3: \qtyrange{60}{100}{\permin}.
\end{document}
它尝试创建一个“每分钟”单位,但它仍然只用 附加了一个\per\minute
,如果我添加\relax
,\DeclareSIUnit
它就会崩溃。如果我取消注释上述示例中的第三行,则会收到错误。
.../document.tex:15: Undefined control sequence.
\per ->\ERROR
l.15 Heart rate 3: \qtyrange{60}{100}{\permin}
.../document.tex:15: Undefined control sequence.
\minute ->\ERROR
l.15 Heart rate 3: \qtyrange{60}{100}{\permin}
它说“未定义的控制序列”,但是当我尝试使用\DeclareSIUnit{\permin}{\per\minute}
(不使用\relax
)时,它编译时没有任何错误(但仍然在之前附加一个\per
)。
那么有没有办法用 siunitx 创建这种快捷方式,还是我必须使用第二行表达式?或者有没有更简洁的方法来做到这一点?
附言:我知道它应该是“60 次/分钟”或相当的值,但我想使用更短的格式来表示紧凑的表格数据,这样一目了然(作为纪念品)。
我希望我说的不是太清楚...谢谢!
答案1
这是一个重复单元处理中的错误。CTAN 很快就会修复,但你可以使用
\documentclass{article}
\usepackage{siunitx}
\sisetup{range-units = single, per-mode = symbol}
\ExplSyntaxOn
\cs_gset_protected:Npn \siunitx_compound_quantity:nn #1#2
{
\group_begin:
\bool_if:NT \l__siunitx_compound_unit_bracket_bool
{ \bool_set_true:N \l__siunitx_compound_exp_bracket_bool }
\bool_if:NT \l__siunitx_compound_unit_repeat_bool
{ \bool_set_false:N \l__siunitx_compound_exp_combine_bool }
\bool_lazy_or:nnT
{ \l__siunitx_compound_unit_bracket_bool }
{ ! \l__siunitx_compound_unit_repeat_bool }
{ \bool_set_false:N \l_siunitx_number_bracket_ambiguous_bool }
\bool_set_true:N \l__siunitx_compound_unit_bool
\__siunitx_compound_format:nn {#1} {#2}
\bool_if:NF \l_siunitx_number_parse_bool
{ \siunitx_unit_format:nN {#2} \l__siunitx_compound_unit_tl }
\str_if_eq:VnT \l_siunitx_quantity_prefix_mode_tl { combine-exponent }
{ \tl_clear:N \l__siunitx_compound_exp_tl }
\bool_if:NTF \l__siunitx_compound_unit_repeat_bool
{ \__siunitx_compound_print:N \__siunitx_compound_print_quantity:x }
{
\bool_lazy_and:nnTF
{ \l__siunitx_compound_unit_bracket_bool }
{ \tl_if_empty_p:N \l__siunitx_compound_exp_tl }
{
\siunitx_print_number:V \l__siunitx_compound_bracket_open_tl
\__siunitx_compound_print:N \siunitx_print_number:x
\siunitx_print_number:V \l__siunitx_compound_bracket_close_tl
}
{ \__siunitx_compound_print:N \siunitx_print_number:x }
\__siunitx_compound_print_quantity:n { \c_empty_tl }
}
\group_end:
}
\ExplSyntaxOff
\begin{document}
\qty{10}{\per\minute}
\qtyrange{60}{100}{\per\minute}.
\end{document}