如何“清理”发送到目录的内容?(删除索引等)

如何“清理”发送到目录的内容?(删除索引等)

我想使用这样的标记命令:\pkg{classicthesis}不仅可以排版条目,还可以添加边注或索引条目等副作用。(请参见下面的示例。)

我的问题是,我希望能够在分段命令中使用这些\chapter{The \pkg{classicthesis} Package},但这样做.toc也会将额外的内容发送到文件中,这可能会在格式化目录时导致问题。

问题: 我怎样才能清除发送到.toc文件中的除文本(和格式信息)之外的所有内容?

我知道我可以做一些事情,比如\chapter[The \pkg*{classicthesis} Package]{The \pkg{classicthesis} Package}定义带星号的表格来省略额外的信息,但这意味着不必要地重复内容。

\chapter注意:我正在为一个班级做这件事,重新定义等进行清理没有任何问题,我只需要内部部分。

这是 MWE。在第二种情况下,索引命令同时出现在节标题和目录中:后者在索引中引入了不需要的条目,并且边距也出现在目录中。通常每个单独的问题都有解决方法(在这种情况下,包scrindex解决了索引问题,并且可以\marginpar在目录中禁用),但我仍然想要一个通用的解决方案。

\documentclass{scrbook}
\usepackage{makeidx}
%\usepackage{scrindex} % This will fix the index issue.
\usepackage{suffix}
\usepackage{makerobust}
\usepackage{classicthesis}

\newcommand*{\pkg}[1]{\texttt{#1}\marginpar{\texttt{#1}}\index{environments!#1@\texttt{#1}}}
\WithSuffix\newcommand\pkg*[1]{\texttt{#1}}
\MakeRobustCommand\pkg

\makeindex

\begin{document}
\tableofcontents
\chapter{The Problem}
\section[The \pkg*{classicthesi} Package]{The \pkg{classicthesis} Package}
This works, but is error-prone and violates the DRY principle.
\section{The \pkg{classicthesis} Package}
This fails because the indexing commands are sent to the .toc file.
\printindex
\end{document}

答案1

在使用 KOMA-Script 类时,您也在使用包 KOMA-Script 包tocbasic。因此,您可以简单地使用\BeforeStartingTOC来重新定义宏,直到它们在toc文件中和文件本地使用toc

\documentclass{scrbook}
\usepackage{makeidx}
%\usepackage{scrindex} % This will fix the index issue.
\usepackage{suffix}
\usepackage{makerobust}
\usepackage{classicthesis}

\newcommand*{\pkg}[1]{\texttt{#1}\marginpar{\texttt{#1}}\index{environments!#1@\texttt{#1}}}
\WithSuffix\newcommand\pkg*[1]{\texttt{#1}}
\MakeRobustCommand\pkg

\makeindex

\BeforeStartingTOC[toc]{%
  \expandafter\let\expandafter\pkg\csname \SuffixName\pkg*\endcsname
}

\begin{document}
\tableofcontents
\chapter{The Problem}
\section{The \pkg{classicthesis} Package}
This works.
\printindex
\end{document}

彻底停用单参数宏使用类似

\makeatother
\BeforeStartingTOC{%
   \let\pkg\@firstofone
}
\makeatletter

您可以\BeforeStartingTOC在当前页面 238找到有关的更多信息英文版 KOMA-Script 手册. 软件包的完整文档tocbasic可在同一手册的第 10 章中找到。

据我所知,他们不可能只是说停用所有宏,因此这个问题的答案仍未确定。但如果我正确理解了你的问题,停用\pkg并不是你真正想要的。你仍然\pkg想要\texttt

另一个解决方案可能是停用\index\marginpar

\BeforeStartingTOC[toc]{%
  \renewcommand*{\index}[1]{}%
  \renewcommand*{\marginpar}[2][]{}%
}

而不是重新定义\pkg

相关内容