我希望设置 TikZ 矩阵中的最大列数,并且如果我在达到最大列数时开始一个新单元格,则 LaTeX 会将该单元格放在新行中。
一种方法是使用命令检查当前列号并确定是否用&
或替换\\
。
背景:
创建标签时,如果当前行已满,我必须插入\\
而不是&
插入,这很不方便。有时我想修改文件,即删除一个项目,我必须移动每个后续项目\\
以使换行符正确。
更新:
代码发布在这里以提供更多解释。我想让元素的每个位置都在我的控制之下,所以我将矩阵相对于纸张边缘锚定。如果打印机没有引起偏移,则以下代码生成的边界框将与纸张上的预切接缝重合。
\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}
答案1
您可以使用计数器来计算标签。每标记一个标签后,计数器增加一倍。如果计数器为 6,则插入\\
并重置计数器,否则插入(或者更确切地说,矩阵中的&
的定义是)。&
\pgfmatrixnextcell
\newcounter{colnr}
\setcounter{colnr}{0}
\newcommand{\lb}{%
\stepcounter{colnr}%
\ifthenelse{\value{colnr}=6}{\setcounter{colnr}{0}\\}{\pgfmatrixnextcell}%
}
将矩阵中的所有&
和替换为,除了最后的。\\
\lb
\\
答案2
作为矩阵的替代,TiKZ
您可以使用tcbraster
构造tcolorbox
。您定义raster columns
值,并列出所有元素。tcbraster
将分发它们并在需要时分行和分页。
以下代码显示了如何声明它。选项raster force size=false
保持内部框的大小,否则内部raster columns
框将缩放以适合一行文本。
\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}