我想格式化我的章节标题,例如:
“第一章:简介”
我有一个新命令定义如下:
\documentclass[a4paper,12pt] {report}
\usepackage{thesis_packages}
\newcommand{\ch}[2]{
\setcounter{chapter}{#1}
\setcounter{section}{0}
\chapter*{#2}}
\begin{document}
\include{introduction}
\end{document}
% introduction.tex
\ch{1}{Chapter One: Introduction} \label{ch:intro}
为此,我需要在introduction.tex文件中写入\ch{1}{Chapter One:intro}。但是,我收到一条错误消息,提示“未定义控制序列\ch{1}{Chapter One:intro}”。新命令在主文本文件中定义。我使用报告文档类。
答案1
\documentclass[a4paper,12pt]{report}
\makeatletter
\newcommand{\inletters}[1]{\ifcase \csname c@#1\endcsname
zero\or one\or two\or three\or four\or five\or six\or seven\or
eight\or nine\or ten %complete here if you have more than 10 chapters
\else ??\fi}
\renewcommand{\@makechapterhead}[1]{\vspace*{50\p@}%
{\parindent\z@ \raggedright \normalfont\Huge\bfseries
\ifnum \c@secnumdepth>\m@ne \@chapapp~\inletters{chapter}: \fi
#1\par\nobreak\vskip 40\p@}}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}%
{\@chapapp~\inletters{chapter}: #1}% <-- modification
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi}
\makeatother
\begin{document}
\chapter{Introduction}
In this chapter, ...
\section{First section}
\end{document}
答案2
新的命令\ch
似乎没有必要。要自动执行您想要的操作,您需要做两件事。
首先,您需要用文字而不是通常的数字来打印章节号。为此,请加载包fmtcount
。这将为您提供\numberstring
和\Numberstring
命令(分别用于小写和大写),以用文字打印计数器的当前值。
\usepackage{fmtcount}
其次,您需要稍微更改章节标题的格式,使其全部放在一行上。我期望有一个用于此目的的软件包,但通过重新定义\@makechapterhead
自己,可以很容易地做到这一点:
\makeatletter
\renewcommand{\@makechapterhead}[1]{\vspace *{50\p@ }{\parindent \z@
\raggedright \normalfont \ifnum \c@secnumdepth >\m@ne \Huge \bfseries
\@chapapp \space \Numberstring{chapter} : \fi #1\par \nobreak \vskip 40\p@ }}
\makeatother
然后在文档正文中就可以\chapter
正常使用命令了:
\chapter{First Chapter}
This is Chapter One.
答案3
您只需使用其中的工具即可titlesec
轻松格式化章节标题。您想要的是样式block
:
\documentclass[a4paper,12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fourier}
\usepackage{geometry}
\usepackage[letterspace=30]{microtype}
\usepackage{fmtcount}
\usepackage{titlesec}
\titleformat{\chapter}[block]{\Huge\bfseries\lsstyle}{\chaptername~\Numberstring{chapter}:}{0.333em}{}
\begin{document}
\chapter{Introduction}
In this chapter, ...
\end{document}
要在目录中使用相同的(几乎 ;o)),您可以使用 \titletoc
。因为它允许访问细绳 \thecontentslabel
,您必须先将此字符串转换为数字,然后才能使用这些命令。这可以通过以( 、、 &c. )fmtcount
结尾的命令之一来完成:num
\Numberstringnum
\numberstringnum
\documentclass[a4paper,12pt]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fourier}
\usepackage{geometry}
\usepackage[letterspace=30]{microtype}
\usepackage{fmtcount}
\usepackage{titlesec, titletoc}
\titleformat{\chapter}[block]{\Huge\bfseries\lsstyle}{\chaptername~\Numberstring{chapter}:}{0.333em}{}
\titlecontents{chapter} [0em]{\bfseries} {\chaptername~the~Ordinalstringnum{\thecontentslabel}:\quad}
{}{\hfill\contentspage}
\begin{document}
\tableofcontents
\chapter{Introduction}
In this chapter, ...
\end{document}
答案4
作为参考/只是为了好玩,这里是如何在 ConTeXt 中实现这一点的。
\setuphead
[chapter]
[conversion=Word,
numbercommand=\NUMBERCOMMAND,
style=\bfd]
\define[1] \NUMBERCOMMAND
{Chapter #1:}
\starttext
\chapter{Introduction}
In this chapter, \periods
\stoptext