使用 \strut 和 \hfill 进行右对齐,结果不一致

使用 \strut 和 \hfill 进行右对齐,结果不一致

我正在编写考试,并使用\marks带有 和 的宏\strut\hfill 显示每个问题的可用分数,这些分数右对齐、加粗并放在方括号中。但有时它不会将其放在右边!在 MWE 输出中,1 和 4 是正确的,2 和 3 是错误的。在源中,1 和 3 在 之前没有空格\marks,2 和 4 有。

我正在使用\strut感谢答案这里

\documentclass[11pt]{article}
\usepackage{fullpage}
\renewcommand{\marks}[1]{\strut\hfill\textbf{[#1]}}

\begin{document}

Sample Exam!

\begin{enumerate}
\item xx3 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx\marks{5}
\item xx3 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx \marks{5}
\item xxx4 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx\marks{5}
\item xxx4 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx \marks{5}


\end{enumerate}
\end{document}

平均能量损失

答案1

借用 DE Knuth 本人的话(在 TeXbook 索引中查找“Bourbaki”):

\newcommand{\Marks}[1]{{% note the additional brace
  \unskip % remove a possible space
  \nolinebreak % no break here
  \hfil % fill
  \penalty50 % a possible break point here
  \hspace{0.5em}% minimum separation
  \mbox{}% something that cannot be discarded
  \nolinebreak % no break here
  \hfil % fill
  \textbf{[#1]}% the marks
  \parfillskip=0pt % no fill by \par
  \finalhyphendemerits=0 % a hyphen on the line above the marks is good
  \par % end the paragraph
}}

可以在 处进行换行\penalty50,这将删除以下内容\hspace{0.5em}

%代码中符号前的空格为通缉

\documentclass[11pt]{article}
\usepackage{fullpage}

\newcommand{\Marks}[1]{{% note the additional brace
  \unskip % remove a possible space
  \nolinebreak % no break here
  \hfil % fill
  \penalty50 % a possible break point here
  \hspace{0.5em}% minimum separation
  \mbox{}% something that cannot be discarded
  \nolinebreak % no break here
  \hfil % fill
  [#1]% the marks
  \parfillskip=0pt % no fill by \par
  \finalhyphendemerits=0 % a hyphen on the line above the marks is good
  \par % end the paragraph
}}

\begin{document}

Sample Exam!

\begin{enumerate}
\item xx3 x xxxxxx xxxx xxx xxxxxxxx xxxxx xxxx xxxxxx xxxxxxx xxx xxxxxxxxx xxxxxxxxxx\Marks{5}
\item xx3 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx \Marks{5}
\item xxx4 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx\Marks{5}
\item xxx4 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx \Marks{5}


\end{enumerate}
\end{document}

重新定义您不知道的命令,在本例中为原始命令\marks

在此处输入图片描述

尝试其他答案中提出的解决方案

\item xx3 x xxxxxx xxxx xxx xxxxxxxx xxxxx xxxx xxxxxx xxxxxxx xxxxx xxxxxxxxx xxxxxxxxxx\Marks{5}

你会看到差异。

答案2

当单行不够宽时,可以~在前面引入不可断开的空格来形成新行。\null

\documentclass[11pt]{article}
\usepackage{fullpage}
\renewcommand{\marks}[1]{\null~\hfill\textbf{[#1]}}

\begin{document}

Sample Exam!

\begin{enumerate}
\item xx3 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx\marks{5}
\item xx3 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx \marks{5}
\item xxx4 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx\marks{5}
\item xxx4 x xxxxxx x x x x xxx x x x x x x xx x x x x x xxxx x x x xx x xxxxxxx xxx x x x x xx \marks{5}    
\end{enumerate}

\end{document}

在此处输入图片描述

相关内容