我想使用这样的标记命令:\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
。