答案1
很简单,通过titlesec
:
\documentclass{article}
\usepackage{titlesec,etoolbox}
\titleformat{\section}
{\normalfont\Large\bfseries}
{Section \thesection}
{0pt}
{\checksectiontitle}
\newcommand{\checksectiontitle}[1]{%
\ifblank{#1}{}{ -- #1}%
}
\renewcommand{\thesection}{\Alph{section}}
\begin{document}
\section{Merry Christmas}
\section{}
\end{document}
诀窍在于,章节标题始终作为参数传递给 的最后一个宏的最后一个宏(强制参数)\titleformat
。我使用\ifblank
,etoolbox
因此也\section{ }
不会打印破折号。
如果您打算使用\section*
,您还需要
\titleformat{name=\section,numberless}
{\normalfont\Large\bfseries}
{}
{0pt}
{}
答案2
仅需一个额外包的解决方案:(xpatch
或者etoolbox
,在这里也足够了)
通常情况下,修补就足够了,但在我看来,直接复制更容易\@sect
。\@sect
latex.ltx
\@seccntformat
\quad
如果--
要应用的话,使用起来很丑陋,所以我删除了它。
但是我没有改变目录的条目和页眉样式。
如果需要的话,将此解决方案应用于其他分段级别也会更加容易。
\documentclass{article}
\usepackage{xpatch}
\renewcommand{\thesection}{\Alph{section}}
\makeatletter
\def\@sect#1#2#3#4#5#6[#7]#8{%
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\ifstrequal{#1}{section}{%
\ifblank{#8}{%
\protected@edef\@svsec{Section \@seccntformat{#1}\relax}%
}{%
\def\@localseccntformat##1{\csname the##1\endcsname}%
\protected@edef\@svsec{Section \@localseccntformat{#1}\ -- \relax}%
}%
}{%
\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}}
\makeatother
\begin{document}
\tableofcontents
\section{A section}
\section{}
\subsection{First subsection}
\end{document}
答案3
另一个解决方案与第二个解决方案非常相似:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage{etoolbox}
\usepackage[explicit]{titlesec}
\newcommand{\titcon}[1]
{
\ifstrempty{#1}
{}
{ -- #1}
}
\titleformat{\section}{\bfseries\Large}{Section \Alph{section} \titcon{#1}}{6pt}{}
\begin{document}
\section{Merry Christmas}
\section{}
\end{document}
您可以使用 titlesec 包的显式选项来控制参数。