答案1
使用来自的代码沃纳的解决方案对于另一个问题,您可以\leaders
在替换文本中放置一个删除垂直跳过的命令。
\leaders
取一些盒子并多次复制以填充一些指定的水平空间。因此这里有一个版本:我们制作一个包含一个点的盒子,周围有一些空间,我们要求盒子序列填充一个可大幅拉伸的水平空间0pt plus 1filll
。这将挤出答案材料之前行上的其他可拉伸空间,将其推向右侧并用一行点填充中间的空间。
为了删除数字,我们只需注意到 Werner 的代码已经提供了一个命令\answerline*
,因此当我们希望抑制数字时我们可以使用它。
\documentclass[a4paper]{exam}
\usepackage{letltxmacro,xpatch}
\xpatchcmd{\answerline}% <cmd>
{\par\nobreak\vskip\answerskip}% <search>
{\leaders\hbox{\hskip0.2em .\hskip0.2em}\hskip 0pt plus 1filll}% <replace>
{}{}% <success><failure>
\xpatchcmd{\answerline}{\fi \par}{\fi}{}{}% Remove line break after \answerline
\makeatletter
\LetLtxMacro{\oldanswerline}{\answerline}
\RenewDocumentCommand{\answerline}{s o}{%
\begingroup
\IfBooleanTF{#1}
{\def\@queslevel{\relax}}% \answerline*
{}% \answerline
\IfNoValueTF{#2}
{\oldanswerline[{}]}% \answerline
{\oldanswerline[#2]}% \answerline[..]
\endgroup
}
\makeatother
\begin{document}
\begin{questions}
\question Write hello \answerline*[hello] to your mother
\question Write hello \answerline[hello] to your mother
\end{questions}
\end{document}