我想要一个空白行,后面跟着 5 个复选框,这样它们一起占据整个可用的水平空间。
我目前“解决”这个问题的方法是:
\usepackage{amssymb}
\begin{document}
\framebox{\begin{minipage}{0.25\textwidth}
\underline{\hspace{0.77\textwidth}}\,$\square$ $\square$ $\square$ $\square$
\underline{\hspace{0.77\textwidth}}\,$\square$ $\square$ $\square$ $\square$
\underline{\hspace{0.77\textwidth}}\,$\square$ $\square$ $\square$ $\square$
\underline{\hspace{0.77\textwidth}}\,$\square$ $\square$ $\square$ $\square$
\end{minipage}}
\end{document}
只是0.77
我通过一个相当繁琐的二分查找找到的一些数字。现在这不是很好,如果我调整任何参数(方格数、方格间距、页面大小、封闭框大小等)或添加任何内容,这个数字就必须重新计算。我理想情况下想要这样说:“在右侧放置 5 个方格,并用下划线填充剩余空间(加上一些填充)”。但我一直在努力让它工作。
有什么方法可以做到这一点而不必依赖神奇数字吗?
答案1
正如其他人所评论的,\hrulefill
是你的朋友,但你可能想简化你的输入并避免做重复和无聊的事情(这很容易出错;事实上你谈到了五个框,但只输入了四个)。
\documentclass{article}
\usepackage{amssymb}
\ExplSyntaxOn
\NewDocumentCommand{\checkboxes}{mmm}
{% #1 is the width
% #2 is number of lines
% #3 is the number of check boxes
\noindent
\fbox
{
\begin{minipage}{ \dim_eval:n { #1 - 2\fboxsep - 2\fboxrule } }
\ozaic_checkboxes:nn { #2 } { #3 }
\end{minipage}
}
}
\cs_new_protected:Nn \ozaic_checkboxes:nn
{
\prg_replicate:nn { #1 }
{ % lines
\hrulefill \prg_replicate:nn { #2 } { \ $\square$ } \par
}
}
\ExplSyntaxOff
\begin{document}
\checkboxes{0.25\textwidth}{4}{5}
\bigskip
\checkboxes{0.5\textwidth}{3}{4}\checkboxes{0.5\textwidth}{3}{4}
\end{document}
从第二个例子中可以看出,占用的空间是确切地文本宽度的一半。
答案2
您可以使用\leaders
TeX 原语:
\def\ulinefill{\noindent\null\leaders\vrule depth2.4pt height-2pt\hfill}
\begin{document}
\framebox{\begin{minipage}{0.7\textwidth}
\ulinefill\,$\square$ $\square$ $\square$ $\square$\break
\ulinefill\,$\square$ $\square$ $\square$ $\square$\break
\ulinefill\,$\square$ $\square$ $\square$ $\square$\break
\ulinefill\,$\square$ $\square$ $\square$ $\square$
\end{minipage}}
\end{document}