![pgffor foreach 和标签如何协同工作?](https://linux22.com/image/352451/pgffor%20foreach%20%E5%92%8C%E6%A0%87%E7%AD%BE%E5%A6%82%E4%BD%95%E5%8D%8F%E5%90%8C%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我目前正在尝试创建一张带有不同条形码的标签纸。
这是我取得的进展:
\documentclass[12pt,a4paper]{article}
\usepackage[newdimens]{labels}
%% Change variables here:
\newcommand{\barprefix}{XX}
\newcommand{\barversion}{00}
\newcommand{\baryear}{2017}
\newcommand{\barmonth}{04}
\newcommand{\barstartid}{10}
\newcommand{\bartype}{code128}
% Label format:
\LabelCols=3
\LabelRows=8
\LeftPageMargin=7mm
\RightPageMargin=7mm
\TopPageMargin=15mm
\BottomPageMargin=15mm
\InterLabelColumn=2mm
\InterLabelRow=0mm
\LeftLabelBorder=5mm
\RightLabelBorder=5mm
\TopLabelBorder=5mm
\BottomLabelBorder=5mm
\numberoflabels=\LabelCols
\usepackage{pst-barcode}
\usepackage{pgf}
\usepackage{pgffor}
\begin{document}
\pgfmathparse{subtract(\LabelRows,1)}%
\pgfmathint{\pgfmathresult}%
\foreach \n in {0,...,\pgfmathresult}{%
\pgfmathsetbasenumberlength{3}%
\pgfmathparse{add(\n,\barstartid)}%
\pgfmathint{\pgfmathresult}%
\pgfmathdectobase\barid{\pgfmathresult}{10}%
\genericlabel{%
\fbox{%
\begin{pspicture}(0,-0.2)(4.8,1)%
\psbarcode{\barprefix\barversion\baryear\barmonth\barid}{includetext includecheck includecheckintext height=0.4}{\bartype}%
\end{pspicture}%
}%
}%
}
\end{document}
此代码的问题在于,它不是将所有标签打印在一页上,而是为每行标签创建单独的页面。如果我只需删除 foreach 循环并自行通过 genericlabels 输入每个标签行,就可以解决这个问题,但我想使用 for 循环来执行此操作,这样我只需更改 rows 参数即可。
感谢您的帮助。
答案1
\foreach
添加分组。您可以改用\pgfplotsforeachungrouped
pgfplots 包中的命令。或者使用其他循环命令(例如\int_step_variable:nnnNn {0} {1}{\pgfmathresult}{\n}{...}
expl3 中的命令也可以)。