我可以使用 patchcmd 来修改 book.cls 中的定义吗?

我可以使用 patchcmd 来修改 book.cls 中的定义吗?

\paragraph以下是和\subparagraph中的命令book.cls

\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%        
                                    {3.25ex \@plus1ex \@minus.2ex}%
                                    {-1em}%
                                    {\normalfont\normalsize\bfseries}}
\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% 
                                       {3.25ex \@plus1ex \@minus .2ex}%
                                       {-1em}%
                                      {\normalfont\normalsize\bfseries}}

我希望小段落编号位于左边距,并且我希望标题后的第一个段落不缩进。我依赖于以下语法描述:\@startsection 这里有一种可行的方法,但我希望从长远来看不要采用,就是直接修改中的定义book.cls,比如:

\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%        
                                    {-3.25ex \@plus-1ex \@minus -.2ex}%
                                    {1.5ex \@plus .2ex}%
                                    {\normalfont\normalsize\bfseries}}
\newcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}% 
                                       {-3.25ex \@plus-1ex \@minus -.2ex}%
                                       {1.5ex \@plus .2ex}%
                                      {\normalfont\normalsize\bfseries}}

book.cls是否可以在不修改 的情况下,使用临时做出相同的更改patchcmd

下面粘贴了必要的 MWE,它显示或不显示效果,取决于我是否修改了book.cls

\documentclass{book}
\usepackage{lipsum}\usepackage[margin=0.5in]{geometry}
\setcounter{secnumdepth}{6}
\begin{document}
\chapter{A chapter}
\section{A section}\lipsum[2]
\subsection{A subsection}\lipsum[2]
\subsubsection{A subsubsection}\lipsum[2]
\paragraph{A paragraph}\lipsum[2]
\subparagraph{A subparagraph}\lipsum[2]
\end{document}

答案1

具体到你的问题:“我可以使用 patchcmd 来修改中的定义book.cls吗?”答案是肯定的:

在此处输入图片描述

\documentclass{book}
\usepackage{lipsum,etoolbox}% http://ctan.org/pkg/{lipsum,etoolbox}
\usepackage[margin=0.5in]{geometry}% http://ctan.org/pkg/geometry
\usepackage{etoolbox}
\setcounter{secnumdepth}{6}
\begin{document}
\chapter{A chapter}
\section{A section}\lipsum[2]
\subsection{A subsection}\lipsum[2]
\subsubsection{A subsubsection}\lipsum[2]
\paragraph{A paragraph}\lipsum[2]
\subparagraph{A subparagraph}\lipsum[2]

% Update \subparagraph from book.cls
\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\subparagraph}{\parindent}{\z@}{}{}% Remove indent
\patchcmd{\subparagraph}{3.25ex \@plus1ex \@minus .2ex}{-3.25ex \@plus-1ex \@minus -.2ex}{}{}% Update spacing/indent
\patchcmd{\subparagraph}{-1em}{1.5ex \@plus .2ex}{}{}% Update display/hang
\makeatother

\subparagraph{A subparagraph}\lipsum[2]
\end{document}

由于您对 中更新的“3 次搜索”感兴趣\subparagraph,所有这些搜索都不同,因此\patchcmd需要 3 个单独的 s,因为替换适用于模式匹配(这样更简单,尽管只使用一个就可以实现)。根据您的偏好,使用 可能更容易\renewcommand

\makeatletter
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}% 
                                         {-3.25ex \@plus-1ex \@minus -.2ex}%
                                         {1.5ex \@plus .2ex}%
                                         {\normalfont\normalsize\bfseries}}
\makeatother

以上内容提供了全部的的结构\subparagraph,并且更加清晰。

相关内容