宏定义中的参数数量非法,且不存在

宏定义中的参数数量非法,且不存在

在下一个代码中,我使用了一个没有参数的宏,直到我在其中使用多列时它才会发出抱怨。

l.40 \TabTikzMark*{3} \hline ? ^C! 中断。\@preamble ...begin \ignorespaces \@sharp \unskip \relax \d@llarend \hfil > \h...

l.40 \TabTikzMark*{3} \hline

目标是使桌子的每个框的每个角都有标记。

在此处输入图片描述

\documentclass{article}
\usepackage{tikz,array,xparse}

\usetikzlibrary{tikzmark}

\newcounter{TabTikzCount}

\makeatletter

\NewDocumentCommand{\TabTikzMark}{sm}{%
    \IfBooleanTF{#1}{%
        \\[-\ht\@arstrutbox]\noalign{\setcounter{TabTikzCount}{1}}%
        \Row{3}
        \\[-\dp\@arstrutbox]%
        }{%
        \\[-\ht\@arstrutbox]
        \Row{3}
        \\[-\dp\@arstrutbox]}}

\makeatother

\newcommand{\Row}[1]{%
%\def\MyRow{\tikzmark{\Alph{TabTikzCount}0}}%
\def\MyRow{\multicolumn{1}{@{c@{}}}\begingroup\tikzmark{\Alph{TabTikzCount}0}}%
\foreach \n [evaluate=\n as \m using int(\n-1)] in {2,...,#1} {%
\let\tikzmark\relax%
%\xdef\MyRow{\MyRow\strut\hfill\tikzmark{\Alph{TabTikzCount}\m}}%
\xdef\MyRow{\MyRow\strut\hfill\tikzmark{\Alph{TabTikzCount}\m}%
\endgroup&\multicolumn{1}{@{c@{}}}\begingroup}%
}%
\MyRow\hfill\tikzmark{\Alph{TabTikzCount}#1}\endgroup%
\stepcounter{TabTikzCount}}

\begin{document}

essai

\begin{tabular}{|c|c|c|}
\TabTikzMark*{3}\hline
a&z&a\TabTikzMark{3}\hline
a&z&a\TabTikzMark{3}\hline
\end{tabular}

essai

\tikz[overlay,remember picture]\draw[->] (pic cs:A0) -- (pic cs:C3) ;

\end{document}

编辑 :可以用 来完成lualatex,但 s 中有一个奇怪的转变tikzmark。我对此发布了一个新问题。

在此处输入图片描述

\documentclass{article}
\usepackage{tikz,array,xparse,luacode}

\usetikzlibrary{tikzmark}
\newcounter{TabTikzCount}

\makeatletter
\NewDocumentCommand{\TabTikzMark}{sm}{%
    \IfBooleanTF{#1}{%
        \\[-\ht\@arstrutbox]\noalign{\setcounter{TabTikzCount}{1}}%
        \Row{3}
        \\[-\dp\@arstrutbox]%
        }{%
        \\[-\ht\@arstrutbox]
        \Row{3}
        \\[-\dp\@arstrutbox]}}
\makeatother

\begin{luacode}
function row (s)
    a = "\\multicolumn{1}{@{}c@{}}{\\tikzmark{\\Alph{TabTikzCount}0}"
    for i = 1,s-1
    do
    a=a.."\\strut\\hfill\\tikzmark{\\Alph{TabTikzCount}"..i.."}}&\\multicolumn{1}{@{}c@{}}{"
    end
    a=a.."\\strut\\hfill\\tikzmark{\\Alph{TabTikzCount}"..s.."}}"
    tex.print (a)
    print (a)
end
\end{luacode}

\newcommand{\Row}[1]{%
\directlua{row(#1)}
\stepcounter{TabTikzCount}}

\begin{document}

\begin{tabular}{|c|c|c|c|}
\TabTikzMark*{4}\hline
a&z&a&d\TabTikzMark{4}\hline
a&z&a&d\TabTikzMark{4}\hline
\end{tabular}

\foreach \j in {A,B,C} {%
\foreach \i in {0,...,5} {%
    \tikz[overlay,remember picture]
        \node at (pic cs:\j\i) {\tiny \j\i} ;
}}

\end{document}

答案1

这不是一个完整的答案,因为你的意思不是很明确。

语法

\multicolumn{1}{@{c@{}}}\begingroup...\endgroup

是完全错误的。你不能\begingroup用和界定标准参数\endgroup

你可以做的是,也许添加

\protected\def\mymulti\begingroup#1\endgroup{%
  \multicolumn{1}{@{}c@{}}{#1}%
}

\mymulti\begingroup...\endgroup并在您的代码中使用。

相关内容