将文本与框架框顶部对齐

将文本与框架框顶部对齐

我正在尝试创建一系列框,以便我的学生可以输入期末考试的身份证号码。

\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。(第一个选项定义字母与框的距离。)

相关内容