[Tex/LaTex] Redefining sectioning commands

macrossections-paragraphs

I'm trying to redefine the \subsubsection of the report class to behave like \paragraph and not have a linebreak after the title.

It's closely related to this question but I have no idea how to extrapolate the reverse effect from it.

I tried to get the code for paragraph using \show\paragraph and redifining \subsubsection with it as follows, but although it does compile, it doesn't work when I try to use it.

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

I'm would like to know how to solve my original problem, but now, I'm also curious as to what I did wrong with that \renewcommand since it seems to me like I'd encounter it again with other problems I'd try to solve by modifying how latex does its thing.

MWE:

\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}

Best Answer

The output of \show cannot be used as you are trying. It says that \subsection is a "long" macro that has no arguments and the replacement text is what follows ->.

The right place where to look is report.cls, where you find

\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}}

The key point that explain the different behavior are: the negative fourth argument of \@startsection for \subsubsection which suppresses indentation of the following paragraph; the positive fifth argument tells TeX that the title will not be "run-in". So

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

The second argument to \@startsection tells LaTeX the level of the sectioning command for the purposes of secnumdepth and tocdepth and should stay 3.

Important note

The \makeatletter and \makeatother commands are necessary because we are doing stuff involving the internal command of LaTeX.

Every time a command containing @ in its name has to be used, the code must either be in a .sty file or surrounded by that pair. See What do \makeatletter and \makeatother do? for more information.