Wie kann man erreichen, dass die TikZ-Matrix automatisch eine neue Zeile beginnt, wenn eine bestimmte Spaltennummer erreicht ist?

Wie kann man erreichen, dass die TikZ-Matrix automatisch eine neue Zeile beginnt, wenn eine bestimmte Spaltennummer erreicht ist?

Ich möchte die maximale Spaltenanzahl in einer TikZ-Matrix festlegen und wenn ich bei Erreichen der maximalen Anzahl eine neue Zelle beginne, fügt LaTeX die Zelle in eine neue Zeile ein.

Ein Ansatz wäre ein Befehl, der die aktuelle Spaltennummer prüft und feststellt, ob sie durch eine &oder eine ersetzt werden soll \\.

Hintergrund:

Ich erstelle ein PDF zum Drucken auf eine Reihe selbstklebender Etiketten wie folgt: selbstklebende Etiketten

Beim Erstellen meiner Etiketten muss ich „einfügen“ \\statt „ &wenn aktuelle Zeile voll ist“ eingeben, was nicht praktisch ist. Manchmal möchte ich meine Datei ändern, d. h. ein Element entfernen, und ich muss jedes nachfolgende Element verschieben, \\damit die Zeilenumbrüche korrekt sind.

Aktualisieren:

Der Code wird hier veröffentlicht, um weitere Erklärungen zu liefern. Ich möchte jede Position eines Elements unter meine Kontrolle bringen, also habe ich die Matrix relativ zum Papierrand verankert. Wenn kein durch den Drucker verursachter Versatz vorliegt, wird der durch den folgenden Code generierte Begrenzungsrahmen mit der vorgeschnittenen Naht auf dem Papier übereinstimmen.

    \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}

Antwort1

Sie können einen Zähler verwenden, um die Beschriftungen zu zählen. Erhöhen Sie nach jeder Beschriftung den Zähler. Wenn der Zähler 6 ist, fügen Sie ein \\und setzen den Zähler zurück, andernfalls fügen Sie ein &(oder vielmehr was die Definition von &in einer Matrix ist, nämlich \pgfmatrixnextcell).

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

Ersetzen Sie alle &und \\in der Matrix durch \lb, außer dem letzten \\.

Antwort2

Als Alternative zu einer Matrix können Sie eine Konstruktion aus TiKZverwenden . Sie definieren Werte und listen alle Elemente auf. verteilt sie und teilt sie bei Bedarf in Zeilen und Seiten auf.tcbrastertcolorboxraster columnstcbraster

Der folgende Code zeigt, wie dies deklariert wird. Mit dieser Option raster force size=falsebehalten Sie die Größe der inneren Boxen bei, andernfalls raster columnswerden die inneren Boxen so skaliert, dass sie in eine Textzeile passen.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen