![titlesec:边距右对齐的章节编号](https://linux22.com/image/406033/titlesec%EF%BC%9A%E8%BE%B9%E8%B7%9D%E5%8F%B3%E5%AF%B9%E9%BD%90%E7%9A%84%E7%AB%A0%E8%8A%82%E7%BC%96%E5%8F%B7.png)
我一直在使用以下代码片段(我不记得在哪里找到它)将右对齐的节号放入左边距:
\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 节)的文档中获取了章节标题的标准定义并将其更改为1em
,0pt
并添加\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}