使用 siunitx 的每次计数单位的快捷方式

使用 siunitx 的每次计数单位的快捷方式

我正在写与急救相关的文本,其中有很多表达方式,如“/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}

相关内容