我的 Latex 文档有大量的paragraph
s(每页大约 10 个),我想建立所有这些段落的标题列表。
例如,给定以下文档:
\paragraph{Bla1} Bla bla bla bla
\paragraph{Bla2} Bla bla bla bla
\paragraph{Bla3} Bla bla bla bla
\paragraph{Bla4} Bla bla bla bla
输出结果如下
Bla1 — Bla2 — Bla3 — Bla4
有什么想法吗?我尝试自定义目录,但无法排除章节和小节...
谢谢!
答案1
以下代码显示了一种可能性,可以根据所使用的文档类和特定需求进行修改:
\documentclass{article}
\makeatletter
\newcommand\Paragraph[1]{%
\addcontentsline{prg}{Paragraph}{#1}%
\paragraph{#1}}
\newcommand\l@Paragraph[2]{#1,~\textit{#2}}
\newcommand\listParagraphname{List of Paragraphs}
\newcommand\listofParagraphs{%
\section*{\listParagraphname}\@starttoc{prg}}
\makeatother
\begin{document}
\section{Test section}
\subsection{Test subsection}
\subsubsection{Test subsubsection}
\listofParagraphs
\Paragraph{Test paragraph one}
\Paragraph{Test paragraph two}
\Paragraph{Test paragraph three}
\Paragraph{Test paragraph four}
\Paragraph{Test paragraph five}
\end{document}
要点是
要使用
\Paragraph
一个强制参数的新定义的命令;\Paragraph
将其参数和当前页码(如果不需要页码,只需,~\textit{#2}
在下面的代码中删除)写入扩展名为的新内容文件.prg
;它还使用该参数作为标准命令的强制参数\paragraph
来实际排版文档中的段落。使用另一个新定义的命令
\listofParagraphs
读取内容文件中写的信息.prg
,并在调用命令的地方进行排版(通过 完成\@starttoc{prg}
)。\listofParagraphs
还用于\section*
生成可由 控制的标题\listParagraphname
。该命令
\l@Paragraph
实际上排版了新目录中的条目。第一个参数是标题,第二个参数是页码。
要在条目之间添加分隔符,您可以使用\addtocontents
:
\documentclass{article}
\makeatletter
\newcommand\Paragraph[1]{%
\addcontentsline{prg}{Paragraph}{#1}%
\paragraph{#1}}
\newcommand\l@Paragraph[2]{#1,~\textit{#2}}
\newcommand\listParagraphname{List of Paragraphs}
\newcommand\listofParagraphs{%
\section*{\listParagraphname}\@starttoc{prg}}
\makeatother
\newcommand\AddSep{\addtocontents{prg}{--}}
\begin{document}
\section{Test section}
\subsection{Test subsection}
\subsubsection{Test subsubsection}
\listofParagraphs
\Paragraph{Test paragraph one}
\AddSep
\Paragraph{Test paragraph two}
\AddSep
\Paragraph{Test paragraph three}
\AddSep
\Paragraph{Test paragraph four}
\AddSep
\Paragraph{Test paragraph five}
\end{document}
答案2
这是一个 hack 解决方案(改编自目录格式的自定义假设列表):
\documentclass{book}
\usepackage{ntheorem}
\newtheorem{paralist}{Paragrahs}[chapter]
\let\oldparagraph\paragraph
\renewcommand*{\paragraph}[1]{%
\stepcounter{paralist}%
\addtheoremline{paralist}{#1}%
\oldparagraph{#1}
}
\begin{document}
\chapter*{List of Paragraphs}
\listtheorems{paralist}
\chapter{foo}
\paragraph{Bla1} Bla bla bla bla
\chapter{bar}
\paragraph{Bla2} Bla bla bla bla
\paragraph{Bla3} Bla bla bla bla
\paragraph{Bla4} Bla bla bla bla
\end{document}
答案3
\section
这里有一个奇怪的想法 - 切换 LaTeX 对和的解释怎么样\paragraph
?!这样,你可以将段落“升级”到tocdepth
1 级,同时将部分“降级”到5 级。不过,所有与部分相关的计数器(包括和)都tocdepth
需要对传统格式进行一些重新配置。和的原始定义取自section
subsection
\section
\paragraph
article
文档类:
\documentclass{article}
\usepackage{titletoc}% http://ctan.org/pkg/titletoc
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\makeatletter
\renewcommand\section{\@startsection {paragraph}{1}{\z@}% Sections are paragraphs
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
\renewcommand\paragraph{\@startsection{section}{5}{\z@}% Paragraphs are sections
{3.25ex \@plus1ex \@minus.2ex}%
{-1em}%
{\normalfont\normalsize\bfseries}}
\makeatother
\renewcommand{\theparagraph}{\arabic{paragraph}}% Section numbering
\renewcommand{\thesubsection}{\theparagraph.\arabic{subsection}}% Subsection numbering
\begin{document}
\setcounter{tocdepth}{1}% Show only "sections"
\titlecontents*{section}[1.8pc]% "Section" formatting
{\small}
{\thecontentslabel. }
{}
{, \thecontentspage}
[---][.]
\tableofcontents
\section{Section 1}
\subsection{Subsection 1}
\paragraph{Bla1} \lipsum[1]
\paragraph{Bla2} \lipsum[2]
\paragraph{Bla3} \lipsum[3]
\paragraph{Bla4} \lipsum[4]
\paragraph{Bla5} \lipsum[5]
\paragraph{Bla6} \lipsum[6]
\end{document}
为了获得所需的格式,仅tocdepth
显示 1 级项目(新段落),\titlecontents*
使用titletoc
包裹。
目录显示段落名称,后跟逗号,
、页码和破折号---
。最后一项以句号结尾.
。这可以通过更改的参数进行修改\titlecontents*
。