# Redefining sectioning commands

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}

-
Use the titlesec package to (re-)define macros like that. See Defining custom sectioning commands. – Martin Scharrer Jul 7 '11 at 20:34
Also the \long macro :-> is part of the \show output and not part of the definition, i.e. you should delete it. – Martin Scharrer Jul 7 '11 at 20:35
@Martin: Sorry, I saw your second comment only after I posted my answer. – Michael Ummels Jul 7 '11 at 20:43
@Michael: No problem. – Martin Scharrer Jul 7 '11 at 20:45
@Martin: I saw the titlesec package in the question I linked, and I guess I could (should?) have looked deeper into that packages. But at this point, my curiosity on how to redefine the code won over practicality :-/ – Lexiel Jul 7 '11 at 20:55

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.

-
To see the definition you can also use texdef -t latex -c report subsubsection paragraph (or latexdef instead texdef -t latex if that symlink is installed). However, looking into the source file directly has the benefit that you see the code as it was formatted by the author. – Martin Scharrer Jul 7 '11 at 20:46
@Martin: but it uses the same output as \show. I think that the main part of my answer is to explain what went wrong to begin with. – egreg Jul 7 '11 at 20:47
Thanks a lot for all the details, I'm now a little less ignorant in the ways of latex :) – Lexiel Jul 7 '11 at 20:51
@egreg: Indeed (I actually added that to my comment while you were responding ;-) ). I just wanted to point the possibility out, nothing against the answer. – Martin Scharrer Jul 7 '11 at 20:51

\long macro :-> is not part of the definition of the macro, and you need to change the catcode of @ in the definition. The following should work:

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

-

If you prefered not to do things manually, you can use the titlesec package whose usage is described in this question: Defining custom sectioning commands

-