
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:
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 TiKZ
verwenden . Sie definieren Werte und listen alle Elemente auf. verteilt sie und teilt sie bei Bedarf in Zeilen und Seiten auf.tcbraster
tcolorbox
raster columns
tcbraster
Der folgende Code zeigt, wie dies deklariert wird. Mit dieser Option raster force size=false
behalten Sie die Größe der inneren Boxen bei, andernfalls raster columns
werden 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}