我想在文档中创建一个“答案空白”。它基本上看起来像一条下划线,上面没有任何内容。我找到了一个关于它的问题(如何用 TeX 制作一个空白?),但这并不能解决我遇到的主要问题,即我希望空白正常换行到文本宽度。使用 \hspace 或 \rule 的解决方案会导致行延伸到边距。
我正在寻找可以像普通文本一样换行且不会延伸到边距的内容。它应该是具有指定长度的带下划线的空白,但该长度可能会在输出文档中跨多行换行。
答案1
下面我们定义了一些宽度为 0.5 厘米的构建块;\blank{12}
您将得到一条宽度为 6 厘米的可以换行的线,两边至少有两个块;最小值可以通过可选参数进行修改,\blank[4]{12}
两边的块数为 4 个。
\documentclass[a4paper]{article}
\newcommand{\piece}{\hskip1sp\kern-1sp\hbox to .5cm{\hrulefill}}
\newcommand{\nbpiece}{\hbox to .5cm{\hrulefill}}
\makeatletter
\newcommand{\build}[2]{\leavevmode
\count@=\z@ \toks@={}%
\loop\ifnum\count@<\numexpr#1\relax
\toks@=\expandafter{\the\toks@#2}%
\advance\count@\@ne
\repeat
\the\toks@}
\makeatletter
\newcommand{\blank}[2][2]{%
\build{#1}{\nbpiece}\build{#2-2*#1}{\piece}\build{#1}{\nbpiece}}
\begin{document}
A paragraph with \blank{12} and \blank{24} blanks.
\end{document}
编辑
如果要以厘米为单位指定长度,而不是“块数”,则只需将定义修改\blank
为
\newcommand{\blank}[2][1]{%
\build{#1}{\nbpiece}\build{2*(#2-#1)}{\piece}\build{#1}{\nbpiece}}
可选参数仍然是两侧的最小块数;默认情况下,最小规则宽度为 1cm。\blank{3}
现在这样的规范意味着“构建一个宽度为 3cm 的规则”,可以跨行拆分”。
如果需要长规则,例如填充行,也可以方便地更改定义以\piece
允许一点退格,以避免框过满
\newcommand{\piece}{\hskip0pt minus 3pt\hbox to .5cm{\hrulefill}}
答案2
一种可能性是:使用\gap
使用破折号包装,但要将“下划线空白”后的标签去掉。
\documentclass{article}
\usepackage[phantomtext]{dashundergaps}
\usepackage{etoolbox}
\patchcmd{\gap}{\uline {#1} (\arabic {nth-gaps})}{\uline {#1}}{}{}
\begin{document}
Here's a sentence with an \gap{xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx} underlined blank that allows linebreaks.
\end{document}