¿Cómo hacer que la matriz TikZ comience una nueva fila automáticamente cuando se alcanza cierto número de columnas?

¿Cómo hacer que la matriz TikZ comience una nueva fila automáticamente cuando se alcanza cierto número de columnas?

Deseo establecer el recuento máximo de columnas en una matriz TikZ y, si comienzo una nueva celda cuando se alcanza el recuento máximo, LaTeX colocaría la celda en una nueva fila.

Un enfoque sería un comando que verifique el número de columna actual y determine si se debe reemplazar por &o por \\.

Fondo:

Estoy creando un PDF para imprimir en una variedad de etiquetas autoadhesivas como esta: etiquetas autoadhesivas

Al crear mis etiquetas, tengo que insertarlas \\en lugar de &si la fila actual está llena, lo cual no es conveniente. A veces quiero modificar mi archivo, es decir, eliminar un elemento, y tengo que mover cada uno de los siguientes \\para que los saltos de línea sean correctos.

Actualizar:

El código se publica aquí para proporcionar más explicaciones. Quiero que cada posición de un elemento esté bajo mi control, así que anclé la matriz en relación con el borde del papel. Si no hay ningún desplazamiento inducido por la impresora, el cuadro delimitador generado por el siguiente código coincidirá con la costura precortada en el papel.

    \documentclass[a4paper]{article}
    \usepackage{qrcode}
    \usepackage{tikz}
    \usepackage{hyperref}
    \usepackage{xifthen} % provides \isempty test
    \usepackage{pst-barcode}
    \usetikzlibrary{positioning}

    \pagestyle{empty}

    \newcommand{\Label}[2][]{
        \draw (0cm,0cm) rectangle (3cm,-4cm) node (framesoutheast) {};
        \path (0cm,0cm) -- node[midway,anchor=north,inner sep=0pt,yshift=-4mm] (qrcode) {
            \begin{pspicture}(0.9in,0.9in)
                \psbarcode{https://wiki.thu-skyworks.org/#2}{width=0.9 height=0.9}{qrcode}
            \end{pspicture}
            %\qrcode[2cm]{https://wiki.thu-skyworks.org/#2}
            %\XeTeXinputencoding "utf8"
        }(3cm,0cm);
        \node[anchor=south west,inner sep=1mm,outer sep=0pt] (logo) at (0mm,-40mm) {\includegraphics[width=9mm]{any_square_image}};
        \path (logo.east) -- node[anchor=center,text width=19mm,align=center,font=\sffamily\small]{\ifthenelse{\isempty{#1}}{#2}{#1}}
        (logo.east-|framesoutheast);
    }

    \begin{document}

    \begin{tikzpicture}[remember picture,overlay]
        \matrix[row sep={4cm,between origins}, column sep = {32mm,between origins},matrix anchor=north west,inner sep=0pt,xshift=10mm,yshift=-8mm] at (current page.north west) {
        %\XeTeXinputencoding "byte"
            \Label{Label\ one} & \Label[If need\\manual break]{If\ need\ manual\ break} & \Label{Label\ 3} &
            \Label{Label 4} & \Label{Label 5} & \Label{Label 6} \\ % I want to make this line break auto
            \Label{Label 7} \\
        };
    \end{tikzpicture}

    \end{document}

Respuesta1

Puedes utilizar un contador para contar las etiquetas. Después de cada etiqueta incrementa el contador. Si el contador es 6, inserte \\y reinicie el contador; de lo contrario, inserte &(o más bien cuál es la definición &en una matriz, es decir \pgfmatrixnextcell).

\newcounter{colnr}
\setcounter{colnr}{0}
\newcommand{\lb}{%
  \stepcounter{colnr}%
  \ifthenelse{\value{colnr}=6}{\setcounter{colnr}{0}\\}{\pgfmatrixnextcell}%
}

Reemplace todo &y \\en la matriz con \lb, excepto el final \\.

Respuesta2

Como alternativa a una TiKZmatriz, puedes utilizar una tcbrasterconstrucción de tcolorbox. Usted define raster columnsel valor y enumera todos los elementos. tcbrasterlos distribuirá y dividirá líneas y páginas cuando sea necesario.

El siguiente código muestra cómo declararlo. La opción raster force size=falsemantiene el tamaño de los cuadros internos; de lo contrario, raster columnslos cuadros internos se escalan para caber en una línea de texto.

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage[hmargin={1cm,1cm},vmargin={1cm,1cm}]{geometry}
\begin{document}
\begin{tcbraster}[raster columns=6, raster every box/.style={blankest, width=3cm}, raster force size=false]
    \foreach \i in {1,...,20}{%
        \tcbincludegraphics{example-image}
        \tcbincludegraphics{example-image-A}
        \tcbincludegraphics{example-image-B}
        \tcbincludegraphics{example-image-C}
    }
\end{tcbraster}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada