答案1
我会使用tikz
两个\foreach
循环。以下是示例:
\documentclass{article}
\usepackage[margin=0.5in, noheadfoot, nomarginpar]{geometry}
\usepackage{tikz}
\usepackage{showframe}
\renewcommand*\ShowFrameLinethickness{0.2pt}
\renewcommand*\ShowFrameColor{\color{blue}}
\tikzset{
every node/.style = {
draw,
red,
text = black,
font = \large,
line width = 1.6pt,
rounded corners,
minimum width = 3cm,
minimum height = 1cm,
}
}
\pagestyle{empty}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\foreach \y [evaluate=\y as \yo using \y*1.25] in {0,...,19} {
\foreach \x [evaluate=\x as \xo using \x*3.75, evaluate=\d using int(\x+5*\y+1)] in {0,...,4} {
\node at (\xo,-\yo) {The day \d}; }}
\end{tikzpicture}
\end{figure}
\end{document}
编辑。这是稍微修改过的代码,现在生成带有节点行的段落,如果需要,这些节点行将继续到另一页。它们被复制到里面,\foreach
因此您可以更改所需的行数。
有几件事。除非您指定文本宽度,否则默认情况下
节点不会添加换行符,也不会接受\newline
或\\
。我还用和添加了小填充。\par
inner xsep
inner ysep
水平空间是可伸缩的,取决于标签的大小。垂直空间由 控制,\lineskip
默认情况下等于 1pt。我将其更改为1em
。此时,我必须发表评论。在此示例中,段落的内容很可能超出标准段落高度,而 LaTeX 会添加存储在 中的最小距离\lineskip
以避免重叠。我开发这一事实,并将最小空间改为1em
。这在其他例子中几乎肯定不会起作用。
\documentclass{article}
\usepackage[margin=0.5in, noheadfoot, nomarginpar]{geometry}
\usepackage{tikz}
\tikzset{
every node/.style = {
draw, red, line width = 1.6pt, rounded corners,
text = black, font = \large, align = center,
text width = 4cm,
inner xsep = 3pt, inner ysep = 6pt,
}
}
\newsavebox\textlabel
\NewDocumentCommand\TL{s}{%
\IfBooleanF{#1}{\hfill}%
\begin{tikzpicture}[baseline]
\node {%
Multiple line sample
\par Second line
\par Third line
};
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\setlength\parindent{0pt}%
\setlength\lineskip{1em}% % minimum vertical space
\foreach \x in {1,...,20} {\par\TL* \TL \TL \TL};
\end{document}
注意,这也可以用 进行排序longtable
。
答案2
MadyYuvi 已经向您指出了一个合适的包裹,我将简单地对此进行扩展。
\documentclass{article}
\usepackage{multicol,tcolorbox}
\newtcolorbox{mybox}{colframe=red,colback=white}
\begin{document}
\begin{multicols}{3}
\begin{mybox}The Day 1\end{mybox}
\begin{mybox}The Day 1\end{mybox}
\begin{mybox}The Day 1\end{mybox}
\begin{mybox}The Day 1\end{mybox}
\begin{mybox}The Day 1\end{mybox}
\begin{mybox}The Day 1\end{mybox}
% I think you can imagine how to go on...
\end{multicols}
\end{document}
编辑:增加数字。
根据评论中的要求,您可以增加框中显示的数字。最简单的方法当然是手动增加数字,因此
\begin{mybox}The Day 1\end{mybox}
\begin{mybox}The Day 2\end{mybox}
等等。这当然不是最好的办法。
然后,您就有了添加一个计数器来为您编号的想法,请参阅 MadyYuvi 的回答 (+1)。这仍然需要\begin{mybox}The Day \theboxcounter\end{mybox}
一遍又一遍地重复代码。
这就是为什么恕我直言,最好的解决方案涉及 for 循环(forloop
包):
\documentclass{article}
\usepackage{multicol,tcolorbox,forloop}
\newtcolorbox{mybox}{colframe=red,colback=white}
\begin{document}
\begin{multicols}{3}
\newcounter{boxcounter}
\forloop{boxcounter}{1}{\value{boxcounter} < 25}{%
\begin{mybox}The Day \theboxcounter\end{mybox}
}
\end{multicols}
\end{document}
答案3
根据的评论,刚刚在@Οὖτις 答案中OP
添加了一个,counter
\documentclass{article}
\usepackage{multicol,tcolorbox}
\newcounter{boxcounter}%
\setcounter{boxcounter}{0}%
\renewcommand{\theboxcounter}{\arabic{boxcounter}}%
\newtcolorbox{mybox}{code={\refstepcounter{boxcounter}},colframe=red,colback=white}
\begin{document}
\begin{multicols}{3}
\begin{mybox}The Day \theboxcounter\end{mybox}
\begin{mybox}The Day \theboxcounter\end{mybox}
\begin{mybox}The Day \theboxcounter\end{mybox}
\begin{mybox}The Day \theboxcounter\end{mybox}
\begin{mybox}The Day \theboxcounter\end{mybox}
\begin{mybox}The Day \theboxcounter\end{mybox}
% I think you can imagine how to go on...
\end{multicols}
\end{document}