我希望生成一个填空空格,在行末需要它的长度可变(比如最长3cm,最短2cm)以适应行宽。我用`\hspace*{<橡皮长度>}`可以做到。 现在我希望在空格中填入文字,达到相同的效果,不知道该怎么实现。我试了`\makebox[橡皮长度]{文字}`,但得到的盒子宽度并不能自动伸缩,橡皮长度不起作用。 ```tex \documentclass{ctexart} \usepackage{showframe} \newlength{\blank} \setlength\blank{3cm minus 1cm} \begin{document} 白日依山尽黄河入海流欲穷千里目更上一层楼\uline{\hspace*{\blank}}。 %这一行行末有足够空间,下划线长度为\blank的最大值3cm。 白日依山尽黄河入海流欲穷千里目更上一层楼白日依山尽\uline{\hspace*{\blank}}。 %这一行行末不足3cm,但超过2cm,下划线长度自动缩短至行末。 白日依山尽黄河入海流欲穷千里目更上一层楼\uline{\makebox[\blank]{黄河}}。 %这一行行末有足够空间,下划线长度为\blank的最大值3cm。 白日依山尽黄河入海流欲穷千里目更上一层楼白日依山尽\uline{\makebox[\blank]{黄河}}。 %这一行行末不足3cm,超过2cm,但下划线长度没有自动缩短至行末,而是超出了右边界,橡皮长度没有起作用。 \end{document} ``` ![最后一行空格长度不能自动伸缩](https://pics.latexstudio.net/data/images/201911/3101900af422659.png "最后一行空格长度不能自动伸缩")

2 回答2

0
`\makebox` 的宽度是固定值,会自动忽略弹性部分。 ```tex \documentclass{ctexart} \usepackage{showframe} \newlength{\blank} \setlength\blank{3cm minus 1cm} \def\xxspace{\hspace{1cm minus 1cm}} \begin{document} 白日依山尽黄河入海流欲穷千里目更上一层楼\uline{\hspace*{\blank}}。 %这一行行末有足够空间,下划线长度为\blank的最大值3cm。 白日依山尽黄河入海流欲穷千里目更上一层楼白日依山尽\uline{\hspace*{\blank}}。 %这一行行末不足3cm,但超过2cm,下划线长度自动缩短至行末。 白日依山尽黄河入海流欲穷千里目更上一层楼\uline{\xxspace 黄河\xxspace}。 %这一行行末有足够空间,下划线长度为\blank的最大值3cm。 白日依山尽黄河入海流欲穷千里目更上一层楼白日依山尽\uline{\xxspace 黄河\xxspace}。 %这一行行末不足3cm,超过2cm,但下划线长度没有自动缩短至行末,而是超出了右边界,橡皮长度没有起作用。 \end{document} ``` ![](https://pics.latexstudio.net/data/images/201911/592028b84e87310.png)
0
排版习题,还是建议你使用类似`xsim`这样的专用宏包。 在问答主站里也有许多试卷模板,也可以参考一下,如:[https://www.latexstudio.net/archives/51635.html](https://www.latexstudio.net/archives/51635.html "https://www.latexstudio.net/archives/51635.html")

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。