最小工作示例

最小工作示例

目标是为每页制作一个 5 行 2 列的网格。不幸的是,只有第一页有 4 行 2 列的网格。如何解决?

最小工作示例

我已尝试使此 MWE 尽可能最小化,同时保持真实场景不变。请不要删除可能微不足道的代码。

\documentclass{article}

\usepackage[a4paper,hmargin=2mm,vmargin=2mm]{geometry}
\usepackage{longtable,array}

\newcounter{counter}


\newcolumntype\specifier{|*2{>{\centering\stepcounter{counter}}m{0.5\dimexpr\linewidth-4\tabcolsep-3\arrayrulewidth\relax}|}}

\makeatletter
\def\row[#1]#2{%
        \parbox[c][0.2\dimexpr\textheight-6\arrayrulewidth-\topskip\relax][c]{\linewidth}{\centering #1 \par \vspace{15pt} {\bf #2}}%
        \ifodd\value{counter}
            \expandafter\@firstoftwo
        \else
            \expandafter\@secondoftwo
        \fi
        {&}{\tabularnewline\hline}%
}
\makeatother

\newcommand\finalline{%
\ifodd\value{counter}\omit\tabularnewline\cline{1-1}\fi
}


\usepackage{etoolbox}

\AfterEndPreamble{%
    \topskip=0pt\relax
  \begin{longtable}{\specifier}\hline
}
\preto\enddocument{\finalline\end{longtable}}


\pagestyle{empty}



\begin{document}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}


\end{document}

输出

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

奖金问题

我刚刚注意到,当最后一页只有一个单元格时,单元格右侧会出现一条多余的线,如红色箭头所示。如何删除它?

答案1

raster这是使用库的另一个答案tcolorbox。我尝试尽可能地重建您的示例,但没有您想要消除的问题。特别是,除了第一个空白行之外,我保持您的文档内容不变。

\documentclass{article}
\usepackage[a4paper,hmargin=2mm,vmargin=2mm]{geometry}
\usepackage[many]{tcolorbox}

\AtBeginDocument{%
  \begin{tcbitemize}[raster height=\textheight,raster columns=2,raster rows=5,
    size=fbox,sharp corners,
    center upper,%     <--- alternatively: halign=flush center,
    valign=center,
    boxrule=0.4pt,%    <--- line width
    raster column skip=-0.4pt,raster row skip=-0.4pt,%   <--- negative line width
    colframe=black,colback=white
    ]%
}
\preto\enddocument{\end{tcbitemize}}

\newcommand{\row}[2][]{\tcbitem #1\par\vspace{15pt}{\bfseries#2}}

\pagestyle{empty}

\begin{document}% no blank line here
    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}

    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
\end{document}

在此处输入图片描述

更新(OP的后续要求):

要将网格转换为页面序列,其中每个单元格都打印在单个紧密的页面上,只需进行一些调整。我还更改了命令\row以采用“tcolorbox”选项。这允许卡片使用不同的规则宽度:

\documentclass{article}
\usepackage[paperwidth=10cm,paperheight=5cm,hmargin=5mm,vmargin=5mm]{geometry}
\usepackage[many]{tcolorbox}

\AtBeginDocument{%
  \begin{tcbitemize}[raster height=\textheight,raster columns=1,raster rows=1,
    size=fbox,sharp corners,
    center upper,%     <--- alternatively: halign=flush center,
    valign=center,
    boxrule=0.4pt,%    <--- line width
    colframe=black,colback=white
    ]%
}
\preto\enddocument{\end{tcbitemize}}

\newcommand{\row}[3][]{\tcbitem[#1] #2\par\vspace{15pt}{\bfseries#3}}

\pagestyle{empty}

\begin{document}% no blank line here
    \row{RAM}{Random Access Memory}
    \row[boxrule=3mm]{BIOS}{Basic Input Output System}
    \row{MWE}{Minimal Working Example}
    \row{OMG}{Oh My Ghost}
    \row{PS}{Post Script}

    \row{RAM}{Random Access Memory}
    \row{BIOS}{Basic Input Output System}
    \row{MWE}{Minimal Working Example}
    \row{OMG}{Oh My Ghost}
    \row{PS}{Post Script}

    \row{RAM}{Random Access Memory}
    \row{BIOS}{Basic Input Output System}
    \row{MWE}{Minimal Working Example}
    \row{OMG}{Oh My Ghost}
    \row{PS}{Post Script}

    \row{RAM}{Random Access Memory}
    \row{BIOS}{Basic Input Output System}
    \row{MWE}{Minimal Working Example}
    \row{OMG}{Oh My Ghost}
\end{document}

答案2

这里有一个可能的解决方案,raster来自的库tcolorbox包裹。

您必须调整一些颜色和尺寸,但至少第一页包含五行。

\documentclass{article}
\usepackage[a4paper,hmargin=2mm,vmargin=2mm]{geometry}
\usepackage[most]{tcolorbox}

\newtcolorbox{mybox}{sharp corners, width=.5\linewidth, height=0.2\textheight, valign=center, halign=center}

\begin{document}
\begin{tcbraster}[raster columns=2,enhanced, sharp corners, raster column skip=0pt, raster row skip=0pt] 
\foreach \i in {1,...,5}{
\begin{mybox}
RAM\\[1cm]Random Access Memory
\end{mybox}
\begin{mybox}
BIOS\\[1cm]Basic Input Output System
\end{mybox}
\begin{mybox}
MWE\\[1cm]Minimal Working Example
\end{mybox}
\begin{mybox}
OMG\\[1cm]Oh My Ghost
\end{mybox}
\begin{mybox}
PS\\[1cm]Post Script
\end{mybox}}
\end{tcbraster}
\end{document}

在此处输入图片描述

答案3

如果目标是闪存卡,那么类似这样的方法可能会有效(如果您想要边框等,可能需要进行调整)。您说您不想加载额外的包,所以这样做的一个潜在好处是:

\documentclass{article}
\def\row[#1]#2{\parbox[c][.2\textheight]{.5\textwidth}
{\centering #1 \par \vspace{15pt} {\bf #2}}\ignorespaces\penalty0}
\begin{document}
\noindent
    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}
    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}
    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
    \row[PS]{Post Script}
    \row[RAM]{Random Access Memory}
    \row[BIOS]{Basic Input Output System}
    \row[MWE]{Minimal Working Example}
    \row[OMG]{Oh My Ghost}
\end{document}

答案4

这种方法或许过于简单了。

labels软件包旨在打印可以通过喷墨打印机或激光打印机送入的标签纸。除了一些预定义的设置外,它还允许您指定在任意纸张上打印所需的尺寸。

现在,通常情况下,打印标签时不会在标签周围画网格。但是,出于测试目的,该软件包提供了一个显示网格的命令。这个想法是,你把它打印在一张纸上,然后拿着它和你的标签纸一起对着光检查对齐情况。这样,一个错误只会浪费一张纸,而不是一张(更昂贵的)标签。

我的答案只是设置一张具有闪存卡尺寸的“标签”表,并打开显示网格的选项。结果是 5x2 组闪存卡,但最后一张表只包含一张卡片。因为这张表上只显示一个“标签”,所以只显示其边框。也就是说,我认为这也解决了“奖励”问题。

但是,我不太确定我的答案是否符合问题中指定的限制,因为我已经省去了序言代码的很大一部分。

我已经用 替换了\bf\bfseries因为前者早已被弃用,并且根本不应该在 LaTeX 文档中使用。

我使用\card而不是\row来定义卡片。这样做的唯一原因是我使用这两个命令进行测试,并且\card对我来说很有意义。但您可以根据\row需要指定(或其他任何内容)。

结果如下:

闪存卡

唯一要注意的是不要在闪存卡之间留空行。我已注释掉空行以保持分组,但避免了随后出现的问题。

\documentclass[a4paper]{article}
\usepackage[newdimens]{labels}

\LabelCols=2
\LabelRows=5
\LeftPageMargin=2mm
\RightPageMargin=2mm
\TopPageMargin=2mm
\BottomPageMargin=2mm
\InterLabelColumn=0mm
\InterLabelRow=0mm
\RightLabelBorder=5mm
\LeftLabelBorder=5mm
\TopLabelBorder=5mm
\BottomLabelBorder=5mm
\LabelGridtrue
\numberoflabels=1

\newlength\cardwidth
\setlength\cardwidth{\dimexpr.5\textwidth-12mm}
\newcommand*\card[2][]{%
  \genericlabel{%
    \begin{minipage}{\cardwidth}
      \centering
      #1\par\vspace{15pt}
      \bfseries #2
    \end{minipage}}}

\pagestyle{empty}

\begin{document}
%
  \card[RAM]{Random Access Memory}
  \card[BIOS]{Basic Input Output System}
  \card[MWE]{Minimal Working Example}
  \card[OMG]{Oh My Ghost}
  \card[PS]{Post Script}
%
  \card[RAM]{Random Access Memory}
  \card[BIOS]{Basic Input Output System}
  \card[MWE]{Minimal Working Example}
  \card[OMG]{Oh My Ghost}
  \card[PS]{Post Script}
%
  \card[RAM]{Random Access Memory}
  \card[BIOS]{Basic Input Output System}
  \card[MWE]{Minimal Working Example}
  \card[OMG]{Oh My Ghost}
  \card[PS]{Post Script}
%
  \card[RAM]{Random Access Memory}
  \card[BIOS]{Basic Input Output System}
  \card[MWE]{Minimal Working Example}
  \card[OMG]{Oh My Ghost}
  \card[PS]{Post Script}
%
  \card[RAM]{Random Access Memory}
  \card[BIOS]{Basic Input Output System}
  \card[MWE]{Minimal Working Example}
  \card[OMG]{Oh My Ghost}
  \card[PS]{Post Script}
%
  \card[RAM]{Random Access Memory}
  \card[BIOS]{Basic Input Output System}
  \card[MWE]{Minimal Working Example}
  \card[OMG]{Oh My Ghost}
  \card[PS]{Post Script}
%
  \card[RAM]{Random Access Memory}
\end{document}

相关内容