titlesec:边距右对齐的章节编号

titlesec:边距右对齐的章节编号

我一直在使用以下代码片段(我不记得在哪里找到它)将右对齐的节号放入左边距:

\makeatletter
\def\@seccntformat#1{\protect\makebox[0pt][r]{\csname
      the#1\endcsname\hspace{6pt}}} \makeatother

但是,我已经开始使用titlesec来自定义节标题的布局,上面的代码不再适用于我使用 定义的任何节标题样式titlesec。例如,这里我\titleformat为小节定义了,但没有为节或小小节定义了:

在此处输入图片描述

这个问题显示了如何使用 将节号放入左边距\titlesec,但数字位置左对齐。如何做到这一点,同时保留\@seccntformat上述定义的右对齐格式?

\documentclass{article}
\usepackage{titlesec}
\usepackage{lipsum}

\makeatletter
\def\@seccntformat#1{\protect\makebox[0pt][r]{\csname
      the#1\endcsname\hspace{6pt}}} \makeatother

\titleformat{\subsection}{\normalfont\bfseries}{\thesubsection}{1em}{}
\titlespacing*{\subsection}{0pt}{*3.25}{*1.5}%
\renewcommand*{\thesubsection}{\arabic{subsection}}

\begin{document}
\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\lipsum[1]
\end{document}

答案1

仅作为示例,我从titlesec(第 9.2 节)的文档中获取了章节标题的标准定义并将其更改为1em0pt并添加\marginsecnumber到每个计数器表示命令前面。

添加您自己的自定义内容。

\documentclass{article}
\usepackage{titlesec}
\usepackage{lipsum}

\newcommand{\marginsecnumber}[1]{%
  \makebox[0pt][r]{#1\hspace{6pt}}%
}

\titleformat{\section}
  {\normalfont\Large\bfseries}
  {\marginsecnumber\thesection}
  {0pt}
  {}
\titleformat{\subsection}
  {\normalfont\large\bfseries}
  {\marginsecnumber\thesubsection}
  {0pt}
  {}
\titleformat{\subsubsection}
  {\normalfont\normalsize\bfseries}
  {\marginsecnumber\thesubsubsection}
  {0pt}
  {}
\titleformat{\paragraph}[runin]
  {\normalfont\normalsize\bfseries}
  {\marginsecnumber\theparagraph}
  {0pt}
  {}
\titleformat{\subparagraph}[runin]
  {\normalfont\normalsize\bfseries}
  {\marginsecnumber\thesubparagraph}
  {0pt}
  {}

\titlespacing*{\subsection}{0pt}{*3.25}{*1.5}%
\renewcommand*{\thesubsection}{\arabic{subsection}}

\begin{document}

\section{A section}

\subsection{A subsection}

\subsubsection{A subsubsection}

\lipsum[1]

\end{document}

在此处输入图片描述

答案2

我建议使用这种变体布局,其中所有((子)子)部分编号都在边缘处并具有相同的垂直轴,并带有包装eqparbox

\documentclass{article}
\usepackage{titlesec}
\usepackage{eqparbox}
\usepackage{lipsum}

\titleformat{\section}{\Large\bfseries}{\llap{\eqmakebox[S]{\thesection}}}{\marginparsep}{}
\titlespacing*{\section}{-\marginparsep}{*3.25}{*1.5}%
\renewcommand*{\thesubsection}{\arabic{subsection}}

\titleformat{\subsection}{\large\bfseries}{\llap{\eqmakebox[S]{\thesubsection}}}{\marginparsep}{}
\titlespacing*{\subsection}{-\marginparsep}{*3.5}{*2.3}%

\titleformat{\subsubsection}{\normalsize\bfseries}{\llap{\eqmakebox[S]{\thesubsubsection}}}{\marginparsep}{}
\titlespacing*{\subsubsection}{-\marginparsep}{*3.25}{*1.5}%

\begin{document}

\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\lipsum[1]

\end{document} 

在此处输入图片描述

答案3

使用\llap,取自这个问题

在此处输入图片描述

如果您希望节和小节编号与小节编号正确对齐,请\titleformat也定义这些标题,并删除使用\@seccntformat

\documentclass{article}
\usepackage{titlesec}
\usepackage{lipsum}

\makeatletter
\def\@seccntformat#1{\protect\makebox[0pt][r]{\csname
      the#1\endcsname\hspace{6pt}}} \makeatother

\titleformat{\subsection}{\large\bfseries}{\llap{\thesubsection\hskip 9pt}}{0em}{}
\titlespacing*{\subsection}{0pt}{*3.25}{*1.5}%
\renewcommand*{\thesubsection}{\arabic{subsection}}

\begin{document}
\section{A section}
\subsection{A subsection}
\subsubsection{A subsubsection}
\lipsum[1]
\end{document}

相关内容