下面的代码可以识别单个数字。但是如何修改它使得它可以abc23.46de789f分成{23.46 789}{abc de f}

\documentclass{article}

\begin{document}

\def\xloop#1{%
   \ifx\relax#1\else
      \ifnum 2<1#1 #1 is number \par
         \else #1 is not number \par\fi
      \expandafter\xloop
   \fi
}

\xloop abc23.4de56f\relax 

\end{document}

1

  • 1
    @Mico 感谢您的编辑。


    – 



最佳答案
1

这是一个基于 LuaLaTeX 的解决方案。它设置了一个名为 的 Lua 函数split_num_nonum,该函数利用 Lua 强大的string.gsub功能提取两个单独的子字符串。如果输入参数的数字或非数字部分为空,split_num_nonum则返回空子字符串。

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function split_num_nonum ( s )
   numstring   = s:gsub ( "[^%d%.]" , " " )
   nonumstring = s:gsub ( "[%d%.]"  , " " ) 
   tex.sprint ( numstring .. "/ " .. nonumstring )
end
\end{luacode}
\newcommand\SplitNumNonum[1]{%
  \luadirect{ split_num_nonum ( "#1" ) }}

\begin{document}
\SplitNumNonum{1abc23.456de789fg}

\SplitNumNonum{123.456789}

\SplitNumNonum{abcdefg}

\SplitNumNonum{}
\end{document}