在下一个代码中,我使用了一个没有参数的宏,直到我在其中使用多列时它才会发出抱怨。
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
并在您的代码中使用。