我正在尝试在一个或多个文本行周围绘制一个垂直框(用于预填充表单中的字段),但某些字段可能为空,在这些情况下,框的垂直高度应与框内只有一行(甚至只有一个字符)内容时相同。
我目前正在\field
为此定义一个命令,如下所示:
\newcommand{\field}[1]{
\framebox[\textwidth][l]{
\parbox[l]{0.96\textwidth}{
\raggedright #1 \addvspace{0.1\baselineskip}
}
}
}
但是这会给我一个“缺失项目”错误,因为\addvspace
它不是垂直模式。如果我添加一个\par
来解决这个问题,那么在最后一行文本之后,框的垂直填充太多了。如果我\addvspace
完全删除,那么当框中没有文本时,框的高度不够。
有人能否建议创建一个框的最佳方法,该框与页面宽度相同,高度至少为一行文本(即使是空的),但可以扩展以包含多行文本?
答案1
\strut
通常,人们会在开头包含一个。还请注意,宏定义中有一些虚假空格(您需要一些战略性放置%
)。请参阅%
行末百分号 ( ) 有什么用?我还猜测您使用的.96\textwidth
结果来自一些过满的\hbox
es。您也可以调整此宽度以完美适合文本块...
这也许就是您所追求的:
\newcommand{\field}[1]{%
\noindent%
\framebox[\linewidth][l]{%
\parbox[t]{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{%
\raggedright\strut#1%
}%
}%
}
以下是它的用法平均能量损失:
\documentclass{article}
\newcommand{\field}[1]{%
\noindent%
\framebox[\linewidth][l]{%
\parbox[t]{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{%
\raggedright\strut#1%
}%
}%
}
\begin{document}
\field{Some test}
\field{}
\field{I'm trying to draw a vertical box around one or more lines of
text (for a field in a pre-filled form), but some of the fields may
be empty and in these cases, the box should be the same vertical
height as when there is only one line (or even just one character)
of content within the box.}
\end{document}
根据您的使用情况,您也可以考虑以 结尾\strut
,如果最后一行没有降部,则留出足够的空间。