\documentclass[12pt] {article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{enumerate}
\begin{document}
\begin{enumerate}[1.]
\item Qustion no 1.
\begin{flushright}
[Ans:\;0.168]
\end{flushright}
\mbox{[Hint:]}
\item Qustion no 2.
\begin{enumerate}
\item sub question a?
\item sub question b?\hspace*{\fill}\makebox[1in][l]{[Ans: (a)\;0.0357,\;(b)\;0.736]}
\end{enumerate}
\mbox{[Hint:]}
\end{document}
第一个答案仍在页边距内,但第二个答案超出了页边距。\begin{flushright}
提供了更多的垂直空间,并且\hspace*{\fill}\makebox[1in][l]
没有将文本保持在 mirgin 内。如何解决这个问题?
答案1
您可以定义宏\toright
:
\def\toright#1{\leavevmode\unskip\nobreak\hfill\penalty13
\null\nobreak\hskip1em plus1fill\hbox{#1}}
然后写
\item sub question b? \toright {[Ans: (a)\;0.0357,\;(b)\;0.736]}
必须\toright {parameter}
是段落中的最后一个对象。
工作原理:如果文本适合单行,则存在可拉伸的粘连\hfill
,并且\hskip 1em plus1fill
比默认的 glye 更具可拉伸性\parfillskip
。因此,\parfillskip
获得零宽度,并使用提到的粘连。如果文本不适合单行,则在处断开\penalty13
。\hfill
填充第一行中的空间并\hskip 1em plus 1fill
填充第二行中的空间。它受到\null
框的保护,因为\hskip
它本身会创建一个可丢弃的胶水。
1em
为什么参数中有\hskip
:我们不希望出现左侧文本直接跟在右侧文本后面而没有空格的情况。它们之间必须至少有 1em 的空格。