提问于:
浏览数:
2605
我希望生成一个填空空格,在行末需要它的长度可变(比如最长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 回答
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")
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。