将关键词和关键短语插入目录中

将关键词和关键短语插入目录中

为了使文档(这里是我的博士论文)的结构直接从目录中变得易于理解,我想在目录中的每个元素中插入一些关键词或关键短语。我在一本教科书中看到了这种设备,我认为这对较长的文档来说是一个有益的小改进。

我对所需布局的第一次描述缺乏精确性,我希望这次描述更加清楚。

用户友好性要求:我正在寻找一种解决方案,能够以以下方式处理属于某个部分、章节等的关键词或关键短语:

a)将关键词/短语按行排列

b) 用连字符分隔

c) 在实际零件、章节等下方标明一行。

d) 没有页码的关键词/短语

e)根据关键词/短语的数量,可以超过一行

它看起来应该是这样的:

内容

1节................................1

关键词 1 - 关键短语 2 - 关键词 3

1.1 小节..................................5

关键词 1 - 关键短语 2 - 关键词 3 -

关键词 4 - 关键短语 5 - 关键词 6

对作者友好性的要求:为了方便文档作者,希望有一个命令能够适应给定的章节、部分等,而无需在命令中进行任何规范,以防止作者每次在将其从一个章节复制到另一个部分、小节等时调整命令。

在 .tex 文件中它应该看起来像这样:

\begin{document}
\section{section} 
bla bla \command{keyword1} few lines or pages of bla bla \command{keyword2} ....

\subsection{subsection} 
bla bla \command{keyword1} few lines or pages of bla bla \command{key phrase2} ....
\end{document}

有人知道该怎么做吗?

PS:要将目录中的关键字转换为 hyperref-keywords,请看这里:目录中的关键词超链接化. 它与 egregs 解决方案配合使用。

答案1

\documentclass[a4paper]{article}
\usepackage{etoolbox}

\makeatletter
\newif\ifsection
\newif\ifsubsection
\newtoks\keywordstoks
\preto\section{\flushkeywords\sectiontrue\subsectionfalse}
\preto\subsection{\flushkeywords\sectionfalse\subsectiontrue}
\preto\enddocument{\flushkeywords}

\newcommand{\flushkeywords}{%
  \ifsection\addtocontents{toc}{\formatkwsection{\protect\@gobble\the\keywordstoks\relax}}\fi
  \ifsubsection\addtocontents{toc}{\formatkwsubsection{\protect\@gobble\the\keywordstoks\relax}}\fi
  \keywordstoks={}}

\newcommand{\keyword}[1]{\@bsphack\keywordstoks=\expandafter{\the\keywordstoks\kwsep#1}\@esphack}
\newrobustcmd{\kwsep}{~-- }
\newrobustcmd{\formatkwsection}[1]{#1\par\medskip}
\newrobustcmd{\formatkwsubsection}[1]{{\leftskip=2.2em\relax#1\par}\smallskip}
\makeatother

\begin{document}

\tableofcontents

\section{Section}

Abc \keyword{key1} def \keyword{key2}

\subsection{Subsection}

Ciao \keyword{key3} ciao \keyword{key4}

\subsection{Another}

x

\end{document}

\formatkwsection我将把重新定义并\formatkwsubsection满足其需求的任务留给 OP 。

答案2

tocloft包为章节提供了这种功能:\cftchapterprecistoc;为章节创建类似的命令并不难。这是一个小例子:

\documentclass{report}
\usepackage{tocloft}

% Define a \cftsectionprecistoc
% based on the existing \cftchapterprecistoc
\makeatletter
\newcommand{\cftsectionprecistoc}[1]{\addtocontents{toc}{%
  {\leftskip \cftsecindent\relax
   \advance\leftskip \cftsecnumwidth\relax
   \rightskip \@tocrmarg\relax
   \textit{#1}\protect\par}}}
\makeatother
\begin{document}

\tableofcontents
\chapter{A chapter title}
\cftchapterprecistoc{some keywords}

\section{A section title}
\cftsectionprecistoc{some more keywords}
\subsection{A subsection title}
\end{document}

代码部分输出

答案3

您可以使用\addtocontents和/或\addcontentsline命令;您可以控制要添加的文本的许多方面:

\documentclass{book}
\usepackage{lipsum}

\begin{document}
\tableofcontents

\addtocontents{toc}{\smallskip\hfil\protect\parbox[t]{.8\textwidth}
{\protect\lipsum[1]}\hfil\par\smallskip}

\chapter{Test chapter}
\lipsum[1]
\addtocontents{toc}{Here we add some text without page number.\par}

\section{Test section}

\lipsum[1-10]

\addcontentsline{toc}{subsection}{Some text formatted like an unnumbered subsection}

\lipsum[1-5]

\subsection{Test subsection}

\addcontentsline{toc}{chapter}{Some text formatted like a chapter and with page number\protect\numberline{}}

\lipsum[1-6]

\section{Another test section}

\end{document}

内容

编辑:考虑到新的要求,我定义了一个\AddToToC带有两个强制参数的新命令:第一个参数表示部分单元的级别(-1 表示部分、0 表示章节、1 表示节等...),第二个参数包含将添加到目录的文本(关键字);下面是该命令的定义及其使用示例:

\documentclass{book}
\usepackage{ifthen}

\newlength\UnitIndent
\newlength\UnitHangInd

% \AddToToC{<level>}{<text>}
\newcommand\AddToToC[2]{%
  \ifthenelse{\equal{#1}{-1}}
    {\gdef\UnitIndent{2em}\gdef\UnitHangInd{2em}}{}
  \ifthenelse{\equal{#1}{0}}
    {\gdef\UnitIndent{0em}\gdef\UnitHangInd{1.5em}}{}
  \ifthenelse{\equal{#1}{1}}
    {\gdef\UnitIndent{2.3em}\gdef\UnitHangInd{3.8em}}{}
  \ifthenelse{\equal{#1}{2}}
    {\gdef\UnitIndent{5.5em}\gdef\UnitHangInd{7em}}{}
\addtocontents{toc}{\protect\hspace*{\UnitIndent}\hangindent=\UnitHangInd{\itshape#2}\par}
}

\begin{document}
\tableofcontents

\part{Test part}
\AddToToC{-1}{some keywords for the part.}

\chapter{Test chapter one}
\AddToToC{0}{some keywords for the chapter.}

\section{Test section}
\AddToToC{1}{some keywords for the section.}

\subsection{Test subsection}
\AddToToC{2}{some keywords for the subsection.}

\end{document}

内容

所用的长度是书籍文档类的长度;其他文档类将需要调整长度。该命令不满足最后一个要求,但它所需的只是对第一个参数进行简单的更改。

相关内容