同一行右对齐文本

同一行右对齐文本
\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 的空格。

相关内容