经过多年阅读其他人的帖子和用乳胶编写的 3 篇论文后,我终于自己发布了一个问题。
我有一个包含蓝图的文档(以图像或 .pdf 格式包含),这些蓝图按不同的章节组织,因此我定义了一个自定义“列表”,以便创建“蓝图表”。
我可以创建蓝图表,并且蓝图本身包含在其中,没有任何复杂性。
但是,我还想在蓝图中包括蓝图所在的章节,为此我使用了 \addcontentsline 命令。
问题是,在蓝图表中我只能获得章节编号(使用 \chaptername 和 \thechaper);我尝试使用 \chaptermark 但无济于事,因为我收到以下错误:
\chaptermark 的参数有一个额外的 }。...{pln}{chapter}{\thechapter : \chaptermark}
因此,我采取了手动解决方案,通过在 \addcontentsline 命令中手动输入章节标题,但我想知道是否有办法使其自动化。
这些是我检查过的一些帖子添加章节标题以列出...;在列表中包含章节标题...;自动章节列表;我尝试遵循他们的代码,但我不确定我应该查看哪里。
这是我的 MWE:
\documentclass[12pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{titlesec,tocbibind,tocloft}
%
% List of Blueprints creation
\newcommand{\listplano}{{\huge \textbf{Table of blueprints}}}% custom list of blueprints
\newlistof{plano}{pln}{\listplano}% plano=blueprint in Spanish
\newcommand{\plano}[1]{% custom command to create a new blueprint
\refstepcounter{plano}% counter
\par\noindent\textbf{Plano \theplano. #1}% caption
\addcontentsline{pln}{plano}{\protect\numberline{\theplano}#1}\par}% add the blueprint to the list of blueprints
%
\begin{document}
%
\newpage
\tableofcontents
%
% List of blueprints
\newpage
\phantomsection
\addcontentsline{toc}{chapter}{Table of blueprints}% add an entry for the Table of blueprints to the ToC
\listofplano% print the list of blueprints
%
\chapter{Blueprints of Project X}
\addcontentsline{pln}{chapter}{\thechapter \, Blueprints of Project X}% add chapter to the list of blueprints; here is where I tried to use \chaptermark
\newpage
\plano{Project X - A}
Here I add the blueprint as an image or a pdf.
%
\chapter{Blueprints of Project Y}
\addcontentsline{pln}{chapter}{\thechapter \, Blueprints of Project Y}% add chapter to the list of blueprints
\newpage
\plano{Project Y - 1}
Here I add the blueprint as an image or a pdf.
%
\newpage
\plano{Project Y - 2}
Here I add the blueprint as an image or a pdf.
%
\end{document}
感谢所有能提供帮助的人。多年来我一直在咨询这些论坛,并从社区中学到了很多东西。
答案1
您确实应该将其纳入\addcontentsline
的定义中\chapter
。以下是管理该问题的一种方法:
\NewCommandCopy{\oldchapter}{\chapter}
\RenewDocumentCommand{\chapter}{ s +O{#3} +m }
{
\IfBooleanTF{#1}
{\oldchapter*{#3}} % Starred chapter
{ % Non-starred chapter
\oldchapter[#2]{#3}
\addcontentsline{pln}{chapter}{\thechapter \, #2}
\newpage
}
}
然后,您就可以\chapter
像没有任何更改一样进行书写。这也会启动您当前正在手动创建的新页面。
答案2
\chaptermark
由 执行,\chapter
并将(短)章节标题作为参数传递。好消息是您可以修改它以将章节标题保存到宏(如\chaptertitle
)。坏消息是当您更改页面样式时它会被重新定义。
\documentclass[12pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{titlesec,tocbibind,tocloft}
%
% List of Blueprints creation
\newcommand{\listplano}{{\huge \textbf{Table of blueprints}}}% custom list of blueprints
\newlistof{plano}{pln}{\listplano}% plano=blueprint in Spanish
\newcommand{\plano}[1]{% custom command to create a new blueprint
\refstepcounter{plano}% counter
\par\noindent\textbf{Plano \theplano. #1}% caption
\addcontentsline{pln}{plano}{\protect\numberline{\theplano}#1}\par}% add the blueprint to the list of blueprints
%
\makeatletter
\def\chaptermark#1{%
\markboth {\MakeUppercase{%
\ifnum \c@secnumdepth >\m@ne
\@chapapp\ \thechapter. \ %
\fi
#1}}{}\xdef\chaptertitle{#1}}%
\makeatother
\begin{document}
%
\newpage
\tableofcontents
%
% List of blueprints
\newpage
\phantomsection
\addcontentsline{toc}{chapter}{Table of blueprints}% add an entry for the Table of blueprints to the ToC
\listofplano% print the list of blueprints
%
\chapter{Blueprints of Project X}
\addcontentsline{pln}{chapter}{\thechapter \, \chaptertitle}% add chapter to the list of blueprints; here is where I tried to use \chaptermark
\newpage
\plano{Project X - A}
Here I add the blueprint as an image or a pdf.
%
\chapter{Blueprints of Project Y}
\addcontentsline{pln}{chapter}{\thechapter \, \chaptertitle}% add chapter to the list of blueprints
\newpage
\plano{Project Y - 1}
Here I add the blueprint as an image or a pdf.
%
\newpage
\plano{Project Y - 2}
Here I add the blueprint as an image or a pdf.
%
\end{document}