我正在为一个项目制作多个脚本。基本上有 10 个左右的角色,在每个文档中,我希望在文档前面的目录之后有一个索引,其中包含每个角色的页码以及名称。理想情况下,这将被格式化为表格:
角色 | 描述 | 页面 |
---|---|---|
角色 1 | 福 | 1、5、10-11 |
角色 2 | 酒吧 | 2、5、10-11 |
角色3 | 巴兹 | 1、7、10-11、21 |
我尝试过将imakeidx
包与\makeindex
和 一起使用\printindex
,并且它与 一起工作,效果与 一样\index{term}
。但是,打印索引只会列出 之前的页码\printindex
。就像我说的,我需要它在开头,因为那是角色所在的地方。此外,我认为它没有我想要的格式选项。
我目前拥有的示例:
\documentclass{article}
\usepackage{imakeidx}
\makeindex
\begin{document}
% PARTICIPANTS {as commands so I can reference them easily}
\newcommand{\celebrant}{\index{CEL}CEL }
\newcommand{\cantor}{\index{CANTOR}CANTOR }
\newcommand{\mco}{\index{MC1}MC1 }
\newcommand{\mct}{\index{MC2}MC2 }
\newcommand{\serveri}{\index{S1}S1 }
\newcommand{\serverii}{\index{S2}S2 }
\newcommand{\serveriii}{\index{S3}S3 }
\newcommand{\serveriv}{\index{S4}S4 }
\newcommand{\serverv}{\index{S5}S5 }
\newcommand{\servervi}{\index{S6}S6 }
\section{Participants}
% This is where I want the index-- I want page numbers of where these roles are in the document
Celebrant (\celebrant): \underline{\makebox[1.8in][l]{}}\\
Mast. of Cer. (\mco): \underline{\makebox[1.8in][l]{}}\\
Cantor (\cantor): \underline{\makebox[1.8in][l]{}}\\
Mast. of Cer. (\mct): \underline{\makebox[1.8in][l]{}}\\
Server 1 (\serveri): \underline{\makebox[1.8in][l]{}}\\
Crucifix, book\\
Server 2 (\serverii): \underline{\makebox[1.8in][l]{}}\\
Candle, paten\\
Server 3 (\serveriii): \underline{\makebox[1.8in][l]{}}\\
Candle, paten\\
Server 4 (\serveriv): \underline{\makebox[1.8in][l]{}}\\
Altar setup, bells\\
\\
Server 5 (\serverv): \underline{\makebox[1.8in][l]{}}\\
Altar setup\\
Server 6 (\servervi): \underline{\makebox[1.8in][l]{}}\\
\section{Begin}
Form the procession line with the help of \mct.
The order is:
\begin{enumerate}
\item \servervi with Thurible
\item \serveri with Cross, \serverii and \serveriii with torches on each side
\item All other altar servers
\item \mct
\item Gospel
\item \mco
\item \celebrant
\end{enumerate}
\section{Section Two}
Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.
\printindex
\end{document}
有什么想法吗?我指的是索引的背面页面并没有找到解决办法。
谢谢!
编辑:修复表格格式并添加 MWE
答案1
imakeidx
创建索引文件作为编译的一部分,然后将其读回。因此,必须在\index
发出所有命令后找到它。但这不是标准情况。通常,您会单独创建索引,就像创建参考书目一样。然后,只需在下一次运行时包含生成的文件即可对索引进行排版。这意味着您可以在任何时候打印索引,就像打印参考书目一样。
makeidx
以下是使用而不是 的示例imakeidx
。正常编译,然后运行makeindex
,然后重新编译。您可能需要重复此操作才能使所有页码正确,因为插入索引会更改文档中所有后续页码。
这显示了如何使用您想要的信息(我认为!)生成表格样式的索引。我对您显示的输出和您拥有的输入之间的关系有点困惑,所以我不确定每个角色有多少不同的信息。我假设有三个(当角色名称和宏名称一致时)或四个(否则),并提供两个命令来定义它们。
\participant[<role name>]{<macro without backslash>}{<shorthand>}{<description>}
\participants{<comma-separated list}
列表中的每个项目由三或四个部分组成,这些部分由|
:<macro name without backslash>|<shorthand>|<description>
或分隔<role name>|<macro name>|<shorthand>|<description>
。如果元素括在花括号中,则元素可能包含逗号。tabindex
是用于生成实际表的环境。目前至少有两个问题。- 首先,它不是目标输出。这只是一个格式化表格的问题,因此您可以使用任意数量的问题来实现这一点。只需调整 的定义
tabindex
。您不需要摆弄.ist
。 tabular
其次,它包含一个丑陋的 hack 来消除多余的行。如果您的字体、间距或配置发生变化,则可能需要调整。
- 首先,它不是目标输出。这只是一个格式化表格的问题,因此您可以使用任意数量的问题来实现这一点。只需调整 的定义
该文件还将吐出roleindex.ist
,用于在makeindex -s roleindex.ist <filename>
重新编译之前创建索引。
\begin{filecontents}[overwrite]{roleindex.ist}
%% ref.: imakeindex.pdf 16
preamble "\n\\\begin{tabindex}{LLL}{\\\bfseries Role & \\\bfseries Description & \\\bfseries Pages}"
postamble "\\\\\n\\\end{tabindex}\n"
headings_flag 0
item_0 "\\\\\n"
delim_0 " & "
group_skip ""
\end{filecontents}
\documentclass{article}
% ateb: https://tex.stackexchange.com/a/714141/ addaswyd o gwestiwn TheSaltyPug: https://tex.stackexchange.com/q/714132/
\usepackage{makeidx}
\usepackage{array}
\usepackage{tabularx}
\newcolumntype{L}{>{\sffamily}l}
\usepackage{booktabs}
\makeindex
\NewDocumentEnvironment{tabindex}{mm+b}
{%
\section*{\indexname}%
\begin{center}
\begin{tabularx}{\linewidth}{#1}
\toprule
#2 \\
\midrule
\\[-5ex]
#3
\bottomrule
\end{tabularx}%
\end{center}%
}{}
\ExplSyntaxOn
\seq_new:N \l__rolesindex_tmpa_seq
\tl_new:N \l__rolesindex_tmpa_tl
\tl_new:N \l__rolesindex_tmpb_tl
\tl_new:N \l__rolesindex_tmpc_tl
\tl_new:N \l__rolesindex_tmpd_tl
\cs_new_protected:Nn \rolesindex_participant:nnnn
{
\ExpandArgs {c} \NewDocumentCommand { #2 } {} { \index {#1~(#3)~& ~#4} #3 }
}
\NewDocumentCommand \participant { O {\text_titlecase_all:n {#2}} m m m }
{
\ExpandArgs {c} \NewDocumentCommand { #2 } {} { \index {#1~(#3)~& ~#4} #3 }
}
\cs_generate_variant:Nn \rolesindex_participant:nnnn { VVVV }
\NewDocumentCommand \participants { m }
{
\clist_map_inline:nn { #1 }
{
\seq_set_split:Nnn \l__rolesindex_tmpa_seq { | } { ##1 }
\seq_pop_right:NN \l__rolesindex_tmpa_seq \l__rolesindex_tmpd_tl
\seq_pop_right:NN \l__rolesindex_tmpa_seq \l__rolesindex_tmpc_tl
\seq_if_empty:NTF \l__rolesindex_tmpa_seq
{
\tl_set_eq:NN \l__rolesindex_tmpb_tl \l__rolesindex_tmpd_tl
}{
\seq_pop_right:NN \l__rolesindex_tmpa_seq \l__rolesindex_tmpb_tl
}
\seq_if_empty:NTF \l__rolesindex_tmpa_seq
{
\tl_set:Ne \l__rolesindex_tmpa_tl { \text_titlecase_all:n { \l__rolesindex_tmpb_tl } }
}{
\seq_pop_right:NN \l__rolesindex_tmpa_seq \l__rolesindex_tmpa_tl
}
\rolesindex_participant:VVVV \l__rolesindex_tmpa_tl \l__rolesindex_tmpb_tl \l__rolesindex_tmpc_tl \l__rolesindex_tmpd_tl
}
}
\ExplSyntaxOff
% PARTICIPANTS {as commands so I can reference them easily}
\participant{celebrant}{CEL}{Foo}
\participant[Mas.~of Cer.]{mco}{MC1}{Baz}
\participants{% equivalent to multiple uses of \participant
cantor|CANTOR|Bar,
Mas.~of Cer.|mct|MC2|Foo-Bar,
Server 1|serveri|S1|{Crucifix, book},
Server 2|serverii|S2|{Candle, paten},
Server 3|serveriii|S3|,
Server 4|serveriv|S4|{Altar setup, bells},
Server 5|serverv|S5|{Altar setup},
Server 6|servervi|S6|,
}
\renewcommand \indexname{Participants}
\begin{document}
\printindex
\section{Begin}
Form the procession line with the help of \mct.
The order is:
\begin{enumerate}
\item \servervi{} with Thurible
\item \serveri{} with Cross, \serverii{} and \serveriii{} with torches on each side
\item All other altar servers
\item \mct{}
\item Gospel
\item \mco{}
\item \celebrant{}
\end{enumerate}
\cantor{} is on vacation.
\section{Section Two}
Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.
\end{document}
由于 Okular/KDE 错误,我的输出图像目前很糟糕。抱歉。
[试图删除该图片,因为该图片毫无用处。]
我无法弄清楚的事情:
- 如何删除在第一个索引条目之前插入的虚假行;
- 根据手册页,
item_0
它用于两个顶级项之间。很好。唯一的问题是,它不仅仅在那里使用。它还用于第一个顶级项之前,我找不到摆脱它的方法。
- 根据手册页,
- 如何在文件
t
中使用以 开头的任何命令.ist
。