错误:每个标签仅允许一个 #

错误:每个标签仅允许一个 #

每当我尝试处理以下代码时,都会出现错误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}

相关内容