下面的代码可以识别单个数字。但是如何修改它使得它可以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
这是一个基于 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}
|
–
|