Esta es una pregunta de seguimiento paraCrear una matriz de valores de contador específicosyUsando campos autodefinidos en NewEnviron.
Quiero usar la función mtadd
que llena el array mtarr
dependiendo del valor de lines
, dentro del entorno myenv
que crea la línea entre las columnas. Para hacerlo, tengo que incluir el cuerpo definido afuera. Pero esto produce el error ! Misplaced alignment tab character &.
, aparentemente relacionado con la redefinición de &
comenzar en la línea 10, que no entiendo del todo (tomado de Claudio Fiandrino en¿Cómo se puede crear una línea de tiempo vertical?). Comentar \BODY
conduce a la línea correcta, pero la función mtadd
no funciona y, por lo tanto, myarr
permanece vacía.
Aquí está el código:
\documentclass{article}
\usepackage{pgfmath,pgffor}
\usepackage{environ}
\usepackage{tikz}
\usetikzlibrary{calc,matrix}
\usepackage{charter}
\makeatletter
\let\matamp=&
\catcode`\&=13
\makeatletter
\def&{\iftikz@is@matrix
\pgfmatrixnextcell
\else
\matamp
\fi}
\makeatother
\newcounter{lines}
\def\endlr{\stepcounter{lines}\\}
\newcounter{envcount}
\setcounter{envcount}{0}
\newcommand*\myarr{}
\newcommand{\mtadd}{
\ifx\myarr\empty
\edef\myarr{\arabic{lines}}
\else\edef\myarr{\myarr,\arabic{lines}}
\fi}
\tikzset{description/.style={
column 2/.append style={#1}
},
line color/.store in=\lcolor,
line color=white!80!black,
line color st/.style={fill=\lcolor,draw=\lcolor},
}
\NewEnviron{myenv}[1][]{%
\def\myarr{}
\setcounter{lines}{1}
\stepcounter{envcount}%
\BODY
\begin{tikzpicture}[column 1/.style={anchor=east},
column 2/.style={anchor=west},
#1
]
\matrix(myenv\theenvcount)[matrix of nodes]{\BODY};
\pgfmathtruncatemacro\endmtx{\thelines-1}
\path [line color st]
($(myenv\theenvcount-1-1.north east)!0.5!(myenv\theenvcount-1-2.north west)$)--
($(myenv\theenvcount-\endmtx-1.south east)!0.5!(myenv\theenvcount-\endmtx-2.south west)$);
\end{tikzpicture}
}
\def\names{{"Katie","Frank","Laura","Joe","Peter","Jens","Carolin","Anna","Steph","Stef"}}
\begin{document}
\begin{myenv}
test & now\mtadd\endlr
test & \foreach \i in \myarr {%
Name \i: \pgfmathparse{\names[\i]}\pgfmathresult, }\endlr
\end{myenv}
\end{document}