每当我尝试处理以下代码时,都会出现错误Only one # is allowed per tab. ... .25ex\everycr {}\tabskip \z@skip \halign {##
。
有人可以让我知道它出了什么问题吗?
\documentclass{article}
\newcommand{\mydot}[1]{\oalign{$#1$\cr\noalign{\kern -2.2ex}\hfil$\ldotp$\hfil\cr}}
\newcommand*{\replacementdot}[2]{%
\makeatletter
\directlua%
{str=#1 arr={#2}
if arr[2]==nil
then tex.sprint(string.sub(str, 1, arr[1]-1)..[[\mydot{]]..string.sub(str, arr[1], arr[1])..[[}]]..string.sub(str, arr[1]+1))
else tex.sprint(string.sub(str, 1, arr[1]-1)..[[\mydot{]]..string.sub(str, arr[1], arr[1])..[[}]]..string.sub(str, arr[1]+1, arr[2]-1)..[[\mydot{]]..string.sub(str, arr[2], arr[2])..[[}]]..string.sub(str, arr[2]+1))
end
}
\makeatother
}
\begin{document}
$\replacementdot{0.123}{3,4}$
\end{document}
请注意,当我删除宏\replacementdot
并直接使用时\mydot
,它可以正常工作。
提前致谢
答案1
您扩展得\mydot
太早了,使用\string\mydot
(我还删除了 \makeatletter,它在那里什么也不做)。
\documentclass{article}
\newcommand{\mydot}[1]{\oalign{$#1$\cr\noalign{\kern -2.2ex}\hfil$\ldotp$\hfil\cr}}
\newcommand*{\replacementdot}[2]{%
\directlua%
{str=#1 arr={#2}
if arr[2]==nil
then tex.sprint(string.sub(str, 1, arr[1]-1)..[[\string\mydot{]]..string.sub(str, arr[1], arr[1])..[[}]]..string.sub(str, arr[1]+1))
else tex.sprint(string.sub(str, 1, arr[1]-1)..[[\string\mydot{]]..string.sub(str, arr[1], arr[1])..[[}]]..string.sub(str, arr[1]+1, arr[2]-1)..[[\string\mydot{]]..string.sub(str, arr[2], arr[2])..[[}]]..string.sub(str, arr[2]+1))
end
}}
\begin{document}
$\replacementdot{0.123}{3,4}$
\end{document}