可能标题不太清楚。
事实上,我在上课时会做笔记,有时老师会说,考试时要用到的东西就是管道(提示,需要了解的东西)。由于文本中有几行管道,完成后有 1000 多行,所以我习惯于使用管道来\usepackage[makeindex]{imakeidx}
创建多个索引,并且只使用管道创建索引(但其他一些索引使用相同的方式创建了其他内容)。
工作正常,但问题是,我没有部分章节部分小节小节标题引用(并且有段落和小标题引用也很好)。
有办法吗?通过添加一列,将整个标题(章节等)放在索引句子之前?
下面是我希望它看起来像的一个例子:
或者,如果不可能,例如如果标题(部分、章节等)添加到页码之前(或之后,我不在乎):
我把页码用粗体标出以便更清楚,但这不是必要的。
这里的目的是为了能够立即知道,而不必查看页码的位置(与部分/章节/部分的编号相同......因为它很容易改变),索引文本在文档中的位置,等等正在谈论的内容。
谢谢阅读。
答案1
以下解决方案使用与生成目录相同的方法。重要事项列表的条目被写入文件.aux
,然后在文档末尾,LaTeX 将其写入文件\jobname.imp
。在下一次运行中,将读取此文件并设置表格。
\documentclass{report}
\usepackage{longtable}
\makeatletter
\newlength\ImpLineWidth
\newtoks\ImpToks
\newcommand*{\printimportant}{%
\clearpage
\section*{\centering Index of important things}%
\setlength{\ImpLineWidth}{\linewidth}%
\addtolength{\ImpLineWidth}{-2\tabcolsep}
\begin{longtable}{@{}p{.6\ImpLineWidth}p{.4\ImpLineWidth}@{}}%
\global\ImpToks{}%
\@starttoc{imp}%
\the\ImpToks
\end{longtable}%
}
\newcommand*{\importantentry}[2]{%
\global\ImpToks\expandafter{%
\the\ImpToks
\centering #1&
\centering #2\tabularnewline
}%
\ignorespaces
}
\newcommand*{\important}[1]{%
\addtocontents{imp}{%
\protect\importantentry{#1}{%
\ifnum\value{part}=0 %
\else
part~\thepart, %
\fi
\ifnum\value{chapter}=0 %
\else
chapter~\thechapter, %
\ifnum\value{section}=0 %
\else
section~\thesection, %
\fi
\fi
page~\thepage
}%
}%
}
\makeatother
\begin{document}
\part{First part}
\important{Some indexed \dots}
\chapter{First chapter}
\important{Again}
\section{First section}
\important{Idem 1}
\chapter{Second chapter}
\important{Idem 2}
\printimportant
\end{document}
基于索引的变体
以下使用索引机制。对于已经有一个索引的情况,我使用包index
来获取第二个索引。(还有其他包multind
,例如……)
titleref
章节标题通常不可用。例外是像、nameref
或 这样的软件包的最新标题zref-titleref
。为了最好地控制编号和标题,需要修补章节命令。在这里,我使用了一种快捷方式,即\addcontentsline
假设只有章节标题是相关的,并且也进入了目录。仍然存在一个小故障,零件编号和零件标题之间的空间很大,标准类\hspace{1em}
在这里使用硬编码。但无论如何,您正在使用不同的未知设置,如单词编号所示。为简单起见,还假设零件标题始终存在。
第一次运行 LaTeX 会test.tex
生成test.imx
。最终的索引文件test.imp
通过以下方式生成:
makeindex -o test.imp test.imx
还可以使用与标准设置不同的样式文件来控制最终索引文件的输出。
\documentclass{report}
\usepackage{index}
\newindex{imp}{imx}{imp}{Index of important things}
\makeatletter
\newlength\ImpLineWidth
\newtoks\ImpToks
\newcommand*{\printimportant}{%
\begingroup
\def\numberline##1{##1:~}%
\renewcommand*{\theindex}{%
\clearpage
\section*{\centering Index of important things}%
\setlength{\parskip}{1ex plus .5ex minus .25ex}%
\setlength{\parindent}{0pt}%
\let\item\@idxitem
}{%
\clearpage
}%
\printindex[imp]%
\endgroup
}
% Remember sectioning titles
\newcommand*{\imp@toc}{toc}
\@ifdefinable{\imp@org@addcontentsline}{%
\let\imp@org@addcontentsline\addcontentsline
\renewcommand*{\addcontentsline}[3]{%
\edef\imp@temp{#1}%
\ifx\imp@temp\imp@toc
\begingroup
\expandafter\protected@xdef\csname imp@current@#2\endcsname{#3}%
\csname imp@cleanup@#2\endcsname
\endgroup
\fi
\imp@org@addcontentsline{#1}{#2}{#3}%
}%
}
% Clear subordinate sectioning titles
\def\imp@temp#1#2{%
\expandafter\newcommand\csname imp@cleanup@#1\endcsname{%
\global\expandafter\let\csname imp@current@#2\endcsname\@empty
\csname imp@cleanup@#2\endcsname
}%
}
\imp@temp{part}{chapter}
\imp@temp{chapter}{section}
\imp@temp{section}{subsection}
\newcommand*{\important}[2][]{%
\def\imp@temp{#1}%
\protected@edef\imp@temp{%
\noexpand\index[imp]{%
\ifx\imp@temp\@empty
\else
#1@%
\fi
#2; %
% assuming the part is always present.
part~\csname imp@current@part\endcsname
\ifx\imp@current@chapter\@empty
\else
, chapter~\csname imp@current@chapter\endcsname
% section, ...
\fi
|textbf%
}%
}%
\imp@temp
}
\makeatother
\begin{document}
\tableofcontents
\part{First part}
\important{Some indexed \dots}
\chapter{First chapter}
\important{Again}
\section{First section}
\important{Idem 1}
\chapter{Second chapter}
\important{Idem 2}
\printimportant
\end{document}