跳过章节页面上的双标记

跳过章节页面上的双标记

这里有一个小例子来说明我的问题:

\documentclass[fontsize=12pt, paper=a4]{scrreprt} 
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{scrpage2} 

\clearscrheadfoot 
\pagestyle{scrheadings} 
\ihead{\leftmark} 
\ohead{\rightmark} 
\cfoot{\pagemark} 

\automark[subsection]{chapter} 

\begin{document} 

\chapter{Test}
\Blindtext

\section{Sec}
\Blindtext

\subsection{SubSec}
\Blindtext

\chapter{Test2}
\Blindtext

\section{Sec2}
\Blindtext

\subsection{SubSec2}
\Blindtext
\end{document}

如您所见,我希望在每页的标题中显示章节和小节。但在第 2 页和第 6 页,没有小节,章节在标题中出现了两次。在第 3、4、7 和 8 页上一切正常。

\rightmark当没有可用的子部分时,我想隐藏该子部分的 。我该怎么做?

答案1

您可以使右侧标题文本与左侧标题文本不一样:

\ohead{%
\expandafter\def\expandafter\tmpa\expandafter{\romannumeral`\Q\leftmark}%
\expandafter\def\expandafter\tmpb\expandafter{\romannumeral`\Q\rightmark}%
\ifx\tmpa\tmpb\else\rightmark\fi
} 

答案2

我认为将节放在页眉中比没有子节而什么都没有更有意义。以下示例使用页面上的第一个节或子节元素作为页眉。它使用来自 e-TeX 的附加标记寄存器。

\documentclass[fontsize=12pt, paper=a4]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{scrpage2}
\usepackage{etex}

\clearscrheadfoot
\pagestyle{scrheadings}
\ihead{\leftmark}
% \ohead{\rightmark}
\iftrue % oneside
  \ohead{\firstmarks\subsectionmarks}
\else % twoside
  \lohead{\firstmarks\subsectionmarks}
  \rohead{\botmarks\subsectionmarks}
\fi
\cfoot{\pagemark}

\automark[subsection]{chapter}

\makeatletter
\newmarks\subsectionmarks
\newcommand*{\marksubsec}[1]{%
  \begingroup
    \protected@edef\@temp{%
      \marks\subsectionmarks{#1}%
    }%
    \@temp
  \endgroup
}
\@ifdefinable\org@chaptermark{%
  \let\org@chaptermark\chaptermark
  \renewcommand*{\chaptermark}{%
    \marks\subsectionmarks{}
    \org@chaptermark
  }%
}
% Redefining \sectionmark
\@ifdefinable{\org@sectionmark}{%
  \let\org@sectionmark\sectionmark
  \iftrue
    \renewcommand*{\sectionmark}[1]{%
      \marksubsec{%
        \ifnum\value{secnumdepth}>0 %
          \if@mainmatter
            \sectionmarkformat
          \fi
        \fi
        #1%
      }%
      \org@sectionmark{#1}%
    }
  \else
    \renewcommand*{\sectionmark}[1]{%
      \marksubsec{}%
      \org@sectionmark{#1}%
    }%
  \fi
}
\@ifdefinable\org@subsectionmark{%
  \let\org@subsectionmark\subsectionmark
  \renewcommand*{\subsectionmark}[1]{%  
    \marksubsec{%
      \ifnum\value{secnumdepth}>1 %
        \if@mainmatter
          \subsectionmarkformat
        \fi
      \fi  
      #1%  
    }%   
    \org@subsectionmark{#1}%
  }%
}   
\makeatother

\begin{document}

\chapter{Test}  
\Blindtext

\section{Sec}
\Blindtext   

\subsection{SubSec}
\Blindtext

\chapter{Test2}
\Blindtext

\section{Sec2}
\Blindtext

\subsection{SubSec2}
\Blindtext
\end{document}
  • 可以通过将注释后的改为\iftrue来省略节标题。\iffalse% Redefining \subsectionmark

  • 示例假设oneside设置。对于twoside小节(/section)标题可以参考页面上的第一个和最后一个小节(/section),然后更改\iftrue\iffalse定义外部标题。

相关内容