
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:
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 TiKZ
matriz, puedes utilizar una tcbraster
construcción de tcolorbox
. Usted define raster columns
el valor y enumera todos los elementos. tcbraster
los 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=false
mantiene el tamaño de los cuadros internos; de lo contrario, raster columns
los 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}