让 TikZ 真正使用当前页面

让 TikZ 真正使用当前页面

我想在页面上放置卡片,例如每页 4 张卡片,我有很多这样的卡片。这些卡片应排列为 2x2 网格,填满将设置为打印机可打印的文本区域。我的第一次尝试是以下 MWE:

\documentclass{article}
\usepackage[margin=1cm]{geometry}

\usepackage{etoolbox}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tikzpagenodes}

\newlength{\cardxlen}
\newlength{\cardylen}

\newcommand{\numberofxcards}{2}
\newcommand{\numberofycards}{2}
\pgfmathsetlength{\cardxlen}{\textwidth/\numberofxcards}
\pgfmathsetlength{\cardylen}{\textheight/\numberofycards}

\begin{document}
\foreach\myindex in {1,2,...,10}{%
\pgfmathsetmacro{\cardxnum}{Mod(\myindex-1,\numberofxcards)}
\pgfmathsetmacro{\cardynum}{floor(divide(\myindex-1,\numberofxcards))}
\begin{tikzpicture}[remember picture,overlay]
\draw[fill=gray]($(current page text area.north west)+(\cardxnum*\cardxlen,-\cardynum*\cardylen)$)rectangle++(\cardxlen,-\cardylen);
\end{tikzpicture}
\pgfmathsetmacro{\currentrest}{int(Mod(\myindex,\numberofxcards*\numberofycards))}
\ifnumequal{\currentrest}{0}{\clearpage}{}
}

\end{document}

如果我多次编译它,第一页将正确打印,但在后续页面上,卡片设置为低(垂直位置似乎被计算为前一页的最后一个垂直位置)。但据我了解,在下一个“tikzpicture”开始时,“TeX”已经在下一页了。

我如何让“TikZ”计算真实新页面上的位置?或者这只是一个错误?

答案1

我认为你必须使用

\pgfmathsetmacro{\cardynum}
  {Mod(floor(divide(\myindex-1,\numberofxcards)),\numberofycards)}

用于计算\cardynum

在此处输入图片描述

在此处输入图片描述

代码:

\documentclass{article}
\usepackage[margin=1cm]{geometry}

\usepackage{etoolbox}
\usepackage{tikzpagenodes}
\usetikzlibrary{calc}

\newlength{\cardxlen}
\newlength{\cardylen}

\newcommand{\numberofxcards}{2}
\newcommand{\numberofycards}{2}
\pgfmathsetlength{\cardxlen}{\textwidth/\numberofxcards}
\pgfmathsetlength{\cardylen}{\textheight/\numberofycards}

\begin{document}
\foreach\myindex in {1,2,...,10}{%
  \pgfmathsetmacro{\cardxnum}
    {Mod(\myindex-1,\numberofxcards)}
  \pgfmathsetmacro{\cardynum}
    {Mod(floor(divide(\myindex-1,\numberofxcards)),\numberofycards)}
  \begin{tikzpicture}[remember picture,overlay]
    \draw[fill=gray]
      ($(current page text area.north west)+(\cardxnum*\cardxlen,-\cardynum*\cardylen)$)
      rectangle
      ++(\cardxlen,-\cardylen)
    ;
  \end{tikzpicture}
  \pgfmathsetmacro{\currentrest}{int(Mod(\myindex,\numberofxcards*\numberofycards))}
  \ifnumequal{\currentrest}{0}{\clearpage}{}
}
\end{document}

答案2

tcbraster您还可以在包或tcbitemize环境中排列卡片tcolorbox,让它为您完成所有工作。只需输入行数和列数,包就会计算卡片大小。您只需列出所有卡片,光栅就会分布在页面上。

一个例子:

\documentclass{article}
\usepackage[margin=1cm]{geometry}

\usepackage[most]{tcolorbox}

\begin{document}
\begin{tcbitemize}[%
    raster columns=2,
    raster rows=2,
    raster height=\textheight,
    enhanced,
    sharp corners,
    colframe=black,
    colback=gray!30,
    watermark text=\thetcbrasternum,
    raster equal skip=0pt,
    raster row skip=0pt,
    raster column skip=0pt
]
\tcbitem 
\tcbitem 
\tcbitem 
\tcbitem 
\tcbitem
\tcbitem
\tcbitem
\tcbitem
\tcbitem
\tcbitem
\tcbitem
\end{tcbitemize}
\end{document}

在此处输入图片描述

相关内容