我正在使用考试课程进行测试,并使用我找到的 mdframed 解决方案这里用虚线画出一个答题空间来写下答案。
我想要的是找到一种方法,让每页上的方框均匀地结束在页面底部,而不管其上方问题的长度如何。目前,我手动指定每个问题的点线数和 vspace,并使用数字,以便方框填充空间到页面底部 \approx,并且虚线在底部 \approx 几厘米以内。
我尝试使用这种方法使用 vspace 让框移动到页面底部,但即使用额外的\advance\spaceleft by -various pt
类型行来尝试调整,框的底部总是会出现在下一页上。
有人能建议一种方法,让 vspace 移到页面底部,这样我只需手动指定行数即可?或者甚至再加一点来自动调整虚线的数量?
我想调整以填充空间的当前代码示例:
\documentclass[addpoints,12pt,a4paper,dvipsnames]{exam}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage[top=2cm, bottom=2cm, left=2.5cm, right=2.5cm, headsep=1cm]{geometry}
\newcount\myloopcounter
\newdimen\spaceleft
\spaceleft=\textheight
\newdimen\spaceleftminus
\newdimen\spacetofill
\newcommand{\repeatit}[2][10]{%
\myloopcounter0% initialize the loop counter
\loop\ifnum\myloopcounter < #1 % Test if the loop counter is < #1
#2%
\advance\myloopcounter by 1 %
\repeat % start again
}
\renewcommand\subpartlabel{(\thesubpart)}
\renewcommand\partshook{\renewcommand\makelabel[1]{##1\hfill}}
\renewcommand\subpartshook{\renewcommand\makelabel[1]{##1\hfill}}
\makeatletter
\newcount\my@repeat@count
\newcommand{\myrepeat}[2]{%
\begingroup
\my@repeat@count=\z@
\@whilenum\my@repeat@count<#1\do{#2\advance\my@repeat@count\@ne}%
\endgroup
}
\makeatother
\usepackage{mdframed}
\newenvironment{mymdf}
{\mdfsetup{
innertopmargin=15pt,leftmargin=-20pt, rightmargin=-1.3cm, innerleftmargin=20pts
}
\begin{mdframed}%
}
{\end{mdframed}}
\renewcommand{\questionshook}{\setlength{\rightmargin}{1.1cm} \setlength{\labelsep}{6pt}}
\renewcommand{\partshook}{\setlength{\rightpointsmargin}{1.35cm} \setlength{\rightmargin}{0cm} \setlength{\itemsep}{0pt} \setlength{\topsep}{0pt} \setlength{\leftmargin}{0.7cm}}
\renewcommand{\subpartshook}{\setlength{\topsep}{0pt} \setlength{\itemsep}{0pt}}
\pointsdroppedatright
\setlength{\parskip}{12pt}
\begin{document}
\begin{questions}
\qformat{\textbf{\thequestion .} \hfill [Maximum mark: \totalpoints] \hspace{13.35cm} \vrule depth 1em width 0cm}
\question[1]
\lipsum[1-2]
\vspace{2mm}
\begin{mymdf}
\begin{spacing}{1.6}
\vspace{0.5cm}
\repeatit[6]{\myrepeat{129}{.}\\}
\vspace{0.1cm}
\end{spacing}
\end{mymdf}
\newpage
\question[]
\lipsum[1][1-2]
\begin{parts}
\part[2] \lipsum[1][1] \droppoints
\part[3] \lipsum[1][1-2] \droppoints
\end{parts}
\vspace{0.3cm}
\begin{mymdf}
\begin{spacing}{1.6}
\vspace{0.5cm}
\repeatit[16]{\myrepeat{129}{.}\\}
\vspace{0.1cm}
\end{spacing}
\end{mymdf}
\newpage
\question[1]
\lipsum[1]
\vspace{1cm}
\begin{mymdf}
\begin{spacing}{1.6}
\vspace{0.5cm}
\repeatit[8]{\myrepeat{129}{.}\\}
\vspace{0.1cm}
\end{spacing}
\end{mymdf}
\end{questions}
\begin{center}
\vspace{0.1cm}
\textbf{END OF TEST}
\end{center}
\end{document}
答案1
我建议使用 tcolorbox。它有一个键height fill
,可以让框填满页面的其余部分。然后您可以使用它\tcbtextheight
来用内容填充空间。例如
\documentclass[addpoints,12pt,a4paper,dvipsnames]{exam}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage[top=2cm, bottom=2cm, left=2.5cm, right=2.5cm, headsep=1cm]{geometry}
\usepackage[most]{tcolorbox}
\newtcolorbox{mymdf}
{height fill=true,
before upper=
{\vbox to \tcbtextheight
{\cleaders\vbox {\hbox to \linewidth {\strut \dotfill}}\vfill}}
}
\begin{document}
\lipsum[1]
\begin{mymdf}
\end{mymdf}
\newpage
\lipsum[1-2]
\begin{mymdf}
\end{mymdf}
\end{document}