将点放在右侧,无边距

将点放在右侧,无边距

我正在使用exam文档类,并尝试了各种点放置选项。本质上,我想要像 这样的功能\pointsdroppedatright。唯一的问题是它会产生边距。我希望完全避免边距,这样文本的显示方式就与使用 将其向右推的方式非常相似\hfill。我相信这可以用 来实现qformat,但我不知道如何对部分、子部分等做到这一点。

这是我现在拥有的最低限度的工作示例:

\documentclass{exam}

\pointsdroppedatright
\marksnotpoints

\begin{document}
    \begin{questions}
        \question Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        \begin{parts}
            \part[4] Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \droppoints
        \end{parts}
    \end{questions}
\end{document}

我目前拥有的

这是我想要的:

我想要的是

答案1

一个简单的解决方案:

\documentclass{exam}
\usepackage{xpatch}

\pointsdroppedatright
\marksnotpoints
\makeatletter
\def\mydroppoints{%
  \leavevmode\unskip\nobreak\hfill
  (\@points~marks)
  \par
}
% show marks automatically
% \xpretocmd{\endparts}{\mydroppoints}{}{}
\makeatother

\begin{document}
    \begin{questions}
        \question Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
        \begin{parts}
            \part[4] Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \mydroppoints
        \end{parts}
    \end{questions}
\end{document}

在此处输入图片描述

编辑

据 @David Purton 称,更好的解决方案如果空间不够,则允许换行。

\def\mydroppoints{%
  {\unskip\nobreak\hfil\penalty50
   \hskip2em\hbox{}\nobreak\hfil(\@points~marks)
      \parfillskip=0pt \finalhyphendemerits=0 \par}}

回复评论

当点为1时,显示1 mark而不是1 marks

\def\mydroppoints{%
  {\unskip\nobreak\hfil\penalty50
    \hskip2em\hbox{}\nobreak\hfil
    (\@points~mark\expandafter\ifx\@points1\else s\fi)
    \parfillskip=0pt \finalhyphendemerits=0 \par}
}

相关内容