我在这个问题中发现了以下很好的代码是否有一个可以创建光学标记阅读器答题纸的软件包?
代码 :
%%\listfiles
\documentclass[10pt]{article}
\usepackage{array}
\pagestyle{empty}
\parindent=0pt
\baselineskip=6.35mm
\parskip=0pt
\makeatletter
\newcommand*{\InitToks}{\toks@={}}
\newcommand{\AddToks}[1]{\toks@=\expandafter{\the\toks@ #1}}
\newcommand*{\PrintToks}{\the\toks@}
\unitlength=1mm
\def\BOX{\framebox(4.55,3){}}
\newcount\rowNo
\newcommand*{\dynTable}[1]{%
\begingroup
\InitToks
\AddToks{\tabcolsep=0pt\begin{tabular}{c*{5}{>{\centering}p{6.35mm}}}}%
\AddToks{&&A&B&C&D \tabularnewline}
\rowNo=0 %
\loop\ifnum\rowNo<#1\relax
\advance\rowNo by 1
\AddToks{\strobe & }
\expandafter\AddToks\expandafter{%
\the\rowNo &
\BOX & \BOX & \BOX & \BOX %& \BOX & \BOX & \BOX & \BOX & \BOX & \BOX%
\tabularnewline}%
\repeat
\AddToks{\end{tabular}}%
\PrintToks
\endgroup}
\makeatother
\def\strobe{\rule{0pt}{4mm}\rule{3mm}{2.54mm}}
\begin{document}
\sffamily\small
PREFERENCE\par
%\bigskip
\dynTable{40}
\end{document}
输出:
但我想自动标记正确答案看起来像
- 有人可以帮我解决这个问题吗?
答案1
我重写了代码来生成答案网格。希望这不是问题。
我创建了一个\answergrid
接受 3 个参数的命令:问题数量、每个问题可能的答案数量以及第三个参数是用分号分隔的答案列表。
\answergrid {10} {4} {1;2;4;3;2;3;1;2;0;0}
\documentclass{article}
\usepackage{tikz}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\answergrid}{ m m m }{
\begin{tikzpicture}[y=.6cm]
\seq_set_split:Nnn \l_tmpa_seq{;}{#3}
\newcounter{answer}
\int_step_inline:nnnn {1} {1} {#2} {
\stepcounter{answer}
\node at (##1+1,#1) {\Alph{answer}};
}
\int_step_inline:nnnn {1} {1} {#1} {
\node[fill=black,minimum~width=6mm,minimum~height=4mm] at (0, #1-##1) {};
\node at (1, #1-##1) {##1};
\int_step_inline:nnnn {1} {1} {#2} {
\node[draw,minimum~width=7mm,minimum~height=4mm] at (####1+1, ##1-1) {};
\int_compare:nNnTF {####1} = {\seq_item:Nn \l_tmpa_seq {#1-##1+1}} {
\node[fill,draw,minimum~width=7mm,minimum~height=4mm] at (####1+1, ##1-1) {};
}{
\node[draw,minimum~width=7mm,minimum~height=4mm] at (####1+1, ##1-1) {};
}
}
}
\end{tikzpicture}
}
\ExplSyntaxOff
\begin{document}
\sffamily\small
PREFERENCE\par
\answergrid {10} {4} {1;2;4;3;2;3;1;2;0;0}
\end{document}
用分号分隔的列表至少要包含与问题数量一样多的元素,这一点很重要。如果您不想标记任何答案,只需给出一个零列表{0;0;0;...;0;0;}
编辑:根据评论中要求的更改,我添加了一个可选参数。此参数是问题列表的第一个数字。因此
\answergrid [21] {20} {4} {1;2;4;3;2;3;1;2;0;0;1;2;4;3;2;3;1;2;0;0}
生成 20 个问题,编号为 21 至 40。这样你就可以使用
\answergrid {20} {4} {1;2;4;3;2;3;1;2;0;0;1;2;4;3;2;3;1;2;0;0}
\answergrid [21] {20} {4} {1;2;4;3;2;3;1;2;0;0;1;2;4;3;2;3;1;2;0;0}
得到 40 个问题。
\documentclass{article}
\usepackage{tikz}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\answergrid}{ O{1} m m m }{
\begin{tikzpicture}[y=.5cm]
\seq_set_split:Nnn \l_tmpa_seq{;}{#4}
\int_step_inline:nnnn {1} {1} {#3} {\node at (##1+1,#2) {\int_to_Alph:n{##1}};}
\int_step_inline:nnnn {#1} {1} {#1+#2-1} {
\node at (0, #1+#2-##1-1) {Question}; \node at (1, #1+#2-##1-1) {##1};
\int_step_inline:nnnn {1} {1} {#3} {
\node[draw,minimum~width=7mm,minimum~height=4mm] at (####1+1, ##1-#1) {};
\int_compare:nNnTF {####1} = {\seq_item:Nn \l_tmpa_seq {#1+#2-##1}} {\node[fill,minimum~width=7mm,minimum~height=4mm] at (####1+1, ##1-#1) {};}{}
}
}
\end{tikzpicture}
}
\ExplSyntaxOff
\begin{document}
\sffamily\small
\answergrid {20} {4} {1;2;4;3;2;3;1;2;0;0;1;2;4;3;2;3;1;2;0;0}
\answergrid [21] {20} {4} {1;2;4;3;2;3;1;2;0;0;1;2;4;3;2;3;1;2;0;0}
\end{document}
答案2
没有自动的方法。你至少要标记所有黑框。
\documentclass[10pt]{article}
\usepackage{array}
\pagestyle{empty}
\baselineskip=6.35mm
\parskip=0pt
\unitlength=1mm
\def\BOX{\framebox(4.55,3){}}
\def\BBOX{\framebox(4.55,3){\rule{4.2mm}{2.8mm}}}
\newcounter{rowNo}
\def\strobe{\rule{0pt}{4mm}\rule{3mm}{2.54mm}}
\begin{document}
\sffamily\small
PREFERENCE\par
\tabcolsep=0pt
\begin{tabular}{@{\strobe\stepcounter{rowNo}\quad\makebox[1em][r]{\therowNo}\quad}
*4{>{\centering}p{6.35mm}}}
\BBOX & \BOX & \BOX & \BOX \tabularnewline
\BOX & \BBOX & \BOX & \BOX \tabularnewline
\BOX & \BOX & \BOX & \BBOX \tabularnewline
\BOX & \BOX & \BBOX & \BOX \tabularnewline
\BOX & \BBOX & \BOX & \BOX \tabularnewline
\BOX & \BOX & \BBOX & \BOX \tabularnewline
\BBOX & \BOX & \BOX & \BOX \tabularnewline
\BOX & \BBOX & \BOX & \BOX \tabularnewline
\BOX & \BOX & \BOX & \BOX \tabularnewline
\BOX & \BOX & \BOX & \BOX \tabularnewline
\end{tabular}
\end{document}