脚本中角色的索引?

脚本中角色的索引?

我正在为一个项目制作多个脚本。基本上有 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

在此处输入图片描述

相关内容