我正在编写考试,并使用\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}