如何扩展 siunitx 宏的结果以将其用作另一个宏的参数

如何扩展 siunitx 宏的结果以将其用作另一个宏的参数

在尝试回答时这个问题,我提议此解决方案,这显然没有按预期发挥作用,否则我们就不会在这里。

该解决方案适用于显式字符串,但不适用于源自siunitx宏的字符串,例如\num,这是 OP 所期望的行为,因此如果您找到了解决方案,请随时在原始问题中提出它。

所以我的问题是,如何强制 Latex 扩展\num{xxx}宏之前的结果并将其用作参数?

它可能可以通过\expandafter和相关功能来解决,但是我在尝试这些时把一切都搞乱了。

\documentclass{article}
\usepackage{xstring}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\newcommand{\addbelowarrow}[2]{%
    \pgfmathtruncatemacro{\charbefore}{#2-1}
    \pgfmathtruncatemacro{\charafter}{#2+1}
    \StrMid{#1}{1}{\charbefore}%
    \tikzmarknode{tempnode}{\StrChar{#1}{#2}}%
    \StrMid{#1}{\charafter}{100}%
    \tikz[overlay,remember picture]{\draw[stealth-] (tempnode) --++ (0,-2em);}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{itemize}
    \item  \addbelowarrow{123456789}{4} % works fine
    \item  \addbelowarrow{\num{123456789}}{4} % does not work
\end{itemize}

\end{document}

答案1

这只是上述评论的集合(感谢对 Ulrike Fischer、David Carlisle 和薛定谔的猫的善意评论)

  • \num是一个排版命令,它本身并不组装字符串,因此该函数没有可扩展的输出。例如,尝试扩展字符串\num{1.234}与 尝试扩展\textbf{12}textit{245}\hspace{2pt}678字符串一样有意义
  • \pgfmathprintnumber似乎以相同的方式工作,因此这里的结果再次不可扩展。

相关内容