重新定义切片命令

重新定义切片命令

我正在尝试重新定义\subsubsection报告类,使其行为类似\paragraph且标题后没有换行符。

它与这个问题但我不知道如何从中推断出相反的效果。

我尝试获取段落使用代码\show\paragraph并用\subsubsection其重新定义如下,但尽管它可以编译,但当我尝试使用它时它却不起作用。

\renewcommand{\subsubsection}{\long macro :->\@startsection{subsubsection}{4}{\z@ }{3.25ex \@plus 1ex \@minus .2ex}{-1em}{\normalfont \normalsize \bfseries}}

我想知道如何解决我原来的问题,但是现在,我也很好奇我做错了什么,\renewcommand因为在我看来,我会在其他问题上再次遇到它,我会尝试通过修改乳胶的运作方式来解决它。

梅威瑟:

\RequirePackage[l2tabu, orthodox]{nag}
\documentclass[12pt]{report}

\usepackage{listings}

\def\thesection{\Roman{section}}
\def\thesubsection{\thesection.\Alph{subsection}}
\setcounter{secnumdepth}{2}

%\renewcommand{\subsubsection}{\long macro :->\@startsection{subsubsection}{4}{\z@ }{3.25ex \@plus 1ex \@minus .2ex}{-1em}{\normalfont \normalsize \bfseries}}

\begin{document}

\chapter{Chapter 1}
\label{c:c1}

\section{Section 1}
\label{s:s1}

\subsection{Subsection 1}
\label{ss:ss1}

\subsubsection{\lstinline{<Upper|Lower> Triangular}} defines a triangular matrix ...

\end{document}

答案1

的输出\show无法按您尝试的方式使用。它表示这\subsection是一个没有参数的“长”宏,替换文本紧随其后->

正确的寻找地点是report.cls,你在哪里找到

\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {1.5ex \@plus .2ex}%
                                     {\normalfont\normalsize\bfseries}}
\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
                                    {3.25ex \@plus1ex \@minus.2ex}%
                                    {-1em}%
                                    {\normalfont\normalsize\bfseries}}

\@startsection解释不同行为的关键点是: for的第四个参数为负数\subsubsection,表示抑制下一段落的缩进;而第五个参数为正数,表示 TeX 不会将标题“插入”。因此

\makeatletter
\renewcommand\subsection{%
  \@startsection{subsubsection}{3}{\z@}{3.25ex \@plus1ex \@minus.2ex}%
  {-1em}{\normalfont\normalsize\bfseries}}
\makeatother

第二个参数\@startsection告诉 LaTeX 分段命令的级别,以便secnumdepthtocdepth应该保持3

重要的提示

和命令是必需的\makeatletter\makeatother因为我们正在做涉及 LaTeX 内部命令的事情。

@每次使用名称中包含的命令时,代码必须位于.sty文件中或被该对包围。参见\makeatletter 和 \makeatother 起什么作用?了解更多信息。

答案2

\long macro :->不是宏定义的一部分,您需要更改@定义中的 catcode。以下应该有效:

\makeatletter
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
  {3.25ex \@plus 1ex \@minus .2ex}{-1em}{\normalfont\normalsize\bfseries}}
\makeatother

答案3

如果你不想手动操作,你可以使用titlesec其用法在这个问题中描述:定义自定义切片命令

相关内容