小节:删除换行符(如段落)

小节:删除换行符(如段落)

使用文章文档类,如何删除小节标题末尾的换行符?

我正在使用\documentclass{article};我目前不使用titlesec或任何替代方案;我确实使用fancyhdr

答案1

无需任何附加软件包,您需要更新第五论据\@startsection并使其成为消极的- 通过调用隐式传递\subsubsection

在此处输入图片描述

\documentclass{article}
\begin{document}
\section{A section} Some text
\subsection{A subsection} Some text
\subsubsection{A subsubsection} Some text

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

\section{A section} Some text
\subsection{A subsection} Some text
\subsubsection{A subsubsection} Some text
\end{document}

这看起来可能魔法...这就是为什么第五论点,以及为什么它必须是负面的。要了解原因,你必须遵循LaTeX 内核。解决此问题的相关代码包含在\@startsection和中\@sect

\def\@startsection#1#2#3#4#5#6{%
  \if@noskipsec \leavevmode \fi
  \par
  \@tempskipa #4\relax
  \@afterindenttrue
  \ifdim \@tempskipa <\z@
    \@tempskipa -\@tempskipa \@afterindentfalse
  \fi
  \if@nobreak
    \everypar{}%
  \else
    \addpenalty\@secpenalty\addvspace\@tempskipa
  \fi
  \@ifstar
    {\@ssect{#3}{#4}{#5}{#6}}%
    {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\csname the#1\endcsname}%
      \fi
      #7}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        \ifnum #2>\c@secnumdepth \else
          \protect\numberline{\csname the#1\endcsname}%
        \fi
        #7}}%
  \fi
  \@xsect{#5}}

在上面的代码中,我们将焦点放在第五个参数上,用#5in表示\@startsection。虽然在 中没有发生任何事情\@startsection,但它也会#5作为第五的参数\@sect。因此,在 内部\@sect#5是存储在 中的长度\@tempskipa,随后使用

\ifdim \@tempskipa>\z@
%... \@tempskipa (or #5) is positive
\else
%... \@tempskipa (or #5) is negative
\fi

评估参考文献\z@0pt(见做什么\z@),因此指定了肯定或否定之间的选择\@tempskipa。 里面的构造\else正是您想要的,因为它不包含\@@par(或换行符/段落符)。 作为比较,请参见 的定义\paragraph

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

请注意,参数#5为负数(-1em)。

上述讨论的简要摘要载于内核文档,还涵盖在哪里可以找到类似\@startsectionLaTeX 的命令的帮助文件或文档?

使用类似的包titlesec删除此魔法以更用户友好的方式。例如,请参阅小节以小节名称所在的同一行开始

相关内容