在每个页面上放置一个唯一的代码

在每个页面上放置一个唯一的代码

我想创建一个稍后在纸上填写的表格。但有些字段是自动填写的(即当人们收到表格时已经打印出来了)。

以下是表单本身的 MWE:

\documentclass{article}

\usepackage{calc}
\usepackage{mathtools}

\usepackage{tikz}

\newcommand{\BOX}{%
    \begin{tikzpicture}[baseline=-0.5ex,rounded corners=2pt]%
    \filldraw[
        color   =   black,
        fill    =   white,
        semithick
    ] (0,-.5cm) rectangle (0.5cm,.5cm);
    \end{tikzpicture}%
}

\begin{document}
    \begin{tabular}{c}
        \begin{minipage}[c][1cm]{6cm}
            \centering\sffamily\bfseries{}Code of the kit%
        \end{minipage}
        \tabularnewline
        %
        \centering
        \begin{minipage}[c][1cm]{6cm}
            \centering\BOX\;{\sffamily\bfseries--\;}\BOX\;\BOX\;\BOX\;{\sffamily\bfseries--\;}\BOX\;\BOX%
        \end{minipage}
    \end{tabular}
\end{document}

在此处输入图片描述

我已经删除了所有不必要的 MWE 字段,例如namesurname等。该字段Code of the kit应以格式自动填充letter -- digit digit digit -- letter letter

我想做类似的事情\MakeForms{100500},TeX 生成 100500 页,其中每一页都由代码填充next。现在,这next意味着: 旁边的代码f120bgf120bh,在f120bzgoes之后f120ca,在f120zzgoes之后f121aa,在f999zzgoes之后g000aa,即顺序是按字典顺序排列的,但有一些字母我想被跳过,比如说,e, u, y,这意味着后面的字母x现在是z

附言如果重要的话,我想使用西里尔字母。

聚苯硫醚我使用 LuaLaTeX,因此欢迎使用 Lua 代码的解决方案。

答案1

我设置了一个嵌套循环。这里我只使用了三个这样的循环,以避免太大,但您可以逻辑地扩展它。其次,我不会清除每个页面,而只是开始一个新的页面,\par并在其间填充规则。

\documentclass{article}

\usepackage{calc}
\usepackage{mathtools}

\usepackage{tikz}

\newcommand{\BOX}[1][]{%
    \begin{tikzpicture}[baseline=-0.5ex,rounded corners=2pt]%
    \filldraw[
        color   =   black,
        fill    =   white,
        semithick
    ] (0,-.5cm) rectangle (0.5cm,.5cm);
    \node(A)[right] {#1};
    \end{tikzpicture}%
}
\newcommand\code[3]{%
    \begin{tabular}{c}
        \begin{minipage}[c][1cm]{6cm}
            \centering\sffamily\bfseries{}Code of the kit%
        \end{minipage}
        \tabularnewline
        %
        \centering
        \begin{minipage}[c][1cm]{6cm}
            \centering\BOX\;{\sffamily\bfseries--\;}\BOX\;\BOX\;\BOX[#1]\;{\sffamily\bfseries--\;}\BOX[#2]\;\BOX[#3]%
        \end{minipage}
    \end{tabular}}


\begin{document}
\foreach\DD in{1,...,4}{
  \foreach\EE in{A,...,E}{
    \foreach\FF in{A,...,C}{
    \code{\DD}{\EE}{\FF}\par\hrulefill\par
}}}
\end{document}

开始

在此处输入图片描述

结束

在此处输入图片描述

虽然我的方法的商业目的体现在

\foreach\DD in{1,...,4}{
  \foreach\EE in{A,...,E}{
    \foreach\FF in{A,...,C}{
    \code{\DD}{\EE}{\FF}\par\hrulefill\par
}}}

跳过字母可以通过简单的修改来实现,例如跳过数字 3:

\foreach\DD in{1,...,2,4,...,5}{

答案2

\themycount这假设您想在您的代码中使用类似的东西。

outer sep您可以使用(表示方框)和(表示连字符)调整水平间距inner sep。为了好玩,我展示了另一种将文本居中在 1 厘米间距的方法。

\documentclass{article}

\usepackage{calc}
\usepackage{mathtools}

\usepackage{tikz}


\newcommand{\CODE}[1]% #1 = six digit number
{\bgroup
  \def\code{#1}%
  \ifnum#1<100000 \def\code{0#1}\fi% I assume you want leading zeros
  \ifnum#1<10000 \def\code{00#1}\fi
  \ifnum#1<1000 \def\code{000#1}\fi
  \ifnum#1<100 \def\code{0000#1}\fi
  \ifnum#1<10 \def\code{00000#1}\fi
  \def\decode##1##2##3##4##5##6{%
    \def\codeA{##1}%
    \def\codeB{##2}%
    \def\codeC{##3}%
    \def\codeD{##4}%
    \def\codeE{##5}%
    \def\codeF{##6}}%
  \expandafter\decode\code
  \tikzstyle{BOX}=[draw=black,
    rounded corners=2pt,
    semithick,
    minimum width=.5cm,
    minimum height=1cm,
    inner sep=0pt,% probably not needed
    outer sep=2pt]
  \begin{tikzpicture}[baseline=-0.5ex]
    \node[BOX](A) {\codeA};
    \node[right,inner sep=1pt](AA) at (A.east) {\sffamily\bfseries--};
    \node[BOX,right](B) at (AA.east) {\codeB};
    \node[BOX,right](C) at (B.east) {\codeC};
    \node[BOX,right](D) at (C.east) {\codeD};
    \node[right,inner sep=1pt](DD) at (D.east) {\sffamily\bfseries--};
    \node[BOX,right](E) at (DD.east) {\codeE};
    \node[BOX,right] at (E.east) {\codeF};
  \end{tikzpicture}
\egroup}

\newcounter{mycount}

\begin{document}

\loop\ifnum\value{mycount}<5
  \stepcounter{mycount}

      \begin{tabular}{c}
        \rule[\dimexpr 0.5\ht\strutbox-.5cm]{0pt}{1cm}% centered 1cm
            {\sffamily\bfseries Code of the kit}%
        \tabularnewline
        %
        \CODE{\themycount}% already 1cm
    \end{tabular}
\repeat
\end{document}

相关内容