我有一套數學試卷,要用 TeX 寫,根據主題分組,例如抽象代數、實分析、微分方程等。
依照問題順序鍵入試卷中出現的問題,並根據每個問題的主題為每個問題加上一些標籤。在輸出中,同一主題的所有試卷中的問題排列在一起。
答案1
可能有更好的方法來處理這個問題,但我在我的 LaTeX 書中做了一些與練習答案類似的事情,透過建立包中可用的擴展,verbatim
使我可以將問題和答案放在一起,即使答案將列印在每章末尾都有單獨的部分。
這是我使用的程式碼(這全部在文件中,.cls
因此它用作@
字母)。我將註釋清單以使事情更清楚
首先新建一個寫入(每個類別都需要一個,但請記住,只有 16 個可用的寫入流,並且 LaTeX 自己使用其中的一些)。
\newwrite\ans@out
\immediate\openout\ans@out=\jobname.ans
定義答案環境這是基於套件verbatimwrite
中的範例環境verbatim
文件。以 開頭的行\immediate\write
用於新增輸入檔案中內容以外的其他文字。
\def\answer{%
\@bsphack
\let\do\@makeother\dospecials
\immediate\write\ans@out{\string\preans}
\immediate\write\ans@out{\string\par\string\noindent
{\string\sc\space Exercise\string~\thequestion.}\quad}%
\immediate\write\ans@out{\string\vadjust{\string\nobreak}\relax}
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\ans@out
{\the\verbatim@line}}%
\verbatim@start}
\def\endanswer{%
\immediate\write\ans@out{}
\@esphack}
這是我用來格式化答案的巨集之一。實際上,我對中間生成的輸出被標記得有多難看感到有點尷尬。
\def\preans{\if@nobreak\global\@nobreakfalse\else\bigfilbreak\fi}
定義一個指令來實際列印答案我們關閉寫入,然後讀取我們寫回的檔案。
\def\printanswers{\immediate\closeout\ans@out
\@input{\jobname.ans}
}
排版問題的宏這些不太有趣,只是為了完整性才出現在這裡。
\newcounter{question}[chapter]
\def\thequestion{\thechapter-\arabic{question}}
\def\question{\par\refstepcounter{question}\noindent
{\sc Exercise \thequestion.}
\ignorespaces}
\def\endquestion{\par}
完成所有這些定義後,我們可以在輸入檔中執行類似的操作:
\begin{question}
What \LaTeX\ commands would you type at the beginning of the input file for
an article which had the title ``Birds \& Bees of North
America,'' was written by ``Dr.~H.T. Jones'' and had today's date
printed for the date field?
\end{question}
\begin{answer}
\begin{verbatim}
\documentclass{article}
\title{Birds \& Bees of North America}
\author{Dr.~H.T. Jones}
\begin{document}
\maketitle
...
\end{verbatim}
Note that \& is input as \verb+\&+ and a \verb+~+ is used after
``Dr.''\ to prevent an end-of-sentence space from being printed
there (a \verb*+\ + could have been used as well). Today's date
was supplied by omitting the date field.
\end{answer}
哪個產生question
在和環境出現的地方answer
並且命令出現的位置\printanswers
。
在您的情況下,您需要模擬answers
每個類別的環境,然後使用\printallofit
命令或類似命令來關閉並重新讀取所有產生的輸入檔。
答案2
biblatex
plusoscola
可以做你想要的,但是學習曲線很高。每個問題將被定義為 biblatex 項目,並使用關鍵字欄位來定義問題的主題類。 oscola
具有為每個主題建立單獨表格的工具。
或者,如果這是一項一次性任務,我可能會這樣做:將所有問題放入純文字檔案中,每行一個;每個問題的前綴\item \vphantom{\hphantom{keyword}}
wherekeyword
被每個主題的關鍵字取代; grep 檔案將某個主題的所有問題傳送到自己的檔案中,然後將這些輸出檔案包含在主 LaTeX 文件中。