编辑

编辑

我想在文档中创建一个“答案空白”。它基本上看起来像一条下划线,上面没有任何内容。我找到了一个关于它的问题(如何用 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}

相关内容