我将首先提出一个一般性问题,然后尝试描述我真正想要实现的目标。
一般问题:如何使用\patchcmd
\patchcmd
命令from的逻辑etoolbox
基本上是一个搜索和替换过程。但在手册中,它明确指出
匹配第一的要修补的 <command> 的替换文本中出现了 <search> 模式
然后,我的问题是如何替换第二个匹配项、第三个匹配项或所有匹配项。原因是 latex 的许多内置命令具有以下结构
\ifxxx
<some commands>
\theComandIWantToReplace
<some commands>
\else
<some other commands>
\theComandIWantToReplace
<some other commands>
\fi
并且根据我的实践,\patchcmd
我无法用第二种情况来代替。
更具体:如何在目录项和段落书签中添加段落符号
更具体地说,我想要实现的是向\paragraph
目录中的项目添加段落符号以及 PDF 书签。经过一些搜索后latexdef
,我发现最经济的方法就是\addcontentsline
在\paragraph
命令中修补命令,所以我尝试
\documentclass{book}
\setcounter{tocdepth}{4}
\usepackage{etoolbox}
\usepackage{bookmark}
\makeatletter
\patchcmd{\paragraph}{\addcontentsline {toc}{#1}{\ifnum #2>\c@secnumdepth \else \protect \numberline {\csname the#1\endcsname }\fi #7}}{\addcontentsline {toc}{#1}{\ifnum #2>\c@secnumdepth \else \protect \numberline {\csname the#1\endcsname }\fi\P~#7}}{}{}
\makeatother
\begin{document}
\tableofcontents
\paragraph{asdadas}
\end{document}
请注意,我添加了一个\P
替换文本。但似乎没有产生预期的结果。我猜原因是搜索命令实际上在命令中出现了两次,\paragraph
即
但是,我错的可能性很高。
系统信息
如果这很重要的话,我在 MacOS 12.3.1 上使用 TexLive 2021 并使用 pdflatex 进行编译。
答案1
补丁失败,因为搜索文本是不是在 的替换文本中\paragraph
。
而且您也不想修补\@sect
,因为这会影响每个分段命令。
只需重新定义\theparagraph
。
\documentclass{book}
\usepackage{bookmark}
\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{4}
\bookmarksetup{level=4,numbered}
\renewcommand{\theparagraph}{\P~\thesubsubsection.\arabic{paragraph}}
\begin{document}
\tableofcontents
\paragraph{asdadas}
\end{document}