我使用 LaTeX 完成很多课堂作业(工作表、图形等)。有一件事我还没有转变,那就是考试写作。考试的示例页面可能看起来像这样。这只是一部分,没有标题等,我习惯于使用这些。
我没有转到 LaTeX,因为我需要将答案框和空白放在页面上的特定位置,坦率地说,在 MS Word 中拖动小圆角文本框来实现我的布局非常容易。但是,能够使其中一些空白更加一致、化学方程式布局更简单等,可能会带来相当多的编程好处。我还有一张针对每场考试的多项选择题页面,我很想将很多布局工作转移到 LaTeX。
实现这样的外观是否合理,并且具有足够的灵活性,能够根据每个问题来移动这些空白等?我发现这关于使用零尺寸框的页面。似乎适用,但在我开始之前我只想检查一下。任何资源或一般的代码想法对于做我想做的事情都会很感激。我相信将来我会带着一些 MWE 回来,但现在只是收集有关执行此操作的信息。
另外,如果答案是“可能需要做更多工作,但仍然使用 MS Word”,我也可以接受 :)
答案1
这是我的评论的扩展,显示了概念证明。我们创建一个命令,将答案框放置在距离命令放置位置给定水平距离的位置。您需要自己考虑垂直高度,尽管如果需要,也可以将其添加到命令中。这实际上并不需要tikzmark
我在评论中提到的库;它只是直接放置框。如果需要,您可以将显式xshift
和yshift
参数传递给\tikz
命令,以将框放置在您喜欢的任何位置。
\documentclass{article}
\usepackage{tikz}
\tikzset{answer box/.style={draw,rounded corners,minimum size=1cm,text width=1cm}}
\NewDocumentCommand{\answerbox}{O{1cm}m}{\hspace*{#1}\tikz[overlay]{\node[answer box,#2,] {}}}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[label=\bfseries{Q}\arabic*,itemsep=2\baselineskip]
\item What is the velocity of an unladen swallow?\answerbox[\fill]{text width=3cm,label={Answer}}
\item Who expects the Spanish Inquisition?\answerbox[1cm]{label=Answer}
\item Calculate the answer to life, the universe, and everything.\\[2\baselineskip]\answerbox[2.5cm]{text width=5cm,label=Final Answer}
\item Do I really need to use \texttt{tikzmark}? See red box!\answerbox{text width=3cm,label={Arbitrary Position},xshift=3.5cm,yshift=3.5cm,red, align=center,node contents={No!}}
\end{enumerate}
\end{document}
但是我想绝对定位!
如果您确实想要绝对定位,这里有一个命令版本,可将节点定位到命令设置的位置\tikzmark
。此命令版本的语法与上一个相同,但允许您在括号中添加可选的节点位置。
\answerbox[hspace](coordinate){further tikz keys}
这是一个完整的例子:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\tikzset{answer box/.style={draw,rounded corners,minimum size=1cm,text width=1cm}}
\NewDocumentCommand{\answerbox}{O{1cm}d()m}{
\IfNoValueTF{#2}
{\hspace*{#1}\tikz[overlay]{\node[answer box,#3,] {}}}
{\hspace*{#1}\tikz[overlay,remember picture]{\node[answer box,#3] at (pic cs:#2) {}}}
}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[label=\bfseries{Q}\arabic*,itemsep=2\baselineskip]
\item What is the velocity of an unladen swallow?\answerbox[\fill]{text width=3cm,label={Answer}}
\item Who expects the Spanish Inquisition?\answerbox[1cm]{label=Answer}
\item Calculate the answer to life, the universe, and everything.\\[2\baselineskip]\answerbox[2.5cm]{text width=5cm,label=Final Answer}\hfill\tikzmark{S}
\item Do I really need to use \texttt{tikzmark}? See red box!\answerbox{text width=3cm,label={Arbitrary Position},xshift=3.5cm,yshift=3.5cm,red, align=center,node contents={No!}}
\item But I want absolute positioning, not relative! See purple box!\answerbox(S){text width=3cm,label={Absolute},violet,align=center,font={OK!}}
\end{enumerate}
\end{document}
警告
在这些代码示例中,我使用了node contents
和font
将文本放在框内。这是不是文本在实际中应如何放置。如果要为框提供内容,则应将内容作为命令的参数,并将其直接传递给\node
命令参数。{}