使用 textmerg 和 tikz 动态将文本居中到 A4 横向

使用 textmerg 和 tikz 动态将文本居中到 A4 横向

我想在 A4(210mm x 297mm)纸上生成多个具有不同代码的标签。想法是将 A4 纸切成两半水平以便获得两个宽标签(297mm x 105mm)。因此,中心两侧的切割指南(灰色)将非常有用。

我想要实现的目标如下:

在此处输入图片描述

为了生成具有所需代码的多个 PDF,textmerg此 MWE 中使用了包,通过从文件中检索代码来实现jobname.dat

平均能量损失

\documentclass[12pt]{scrartcl}
\usepackage{textmerg}
\usepackage{graphicx}
\usepackage{fontspec}
\setmainfont{Arial Black}
\usepackage{pdflscape}
\begin{document}

\Fields{\onecode\twocode} 

\Merge{jobname.dat}{
  \begin{landscape}
    \pagestyle{empty}
    \centering
\topskip4em \resizebox{!}{0.12\textwidth}{\noindent\onecode} \\ \vspace{6cm} \resizebox{!}{0.12\textwidth}{\noindent\twocode}\\
    \cleardoublepage%    
  \end{landscape}
}
\end{document}

作业名称.dat

DDD-GG-XX
DDD-UU-DD-XX
DDD-GG-XX
DDD-PP-VV-XX

输出不居中,也没有切割指南。我的问题是,如何使用 tikz 实现以下效果:

  • 每页两个代码,每个代码位于页面中央
  • 缩放文本的能力
  • 绘制居中的灰色切割指南,将 A4 纸切成相等的两半。
  • 横向使用 A4 纸,留出合理的边距空间,显然是出于美观的考虑。

答案1

这将为每页创建两个框架,每个框架.8\paperwidth宽 4 厘米,高 4 厘米。要删除边缘,请使用\newflowframe而不是\newflowframe*

\documentclass[fontsize=60pt,landscape,oneside]{scrartcl}
\usepackage{textmerg}
\usepackage{fontspec}
\setmainfont{Arial Black}
\usepackage{flowfram}

\newlength{\pagebottom}
\pagebottom=\dimexpr 1in+\topmargin+\headheight+\headsep+\textheight-\paperheight\relax
\newlength{\pageedge}
\pageedge=\dimexpr -1in-\oddsidemargin\relax

\newflowframe*{.8\paperwidth}{4cm}{\dimexpr\pageedge+.1\paperwidth}{\dimexpr\pagebottom+.75\paperheight-2cm}
\newflowframe*{.8\paperwidth}{4cm}{\dimexpr\pageedge+.1\paperwidth}{\dimexpr\pagebottom+.25\paperheight-2cm}

\pagestyle{empty}
\Fields{\code}
\parindent=0pt
\begin{document}
\Merge{jobname.dat}{\parbox[c][4cm][c]{\linewidth}{\centering\code}\newpage}
\end{document}

演示


修改后的解决方案:这些填满整个页面并使用尽可能大的字体。

\parbox请注意,如果您能弄清楚如何使用 KOMA 将边距设置为 0,那么就可以仅使用 es 执行相同的操作。

\documentclass[fontsize=100pt,landscape,oneside]{scrartcl}
\usepackage{textmerg}
\usepackage{fontspec}
\setmainfont{Arial Black}
\usepackage{flowfram}

\newlength{\pagebottom}
\pagebottom=\dimexpr 1in+\topmargin+\headheight+\headsep+\textheight-\paperheight\relax
\newlength{\pageedge}
\pageedge=\dimexpr -1in-\oddsidemargin\relax

\newflowframe{\paperwidth}{.5\paperheight}{\pageedge}{\dimexpr\pagebottom+.5\paperheight}
\newflowframe{\paperwidth}{.5\paperheight}{\pageedge}{\pagebottom}

\pagestyle{empty}
\Fields{\code}
\parindent=0pt
\begin{document}
\Merge{jobname.dat}{\parbox[c][.5\paperheight][c]{\linewidth}{\centering\code}\newpage}
\end{document}

此解决方案使用 TikZ。(需要运行两次。)

\documentclass[fontsize=100pt,landscape,oneside]{scrartcl}
\usepackage{textmerg}
\usepackage{fontspec}
\setmainfont{Arial Black}
\usepackage{tikz}
\usetikzlibrary{calc}

\pagestyle{empty}
\Fields{\codeone \codetwo}
\begin{document}
\Merge{jobname.dat}{\begin{tikzpicture}[remember picture, overlay]
\node[inner sep=0pt] at ($(current page.center)!.5!(current page.north)$) {\codeone};
\node[inner sep=0pt] at ($(current page.center)!.5!(current page.south)$) {\codetwo};
\end{tikzpicture}
\newpage}
\end{document}

答案2

\documentclass[14pt]{article}
\usepackage[margin=1cm,landscape,nohead,nofoot]{geometry} %option: use `showframe` key to show the frame
\usepackage{textmerg}
\usepackage{xcolor}
\usepackage{graphicx}           % scalebox
\usepackage{fontspec}
\setmainfont{Arial Black}

\begin{document}
\Fields{\onecode\twocode} 
\Merge{jobname.dat}{
  \pagestyle{empty}
  \centering
  \begin{minipage}[][0.5\textheight][c]{\textwidth}
    \centering
    \scalebox{9}[12]{\onecode} % tweak the {x}[y] values
  \end{minipage}
  \textcolor{gray!10!white}{\rule{\linewidth}{1pt}} % cutting guide
  \begin{minipage}[][0.5\textheight][c]{\textwidth}
    \centering
    \scalebox{9}[12]{\twocode}  
  \end{minipage}
  \cleardoublepage%    
}

\end{document}

输出

在此处输入图片描述

相关内容