假设我有一个函数,其中我给出一个数字加一个单位。我只想得到数字,可以吗?
以下是 MWE:
\documentclass{article}
\usepackage[utf8]{inputenc}
\newcommand{\cmd}[1]{#1} % change here to capture only the number.
\begin{document}
\cmd{12pt} % print 12pt while I would get only 12, in a generic case.
\end{document}
答案1
答案2
假设该单元由两个角色组成,你可以采用可扩展的方式进行操作:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\getnumber}{m}
{
\tl_range:nnn { #1 } { 1 } { -3 } % from the first to the last but two character
}
\ExplSyntaxOff
\begin{document}
\getnumber{12pt}, $\getnumber{-47km}$, \getnumber{+5.7in}, \getnumber{3,14159CM}
\end{document}
答案3
这是一个基于 LuaLaTeX 的解决方案。它设置了一个名为\cmd
“包装器”的 LaTeX 宏,该宏调用完成所有工作的 Lua 函数。Lua 函数期望其参数由两部分组成:第一部分是数字,即由数字0
到组成9
,可能还有字符,
、.
、-
和+
;第二部分是字母,即大写和小写字母,可能还有空格。
根据您的排版目标,该函数仅返回数字部分。如果的参数\cmd
不是以数字部分开头,则前缀部分也会被丢弃。例如,的输出\arg{XX55km}
为55
,而的输出为\cmd{km}
空白(空)。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function get_num ( s )
tex.sprint ( ( s:gsub ( "([%d%.%,%-%+]*)([%a%s]*)" , "%1" ) ) )
end
\end{luacode}
\newcommand\cmd[1]{\directlua{get_num("#1")}} % "wrapper" macro
\begin{document}
\cmd{12pt}, $\cmd{-47km}$, \cmd{+5.7in}, \cmd{3,14159CM}
\end{document}