如何存取一个“数组”或“列表”

2021-01-25 17:47发布

## 编译环境 操作系统 * [x] Windows 10 * [ ] macOS * [ ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [x] TexLive `2020`...

## 编译环境 操作系统 * [x] Windows 10 * [ ] macOS * [ ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [x] TexLive `2020` * [ ] MikTeX `版本号` * [ ] CTeX `若需勾选,请把[ ]改成[x]` ## 我的问题 需求是这样的,前面使用 csv 排版很多试题(50道选择题+判断题),然后在最后一页用一个表格输出答案。一开始想着在前面拼接一个命令,比如 `\ansfornow`,每遇到一个答案就把它拼进去,但是因为表格中存在 & 和换行符,会报错,所以又想用一个数组或者列表之类的东西把它存起来,后面在表格中用一个循环,从数组中读取答案,把它们放进表格当中,但是这里不太会,也没搜到什么。 后来找到一个办法,用 `csname` 创建很多的命令,代码如下: ``` \newcommand{\saveToAns}[2]{\expandafter\newcommand\expandafter{\csname theAnswer-#1\endcsname}{#2}} \newcommand{\useAnAns}[1]{\csname theAnswer-#1\endcsname} ``` 但是在使用 `multido` 做循环的时候,发现输出不了: ``` \documentclass{ctexart} \usepackage{multido} \newcommand{\saveToAns}[2]{\expandafter\newcommand\csname theAnswer-#1\endcsname{#2}} \newcommand{\useAnAns}[1]{\csname theAnswer-#1\endcsname} \begin{document} \multido{\i=1+1,\n=1+3}{5}{\saveToAns{\i}{s}} \multido{}{10}{\TeX\ } 123 \multido{\i=1+1}{5}{\useAnAns{\i}} \saveToAns{99}{a} \useAnAns{99} \useAnAns{1} \end{document} ``` ![](https://wenda.latexstudio.net/data/attach/210125/jxduRASw.png) 直接使用明文写 `\saveToAns{99}{a}` 和 `\useAnAns{99}` 是可以输出的,但是用 `\multido` 的都输出不了,麻烦帮我看看是什么问题导致的,或者有更好的实现方式吗?
2条回答
我的完整用法类似于这样: ``` \documentclass{ctexart} \usepackage{expl3,enumitem,etoolbox,array} \ExplSyntaxOn \cs_new_eq:NN \Repeat \prg_replicate:nn \ExplSyntaxOff \usepackage{datatool} \newcounter{question} \newcommand{\question}[1]{ \stepcounter{question} \global\csdef{questiontext\thequestion}{#1} \begin{enumerate}[label=\thequestion] \item #1 \end{enumerate} } \begin{document} \newcommand{\slpath}{csv/1-选择.csv} \group{选择题}{(每题2分)} \DTLloaddb{selects}{\slpath} % \DTLdisplaylongdb{selects} \begin{questions}[p] \DTLforeach*{selects}{% \curquestiontext=题目,\anstextA=答案A,\anstextB=答案B,\anstextC=答案C,\anstextD=答案D,\correctAnswer=正确答案}{% %\ifthenelse{\DTLcurrentindex=30}{\dtlbreak}{}% \question{\curquestiontext{}} \fourchoices{\anstextA}{\anstextB}{\anstextC}{\anstextD} \addToAnswer{\noexpand\correctAnswer}% } \end{document} ``` 因为有选择判断和问答,最后出来的答案里面全是最后一个问答题的答案,也就是说 `\correctAnswer` 在循环的过程中没有展开,这个怎么办啊?

一周热门 更多>