有时候我需要将某个部分标题居中,以便强调它。不幸的是,这似乎\centering
与titlesec
我不知道如何解决该部分超出软件包文档范围的问题。
目前我知道的唯一选择是在\titleformat
我的部分之前和之后调用命令,这很糟糕,这需要了解我的默认设置.cls
。理想情况下,我实际上希望能够将选项传递给部分命令,例如,\section[centering]{my section}
但我不知道如何查找命令的选项\section
是什么。我不知道如何在没有 titlesec 的情况下更改部分格式,也许是时候学习了,但我不知道从哪里开始。
在此 MWE 中,注释掉 titlesec 包以查看问题是否已解决。
\documentclass{article}
\usepackage{fontspec}
\usepackage{titlesec}
\usepackage{lipsum}
\begin{document}
\titleformat{\section}[block]{\Large\bfseries}{}{0in}{\thesection\hspace{1em}}
\tableofcontents
\section{A normal section}
\lipsum[4]
{\centering\section{a centered section}}
\lipsum[4]
\section{\centering a centered section}
\lipsum[4]
\end{document}
答案1
\centering
通过调整\leftskip
和来工作\rightskip
。 \makebox
在给定宽度内居中(默认)。Varwidth 会缩小\section
并\null\hfil
平衡\parendskip
。Varwidth 还会吸收上下的垂直空间。
\documentclass{article}
%\usepackage{fontspec}
\usepackage{titlesec}
\usepackage{varwidth}
\usepackage{lipsum}
\begin{document}
\titleformat{\section}[block]{\Large\bfseries}{}{0in}{\thesection\hspace{1em}}
\tableofcontents
\section{A normal section}
\lipsum[4]
\section[A centered section]{\makebox[\linewidth]{A centered section}}
\lipsum[4]
\null\hfil\begin{varwidth}{\textwidth}
\section{A centered section}
\end{varwidth}\csname @afterheading\endcsname
\vskip 2.3ex plus 0.2ex
\lipsum[4]
\end{document}
答案2
您需要以某种方式标记这些特殊部分,因此我建议定义一个\specialsection
命令。
\documentclass{article}
\usepackage{titlesec}
\usepackage{lipsum}
\titleformat{\section}[block]
{\Large\bfseries\ifSPECIAL\filcenter\fi}
{\thesection}
{1em}
{}
\iffalse
\titleformat{name=\section,numberless}[block]
{\Large\bfseries}
{}
{0pt}
{}
\fi
\newif\ifSPECIAL
\NewDocumentCommand{\specialsection}{sO{#3}m}{%
\SPECIALtrue
\IfBooleanTF{#1}{\section*}{\section}{#3}%
\SPECIALfalse
}
\begin{document}
\tableofcontents
\section{A normal section}
\lipsum[4][1-2]
\specialsection{A centered section}
\lipsum[4][1-2]
\section{A normal section}
\lipsum[4][1-2]
\section*{A normal starred section}
\lipsum[4][1-2]
\specialsection*{A special starred section}
\lipsum[4][1-2]
\end{document}