在linehight 文本multicols*{2}
的环境中12pt
,我使用
\titlespacing*{\subsection}{0pt}{12pt}{12pt}
12pt
在子节前后创建恰好为 的空间。加上12pt
子节字体的行高为 ,这将创建36pt
-height 的子节,覆盖 3 行普通文本。
这在页面上的任何位置都可以正常工作,但如果子部分恰好位于列的顶部,则顶部间距会自动省略。我想强制执行36pt
部分所在的总高度。
如何才能\titlespacing
不省略列顶部的顶部间距?
更新 2:
我编辑了问题以使用12pt
,因为建议的解决方案似乎没有涵盖迄今为止的所有情况,或者引入了稍微错误的间隙(+/- ~ 2pt
),如果使用过于人为的点尺寸,这些间隙不容易被发现。以下 MWE 现在使用12pt
线条并涵盖所有三个相关情况:列内的标题、第 1 列的顶部和第 2 列上的标题。
\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[compact]{titlesec}
\titleformat{\subsection}
{\fontsize{10pt plus 0pt minus 0pt}{12pt plus 0pt minus 0pt}\selectfont\bf} % format
{} % label
{0pt} %sep
{} %after
\titlespacing*{\subsection}{0pt}{12pt}{12pt}
\begin{document}
\fontsize{10pt}{12pt}\selectfont
\begin{multicols}{2}\raggedcolumns
\subsection*{Bad Section}
\lipsum[1-2]
\columnbreak
\lipsum[1]
\subsection*{Good Section}
\lipsum[2]
\end{multicols}
\newpage
\begin{multicols}{2}\raggedcolumns
\lipsum[1]
\subsection*{Good Section}
\lipsum[2]
\columnbreak
\subsection*{Bad Section}
\lipsum[1-2]
\end{multicols}
\end{document}
答案1
您可以添加\vspace{-1cm}\vspace*{1cm}
适当的参数\titleformat
——两个空间将相互抵消,但页面顶部除外。这比 tohecz 的“盒子”解决方案更简单,并且与 egreg 的解决方案不同,它不会导致 a\section
和直接相邻的 a之间出现额外的垂直空间\subsection
。(请注意,在这种情况下,\section
的“后”空间将覆盖 的\subsection
“前”空间。)
编辑:无论出于什么原因,似乎还必须减去 \baselineskip
中\vspace*
(并将其重新添加到 中\vspace
)。
EDIT2:这是我能想到的最好的办法(一个我无法解释的破解方法):
在 内
\titleformat
,fonsize 和 之间的差值\baselineskip
(在您修改的示例中为:2pt)必须用 减去\vspace
,然后用 重新加上\vspace*
。对于任何
\subsection
紧随其后的内容,必须在文档正文中减去 (12pt)\begin{multicols}
的值。\baselineskip
\vspace*
\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage[compact]{titlesec}
\titleformat{\subsection}
{\vspace{\dimexpr -12pt+10pt}\vspace*{\dimexpr 12pt-10pt}%
\fontsize{10pt plus 0pt minus 0pt}{12pt plus 0pt minus 0pt}\selectfont\bf} % format
{} % label
{0pt} %sep
{} %after
\titlespacing*{\subsection}{0pt}{12pt}{12pt}
\begin{document}
\fontsize{10pt}{12pt}\selectfont
\begin{multicols}{2}\raggedcolumns
\vspace*{-12pt}
\subsection*{Bad Section}
\lipsum[1-2]
\columnbreak
\lipsum[1]
\subsection*{Good Section}
\lipsum[2]
\end{multicols}
\newpage
\begin{multicols}{2}\raggedcolumns
\lipsum[1]
\subsection*{Good Section}
\lipsum[2]
\columnbreak
\subsection*{Bad Section}
\lipsum[1-2]
\end{multicols}
\end{document}
答案2
您应该在章节标题中插入“垂直空格”,但不能跳过。相反,您必须使用一条不可见的规则;这是\subsection
,\section
您可以根据需要进行定义。
然而,我不明白这如何能改善文档的印刷质量,特别是如果跳跃没有这里用于示例的那么大(1cm)。
\documentclass{article}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{titlesec}
\titleformat{\subsection}
[block]
{\normalsize\bfseries}
{\thesubsection}
{\quad}
{\vrule height\dimexpr\ht\strutbox+1cm\relax width 0pt depth 0pt }
\titlespacing*{\subsection}{0pt}{0pt}{1cm}
\begin{document}\raggedcolumns
\begin{multicols}{2}
\lipsum[1]
\subsection*{Good section}
\lipsum[2-3]
\end{multicols}
\newpage
\begin{multicols}{2}\raggedcolumns
\subsection*{Bad Section}
\lipsum[1-3]
\end{multicols}
\end{document}
答案3
解决方案是将每个部分都括\subsection
起来\vbox
:
\vbox{\subsection*{Bad section}}
\section
如果您想自动执行此操作,这是可能的,但您必须对要以这种方式使用的每个分段命令( ,, ...)和每个变体(带星号、带有可选参数、不带可选参数)重复此技巧\subsection
:
\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{sectsty}
\allsectionsfont{\normalsize\bfseries}
\usepackage[compact]{titlesec}
\titlespacing*{\subsection}{0pt}{1cm}{1cm}
\makeatletter
%section
\let\x@section\section
\def\xs@section*#1 {\vbox{\x@section*{#1}}}
\def\xb@section[#1]#2{\vbox{\x@section[#1]{#2}}}
\def\xx@section#1 {\vbox{\x@section{#1}}}
\def\section{\@ifnextchar*\xs@section{\@ifnextchar[\xb@section\xx@section}}
%subsection
\let\x@subsection\subsection
\def\xs@subsection*#1 {\vbox{\x@subsection*{#1}}}
\def\xb@subsection[#1]#2{\vbox{\x@subsection[#1]{#2}}}
\def\xx@subsection#1 {\vbox{\x@subsection{#1}}}
\def\subsection{\@ifnextchar*\xs@subsection{\@ifnextchar[\xb@subsection\xx@subsection}}
\makeatother
\begin{document}\raggedcolumns
\begin{multicols}{2}
\lipsum[1]
\subsection*{Good section}
\lipsum[2-3]
\end{multicols}
\newpage
\begin{multicols}{2}\raggedcolumns
\subsection*{Bad Section}
\lipsum[1-3]
\end{multicols}
\end{document}
我必须补充一点,尽管我理解你的理由(让所有章节标题命令占用相同的空间),但结果并不是很好看。