如何在参数中将数字与单位分开?

如何在参数中将数字与单位分开?

假设我有一个函数,其中我给出一个数字加一个单位。我只想得到数字,可以吗?

以下是 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

pgf无需调用外部程序即可完成此操作并将单位转换为点。

\documentclass{article}
\usepackage{pgf}

\newcommand{\cmd}[1]{\pgfmathparse{#1}\pgfmathresult} 
\begin{document}
    \cmd{12pt} \cmd{1cm} 
\end{document}

在此处输入图片描述

请注意,如果您对.0: 感到困扰,则可以通过\pgfmathprintnumber[<your number format here>]{pgfmathresult}选择您喜欢的数字格式轻松将其删除。

答案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 函数。Lu​​a 函数期望其参数由两部分组成:第一部分是数字,即由数字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}

相关内容