免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

能不能做一个latex的模板,然后填充内容作为参数?

标题说得不太清楚。举例来说,我想做一个24题的pdf,前16题固定就是选择,中4题固定就是填空,后4题固定就是解答题。
就是想做一个latex的模板(假设叫mytemplate.tex),但是里面什么具体内容都没有,只有选择题的各种样式,比如第一行就是问题,然后后面一个小括号,是填选项用的,再换一行,写ABCD四个选项。
然后弄一个文本文件(假设叫myquestion.txt),第一行就是那个具体的问题,第二行就是那四个选项,用分号分隔。然后第三行,第四行同理,都是一行问题一行选项。
最后我想这样,latex mytemplate.tex myquestion.txt,就生成我想要的pdf文件。
这样下次做试卷的时候,我只要改myquestion.txt这个文件就行了。
听网友说这个在网页里是用xml,xsl之类的来做的,给我举了两个例子,但我勉强看懂,自己做又做不出来,而且还不是做成pdf。不知latex里有没有这样的方法。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

仅靠行来区分题目和选项,我不知道怎么弄,不过我想即使弄出来了也未必好用,因为这样的话题干就得一行写完,中间不能回车,这就不是很方便了。
所以我想还是在具体内容里插入一些标记来区分比较好做,下面我弄一个简单的例子。

主文件代码如下:
  1. \documentclass{ctexart}
  2. \usepackage{enumitem}
  3. \input{xztkpb.tex}%选择填空排版设计

  4. \newcount\tmcount
  5. \newcommand\TMBT{%
  6. \ifnum\tmcount=1\relax
  7. \noindent 一、选择题。\begin{enumerate}
  8. \else\ifnum\tmcount=4\relax
  9. \end{enumerate}二、填空题。\begin{enumerate}[resume]
  10. \else\ifnum\tmcount=7\relax
  11. \end{enumerate}三、解答题。\begin{enumerate}[resume]
  12. \fi\fi\fi
  13. }
  14. \makeatletter
  15. \newcommand\ENDTM{\@ifstar{\end{enumerate}}{\TM}}
  16. \makeatletter
  17. \long\def\TM#1==={\global\advance\tmcount by1\relax
  18. \TMBT\item#1\ENDTM}
  19. \long\def\xz#1;#2;#3;#4;{\fkh\xx{#1}{#2}{#3}{#4}}

  20. \begin{document}
  21. \input{test.tex}
  22. \end{document}
复制代码
代码中读入了两个文件:
(1)xztkpb.tex 是我以前弄的选择填空排版设计,代码较长就贴附件好了: xztkpb.tex (1.64 KB)
(2)test.tex 就是题目内容,其格式如下:
  1. \TM
  2. 选择一
  3. \xz 选项1;选项2;选项3;选项4;
  4. ===
  5. 选择二
  6. \xz 选项1;选项2;选项3;选项4;
  7. ===
  8. 选择三
  9. \xz 选项1;选项2;选项3;选项4;
  10. ===
  11. 填\tk 空一。
  12. ===
  13. 填\tk 空二。
  14. ===
  15. 填\tk 空三。
  16. ===
  17. 解答一
  18. ===
  19. 解答二
  20. ===
  21. 解答三
  22. ===*
复制代码
另外,这里我把前两部分设成了三题,你可以修改主文件的第9、11行的那两个数字来设置题数。
注意最后一题的 === 后面有个 * ,代表结束,这是必须要有的。

效果:
QQ截图20180909173708.png
2018-9-9 17:37
$\href{https://kuingggg.github.io/}{\text{About Me}}$

TOP

回复 2# kuing

谢谢,就是类似这样的。一时我还理解不了,先下载了回去好好琢磨一下。

TOP

忘了说,由于选项用分号分隔,万一选项的内容恰好含有分号,则需要用 {  } 括起来。
比如 \xz {选;项1};选项2;选项3;选项4; 酱紫。
同理,如果题干或选项含有 === 也得用 {  } 括起来,当然这个不太可能出现,这也是我选它作为分隔的原因。

TOP

返回列表 回复 发帖