我正在尝试在论文末尾制作一个索引,其中不仅包含提到特定术语的页码,还包括我想要手动提供的与该术语相关的另外两条信息。为了清晰起见,我可能想把所有这些都放在一个表格中,但我怀疑它不会放在一页纸上,所以我可以改为以列表形式进行。
我设想的表格如下:
语言 | 与论证相关的形态? | 小句级形态? | 页码 |
---|---|---|---|
科普特语 | 不? | 焦点一致 | 2-4, 7, 19, 31 |
豪萨语 | 是的 | 萃取形态 | 3-4, 7, 17, 22 |
等等。第一列是我想要基于其建立索引的键,中间两列是我需要为每个键手动提供的信息,最后一列是找到该键的页码。同样,我也可以将其作为列表来执行;也许是这样的:
- 科普特语(2-4、7、19、31):无与参数相关的形态;焦点一致
- 豪萨语(3-4, 7, 17, 22):论元相关形态学;提取形态学
cleveref
我可以使用和手动构建这样的表格或列表\cpageref
,但我必须为每种语言名称的每个实例设置一个新标签,而且我不确定它是否能正确连接页码或删除重复的页码。除此之外,我不知道如何做到这一点。
作为奖励,如果能够将某些键组合在一起就好了(例如,科普特语和豪萨语都放在一行下,第一列写有“Afroasiatic”,其他三列留空,并附加其他几个标题),但如果能省去我手动构建表格的麻烦,按字母顺序排列也是可以的。
是否有任何方便的方法可以做到这一点,或者我是否试图做一些 LaTeX 的索引机制没有设置的事情?
答案1
假设您想用这种方法代替常规索引,那么解决方案就是巧妙地处理其中的theindex
和\item
命令的定义方式。不幸的是,默认定义并不容易解析参数\item
。我正在考虑类似
{\catcode`\^^M=\active
\gdef\@idxitem#1,#2^^M{%
... stuff goes here careful about newlines!
}%
}
这会将索引条目#1
和页码放入#2
您将希望能够在表中定义额外信息。您可以创建如下命令:
\newcommand{\languageinfo}[3]{%
\@namedef{#1@argument}{#2}
\@namedef{#1@clause}{#3}
}
可以这样使用:
\languageinfo{Hausa}{yes}{extraction morphology}
那么上面的定义\@idxitem
可能是这样的
#1&\@nameuse{#1@argument}&\@nameuse{#1@clause}\\
现在我们只需要重新定义theindex
环境:
{\catcode`\^^M=\active
\gdef\theindex{%
\let^^M\relax % don't let bare newlines do anything
\let\item\@idxitem
\let\indexspace\relax
\let\par\relax
\chapter*{\indexname}
\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\centering
\begin{tabular}{llll}% assuming that it fits on one line
\textbf{language}&\textbf{argument-associated morphology?}&\textbf{clause-level morphology?}&\textbf{page numbers}\\
}}
\def\endtheindex{\end{tabular}}
如果您的索引超过一页,您可能想做一些不同的事情。
如果你想对语言进行分组,你可以利用LaTeX 索引中的\subitem
和命令,例如,\subsubitem
\index{Afroasiatic languages!Hausa}
但您将失去易于解析的参数,\item
并且宏会变得更加复杂。(实际上,您将定义\@idxitem#1^^M
,然后必须解析出 中是否有逗号#1
。)
以上所有用法都@
用于宏名,因此命令/环境的定义应该用\makeatletter
...括起来\makeatother
,或者(更好)放入包中,比如说,thesisindex.sty
用 加载\usepackage{thesisindex}
。