在文档的不同部分打印 \newcommand 中的参数

在文档的不同部分打印 \newcommand 中的参数

我正在尝试制作一个可重复使用的 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}

相关内容