titlesec 问题

titlesec 问题

我已经使用了titlesec很长一段时间了,并且想要“提升我的风格”;)

我读了如何更改标题以列出页面的第一部分而不是最后一部分并尝试根据我的目的调整代码。我正在编写一个两列、双面的布局,并希望我的页眉被格式化,以便页眉显示当前两个可见页面的上下文(即章节和子章节编号和标题)。

  • 左边页眉应列出的页面:
    • 打印包含以下内容的节/小节第一的该页的行,如果第一行没有子节,则仅打印该节
    • 部分或者小节或者部分子节可以打印在上一页
  • 正确的页眉应列出的页面:
    • 打印包含以下内容的节/小节最后的该页的行,如果最后一行没有子节,则仅打印该节
    • 部分或者小节或者部分子节可以打印在上一页

让我们看看我的MWE:

\documentclass[twoside]{article}
\usepackage[bf,pagestyles,raggedright]{titlesec}% http://ctan.org/pkg/titlesec
\usepackage{lipsum}% http://ctan.org/pkg/lipsum

%% to be used when odd pages are on the RIGHT HAND SIDE
\newpagestyle{main}{%
  \headrule
  \sethead[\thepage]% even-left
    []% even-center
    [\bfseries{\scriptsize \bottitlemarks\thesubsection$\:$\bottitlemarks\subsectiontitle} $\quad$ \bfseries{\bottitlemarks\thesection$\:$\bottitlemarks\sectiontitle}]% even-right
    {\bfseries{\toptitlemarks\thesection$\:$\toptitlemarks\sectiontitle} $\quad$ \bfseries{\scriptsize \toptitlemarks\thesubsection$\:$\toptitlemarks\subsectiontitle}}% odd-left
    {}% odd-center
    {\thepage}% odd-right
\setfoot[]% even-left
    [\thepage]% even-center
    []% even-right
    {}% odd-left
    {\thepage}% odd-center
    {}% odd-right
}

\newpagestyle{TitleMarks}{%
  \headrule
  \sethead[E:Top is~\toptitlemarks\thesection:\toptitlemarks\thesubsection]% even-left
    [E:First is~\firsttitlemarks\thesection:\firsttitlemarks\thesubsection]% even-center
    [E:Bottom is~\bottitlemarks\thesection:\bottitlemarks\thesubsection]% even-right
    {O:Top is~\toptitlemarks\thesection:\toptitlemarks\thesubsection}% odd-left
    {O:First is~\firsttitlemarks\thesection:\firsttitlemarks\thesubsection}% odd-center
    {O:Bottom is~\bottitlemarks\thesection:\bottitlemarks\thesubsection}% odd-right
\setfoot[][\thepage][]{}{\thepage}{}
}


\pagestyle{main}

\twocolumn

\begin{document}
\section{One}
\lipsum[1]
\section{Two}
\lipsum[1]
\subsection{TwoOne}
\lipsum[1-3]
\subsection{TwoTwo}
\lipsum[1-4]
\section{Three}
\lipsum[1]
\end{document}  

结果如下(不要介意标题/页眉的奇怪字体,那是在 inkscape 中合并两页的产物):

结果3

第一页上显示的是“2 二”而不是“1 一”(包含第一行文本的部分)[这取决于第一部分的“长度”,一旦第一部分的一部分延续到第二列,标题就会切换为“1 一”。编辑:经过进一步的测试,我得出结论,这是使用的结果双栏样式,切换到单列文本可解决这一部分问题。但是,这对我来说不是一个选项。] 并且在第二页上打印的是“2.2 TwoTwo 2 Two”,而不是“2.1 TwoOne 2 Two”(即包含该页第一行的节和子节)。

编辑2:进一步的研究为上述第一个问题找到了一种解决方案。使用该fixltx2e包时,标题显示“0 目录”(当有目录时)\toptitlemarks和“1 一” \firsttitlemarks(这是我所期望的,但不是我想要的结果。当然,告诉读者在第一页之前的页面上有目录是没有意义的,即这需要使用两种页面样式[一种用于第一页,而不是使用,\firsttitlemarks\topttitlemarks一种用于所有其他页面])。然而我不能使用fixltx2e因为我需要dblfloatfix与前者冲突(嗯,更准确地说,当两者都加载时,前者不再起作用) - >这对我来说不是解决方案!

有可能改变吗?

答案1

通过这里的需求,包括内核修复的业务,我认为如果你一点一点地做事,一切都会顺利的

% Should be part of the kernel
\RequirePackage{fixltx2e}
\documentclass[twoside]{article}
% Required by the OP for 'other things'
\usepackage{dblfloatfix}
% For filler
\usepackage{lipsum}

\usepackage[pagestyles]{titlesec}
\newpagestyle{main}{%
  \sethead
    [\bottitlemarks\thesubsection\ \subsectiontitle]
    []
    [\bottitlemarks\thesection\ \sectiontitle]
    {\toptitlemarks\thesection\ \sectiontitle}
    {}
    {\toptitlemarks\thesubsection\ \subsectiontitle}%
}
\pagestyle{main}


\twocolumn

\begin{document}
\section{One}
\lipsum[1]
\section{Two}
\lipsum[1]
\subsection{TwoOne}
\lipsum[1-3]
\subsection{TwoTwo}
\lipsum[1-4]
\section{Three}
\lipsum[1]
\end{document}  

结果是:

  • 第 1 页有左标题“1 One”,没有右标题(页面的第一行一个部分,没有封闭的小节)

  • 第 2 页的左标题为“2.2 TwoTwo”,右标题为“2 Two”(页面的最后一行位于第二部分第二小节)

  • 第 3 页的左标题为“2 Two”,右标题为“2.2 TwoTwo”(页面的第一行位于第二部分第二小节)

这与我(认为)您的要求相符(示例之前部分中的“左”和“右”与之后描述的页码问题并不真正一致!)。

相关内容