在尝试回答时这个问题,我提议此解决方案,这显然没有按预期发挥作用,否则我们就不会在这里。
该解决方案适用于显式字符串,但不适用于源自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
似乎以相同的方式工作,因此这里的结果再次不可扩展。