我正在尝试制作一个可重复使用的 Latex 文档,用于设置考试问题和答案。由于未来的目标用户不熟悉 Latex,我使用 \newcommand 制作了一些可供他们使用的模板,并且它为他们完成所有格式化。新命令可以以这种方式使用。
\questiontext{Enter your question text here}{Enter your answer here}
不过,我只是想让 \newcommand 中的两个参数打印在文档的不同部分,但彼此对应。
下面的代码显示了我现在拥有的以及我想要拥有的 MWE。
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage{tabularx}
\usepackage{xifthen}% provides \isempty test
\newcounter{questionnumber}[section]
\newcounter{questionpartnumber}[questionnumber]
\newcommand{\questiontext}[2]{
\stepcounter{questionnumber}
\ifthenelse{\isempty{#1}}{\noindent\textbf{\arabic{questionnumber}.}\\}
{\begin{tabularx}{\textwidth}{p{0.5cm} p{12.5cm} @{\extracolsep{\fill}}r}
\textbf{\arabic{questionnumber}.} & \noindent\parbox[t]{\hsize}{#1} & \ifx\empty#2\else[#2]\fi\\\\
\end{tabularx}}
}
\newcommand{\questiontextwoscore}[1]{
\stepcounter{questionnumber}
\ifthenelse{\isempty{#1}}{\noindent\textbf{\arabic{questionnumber}.}\\}
{\begin{tabularx}{\textwidth}{p{0.5cm} p{12.5cm} @{\extracolsep{\fill}}r}
\textbf{\arabic{questionnumber}.} & \noindent\parbox[t]{\hsize}{#1}\\\\
\end{tabularx}}
}
\begin{document}
\section{Questions (Wrong)}
\questiontext{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}{5}
\questiontext{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}{500}
\questiontext{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}{123}
% what i want
\section{Questions (Right)}
\questiontextwoscore{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}
\questiontextwoscore{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}
\questiontextwoscore{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}
\section{Answers}
\questiontextwoscore{5}
\questiontextwoscore{500}
\questiontextwoscore{123}
\end{document}
我当前的输出在第 1 部分,而我理想中寻找的是在第 2 和第 3 部分。
总而言之,有没有办法制作一个乳胶命令,它接受两个参数,按顺序打印所有参数 1,然后按顺序打印所有参数 2。
谢谢!
答案1
通常,如果您需要稍后打印某些内容,则可以将其保存在宏主体中(\answertext
在我的示例中为宏)。此宏保存文本:
\printQA{1}{answer1}\printQA{2}{answer2} etc.
该\printQA#1#2
宏可打印问题或答案。它解决了此类打印的排版设计问题,并且该设计对于问题和答案而言很常见。
\printQA
处理时打印问题(使用)。处理\questiontext
时打印答案。\answertext
\documentclass{article}
\newcount\QAnum
\long\def\printQA#1#2{\par
\hbox{\hbox to .1\hsize{\hss\bf#1.\quad}\vtop{\hsize=.9\hsize \noindent#2}}
\bigskip
}
\def\answertext{}
\let\ea=\expandafter
\long\def\questiontext#1#2{\par
\advance\QAnum by1
\printQA{\the\QAnum}{#1}
\ea\addto\ea\answertext\ea{\ea\printQA\ea{\the\QAnum}{#2}}
}
\long\def\addto#1#2{\ea\def\ea#1\ea{#1#2}}
\begin{document}
\section{Questions}
\questiontext{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}{5}
\questiontext{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}{500}
\questiontext{Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.}{123}
\section{Answers}
\answertext
\end{document}