不同章节,不同布局

不同章节,不同布局

根据要求,我为一本书的章节提供了两种不同的布局。第一种是第 1 章独有的,另一种是其他章节的布局。布局会影响章节、定义和段落的显示方式。我有代码来处理这个问题,放在一个小的类文件中。这是一个 MWE:

\documentclass[12pt,letterpaper]{book}

\usepackage{amsmath,amsfonts,amssymb,amsthm}
\usepackage{thmtools}
\usepackage{ifthen,calc}
\usepackage{blindtext}

\parindent=0mm

\newtheorem{teo}{Theorem}[section]
\newtheorem{axi}{Axiom}
\newtheorem{lem}{Lemma}

\newcounter{definition}
\declaretheoremstyle[%
  spaceabove=6pt,%
  spacebelow=6pt,%
  headfont=\normalfont\bf,%
  notefont=\normalfont\bf,
  notebraces={{}{}},
  bodyfont=\itshape,
  headpunct={.}]{defistyle} 
\declaretheorem[
    name={Definition},
    numberlike=definition,
    style=defistyle]{defi}

\renewcommand\thesection
    {\arabic{chapter}.\arabic{section}}
\makeatletter
\renewcommand\@seccntformat[1]{
    {\csname the#1\endcsname}.\hspace{0.5em}}
\renewcommand\section{\@startsection
    {section}{1}{0mm}                
    {6pt}                            
    {1pt}                            
    {\bfseries}}                     

\renewcommand\paragraph{\@startsection
    {paragraph}{3}{0cm}             
    {6pt}                           
    {1pt}                           
    {\bfseries}}                    
\makeatother

\makeatletter
\newcommand{\capi}[1]{
    \chapter{#1}
    \ifthenelse{\value{chapter}=2}{
        \renewcommand\section{\@startsection
        {section}{1}{0mm}               
        {0pt}                           
        {1pt}                           
        {\Large}}                       
        \@addtoreset{definition}{section}
        \renewcommand{\thedefi}{\thesection.\arabic{definition}}        
        }{}}
\makeatother

\begin{document}
\capi{Some preliminaries}
\blindtext

\section{the first thing}
\blindtext[1]

\begin{defi}
The thing $1$ is real number. If $x$ is real then $x+1$ is real.
\end{defi}

\blindtext

\capi{Cool stuff}
\blindtext

\section{Complex things}
bla bla bla

\begin{defi}
We say that a number $x$ is complex if it is not really a number.
\end{defi}

\blindtext
\end{document}

如您所见,我处理每个章节不同样式的实际方法并不优雅。我将这本书分成几个文件,每个章节一个。当我查看这本书时,我通过命令选择我想看的章节。\includeonly问题是,为了获得正确的章节、段落和定义的外观,我总是必须包含第 2 章。另外,我想避免为章节定义新命令。我的问题是:有没有办法改进这一点?

答案1

\capi当不是第一章时,只需定义重新定义自身,这样测试和重新定义只需进行一次。

\makeatletter
\newcommand{\capi}{%
  \ifnum\value{chapter}>0
    \changesectionanddefi
    \let\capi\chapter
  \fi
    \chapter
}
\def\changesectionanddefi{%
   \renewcommand\section{\@startsection{section}{1}{0mm}{6pt}{1pt}{\Large}}%
   \@addtoreset{definition}{section}%
   \renewcommand{\thedefi}{\thesection.\arabic{definition}}%
}
\makeatother

你甚至可以做得更好:重新定义\chapter以摆脱非标准\capi命令:

\makeatletter
\let\leo@chapter\chapter
\renewcommand{\chapter}{
  \ifnum\value{chapter}>0 
    \changesectionanddefi 
    \let\chapter\leo@chapter
  \fi
    \leo@chapter
}
\def\changesectionanddefi{%
   \renewcommand\section{\@startsection{section}{1}{0mm}{6pt}{1pt}{\Large}}%
   \@addtoreset{definition}{section}%
   \renewcommand{\thedefi}{\thesection.\arabic{definition}}%
}
\makeatother

因此,不是\capi这个,而是通常的\chapter


注意定义中的行尾。还请检查参数\@startsection:您的代码无法正常工作。

答案2

您的问题是您使用了次优条件。条件不是章节计数器等于 2,而是计数器大于 1。然后条件适用于所有章节的所有部分。因此,您可以定义\section根据条件更改其布局,而不是将重新定义放在命令\section内部\chapter

缺点:每当处理一个部分时都会执行测试(而不是仅在第 2 章期间执行一次),但这不会对处理时间产生明显的影响。

相关内容