章节标题位于单独的列中,并带有子章节

章节标题位于单独的列中,并带有子章节

我尝试将节标题放在左侧的一列中,将内容放在右侧的另一列中。我发现了一个一个与此相关的问题,但是该解决方案有一个问题。如果一个部分以子部分开头,则子部分之前会有一个空格,导致部分标题和部分内容(子部分)无法垂直对齐。我似乎无法在另一个问题中提出的任何解决方案中解决这个问题。有人能帮忙解决这个问题吗?

\documentclass[a4paper]{article}
\usepackage[showframe]{geometry}
\usepackage{titlesec}

\usepackage{lipsum}

\geometry{left=6cm,right=3cm} % 3cm for the sections
\titleformat{\section}[leftmargin]
  {\normalfont\bfseries\filright}
  {\thesection}
  {1em}
  {}
\titlespacing*{\section}
  {3cm}
  {2ex plus .2ex minus .2ex}
  {1sp}% should be 0, but it must be positive

\begin{document}

\lipsum[2]

\section{A title}

\subsection{A subsection}
\lipsum[3]

\section{A very very very very very long title}

\lipsum[3]

\end{document}

答案1

这里有一个解决方案,需要您使用新命令手动标记在节标题之后立即开始的子节\instantsubsection

\documentclass[a4paper]{article}
\usepackage[showframe]{geometry}
\usepackage{titlesec}

\usepackage{lipsum}

\geometry{left=6cm,right=3cm} % 3cm for the sections

\titleformat{\section}[leftmargin]
  {\normalfont\bfseries\filright}
  {\thesection}
  {1em}
  {}
\titlespacing*{\section}
  {3cm}
  {2ex plus .2ex minus .2ex}
  {1sp}% should be 0, but it must be positive

\titleformat{\subsection}
  {\normalfont\large\bfseries}
  {\thesubsection}
  {1em}
  {}
\titlespacing*{\subsection}
  {0pt}
  {3.25ex plus 1ex minus .2ex}
  {1.5ex plus .2ex}

\def\instantsubsection{%
  \leavevmode
  {\normalfont\large\bfseries \vskip-\baselineskip}%
  \vspace*{-3.25ex plus 1ex minus .2ex}%
  \subsection
}

\begin{document}

\lipsum[2]

\section{A title}

\instantsubsection{A subsection}
\lipsum[3]

\subsection{A subsection}
\lipsum[3]

\section{A very very very very very long title}

\lipsum[3]

\end{document}

标题格式和间距\subsection已明确给出(默认值取自这个答案),这样一来,其中的魔法值从何\instantsubsection而来就一目了然了。

\instantsubsection首先进入水平模式,基本上就是开始新的段落行。然后设置与小节标题中使用的字体格式相同的字体格式。接下来发生的事情是,当前的虚拟行被一个负数删除\vskip\baselineskip该负数是相邻基线之间的距离(“行高”)。另一个负数\vspace删除每个小节前插入的垂直间距。现在我们可以继续使用正常\subsection命令了。

如果我们之前没有更改字体格式,小节标题就不会与页边距中的节标题以相同的基线开始,因为段落行和标题通常具有不同的基线距离。正如您在输出中看到的那样,基线匹配得很好:

输出

相关内容