我正在尝试创建一系列框,以便我的学生可以输入期末考试的身份证号码。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\newsavebox{\idbox}
\sbox{\idbox}{\framebox[4.5mm]{\vrule depth 1.25mm width 0pt height 2.5mm}}
\newcommand{\nidbox}[1]{%
\foreach \i in {1,...,#1}
{
\usebox{\idbox}\kern-1.5pt
}}
\begin{document}
\nidbox{5}
\end{document}
我想要的是能够将 ID 号直接对齐在第一个框架框的顶部并左对齐。我一直在尝试使用\raisebox
如下方法:
\def\idnum#1{\raisebox{0.8\baselineskip}[1ex][2ex]{%
ID NUMBER}\kern-4cm #1}
它的实现如下\idnum{\nidbox{5}}
。
说实话,我不知道这是否是最好的方法,但我相信我正在强迫它。我知道我可能可以使用表或数组来实现,但我正在尝试寻找不同的方法。任何对此事的见解都将不胜感激。
答案1
我更喜欢expl3
重复tikz
的事情:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\idbox}{}
{
\framebox[4.5mm]{\vrule depth 1.25mm width 0pt height 2.5mm}
}
\NewDocumentCommand{\idnum}{m}
{
\begin{tabular}{@{}l@{}}
ID~Number\\
\prg_replicate:nn { #1 } { \idbox \hspace{3pt} }
\end{tabular}
}
\ExplSyntaxOff
\begin{document}
\idnum{5}
\idnum{7}
\end{document}
环境tabular
只是对齐对象的更方便的方法。tabular
免费宏可以是
\NewDocumentCommand{\idnum}{ m }
{
\vbox:n
{
\hbox:n { \strut ID~Number }
\hbox:n { \strut\prg_replicate:nn { #1 } { \idbox \hspace{3pt} } \unskip }
}
}
但我不明白为什么人们应该选择这种方法而不是简单的方法tabular
。
答案2
这是一个简短的非 TikZ 解决方案。
\documentclass{article}
\usepackage{color}
\begin{document}
\makeatletter
\fboxsep8pt
\fboxrule0pt
\@for \next:=A,B,C,D,E\do{
\fbox{\next}%
}
\vspace{-3pt}
\fboxrule1pt
\fboxsep7pt
\@for \next:=A,B,C,D,E\do{
\fbox{\color{white}\next}%
}
\makeatother
\end{document}
\@for
如果您将其更改\@tfor
为如下内容,它也会起作用:
\@tfor \next:=ABCDE\do{
\fbox{\color{white}\next}%
}
答案3
提到“非 TikZ”解决方案都是 Yiannis 的错:-) 这是一个 TikZ 解决方案...
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach[count=\xi] \x in {A,...,F}
{
\node[label={[inner sep=1mm]90:\x},draw,inner sep=3mm] (\x) at (\xi,0) {};
}
\end{tikzpicture}
\end{document}
at (\xi,0)
可以通过修改来改变定位at (0.8*\xi,0)
,同样,可以通过第二个选项改变框的大小inner sep
。(第一个选项定义字母与框的距离。)