我想创建一个练习集。为此,我为练习构建了一个环境:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\newcounter{wf}
\setcounter{wf}{0}
\newcounter{Aufg}
\setcounter{Aufg}{0}
\newcommand{\Punkte}{0}
\newenvironment{Aufgabe}[1]{%
\renewcommand*{\Punkte}{#1}%
\nopagebreak%
\begin{list}{}{}
\item[]%
\makebox[0pt][l]{%
\hspace{-1cm}\refstepcounter{Aufg}\textbf{\arabic{Aufg}}}%}%
\ignorespaces}{
\ifnum \Punkte>0 \hspace*{0pt} \hfill \mbox{(\Punkte\ BE)} \fi%
\end{list}%
}
\begin{document}
\begin{Aufgabe}{5}
This is exercise number one. Topic: Alpha
\end{Aufgabe}
\begin{Aufgabe}{4}
And here we have exercise number two. Topic: Beta
\end{Aufgabe}
\begin{Aufgabe}{2}
Finally exercise number three. Topic: Gamma
\end{Aufgabe}
\end{document}
我也有练习的子结构(练习 A2.1.1 左右),但我想在这里保持简单,只看一下练习编号。
对于索引,我通常会在练习一中写下 \index{Alpha} (在练习二中写下 Beta,在练习三中写下 gamma ),这将给我:
Alpha 1
Beta 1
伽马 1
因为它指的是页码。但我真正想要的是能给我练习编号的索引。例如,在练习一中使用 \myindex{Alpha}(在练习二中使用 Beta,在练习三中使用 Gamma),结果应该是
Alpha 1
Beta 2
伽马 3
或者如果有更复杂的结构和相同主题的练习,它应该是这样的:
阿尔法A2.2; A3.4
贝塔 B1.1;B1.2.1;B1.2.2
伽马 A1;B5.4
等等。
您对这个特殊问题有什么想法吗?提前感谢您的帮助。
答案1
这是第二种设置,其中练习参考包含一个年份,后面跟着一个空格和章节编号。我们使用xindy
而不是makeindex
,因为它允许我们定义参考的结构。
首先是文档。主要的区别在于的定义\theAufg
。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\newcounter{Aufg}[section]
\setcounter{Aufg}{0}
\newcounter{Jahr}
\setcounter{Jahr}{2016}
\renewcommand{\theAufg}{\arabic{Jahr} \thesection.\arabic{Aufg}}
\newcommand{\Punkte}{0}
\newenvironment{Aufgabe}[1]{%
\renewcommand*{\Punkte}{#1}%
\nopagebreak%
\begin{list}{}{}
\item[]%
\makebox[0pt][l]{%
\hspace{-1cm}\refstepcounter{Aufg}\textbf{\arabic{Aufg}}}%}%
\ignorespaces}{
\ifnum \Punkte>0 \hspace*{0pt} \hfill \mbox{(\Punkte\ BE)} \fi%
\end{list}%
}
\usepackage{index}
\newindex[theAufg]{aufg}{aidx}{aind}{Aufgaben Index}
\begin{document}
\section{A Section}
\begin{Aufgabe}{5}
This is exercise number one. Topic: Alpha \index[aufg]{Alpha}
\end{Aufgabe}
\begin{Aufgabe}{4}
And here we have exercise number two. Topic: Beta \index[aufg]{Beta}
\end{Aufgabe}
\section{Another Section}
\begin{Aufgabe}{2}
Finally exercise number three. Topic: Gamma \index[aufg]{Gamma}
\end{Aufgabe}
\printindex[aufg]
\end{document}
现在我们创建一个xindy
“模块” aufg.xdy
:
(define-location-class "exercises" ("arabic-numbers" :sep " " "arabic-numbers" :sep "." "arabic-numbers"))
这支持数字后跟空格,后跟 2 个以“。”分隔的数字。您可以根据需要添加更多情况,例如对于附录字母,请使用“ALPHA”而不是“arabic-numbers”。
现在对索引进行排序,使用以下命令:
texindy -M aufg.xdy -o yourdocument.aind yourdocument.aidx
并再次运行 LaTeX。
答案2
该软件包index
提供了创建新索引的功能。您还可以指定使用计数器来代替页码。
\usepackage{index}
\newindex[theAufg]{aufg}{aidx}{aind}{Aufgaben Index}
This is exercise number one. Topic: Alpha \index[aufg]{Alpha}
And here we have exercise number two. Topic: Beta \index[aufg]{Beta}
Finally exercise number three. Topic: Gamma \index[aufg]{Gamma}
然后你必须跑
makeindex -o yourdocument.aind yourdocument.aidx
对该索引进行排序和处理。
现在是关于复杂结构的问题。
只需定义\theAufg
显示练习的结构化数字(例如section number . exercise number
。然后您必须添加一个指定.
分隔符的索引样式,否则makeindex
会抱怨。
这是一个完整的例子:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\newcounter{Aufg}[section]
\setcounter{Aufg}{0}
\renewcommand{\theAufg}{\thesection.\arabic{Aufg}}
\newcommand{\Punkte}{0}
\newenvironment{Aufgabe}[1]{%
\renewcommand*{\Punkte}{#1}%
\nopagebreak%
\begin{list}{}{}
\item[]%
\makebox[0pt][l]{%
\hspace{-1cm}\refstepcounter{Aufg}\textbf{\arabic{Aufg}}}%}%
\ignorespaces}{
\ifnum \Punkte>0 \hspace*{0pt} \hfill \mbox{(\Punkte\ BE)} \fi%
\end{list}%
}
\usepackage{index}
\newindex[theAufg]{aufg}{aidx}{aind}{Aufgaben Index}
\begin{document}
\section{A Section}
\begin{Aufgabe}{5}
This is exercise number one. Topic: Alpha \index[aufg]{Alpha}
\end{Aufgabe}
\begin{Aufgabe}{4}
And here we have exercise number two. Topic: Beta \index[aufg]{Beta}
\end{Aufgabe}
\section{Another Section}
\begin{Aufgabe}{2}
Finally exercise number three. Topic: Gamma \index[aufg]{Gamma}
\end{Aufgabe}
\printindex[aufg]
\end{document}
运行makeindex
:
makeindex -o yourdocument.aind -s aufg.ist yourdocument.aidx
其中aufg.ist
包含
page_compositor "."