此 MWE 是考试的一部分。在每个问题之前,我都会在左边空白处放置一个方框,其中包含问题编号和最高分数。
仅针对这个 MWE,我将 改为\makebox
以\framebox
强调下面的问题。
问题本身(内容)应该从左边距的末尾开始,也就是在前一段的开头下方。我有两个问题:
该盒子似乎比我预期的占用更多空间:1.7厘米
盒子周围似乎有一些空间,这是我不想要的。
显然,我试图用负数来补偿它\hspace
,但在更复杂的实际考试中,这种补偿会采取不同的值,所以你需要不断调整。
如何让盒子的尺寸正好是 1.7 厘米而不是更大,以及如何让盒子和后续文本之间不留空格/粘连或其他任何东西?
\documentclass[12pt,a4paper,notitlepage]{report}
\usepackage[left=25mm,right=25mm,top=15mm,height=252mm,includefoot]{geometry}
\usepackage{showframe} % temporary, to emphasize my point !
\usepackage{xifthen} % conditionals, booleans
\setlength{\parindent}{0mm} % no paragraph indentation
\newcounter{countSubExercises} % number of sub level exercises: a,b,c,...
\newlength{\boxWidth}
\setlength{\boxWidth}{1.7cm}
\newcommand{\newSubEx}[2]
% #1 = no. of score pts
% #2 = content
{
\refstepcounter{countSubExercises} % increment subEx counter
% box with question nr and max score in the left margin
\hspace*{-\boxWidth}
\framebox[\boxWidth][r]{{\tiny\sl #1p}\enspace{\bf\alph{countSubExercises}}\enspace}
#2\\
}
\begin{document}
\chapter*{Exercise title}
A first instructive paragraph\\
\newSubEx{2}{Comment on blah blah ...}
\\
\\
A second instructive paragraph\\
\newSubEx{4}{Calculate the perimeter of ...}
\end{document}
答案1
由于您似乎想要一个 1.7 厘米宽的框,我猜标签(点和字母)应该从左边距 1.7 厘米处开始。因此,您需要将一个 1.7 厘米宽的左对齐框嵌套到一个零宽度的右对齐框中。
我还添加了另一个框以使字母对齐,以补偿两位数的分数。
小心定义中的未受保护的空格!并且不要将其用作\\
结束行/段落的正常方式。
\documentclass[12pt,a4paper,notitlepage]{report}
\usepackage[left=25mm,right=25mm,top=15mm,height=252mm,includefoot]{geometry}
\usepackage{showframe} % temporary, to emphasize my point !
\usepackage{xifthen} % conditionals, booleans
\setlength{\parindent}{0mm} % no paragraph indentation
\newcounter{countSubExercises} % number of sub level exercises: a,b,c,...
\newlength{\boxWidth}
\setlength{\boxWidth}{1.7cm}
\newcommand{\newSubEx}[2]{%
% #1 = no. of score pts
% #2 = content
\par\medskip
\refstepcounter{countSubExercises}% increment subEx counter
% box with question nr and max score in the left margin
\makebox[0pt][r]{%
\framebox[\boxWidth][l]{% <-------------- change to \makebox
\makebox[1.2em][l]{\tiny\slshape #1p}%
\enspace
\textbf{\alph{countSubExercises}}%
\enspace
}%
}%
#2%
}
\begin{document}
\chapter*{Exercise title}
A first instructive paragraph
\newSubEx{2}{Comment on blah blah ...}
\bigskip
A second instructive paragraph
\newSubEx{4}{Calculate the perimeter of ...}
\bigskip
A third instructive paragraph
\newSubEx{12}{Calculate the perimeter of ...}
\end{document}
答案2
你可以这样做\llap
:
\documentclass[12pt,a4paper,notitlepage]{report}
\usepackage[left=25mm,right=25mm,top=15mm,height=252mm,includefoot]{geometry}
\usepackage{showframe} % temporary, to emphasize my point !
\usepackage{xifthen} % conditionals, booleans
\setlength{\parindent}{0mm} % no paragraph indentation
\newcounter{countSubExercises} % number of sub level exercises: a,b,c,...
\newlength{\boxWidth}
\setlength{\boxWidth}{1.7cm}
\newcommand{\newSubEx}[2]
% #1 = no. of score pts
% #2 = content
{
\refstepcounter{countSubExercises} % increment subEx counter
% box with question nr and max score in the left margin
\leavevmode
\llap{\framebox[\boxWidth][r]{{\tiny\sl #1p}\enspace{\bf\alph{countSubExercises}}\enspace}}%
#2\\
}
\begin{document}
\chapter*{Exercise title}
A first instructive paragraph
\newSubEx{2}{Comment on blah blah ...}
\\
\\
A second instructive paragraph
\newSubEx{4}{Calculate the perimeter of ...}
\end{document}
答案3
把它封闭起来\makebox[0pt][r]{..}
似乎可以起到作用。
\newcommand{\newSubEx}[2]{\refstepcounter{countSubExercises}%
\makebox[0pt][r]{\framebox[\boxWidth][r]{{\tiny\sl#1p}\enspace{\bfseries
\alph{countSubExercises}}\enspace}}#2\\\relax}
无论如何,我认为有更清洁的选择,更少\\
。
嗯……或者你只是需要%
像 Werner 说的那样……我不确定我是否理解了这个问题。如果这不能满足你的需要,请告诉我,我会删除答案。