我正在尝试制作一个包含大量描述任务的部分的文档。我想用某种标签将几个部分标记为“高优先级”,然后建立一个目录,其中仅列出标有此标签的部分。在 LaTeX 中执行此操作的最佳方法是什么?
答案1
下面是您可能想要的模型。
\highpriorityname
它通过使用打印文档中所有带星号的部分,提供了新的“高优先级部分列表”(如 中定义) \listofhpsection
。新的“列表”可以通过tocloft
包裹。每个带星号的部分也包含在常规中,并带有编号。这是通过使用\tableofcontents
常规命令的重新定义来实现的\section
xparse
。另外,作为一种内联标记机制,每个“高优先级”部分将在\star
末尾添加一个星号。
因此,简而言之,\section*
命令将使用传统的section
计数器/数字加上进行排版\star
,但它也将包含在新的“高优先级”部分列表中。使用 发出的部分\section
将以传统方式排版。
\documentclass{article}
\usepackage[titles]{tocloft}% http://ctan.org/pkg/tocloft
\usepackage{xparse}% http://ctan.org/pkg/xparse
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{letltxmacro}% http://ctan.org/pkg/letltxmacro
\newcommand{\highpriorityname}{List of High Priority Sections}
\newlistof{hpsection}{hps}{\highpriorityname}
\begin{document}
% ================ FRONTMATTER ================
\tableofcontents
\listofhpsection
% ================ REDEFINTION ================
\LetLtxMacro{\oldsection}{\section}% Store old \section macro
\RenewDocumentCommand{\section}{s o m}{%
\setcounter{hpsection}{\value{section}}% Copy section counter
\IfBooleanTF{#1}
{\refstepcounter{hpsection}%
\IfNoValueTF{#2}%
{\oldsection[#3]{#3$^\star$}\addcontentsline{hps}{section}{\numberline{\thehpsection} #3}}% starred section \section*{<title>}
{\oldsection[#2]{#3$^\star$}\addcontentsline{hps}{section}{\numberline{\thehpsection} #2}}% starred section \section*[<ToC>]{<title>}
}%
{\IfNoValueTF{#2}%
{\oldsection{#3}}% unstarred section \section{<title>}
{\oldsection[#2]{#3}}% unstarred section \section[<ToC>]{<title>}
}%
}
% ================ MAINMATTER ================
\section{First section} \lipsum[1-2]
\section*{Second section} \lipsum[3-4]
\section{Third section} \lipsum[5-6]
\section*{Fourth section} \lipsum[7-8]
\section*{Fifth section} \lipsum[9-10]
\section{Final section} \lipsum[11-12]
\end{document}
文档结构是这样的,部分重新定义发生之间 FRONTMATTER
和MAINMATTER
。否则Contents
和List of High Priority Sections
也将被编号为部分。
保存原始\section
命令是使用letltxmacro
包裹, 尽管lipsum
提供虚拟文本。