代码如下:
\begin{filecontents}{chapterhead.sty} \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{chapterhead}[2012/07/16 v0.0.1 Chapter head and epigraph (AM)] \RequirePackage{xkeyval} \RequirePackage{catoptions} \new@def\chd@alltoendif#1\endif{#1} \new@def\chd@firsttoendif#1#2\endif{#1} \new@def*\chdifnumcmpTF#1#2#3{\ifnumcmpTF#1#2{#3}} % \chdifchoice can be used to define choice keys via command keys: \new@def*\chdifchoice{\chdifcase\ifstrcmpTF} \new@def*\chdifcase#1#2{% \ifstrcmpTF{#1}\ifnone{% \chd@alltoendif }{% \ifstrcmpTF{#1}\endif{}{% \ifstrcmpTF{#2}\ifnone{% \chd@alltoendif }{% \ifstrcmpTF{#2}\endif{}{\chd@ifcase{#1}{#2}}% }% }% }% } \new@def*\chd@ifcase#1#2#3{% \ifstrcmpTF{#3}\ifnone{% \chd@alltoendif }{% \ifstrcmpTF{#3}\endif{}{% #1{#2}{#3}\chd@firsttoendif{\chd@ifcase@i{#1}{#2}}% }% }% } \new@def*\chd@ifcase@i#1#2#3{\chd@ifcase{#1}{#2}} \define@cmdkey[DKV]{definekeys}[defkey@]{prefix}[KV]{} \define@cmdkey[DKV]{definekeys}[defkey@]{family}{} \define@cmdkey[DKV]{definekeys}[defkey@]{holder prefix}[mp@]{} \define@boolkey[DKV]{definekeys}[defkey@]{initialize}[true]{} \define@boolkey[DKV]{definekeys}[defkey@]{preset}[true]{} % Keys not specified in the optional argument of \chddefinekeys will % get default values: \presetkeys[DKV]{definekeys}{prefix,family,holder prefix, initialize=false,preset=false}{} \robust@def*\chddefinekeys{\@testopt\chd@definekeys{}} \new@def*\chd@definekeys[#1]#2{% \setkeys[DKV]{definekeys}{#1}% \def\defkey@defaultlist{}% \edef\reserved@a{\cptcommanormalize{#2}}% \expandafter\defkey@loop\reserved@a,\defkey@nil,% \ifboolTF{defkey@preset}{% \cptexpanded{\noexpand\presetkeys [\defkey@prefix]{\defkey@family}{\expandcsonce\defkey@defaultlist}{}% }% }{}% \ifboolTF{defkey@initialize}{% \cptexpanded{\noexpand\setkeys [\defkey@prefix]{\defkey@family}{\expandcsonce\defkey@defaultlist}% }% }{}% } \begingroup \lccode`\&=1 \catcode`\&=7 \lowercase{\endgroup \new@def*\chd@rejecttoks{&}% \new@def*\defkey@loop#1,{% \def\reserved@a{\defkey@nil}% \edef\reserved@b{\cpttrimspace{#1}}% \ifx\reserved@a\reserved@b\expandafter\@gobble\else\expandafter\@iden\fi {\defkey@splitatslash#1/&/&/&/&/&/&/&/\defkey@nil\defkey@loop}% } } \new@def*\chd@cmprejecttoks#1{\ifx#1\chd@rejecttoks\else\expandcsonce#1\fi} \new@def*\defkey@splitatslash#1/#2/#3/#4/#5/#6/#7/#8/#9\defkey@nil{% \edef\keytype{\cpttrimspace{#1}}% \edef\keyname{\cpttrimspace{#2}}% \edef\keydefault{\cpttrimspace{#3}}% \edef\keycode{\cpttrimspace{#4}}% \ifx\keyname\chd@rejecttoks \@latexerr{Empty key name}\@ehd \fi \def\reserved@a##1{% \def\reserved@a####1##1####2####3\@nil{% \def\reserved@a{####2}% }% \reserved@a cmd{0}bool{1}\@nil }% \expandafter\reserved@a\expandafter{\keytype}% \ifcase\reserved@a\relax \let\reserved@a\define@cmdkey \or \xifinsetTF{,\cptoxdetok\keydefault,}{,\detokenize{true,false},}{% \let\reserved@a\define@boolkey }{% \@latexerr{Illegal default value '\cptoxdetok\keydefault' \MessageBreak for bool key '\keyname'}\@ehd }% \else \@latexerr{Illegal key type '#1'}\@ehd \fi \cptexpanded{\noexpand\reserved@a [\defkey@prefix]{\defkey@family}[\usecsn{defkey@holder prefix}]% {\chd@cmprejecttoks\keyname}% \ifx\keydefault\chd@rejecttoks\else[\expandcsonce\keydefault]\fi {\chd@cmprejecttoks\keycode}% }% \edef\defkey@defaultlist{% \ifx\defkey@defaultlist\@empty\else\expandcsonce\defkey@defaultlist,\fi \keyname \ifx\keydefault\chd@rejecttoks\else=% \oifstrcmpTF\keytype{bool}{% \oifstrcmpTF\keydefault{true}{false}{false}% }{% \expandcsonce\keydefault }% \fi }% } \chddefinekeys[ prefix=CHD,family=epigraf,holder prefix=epg@,initialize,preset ]{% cmd/width/\hsize, cmd/author/, cmd/color/black, cmd/authorcolor/black, bool/use italics for author/true, cmd/fontencoding/\encodingdefault, cmd/fontfamily/\familydefault, cmd/fontseries/\seriesdefault, cmd/fontshape/\shapedefault, cmd/fontsize/10pt, cmd/hskip/0ex, cmd/prevskip/0ex, cmd/postvskip/1ex, bool/frame/true, } \chddefinekeys[ prefix=CHD,family=chapterhead,holder prefix=chd@,initialize,preset ]{% cmd/textcolor/black, cmd/textfontencoding/\encodingdefault, cmd/textfontfamily/\familydefault, cmd/textfontseries/eb, cmd/textfontshape/\shapedefault, cmd/textfontsize/100pt, cmd/numberfontencoding/\encodingdefault, cmd/numberfontfamily/\familydefault, cmd/numberfontseries/eb, cmd/numberfontshape/\shapedefault, cmd/numberfontsize/100pt, % cmd/leftmargin/\leftmargin, % cmd/rightmargin/\rightmargin, cmd/texthskip/0em, cmd/textprevskip/0ex, cmd/textpostvskip/1ex, cmd/numberprevskip/0ex, cmd/numberpostvskip/0ex, cmd/numberhskip/0em, cmd/numbercolor/black, cmd/pagestyle/empty, bool/make text raggedleft/true, bool/make number raggedleft/true, bool/print number before text/true, bool/frame number/true, bool/no clear page/true } \newbox\chd@boxa \newcommand\epigraf[2][]{% \setkeys[CHD]{epigraf}{#1}% \setbox\chd@boxa=\vbox{% \ifepg@frame\fbox{\fi \parbox\epg@width{% \fontsize{\epg@fontsize}{1.5\epg@fontsize}% \usefont{\epg@fontencoding}{\epg@fontfamily}% {\epg@fontseries}{\epg@fontshape}% \ignorespaces \textcolor{\epg@color}{#2}% \hspace*{\fill}\nolinebreak[1]% \quad\hspace*{\fill}\finalhyphendemerits\z@pt\relax \begingroup \ifboolTF{epg@use italics for author}{\itshape}{}% \textcolor{\epg@authorcolor}{\epg@author}% \endgroup }% \ifepg@frame}\fi }% \global\let\chd@printepigraf\chd@bprintepigraf \@ignoretrue } \AtBeginDocument{% \@ifundefined{@mainmattertrue}{\newif\if@mainmatter\@mainmattertrue}{}% } \new@def*\chd@insertchaptertext#1{% \begingroup \ifboolTF{chd@make text raggedleft}{% \raggedleft }{% \hskip\chd@texthskip\relax }% \advance\leftmargin10em \interlinepenalty\@M \vskip\chd@textprevskip\relax \fontsize{\chd@textfontsize}{1.2\chd@textfontsize}% \usefont{\chd@textfontencoding}{\chd@textfontfamily}% {\chd@textfontseries}{\chd@textfontshape}% \textcolor{\chd@textcolor}{\ignorespaces#1}% \par\nobreak \vskip\chd@textpostvskip\relax \endgroup } \new@def*\chd@insertchapternumber{% \begingroup \ifnum\c@secnumdepth>\m@ne \if@mainmatter \vskip\chd@numberprevskip\relax \fontsize{\chd@numberfontsize}{1.2\chd@numberfontsize}% \usefont{\chd@numberfontencoding}{\chd@numberfontfamily}% {\chd@numberfontseries}{\chd@numberfontshape}% \usecsn{ifchd@frame number}\fbox{\fi \textcolor{\chd@numbercolor}{\thechapter}% \usecsn{ifchd@frame number}}\fi \par\nobreak \vskip\chd@numberpostvskip\relax \fi \fi \endgroup } \renewcommand\chapter[1][]{% \setkeys[CHD]{chapterhead}{#1}% \ifboolTF{chd@no clear page}{}{% \if@openright\cleardoublepage\else\clearpage\fi }% \thispagestyle{\chd@pagestyle}% \global\@topnum\z@ \ifdefTF\chd@printepigraf\chd@printepigraf\relax \@afterindentfalse \secdef\@chapter\@schapter } \renewcommand{\@makechapterhead}[1]{% \begingroup \begingroup \leavevmode \ifboolTF{chd@make number raggedleft}{% \raggedleft }{% \hskip\chd@numberhskip\relax }% \ifboolTF{chd@print number before text}{% \chd@insertchapternumber\chd@insertchaptertext{#1}% }{% \chd@insertchaptertext{#1}\chd@insertchapternumber }% \endgroup \nobreak \endgroup } \renewcommand{\@makeschapterhead}[1]{% \begingroup \let\c@secnumdepth\m@ne\@makechapterhead{#1}% \endgroup } \newcommand*\chd@bprintepigraf{% \vskip\epg@prevskip \hskip\epg@hskip\relax \copy\chd@boxa \vskip\epg@postvskip \global\let\chd@printepigraf\relax } \endinput \end{filecontents} \documentclass{book} \usepackage{chapterhead} \usepackage[dvipsnames]{xcolor} \begin{document} \epigraf[ author={Lewis Carroll, \textit{Alice in Wonderland}}, color=blue, width=.75\hsize, use italics for author=false, fontsize=8pt, fontfamily=cmr, hskip=10em, postvskip=2ex, frame, ]{ ``Begin at the beginning,'' the King said, gravely, ``and go on till you come to an end; then stop.'' } \chapter[ numberpostvskip=.2ex, numberfontseries=ux, numberfontfamily=cmbr, textfontseries=ex, textfontsize=50pt, textfontfamily=cmbr, textfontshape=it,% not obtainable because of other choices above textcolor=red, make text raggedleft=false, make number raggedleft=false, print number before text, no clear page ]{Graph Theory} \noindent The Pregolya River passes through the city once known as K\"onigsberg. In the 1700s seven bridges were situated across this river in a manner similar to what you see in Figure \ldots \par\vskip3\baselineskip \hrule height.5pt depth .4pt \relax \epigraf[ author={Lewis Carroll, \textit{Alice in Wonderland}}, color=black, width=.75\hsize, use italics for author, fontsize=8pt, fontfamily=cmr, hskip=-3em, prevskip=2ex, postvskip=2ex, ]{ ``Begin at the beginning,'' the King said, gravely, ``and go on till you come to an end; then stop.'' } \chapter[ numberpostvskip=.2ex, numberfontseries=ux, numberfontfamily=cmbr, textfontseries=ex, textfontsize=50pt, textfontfamily=cmss, textfontshape=it, textcolor=Brown, numbercolor=ForestGreen, make text raggedleft, make number raggedleft, frame number, no clear page ]{Graph Theory} \noindent The Pregolya River passes through the city once known as K\"onigsberg. In the 1700s seven bridges were situated across this river in a manner similar to what you see in Figure \ldots \end{document}
选自:http://tex.stackexchange.com/questions/53377/inspirational-quote-at-start-of-chapter
发表评论 取消回复