将形状参数作为命令传递给 titleformat

将形状参数作为命令传递给 titleformat

我打算在我的文档中使用两种类型的章节标题:对于序言和附录,使用简单的带下划线的大写字母,而对于主要章节,我希望在整页上在两行不同的行上显示“第 n 章/标题”...

我(几乎)成功地通过定义一个新的环境“chapterpage”并将参数传递给\titleformat(来自 titlesec 包)作为宏(在全局和 chapterpage 环境中的定义方式不同)来做到这一点。

但是,我无法\titleformat按照这种方式传递第一个可选参数 :( 我需要这个,因为我想在前一个布局中使用悬挂形状,在后一个布局中使用显示形状。我怀疑它可以使用适当的 \protect 命令来解决,但我没有设法修复它!

这是一个最小的例子。如果可行,“第 2 章”和“Bar”应该打印在不同的行上。感谢您的帮助。

\documentclass[11pt]{scrreprt}

\usepackage{lipsum}
\usepackage{titlesec}
\usepackage{setspace}

\newcommand{\mychapterShape}{hang} % hang is for aligning the number with the title
\newcommand{\mychapterFormat}{\relax}
\newcommand{\mychapterBefore}{\raggedright} 
\newcommand{\mychapterAfter}{\normalsize\vspace*{.8\baselineskip}\titlerule}
\newcommand{\mychapterLabel}{\thechapter} %{\relax}

\newenvironment{chapterpage} 
{
    \renewcommand{\mychapterShape}{display}
    \renewcommand{\mychapterFormat}{
        \vspace{\stretch{7}}\normalfont\onehalfspacing\centering\large
    }
    \renewcommand{\mychapterBefore}{
        \thispagestyle{empty}%
        %\begin{addmargin}[1cm]{0cm}%
        \vspace{0.5em}%
    }
    \renewcommand{\mychapterAfter}{
        \vspace{\stretch{10}}\cleardoublepage\thispagestyle{empty}\singlespacing
    }
    \renewcommand{\mychapterLabel}{\chaptertitlename~\thechapter}
}
{} % end chapterpage envt 

\titleformat{\chapter}[\mychapterShape]%
    {\mychapterFormat}{\mychapterLabel}{1em}%
    {\mychapterBefore}[\mychapterAfter]%


\begin{document}

\chapter{Foo}    
\lipsum[1-3]

\begin{chapterpage}
\chapter{Bar}
\end{chapterpage}
\lipsum[1-3]

\end{document}  

答案1

我将定义两种章节样式

\documentclass[11pt]{scrreprt}

\usepackage{lipsum}
\usepackage{titlesec}

\newcommand{\mainchapterstyle}{%
  \titleformat{\chapter}[display]
   {\vspace{\stretch{7}}\normalfont\onehalfspacing\centering\large}
   {\chaptertitlename~\thechapter}
   {1em}
   {\thispagestyle{empty}\vspace{0.5em}}
   [\vspace{\stretch{10}}\cleardoublepage
     \thispagestyle{empty}\singlespacing]}

\newcommand{\appchapterstyle}{%
  \titleformat{\chapter}[hang]
   {}
   {\thechapter}
   {1em}
   {\raggedright}
   [\normalsize\vspace*{.8\baselineskip}\titlerule]}

\begin{document}

\mainchapterstyle
\chapter{Bar}
\lipsum[1-3]

\appendix
\appchapterstyle
\chapter{Foo}    
\lipsum[1-3]

\end{document}

相关内容