% \iffalse meta-comment % % mempatch.dtx % Author: Peter Wilson (Herries Press) herries dot press at earthlink dot net % Copyright 2001 --- 2006 Peter R. Wilson % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3 of this license or (at your option) any % later version. % The latest version of the license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of % LaTeX version 2003/06/01 or later. % % This work has the LPPL maintenance status "author-maintained". % % This work consists of the files listed in the README file. % % % \fi % \CheckSum{3392} % % \def\dtxfile{\texttt{mempatch.dtx}} % \def\fileversion{v1.0} \def\filedate{2003/10/04} % \def\fileversion{v1.1} \def\filedate{2003/10/07} % \def\fileversion{v1.2} \def\filedate{2003/11/16} % \def\fileversion{v2.0a} \def\filedate{2004/02/19} % \def\fileversion{v2.1} \def\filedate{2004/03/01} % \def\fileversion{v2.3} \def\filedate{2004/03/28} % \def\fileversion{v2.4} \def\filedate{2004/04/26} % \def\fileversion{v2.5} \def\filedate{2004/04/27} % \def\fileversion{v2.6} \def\filedate{2004/04/30} % \def\fileversion{v2.7} \def\filedate{2004/05/10} % \def\fileversion{v2.8} \def\filedate{2004/05/13} % \def\fileversion{v3.0} \def\filedate{2004/12/14} % \def\fileversion{v3.1} \def\filedate{2004/12/19} % \def\fileversion{v3.2} \def\filedate{2005/01/01} % \def\fileversion{v3.3} \def\filedate{2005/01/17} % \def\fileversion{v3.4} \def\filedate{2005/01/18} % \def\fileversion{v3.5} \def\filedate{2005/02/01} % \def\fileversion{v3.6} \def\filedate{2005/02/07} % \def\fileversion{v3.7} \def\filedate{2005/02/26} % \def\fileversion{v3.8} \def\filedate{2005/03/06} % \def\fileversion{v3.9} \def\filedate{2005/03/23} % \def\fileversion{v3.10} \def\filedate{2005/05/16} % \def\fileversion{v3.11} \def\filedate{2005/05/23} % \def\fileversion{v3.12} \def\filedate{2005/06/06} % \def\fileversion{v4.1} \def\filedate{2005/10/06} % \def\fileversion{v4.1h} \def\filedate{2005/11/15} % \def\fileversion{v4.2} \def\filedate{2005/11/21} % \def\fileversion{v4.3} \def\filedate{2005/12/13} % \def\fileversion{v4.4} \def\filedate{2006/01/21} % \def\fileversion{v4.4a} \def\filedate{2006/01/23} % \def\fileversion{v4.5} \def\filedate{2006/08/08} % % \title{The LaTeX \Lpack{memoir} class for configurable book % typesetting: Code patches\thanks{This % file (\dtxfile) has version number \fileversion, last revised % \filedate.}} % % \author{% % Peter Wilson\thanks{\texttt{herries dot press at earthlink dot net}}\\ % The Herries Press % } % \date{\filedate} % \maketitle % % ^^A \MakeShortVerb{\=} % % \begin{abstract} % The \Lpack{memoir} class is designed for typesetting % general books such as novels, biographies, histories, % and so on, although as it supports all the functionality of the % standard \Lpack{book} class it can also be used for technical writing. % It provides more functions than the standard class as well as % presenting a more friendly interface for the book designer. % It can also simulate the typesetting style of the standard \Lpack{article} % class. % % Because of its newness not all packages work well with \Lpack{memoir}. % Also, as more users beat on it, subtle flaws are discovered in \Lpack{memoir} % itself. Patching code is supplied to resolve known problems. % % Code is also provided for new functionality that will later be % folded into the class code. % \end{abstract} % % \tableofcontents % \listoftables % % \StopEventually{} % % % % \section{Introduction} % % This document provides the commented source for packages that patch % the LaTeX \Lpack{memoir} class~\cite{MEMOIR}. % This class is designed for typesetting % general books such as novels, biographies, histories, % and so on. It has all the functionality of the standard \Lpack{book} % class and, as well as providing some extra functions, also provides % a more friendly interface for the document designer. As it can encompass % everything that the \Lpack{book} class provides it may also be used % for technical writing. % % % Section~\ref{sec:docstrip} describes some % administrative elements and code for general use later in the % specification. % The macros forming the package files are defined in section~\ref{sec:hyper} % and in section~\ref{sec:class} onwards. % % This manual is typeset according to the conventions of the % \LaTeX{} \textsc{docstrip} utility which enables the automatic % extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}. % % % \section{A driver for this document} \label{sec:docstrip} % % The next series of code contains the documentation driver file for % \LaTeX, i.e., the file that will produce the documentation you are % currently reading. This will be extracted from this file by the % \textsc{docstrip} program. % % \begin{macrocode} %<*driver> \documentclass[twoside]{ltxdoc} \usepackage{url} % \end{macrocode} % % We do want an index, using linenumbers, but not update information. % \begin{macrocode} \makeatletter \@mparswitchfalse \makeatother \EnableCrossrefs \CodelineIndex %% \RecordChanges % \end{macrocode} % Don't use the default Short Verb. % \begin{macrocode} \AtBeginDocument{\DeleteShortVerb{\|}} % \end{macrocode} % We had better have page headings to aid navigation, but I don't % like Uppercased titles. % \begin{macrocode} \renewcommand{\MakeUppercase}[1]{#1} \pagestyle{headings} % \end{macrocode} % We may use many \file{docstrip} modules so we set the % \texttt{StandardModuleDepth} counter to 1. % \begin{macrocode} \setcounter{StandardModuleDepth}{1} % \end{macrocode} % Some commonly used abbreviations % \begin{macrocode} \newcommand*{\Lopt}[1]{\textsf {#1}} % typeset an option \newcommand*{\file}[1]{\texttt {#1}} % typeset a file \newcommand*{\Lcount}[1]{\textsl {\small#1}} % typeset a counter \newcommand*{\pstyle}[1]{\textsl {#1}} % typeset a pagestyle \newcommand*{\Lenv}[1]{\texttt {#1}} % typeset an environment \newcommand*{\Lpack}[1]{\textsf {#1}} % typeset a package \newcommand*{\ctt}{\textsc{ctt}} \newcommand{\Lclass}[1]{\textsf{#1}} \newcommand{\ledmac}{ledmac} \newcommand{\Ledmac}{\Lpack{\ledmac}} \newcommand{\edmac}{\texttt{EDMAC}} \newcommand{\tabmac}{\texttt{TABMAC}} \newcommand{\PWcomment}[1]{} \newenvironment{PW}{\itshape}{} \renewenvironment{PW}{\sffamily}{} \newcommand{\texbook}{\textit{TeXbook}} \newcommand{\thetexbook}{\textit{The TeXbook}} \newcommand{\egstart}{} \newcommand{\egmid}{} \newcommand{\egend}{} \renewcommand{\egstart}{% \par \begingroup \centering \begin{minipage}{0.45\textwidth}} \renewcommand{\egmid}{% \end{minipage}\hfill\begin{minipage}{0.45\textwidth}} \renewcommand{\egend}{% \end{minipage}\par\endgroup} % \end{macrocode} % We want the full details printed. % \begin{macrocode} \begin{document} \DocInput{mempatch.dtx} \PrintIndex %% \PrintChanges \end{document} % % \end{macrocode} % % % \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath} % \DoNotIndex{\@centercr,\@cite}\ % \DoNotIndex{\@dotsep,\@empty,\@gobble,\@gobbletwo,\@ignoretrue} % \DoNotIndex{\@input,\@ixpt,\@m} % \DoNotIndex{\@minus,\@ne,\@nil,\@nomath,\@plus,\@set@topoint} % \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} % \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} % \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} % \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} % \DoNotIndex{\advance,\Alph,\alph} % \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} % \DoNotIndex{\bullet} % \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} % \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} % \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} % \DoNotIndex{\EnableCrossrefs,\end,\endgroup} % \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} % \DoNotIndex{\fbox} % \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} % \DoNotIndex{\global,\halign,\hbox,\hfil,\hfill,\hrule} % \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} % \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} % \DoNotIndex{\input} % \DoNotIndex{\jobname,\kern,\leavevmode,\let} % \DoNotIndex{\list,\llap,\long,\m@ne,\m@th} % \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} % \DoNotIndex{\NeedsTeXFormat,\newdimen} % \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} % \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} % \DoNotIndex{\par,\paragraph,\paragraphmark,\parfillskip} % \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} % \DoNotIndex{\protect,\ProvidesClass} % \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} % \DoNotIndex{\rightskip,\rlap,\rmfamily,\roman} % \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength} % \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} % \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} % \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} % \DoNotIndex{\viipt,\vipt,\vskip,\vspace} % \DoNotIndex{\wd,\xiipt,\year,\z@} % \DoNotIndex{\@namedef,\@nameuse,\csname,\endcsname} % % % % \section{Patches for hyperref and friends} \label{sec:hyper} % % The \Lpack{hyperref} package~\cite{HYPERREF} is a marvel of macro coding but it does % seem to have a habit of not working too well with classes or packages % that contain anything out of the % ordinary. % % \begin{macrocode} %<*hyper> % \end{macrocode} % % % The \Lpack{memhfixc} package provides \Lpack{hyperref} related temporary % fixes and extensions for version v1.618 of the \Lpack{memoir} class. % \begin{itemize} % \item hyperref fix for part and chapter entries in the ToC (v1.0) % \item Other fixes as and when % \end{itemize} % Only use this package in conjunction with the hyperref package. % Call the package without options after the hyperref package as: % \begin{verbatim} % \documentclass[...]{memoir} % ... % \usepackage[...]{hyperref} % \usepackage{memhfixc} % \end{verbatim} % % \begin{macrocode} %% %% The memhfixc package provides hyperref related temporary %% fixes and extensions for version v1.3a of the memoir class. %% o hyperref fix for part and chapter entries in the ToC (v1.0) %% o Other fixes as and when %% %% Only use this package in conjunction with the hyperref package. %% Call the package without options after the hyperref package as: %% \documentclass[...]{memoir} %% ... %% \usepackage[...]{hyperref} %% \usepackage{memhfixc} %% %% Version 1.8 2006/01/21 %% Version 1.7 2005/11/15 %% Version 1.6 2004/05/13 %% Version 1.5 2003/10/14 %% Version 1.4 2003/09/26 %% Version 1.3 2003/02/20 %% Version 1.2 2003/02/02 %% Version 1.1 2003/01/22 %% Version 1.0 2002/10/22 %% % \end{macrocode} % % % \begin{macrocode} \ProvidesPackage{memhfixc}[2006/01/21 v1.8 nameref/hyperref package fixes for memoir class] % \end{macrocode} % % \begin{macro}{\M@hfixcfinish} % The \Lpack{memhfixc} package is only useful with the memoir class % \begin{macrocode} \let\M@hfixcfinish\relax \@ifclassloaded{memoir}{}% {\let\M@hfixcfinish\endinput \typeout{No memoir class: memhfixc does nothing}} \M@hfixcfinish % \end{macrocode} % \end{macro} % % \subsection{Patches for nameref} % % \begin{macro}{\M@sect} % \begin{macro}{\NR@sectm@m} % The \Lpack{nameref} package~\cite{NAMEREF} fiddles with \cs{@sect} (which memoir replaces % by \cs{M@sect}). Note that the \Lpack{hyperref} package may call % \Lpack{nameref} via: % \verb?\AtBeginDocument{\usepackage{nameref}}? % \begin{macrocode} \AtBeginDocument{% \@ifpackageloaded{nameref}{% nameref loaded \@ifundefined{NR@sectm@m}{% haven't fiddled with \M@sect \typeout{Redoing nameref's sectioning} \let\NR@sectm@m\M@sect \def\M@sect#1#2#3#4#5#6[#7][#8]#9{% \setcounter{section@level}{#2}% \def\@currentlabelname{#7}% \NR@sectm@m{#1}{#2}{#3}{#4}{#5}{#6}[{#7}][{#8}]{\Sectionformat{#9}{#2}}}% }% {% \NR@sectm@m has already been defined } }% {% no nameref } } % end of \AtBeginDocument % \end{macrocode} % \end{macro} % \end{macro} % % % \begin{macro}{\label} % \begin{macro}{\MNR@label} % The \Lpack{nameref} package replaces \cs{label}, which (which memoir has added to). % Make the memoir addition again. % % \begin{macrocode} \AtBeginDocument{% \@ifpackageloaded{nameref}{% nameref loaded \@ifundefined{MNR@label}{% haven't fiddled with \label \typeout{Redoing nameref's label} \let\MNR@label\label \def\label#1{\@bsphack\begingroup \protected@edef\@currentlabel{\protect\M@TitleReference {\@currentlabel}{\M@currentTitle}}% \MNR@label{#1}% \endgroup \@esphack}% \let\MNR@old@caption\@caption \long\def\@caption#1[#2]#3{% \MNR@old@caption{#1}[{#2}]{#3}% \def\@currentlabelname{#2}% \M@gettitle{#2}% }% }% {% \MNR@label has already been defined } }% {% no nameref } } % end of \AtBeginDocument % \end{macrocode} % \end{macro} % \end{macro} % % We are done unless the \Lpack{hyperref} package has been loaded % \begin{macrocode} %% We are done unless the hyperref package has been loaded \@ifpackageloaded{hyperref}{}{\let\M@hfixcfinish\endinput} \M@hfixcfinish % \end{macrocode} % % \subsection{Patches for hyperref} % % \begin{macro}{\H@old@sbook} % \begin{macro}{\@sbook} % Possibly this will provide some hyperref bookmarks support for % the \cs{book*} document division (see page % 206 in the \textit{Hypertext marks in LaTeX} manual that I processed % on 2002/10/23 (cunningly it was internally dateless). It is based on % hyperref's code for \cs{@spart}, which uses \cs{H@old@spart} to hold % its original definition. % \begin{macrocode} \let\H@old@sbook\@sbook \def\@sbook#1{% \H@old@sbook{#1}% \Hy@GlobalStepCount\Hy@linkcounter \xdef\@currentHref{book*.\the\Hy@linkcounter}% \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Hy@captionsenglish} % \begin{macro}{\HyLang@english} % Not sure what these do. I do know I have one version of \Lpack{hyperref} % that defines \cs{Hy@captionsenglish} and a later one that % defines \cs{HyLang@english} instead. % \begin{macrocode} \@ifundefined{Hy@captionsenglish}{}{% \g@addto@macro{\Hy@captionsenglish}{\def\bookautorefname{Book}}} \@ifundefined{HyLang@english}{}{% \g@addto@macro{\HyLang@english}{\def\bookautorefname{Book}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Hy@captionsgerman} % \begin{macro}{\HyLang@german} % \begin{macrocode} \@ifundefined{Hy@captionsgerman}{}{% \g@addto@macro{\Hy@captionsgerman}{\def\bookautorefname{Buch}}} \@ifundefined{HyLang@german}{}{% \g@addto@macro{\HyLang@german}{\def\bookautorefname{Buch}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Hy@captionsportuges} % \begin{macro}{\HyLang@portuges} % \begin{macrocode} \@ifundefined{Hy@captionsportuges}{}{% \g@addto@macro{\Hy@captionsportuges}{\def\bookautorefname{Livro}}} \@ifundefined{HyLang@portuges}{}{% \g@addto@macro{\HyLang@portuges}{\def\bookautorefname{Livro}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Hy@captionsspanish} % \begin{macro}{\HyLang@spanish} % \begin{macrocode} \@ifundefined{Hy@captionsspanish}{}{% \g@addto@macro{\Hy@captionsspanish}{\def\bookautorefname{Libro}}} \@ifundefined{HyLang@spanish}{}{% \g@addto@macro{\HyLang@spanish}{\def\bookautorefname{Libro}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Hy@captionsafrikaans} % \begin{macro}{\HyLang@afrikaans} % \begin{macrocode} \@ifundefined{Hy@captionsafrikaans}{}{% \g@addto@macro{\Hy@captionsafrikaans}{\def\bookautorefname{Boek}}} \@ifundefined{HyLang@afrikaans}{}{% \g@addto@macro{\HyLang@afrikaans}{\def\bookautorefname{Boek}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\bookautorefname} % \begin{macrocode} \providecommand{\bookautorefname}{Book} % \end{macrocode} % \end{macro} % % \begin{macro}{\@@writetorep} % Change \Lpack{hyperref}'s \cs{@@writetorep} as memoir uses \cs{partnumberline} and % \cs{chapternumberline} as well as the normal \cs{numberline} % % \begin{macrocode} \def\@@writetorep#1#2#3#4#5{% \begingroup \def\Hy@tempa{#5}% \ifx\Hy@tempa\Hy@bookmarkstype \edef\Hy@level{#4}% \ifx\Hy@levelcheck Y% \@tempcnta\Hy@level\relax \advance\@tempcnta by -1 \ifnum\Hy@currentbookmarklevel<\@tempcnta \advance\@tempcnta by -\Hy@currentbookmarklevel\relax \advance\@tempcnta by 1 \Hy@Warning{% Difference (\the\@tempcnta) between bookmark levels is % greater \MessageBreak than one, level fixed% }% \@tempcnta\Hy@currentbookmarklevel \advance\@tempcnta by 1 \edef\Hy@level{\the\@tempcnta}% \fi \else \global\let\Hy@levelcheck Y% \fi \global\let\Hy@currentbookmarklevel\Hy@level \@tempcnta\Hy@level\relax \expandafter\xdef\csname Parent\Hy@level\endcsname{#3}% \advance\@tempcnta by -1 \edef\Hy@tempa{#3} \edef\Hy@tempb{\csname Parent\the\@tempcnta\endcsname}% \ifx\Hy@tempa\Hy@tempb \Hy@Warning{% The anchor of a bookmark and its parent's must not% \MessageBreak be the same. Added a new anchor% }% \phantomsection \fi \ifHy@bookmarksnumbered \let\numberline\Hy@numberline \let\booknumberline\Hy@numberline % <- added \let\partnumberline\Hy@numberline % <- added \let\chapternumberline\Hy@numberline % <- added \else \let\numberline\@gobble \let\booknumberline\@gobble % <- added \let\partnumberline\@gobble % <- added \let\chapternumberline\@gobble % <- added \fi \pdfstringdef\Hy@tempa{#2}% \protected@write\@outlinefile{}{% \protect\BOOKMARK [\Hy@level][\@bookmarkopenstatus{\Hy@level}]{#3}% {\Hy@tempa}{\Hy@tempb}% }% \fi \endgroup } % \end{macrocode} % \end{macro} % % \begin{macro}{\M@sect} % \Lpack{hyperref} fix for memoir's redefinition of \cs{@sect} % \begin{macrocode} \@ifundefined{H@old@sectm@m}{% haven't fiddled with \M@sect \let\H@old@sectm@m\M@sect \def\M@sect#1#2#3#4#5#6[#7][#8]#9{% \ifnum #2>\c@secnumdepth \Hy@GlobalStepCount\Hy@linkcounter \xdef\@currentHref{section*.\the\Hy@linkcounter}% \fi \H@old@sectm@m{#1}{#2}{#3}{#4}{#5}{#6}[{#7}][{#8}]{#9}% \ifnum #2>\c@secnumdepth \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}% \fi}% }% {% already fiddled \M@sect } % \end{macrocode} % \end{macro} % % \begin{macro}{\@resets@pp} % \Lpack{hyperref} fix for memoir's \texttt{appendices} environment % (discovered by Lars Hoemke, \url{hoemke@nikocity.de}, % private email 20 Feb 2003) % \begin{macrocode} \let\MH@old@resets@pp\@resets@pp \renewcommand*{\@resets@pp}{% \MH@old@resets@pp \def\theHchapter{\Alph{chapter}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@resets@ppsub} % \Lpack{hyperref} fix for memoir's \texttt{subappendices} environment % (Problem reported by Ignasi Furio, \url{ignasi.furio@uib.es}, % private email 13 May 2004) % \changes{v1.6}{2004/05/13}{Added \cs{@resets@ppsub} to memhfixc} % \begin{macrocode} \let\MH@old@resets@ppsub\@resets@ppsub \renewcommand*{\@resets@ppsub}{% \MH@old@resets@ppsub \def\theHsection{\theHchapter.\Alph{section}}} \def\endsubappendices{\def\theHsection{\theHchapter.\arabic{section}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\cftaddtitleline} % \begin{macro}{\cftaddnumtitleline} % \Lpack{hyperref} fix for memoir's add to contents macros % (discovered by Martin Siegumfeldt, \ctt{} 2003/09/25 % \textit{`Combinig [sic] Tocloft and hyperref'} % \begin{macrocode} \renewcommand{\cftaddtitleline}[4]{% \addtocontents{#1}{\protect\contentsline{#2}{#3}{#4}{\@currentHref}}} \renewcommand{\cftaddnumtitleline}[5]{\addtocontents{#1}{% \protect\contentsline{#2}{\protect\numberline{#3}#4}{#5}{\@currentHref}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\caption} % Yet another little jolly (fixed in version 1.5). \Lpack{hyperref}'s % \verb?\def? of \verb?\caption? cunningly messes up \Lpack{memoir}'s, % thereby screwing up the labels for subcaptions. % \begin{macrocode} \let\m@moldhypcaption\caption \renewcommand{\caption}{\donemaincaptiontrue\m@moldhypcaption} % \end{macrocode} % \end{macro} % % More tweaks are needed for continued captions and sidecaptions. % The need for these discovered by % \v{Z}arko F \v{C}u\v{c}ej\footnote{\texttt{zarko.cucej@uni-mb.si}} % (for \cs{contcaption}) and by % J{\o}rgen Larsen\footnote{\texttt{jl@ruc.dk}} (for \cs{sidecaption}). % \changes{v1.7}{2005/11/15}{Added tweaks for \cs{contcaption}, % \cs{sidecaption} and \cs{sidecontcaption}} % % \begin{macro}{\c@memhycontfloat} % \begin{macro}{\thememhycontfloat} % \begin{macro}{\theHmemhycontfloat} % We need an extra marker for continued captions. % \changes{v1.7}{2005/11/15}{Added extra counter for continued captions} % \begin{macrocode} \newcounter{memhycontfloat} \renewcommand*{\thememhycontfloat}{\arabic{memhycontfloat}} \renewcommand{\theHmemhycontfloat}{\arabic{memhycontfloat}} \setcounter{memhycontfloat}{0} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\contcaption} % Tweak the \cs{contcaption} macro. % \begin{macrocode} \renewcommand{\contcaption}{% \refstepcounter{memhycontfloat}% \addtocounter{\@captype}{\m@ne}\H@refstepcounter{\@captype}% \@contcaption\@captype} % \end{macrocode} % \end{macro} % % \begin{macro}{\endsidecaption} % Tweak the \texttt{sidecaption} environment. I don't know why it % works but it took a lot of time trying all sorts of combinations % of commands to get it to do so (if it really does). % \begin{macrocode} \def\endsidecaption{% \m@mscapend@fbox \H@refstepcounter{\@captype}% \hyper@makecurrent{\@captype}% \m@mscaplabel \begin{lrbox}{\m@mscap@capbox}% \begin{minipage}[c]{\sidecapwidth}% \sidecapstyle \@caption\@captype[\m@mscap@fortoc]{\m@mscap@forcap}% \end{minipage}% \end{lrbox}% \m@mscapopboxes} % \end{macrocode} % \end{macro} % % \begin{macro}{\sidecontcaption} % \begin{macro}{\endsidecontcaption} % Tweaks for the \texttt{sidecontcaption} environment. Again it was % a miss, miss, \ldots hit method to get something that appears % to work. % \begin{macrocode} \renewcommand*{\sidecontcaption}{% \refstepcounter{memhycontfloat}% \@sidecontcaption} \def\endsidecontcaption{% \m@mscapend@fbox \addtocounter{\@captype}{\m@ne}\H@refstepcounter{\@captype}% \hyper@makecurrent{memhycontfloat}% \m@mscaplabel \begin{lrbox}{\m@mscap@capbox}% \begin{minipage}[c]{\sidecapwidth}% \sidecapstyle \@contcaption\@captype{\m@mscap@forcap}% \end{minipage}% \end{lrbox}% \m@mscapopboxes} % \end{macrocode} % \end{macro} % \end{macro} % % % % The end of the \Lpack{hyperref} related patches. % % \begin{macrocode} % % \end{macrocode} % % % \section{Patches for the class code} \label{sec:class} % % At this date, 2005/09/25, with the simultaneous release of memoir v1.618 % and the patch file, by definition there are no patches. % % Subsequently code patches were found to be required. % % \subsection{Identification} \label{sec:id} % % \changes{v2.0}{2004/01/31}{No code in mempatch.sty} % \changes{v2.1}{2004/02/12}{Code now required in mempatch.sty} % \changes{v2.1a}{2004/02/19}{Extra pagestyle code for handling \cs{linespread}} % \changes{v2.4}{2004/04/26}{Removed extraneous spaces} % \changes{v2.4+}{2004/04/26}{Stopped noting general changes} % % \begin{macrocode} %<*patch> % \end{macrocode} % % ^^A \typeout{mempatch.sty 2002/12/12 v1.1 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/01/06 v1.2 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/01/22 v1.3 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/02/13 v1.4 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/04/26 v1.5 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/06/28 v1.6 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/07/23 v1.7 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/09/16 v1.8 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/10/06 v1.8a Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2003/11/16 v1.9 Patches for memoir class v1.3a} % ^^A \typeout{mempatch.sty 2004/01/31 v2.0 Patches for memoir class v1.6} % ^^A \typeout{mempatch.sty 2004/02/12 v2.1 Patches for memoir class v1.6} % ^^A \typeout{mempatch.sty 2004/02/19 v2.1a Patches for memoir class v1.6} % ^^A \typeout{mempatch.sty 2004/03/01 v2.2 Patches for memoir class v1.6} % ^^A \typeout{mempatch.sty 2004/03/28 v2.3 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/04/26 v2.3 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/04/27 v2.3a Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/04/30 v2.3b Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/05/10 v2.3c Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/05/14 v2.3d Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/12/14 v3.0 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2004/12/19 v3.1 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/01/01 v3.2 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/01/17 v3.3 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/01/18 v3.4 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/02/01 v3.5 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/02/07 v3.6 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/02/26 v3.7 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/03/06 v3.8 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/03/23 v3.9 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/05/16 v3.10 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/05/23 v3.11 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/06/06 v3.12 Patches for memoir class v1.61} % ^^A \typeout{mempatch.sty 2005/09/25 v4.0 Patches for memoir class v1.618} % ^^A \ProvidesFile{mempatch.sty}[2005/10/06 v4.1 Patches for memoir class v1.618] % ^^A \ProvidesFile{mempatch.sty}[2005/11/21 v4.2 Patches for memoir class v1.618] % ^^A \ProvidesFile{mempatch.sty}[2005/12/13 v4.3 Patches for memoir class v1.618] % ^^A \ProvidesFile{mempatch.sty}[2006/01/21 v4.4 Patches for memoir class v1.618] % ^^A \ProvidesFile{mempatch.sty}[2006/01/23 v4.4a Patches for memoir class v1.618] % \begin{macrocode} \ProvidesFile{mempatch.sty}[2006/08/08 v4.5 Patches for memoir class v1.618] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Version 4.0 was released simultaneously with version 1.618 of memoir. %%% By definition there were no patches. %%% Most of the subsequent additions are noted in the Addendum. %%% %%% Version 4.3 introduces the \reparticle macro which is not in the %%% Addendum. %%% %%% Version 4.4 introduces several additional commands, in particular %%% the \book command provides a document division above Part. See the %%% code (towards the end) for details of the new commands. %%% %%% Version 4.5 introduces commands for switching trim marks off and on %%% and a \DisemulatePackage macro to negate a prior \EmulatedPackage. %%% It also provides the functions of the pagenote package for end notes. %%% See the code (near the end) for details. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} % % % \section{Mempatch version 4.1} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Version 4.1 (2005/10/03 and later) % \end{macrocode} % % \begin{macro}{\@ssect} % Gabriel Guernik on 2005/10/03 discovered that I had made a boo-boo with \cs{memsecstarinfo} % in \cs{@ssect} by calling it with 3 arguments when it only has two. % \changes{v4.1}{2005/10/03}{Fixed problem with \cs{memsecstarinfo} in % \cs{@ssect}} % \begin{macrocode} %%%% Use correct number of arguments for \memsecstarinfo (2 not 3). \def\@ssect#1#2#3#4#5{% \M@gettitle{#5}% \memsecstarinfo{\m@msecn@mame}{#5}% \@mem@old@ssect{#1}{#2}{#3}{#4}{#5}} % \end{macrocode} % \end{macro} % % \subsection{Side captions} % \changes{v4.1}{2005/10/03}{Added all the code for side captions} % % \begin{macrocode} %%%%%%%%%%%% %%%%%%%%%%%% Side captions %%%%%%%%%%%% % \end{macrocode} % % \begin{macro}{\m@mscap@capbox} % \begin{macro}{\m@mscap@fbox} % We need two save boxes, one to hold the caption and the other % for the float material. % \begin{macrocode} \newsavebox{\m@mscap@capbox} \newsavebox{\m@mscap@fbox} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\sidecapsep} % \begin{macro}{\sidecapwidth} % \cs{sidecapsep} is the space between the text and the caption, which % is set in a box \cs{sidecapwidth} wide. These are initialized to % the \cs{marginpar...} values. % \begin{macrocode} \newdimen\sidecapsep \sidecapsep=\marginparsep \newdimen\sidecapwidth \sidecapwidth=\marginparwidth % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\m@m@tempdima} % \begin{macro}{\m@mscapraise} % Lengths for internal use. \cs{m@m@tempdima} is meant for general % temporary use. % \begin{macrocode} \newdimen\m@m@tempdima \newdimen\m@mscapraise % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\sidecapraise} % Length to make (small) adjustments to the position of the caption wrt the float. % \begin{macrocode} \newdimen\sidecapraise \sidecapraise \z@ % \end{macrocode} % \end{macro} % % \begin{macro}{\setsidecappos} % \begin{macro}{\m@mscappos} % \cs{setsidecappos}\marg{pos}, where \meta{pos} is one of \texttt{t}, % \texttt{c}, or \texttt{b}, sets the vertical position of the caption % in relation to the float and the result is saved as \cs{m@mscappos}. % The default is \texttt{c}. % \begin{macrocode} \newcommand*{\setsidecappos}[1]{% \def\m@mscappos{#1}\def\@tempb{t}% \ifx\@tempb\m@mscappos \else \def\@tempb{b}% \ifx\@tempb\m@mscappos \else \def\@tempb{c}% \ifx\@tempb\m@mscappos \else \@memerror{Argument to \string\setsidecappos\space is not t or c or b. \MessageBreak Set to c}{\@ehc}% \def\m@mscappos{c}% \fi \fi \fi} \setsidecappos{c} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\sidecapmargin} % \begin{macro}{\m@mscapmarg} % \cs{sidecapmargin}\marg{margin}, where \meta{marg} is one of % \texttt{left}, \texttt{right}, \texttt{inner}, or \texttt{outer}, % controls the margin where the caption will be put. The result % is saved as \cs{m@mscapmarg} as a number. The default % is \texttt{left}. % \begin{macrocode} \newcommand{\sidecapmargin}[1]{% \def\@tempa{#1}\def\@tempb{left}% \ifx\@tempb\@tempa \def\m@mscapmarg{0}% left \else \def\@tempb{right}% \ifx\@tempb\@tempa \def\m@mscapmarg{1}% right \else \def\@tempb{outer}% \ifx\@tempb\@tempa \def\m@mscapmarg{2}% outer \else \def\@tempb{inner}% \ifx\@tempb\@tempa \def\m@mscapmarg{3}% inner \else \@memerror{Unrecognized argument for \string\sidecapmargin}% {\@ehc}% \def\m@mscapmarg{-1}% error \fi \fi \fi \fi} \sidecapmargin{left} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\ifscapmargleft} % \begin{macro}{\scapmarglefttrue} % \begin{macro}{\scapmargleftfalse} % \cs{ifscapmargleft} is TRUE the caption should be in the left hand margin, % otherwise in the right hand margin. % \begin{macrocode} \newif\ifscapmargleft % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\sidecapfloatwidth} % \begin{macro}{\m@mscapmainwidth} % \cs{sidecapfloatwidth} is the width of the box holding the float. % Note that this is a macro, % not a length, so must be changed using \cs{renewcommand*}. % The default is \cs{linewidth}. Later, \cs{m@mscapmainwidth} will be set % to the current length specification from \cs{sidecapfloatwidth}. % \begin{macrocode} \def\sidecapfloatwidth{\linewidth} \newdimen\m@mscapmainwidth % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\m@mscaplkern} % \begin{macro}{\setm@mscaplkern} % \cs{setm@mscaplkern} is a utility macro to calculate the kern % (\cs{m@mscaplkern}) required when the caption is in the left margin. % \begin{macrocode} \newdimen\m@mscaplkern \newcommand*{\setm@mscaplkern}{% \m@mscaplkern=\sidecapwidth \advance\m@mscaplkern \sidecapsep \advance\m@mscaplkern \m@mscapmainwidth} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\sidecapstyle} % \cs{sidecapstyle} is called just before the caption is set. It can % be redefined to set different caption style parameters. The default % is raggedleft for left margin captions and raggedright for right % margin captions. % \begin{macrocode} \newcommand*{\sidecapstyle}{% %%% \captionnamefont{\bfseries}% \ifscapmargleft \captionstyle{\raggedleft}% \else \captionstyle{\raggedright}% \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\sidecaption} % The whole shebang is in the \texttt{sidecaption} environment but % it is more convenient to specify this via macros rather than % directly as an environment. % % \cs{sidecaption}\oarg{fortoc}\marg{title}\oarg{label} is what it % looks like to the user, but internally further macros handle % all the arguments. % \begin{macrocode} \newcommand*{\sidecaption}{% \@ifnextchar [{\@sidecaption}{\@sidecaption[]}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@sidecaption} % \cs{@sidecaption}\oarg{fortoc}\marg{title} grabs the first % two arguments. % \begin{macrocode} \def\@sidecaption[#1]#2{% \@ifnextchar [{\@@sidecaption{#1}{#2}}{\@@sidecaption{#1}{#2}[]}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@@sidecaption} % \cs{@@sidecaption}\marg{fortoc}\marg{title}\oarg{label} is the % last macro in the chain and handles all three arguments. % This does all the work for \verb?\begin{sidecaption}? % \begin{macro}{\m@mscap@fortoc} % \begin{macro}{\m@mscap@forcap} % \begin{macro}{\m@mscaplabel} % First, save all the arguments as macros. % \begin{macrocode} \def\@@sidecaption#1#2[#3]{% \ifx\@empty#1\@empty \def\m@mscap@fortoc{#2}% \else \def\m@mscap@fortoc{#1}% \fi \def\m@mscap@forcap{#2}% \ifx\@empty#3\@empty \def\m@mscaplabel{}% \else \def\m@mscaplabel{\@bsphack\label{#3}\@esphack}% \fi % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % Set the float width, calculate the left margin kern, and start % a \texttt{minipage} to hold the float, saving it in box % \cs{m@mscap@fbox}. % \begin{macrocode} \m@mscapstart@fbox} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mscapstart@fbox} % \begin{macro}{\m@mscapend@fbox} % \cs{m@mscapstart@fbox} is the macro that actually sets the float width, % calculates the left margin kern, and starts the float's \texttt{minipage}. % The macro \cs{m@mscapend@fbox} ends the box. % \begin{macrocode} \newcommand*{\m@mscapstart@fbox}{% \setlength{\m@mscapmainwidth}{\sidecapfloatwidth}% \setm@mscaplkern \begin{lrbox}{\m@mscap@fbox}% \begin{minipage}[c]{\m@mscapmainwidth}} \newcommand*{\m@mscapend@fbox}{% \end{minipage}% \end{lrbox}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\endsidecaption} % \cs{endsidecaption} does the work for \verb?\end{sidecaption}?. % % Finish the float minipage, then increment the caption counter and % call \cs{label} via \cs{m@mscaplabel}. % \begin{macrocode} \def\endsidecaption{% \m@mscapend@fbox \refstepcounter\@captype \m@mscaplabel % \end{macrocode} % Set the caption inside a minipage, saving it in box \cs{m@mscap@capbox}. % \begin{macrocode} \begin{lrbox}{\m@mscap@capbox}% \begin{minipage}[c]{\sidecapwidth}% \sidecapstyle \@caption\@captype[\m@mscap@fortoc]{\m@mscap@forcap} \end{minipage}% \end{lrbox}% % \end{macrocode} % Output the float and caption. % \begin{macrocode} \m@mscapopboxes} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mscapopboxes} % Having determined how high the caption box must be raised with % respect to the float box, output the boxes. % \begin{macrocode} \newcommand*{\m@mscapopboxes}{% \m@mcalcscapraise % \end{macrocode} % Set the float (from box \cs{m@mscap@fbox}) then the caption (from % box \cs{m@mscap@capbox}) kerning it to the left or right as % appropriate. % \begin{macrocode} \usebox{\m@mscap@fbox}\m@mscapcheckside \ifscapmargleft% \rlap{\kern-\m@mscaplkern \raisebox{\m@mscapraise}{\usebox{\m@mscap@capbox}}}% \else% \rlap{\kern\sidecapsep \raisebox{\m@mscapraise}{\usebox{\m@mscap@capbox}}}% \fi % \end{macrocode} % Finally, make \cs{m@mscapthisside} a no-op. % \begin{macrocode} \gdef\m@mscapthisside{}} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mcalcscapraise} % Calculate the amount the caption might have to be raised wrt the % float. This depends on the position: \\ % \texttt{t:} raise by the difference in heights \\ % \texttt{c:} shouldn't have to do anything as the minipages are meant % to center aligned \\ % \texttt{b:} lower by the difference in depths \\ % % However, experiments showed that a little bit of tweaking might % help. The final adjustment, \cs{sidecapraise} is controlled by % the user. % \begin{macrocode} \newcommand*{\m@mcalcscapraise}{% \def\@tempb{t}% \ifx\m@mscappos\@tempb \settoheight{\m@m@tempdima}{\strut\usebox{\m@mscap@capbox}}% \settoheight{\m@mscapraise}{\usebox{\m@mscap@fbox}}% \advance\m@mscapraise -\m@m@tempdima \advance\m@mscapraise 0.5ex \else \def\@tempb{b}% \ifx\m@mscappos\@tempb \settodepth{\m@m@tempdima}{\usebox{\m@mscap@fbox}}% \settodepth{\m@mscapraise}{\strut\usebox{\m@mscap@capbox}}% \advance\m@mscapraise -\m@m@tempdima \else \m@mscapraise=\z@ \advance\m@mscapraise 0.25ex \fi \fi \advance\m@mscapraise \sidecapraise} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mscapcheckside} % This macro determines whether the caption should be set in the % left or right margin. In twocolumn documents the caption for a single % column float is always set in the adjacent margin. Starred floats % are treated as regular floats as in a onecolumn document. % \begin{macrocode} \newcommand*{\m@mscapcheckside}{% \if@twocolumn \ifdim\hsize=\textwidth% float* \m@mscapcheckregside \else \if@firstcolumn \scapmarglefttrue \else \scapmargleftfalse \fi \fi \else \m@mscapcheckregside \fi % \end{macrocode} % Finally apply any user's override. % \begin{macrocode} \m@mscapthisside} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mscapcheckregside} % This performs the margin calculation for onecolumn documents. % \changes{v4.1}{2005/11/21}{Fixed missing t in \cs{marglefttrue}, courtesy Jorgen Larsen} % \begin{macrocode} \newcommand*{\m@mscapcheckregside}{% \if@twoside \checkoddpage \ifnum\m@mscapmarg<\@ne% % left \scapmarglefttrue \else \ifnum\m@mscapmarg=\@ne% % right \scapmargleftfalse \else \ifnum\m@mscapmarg=\tw@% % outer \scapmarglefttrue \ifoddpage \scapmargleftfalse \fi \else% % inner \scapmargleftfalse \ifoddpage \scapmarglefttrue \fi \fi \fi \fi \else% oneside \scapmarglefttrue \ifnum\m@mscapmarg>\@ne \ifnum\m@mscapmarg<\thr@@ \scapmargleftfalse \fi \fi \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\overridescapmargin} % \begin{macro}{\m@mscapthisside} % User macro to override the calculated caption margin. Call as either:\\ % \verb?\overridescapmargin{left}? or \verb?\overridescapmargin{right}? \\ % \begin{macrocode} \newcommand*{\overridescapmargin}[1]{% \def\@tempb{#1}\def\@tempa{left}% \ifx\@tempa\@tempb \def\m@mscapthisside{\scapmarglefttrue}% \else \def\@tempa{right}% \ifx\@tempa\@tempb \def\m@mscapthisside{\scapmargleftfalse}% \else \@memerror{Argument to \string\overridescapmargin\space neither left nor right}{\@ehc}% \def\m@mscapthisside{}% \fi \fi} \newcommand*{\m@mscapthisside}{} % \end{macrocode} % \end{macro} % \end{macro} % % Now for the other kinds of captions. % % \begin{macro}{\sidecontcaption} % \cs{sidecontcaption}\marg{title}\oarg{label} is for % a continuation sidecaption. % \begin{macrocode} \newcommand*{\sidecontcaption}{% \@sidecontcaption} % \end{macrocode} % \end{macro} % % \begin{macro}{\@sidecontcaption} % \cs{@sidecontcaption}\marg{title} grabs the first % argument. % \begin{macrocode} \def\@sidecontcaption#1{% \@ifnextchar [{\@@sidecontcaption{#1}}{\@@sidecontcaption{#1}[]}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@@sidecontcaption} % \cs{@@sidecontcaption}\marg{title}\oarg{label} is the % last macro in the chain and handles all two arguments. % This does all the work for \verb?\begin{sidecontcaption}? % \begin{macrocode} \def\@@sidecontcaption#1[#2]{% \def\m@mscap@forcap{#1}% \ifx\@empty#2\@empty \def\m@mscaplabel{}% \else \def\m@mscaplabel{\@bsphack\label{#2}\@esphack}% \fi \m@mscapstart@fbox} % \end{macrocode} % \end{macro} % % \begin{macro}{\endsidecontcaption} % \cs{endsidecontcaption} does the work for \verb?\end{sidecontcaption}?. % % \begin{macrocode} \def\endsidecontcaption{% \m@mscapend@fbox \addtocounter{\@captype}{\m@ne}\refstepcounter\@captype \m@mscaplabel \begin{lrbox}{\m@mscap@capbox}% \begin{minipage}[c]{\sidecapwidth}% \sidecapstyle \@contcaption\@captype{\m@mscap@forcap} \end{minipage}% \end{lrbox}% \m@mscapopboxes} % \end{macrocode} % \end{macro} % % % \begin{macro}{\sidenamedlegend} % \begin{macro}{\@sidenamedlegend} % \cs{sidenamedlegend}\oarg{fortoc}\marg{title} is for % a namedlegend sidecaption. % \begin{macrocode} \newcommand*{\sidenamedlegend}{% \@ifnextchar [{\@sidenamedlegend}{\@sidenamedlegend[]}} \def\@sidenamedlegend[#1]#2{% \@@sidenamedlegend{#1}{#2}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@@sidenamedlegend} % \cs{@@sidenamedlegend}\marg{fortoc}\marg{title} is the % last macro in the chain and handles all arguments. % This does all the work for \verb?\begin{sidenamedlegend}? % \begin{macrocode} \def\@@sidenamedlegend#1#2{% \ifx\@empty#1\@empty \def\m@mscap@fortoc{#2}% \else \def\m@mscap@fortoc{#1}% \fi \def\m@mscap@forcap{#2}% \def\m@mscaplabel{}% \m@mscapstart@fbox} % \end{macrocode} % \end{macro} % % \begin{macro}{\endsidenamedlegend} % \cs{endsidenamedlegend} does the work for \verb?\end{sidenamedlegend}?. % \begin{macrocode} \def\endsidenamedlegend{% \m@mscapend@fbox \begin{lrbox}{\m@mscap@capbox}% \begin{minipage}[c]{\sidecapwidth}% \sidecapstyle \@legend\@captype[\m@mscap@fortoc]{\m@mscap@forcap} \end{minipage}% \end{lrbox}% \m@mscapopboxes} % \end{macrocode} % \end{macro} % % % \begin{macro}{\sidelegend} % \cs{sidelegend}\marg{title} is for % a legend sidecaption. % \begin{macrocode} \newcommand*{\sidelegend}{% \@@sidelegend} % \end{macrocode} % \end{macro} % % \begin{macro}{\@@sidelegend} % \cs{@@sidelegend}\marg{title} is the % last macro in the chain and handles all arguments. % This does all the work for \verb?\begin{sidelegend}? % \begin{macrocode} \def\@@sidelegend#1{% \def\m@mscap@forcap{#1}% \m@mscapstart@fbox} % \end{macrocode} % \end{macro} % % \begin{macro}{\endsidelegend} % \cs{endsidelegend} does the work for \verb?\end{sidelegend}?. % \begin{macrocode} \def\endsidelegend{% \m@mscapend@fbox \begin{lrbox}{\m@mscap@capbox}% \begin{minipage}[c]{\sidecapwidth}% \sidecapstyle \legend{\m@mscap@forcap} \end{minipage}% \end{lrbox}% \m@mscapopboxes} % \end{macrocode} % \end{macro} % % \section{Mempatch version 4.2} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Version 4.2 (2005/11/21 and later) % \end{macrocode} % % \subsection{AtBegin/End...} % % Code, based on a hint from Morten H{\o}gholm\footnote{CTT posting % 2005/11/08, \textit{Re: Checking for packages froma class... % revisited}} that the \Lpack{scrlfile} package from % \Lpack{koma-script} includes commands such as \\ % \cs{AfterFile}\marg{file}\marg{code} \\ % plus before and after classes and packages. % % \begin{macrocode} %%%%%%%%%%%% %%%%%%%%%%%% Extensions to \AtBeginDocument %%%%%%%%%%%% % \end{macrocode} % % Extend the \cs{InputIfFileExists} macro to call hooks before and % the actual inputting. The kernel version (as of 2005/11/21) is: % \begin{verbatim} % \newcommand{\InputIfFileExists}[2]{% % \IfFileExists{#1}% % {\#2\@addtofilelist{#1}\@@input \@filef@und}} % \end{verbatim} % % \begin{macro}{\InputIfFileExists} % Effectively all file input is handled by this macro. Extend it % by adding pre- and post- input hooks. % \begin{macrocode} \renewcommand{\InputIfFileExists}[2]{% \IfFileExists{#1}% {#2\@addtofilelist{#1}\m@matbeginf{#1}% \@@input \@filef@und \m@matendf{#1}% \killm@matf{#1}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@matbeginf} % \begin{macro}{\m@matendf} % \cs{m@matbeginf}\marg{file} calls macro \cs{file-m@mfb} if it % is defined. Similarly \cs{m@matendf}\marg{file} calls % \cs{file-m@mfe} if it is defined. % \begin{macrocode} \newcommand{\m@matbeginf}[1]{\@ifundefined{#1-m@mfb}{}% {\@nameuse{#1-m@mfb}}} \newcommand{\m@matendf}[1]{\@ifundefined{#1-m@mfe}{}% {\@nameuse{#1-m@mfe}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\killm@matf} % \cs{killm@matf}\marg{file} undefines the \cs{file-m@mfb} and % \cs{file-m@mfe} macros. % \begin{macrocode} \newcommand*{\killm@matf}[1]{% \@namelet{#1-m@mfb}\relax \@namelet{#1-m@mfe}\relax} % \end{macrocode} % \end{macro} % % \begin{macro}{\AtBeginFile} % \begin{macro}{\AtEndFile} % \cs{AtBeginFile}\marg{file}\marg{code} inserts \meta{code} % just before \meta{file} is input. Similarly \cs{AtEndFile} inserts % just after input. % \begin{macrocode} \newcommand{\AtBeginFile}[2]{\@ifundefined{#1-m@mfb}% {\@namedef{#1-m@mfb}{#2}}% {\expandafter\addtodef\csname #1-m@mfb\endcsname{}{#2}}} \newcommand{\AtEndFile}[2]{\@ifundefined{#1-m@mfe}% {\@namedef{#1-m@mfe}{#2}}% {\expandafter\addtodef\csname #1-m@mfe\endcsname{}{#2}}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\AtBeginPackage} % \begin{macro}{\AtEndPackage} % \begin{macro}{\RequireAtEndPackage} % \cs{AtBeginPackage}\marg{pack}\marg{code} inserts \meta{code} % just before the \meta{pack} package is input, and \cs{AtEndPackage} % is the equivalent for after input. \cs{RequireAtEndPackage} inserts % \meta{code} either at the end of \meta{pack}, or immediately if % \meta{pack} has already been input. % \begin{macrocode} \newcommand{\AtBeginPackage}[2]{% \AtBeginFile{#1.\@pkgextension}{#2}} \newcommand{\AtEndPackage}[2]{% \AtEndFile{#1.\@pkgextension}{#2}} \newcommand{\RequireAtEndPackage}[2]{% \@ifpackageloaded{#1}{#2}% {\AtEndFile{#1.\@pkgextension}{#2}}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\AtBeginClass} % \begin{macro}{\AtEndClass} % \begin{macro}{\RequireAtEndClass} % \cs{AtBeginClass}\marg{class}\marg{code} and friends are the class % equivalents of \cs{AtBeginPackage} and friends. % \begin{macrocode} \newcommand{\AtBeginClass}[2]{% \AtBeginFile{#1.\@clsextension}{#2}} \newcommand{\AtEndClass}[2]{% \AtEndFile{#1.\@clsextension}{#2}} \newcommand{\RequireAtEndClass}[2]{% \@ifclassloaded{#1}{#2}% {\AtEndFile{#1.\@clsextension}{#2}}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \section{Mempatch version 4.3} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Version 4.3 (2005/12/13 and later) % \end{macrocode} % % \subsection{reparticle chapter style} % % The \verb?reparticle? chapterstyle replicates the appearance % of a \cs{section} in an \Lpack{article} class. % % \begin{macrocode} %%% Replicate the appearance of a \section in the article class \makechapterstyle{reparticle}{% \setlength{\beforechapskip}{3.5ex \@plus 1ex \@minus .2ex}% \renewcommand*{\chapterheadstart}{\vspace{\beforechapskip}}% \setlength{\afterchapskip}{2.3ex \@plus .2ex}% \renewcommand*{\printchaptername}{}% \renewcommand*{\chapternamenum}{}% \renewcommand*{\chaptitlefont}{\normalfont\Large\bfseries}% \renewcommand*{\chapnumfont}{\chaptitlefont}% \renewcommand*{\printchapternum}{\@hangfrom{\chapnumfont \thechapter\quad}}% \renewcommand*{\afterchapternum}{}} % \end{macrocode} % % \begin{macro}{\reparticle} % Call this to get division heads to replicate the \Lpack{article} class. % For example: \\ % \verb?\ifartopt \reparticle \fi? % \begin{macrocode} %%% \reparticle redefines the higher level division heads fonts and spacing %%% to replicate the article class (but \chapter must still be used). %%% Use, for example like: \ifartopt \reparticle \fi \newcommand*{\reparticle}{% \chapterstyle{reparticle}% \setsecheadstyle{\large\bfseries\raggedright}% \setsubsecheadstyle{\normalsize\bfseries\raggedright}% } % \end{macrocode} % \end{macro} % % \section{Mempatch version 4.4} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Version 4.4 (2006/01/06 and later) % \end{macrocode} % % \subsection{Captiontitlefinal} % % \begin{macro}{\captiontitlefinal} % \begin{macro}{\@makecaption} % \cs{captiontitlefinal}\marg{stuff} puts \meta{stuff} immediately at the % end of the caption's title text, but it will not appear the the LoF/LoT/etc. % The code was supplied by Frederic % Connes\footnote{\texttt{frederic@connes.org}} in an email to me on % 2005/12/28. % \changes{v4.4a}{2006/01/23}{Fixed \cs{@tewmpboxa} typo in \cs{@makecaption}} % \begin{macrocode} %%% \captiontitlefinal{} will put immediately at the %%% end of a \caption's title text and it will not appear in the %%% LoF/LoT/etc. For example: \captiontitlefinal{.} %%% (Code supplied by Frederic Connes) \newcommand*{\captiontitlefinal}[1]{\def\@contfinal{#1}} \captiontitlefinal{} \renewcommand{\@makecaption}[2]{\let\@memtempa\relax \ifdim\prevdepth>-99\p@ \vskip\abovecaptionskip \else \def\@memtempa{\vbox to\topskip{}}\fi \let\@contfnote\footnote \renewcommand{\footnote}[2][]{}% \let\@contfmark\footnotemark \renewcommand{\footnotemark}[1][]{}% \sbox\@tempboxa{\@contnfont #1\@contdelim \@conttfont #2\@contfinal}% \let\footnote\@contfnote \let\footnotemark\@contfmark \ifdim\wd\@tempboxa<\linewidth \centering\fi \if@contcw \centering \parbox{\@contcwidth}{% \ifdim\wd\@tempboxa<\@contcwidth \centering\fi \fi \if@conthang \sbox\@tempboxa{\@contnfont #1\@contdelim}% \@contpre% {\@contcstyle\hangindent=\wd\@tempboxa \noindent\box\@tempboxa\@memtempa \@conttfont #2\@contfinal\par}% \else \if@contindent \@contpre% {\@contnfont #1\@contdelim}\@memtempa {\@contcstyle\hangindent=\@contindw \hangafter=\@ne\@conttfont #2\@contfinal\par}% <- v1.4 \else \@contpre% {\@contnfont #1\@contdelim}\@memtempa {\ifdim\wd\@tempboxa<\linewidth \@contcshortstyle\else \@contcstyle\fi% <- v1.4 \@conttfont #2\@contfinal\par}% \fi \fi \@contpost \if@contcw \par }% end of the parbox \fi \vskip\belowcaptionskip} % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{xindy and theindex} % % \begin{macro}{\ifm@mxindy} % \begin{macro}{\m@mxindytrue} % \begin{macro}{\m@mxindyfalse} % \begin{macro}{\xindyindex} % \begin{macro}{\@@wrspindexhyp} % Use \cs{xindyindex} when you are going to use the xindy program rather % than makeindex. hyperrefed entries won't work with xindy. % The code was supplied by Frederic % Connes\footnote{\texttt{frederic@connes.org}} in an email to me on % 2006/01/08. % \begin{macrocode} %%% Use the declaration \xindyindex if you will be using the xindy program %%% instead of MakeIndex to process index entries. As yet, xindy will not %%% hyperref any entries. %%% (Code supplied by Frederic Connes) \newif\ifm@mxindy \m@mxindyfalse \newcommand*{\xindyindex}{\m@mxindytrue} \def\@@wrspindexhyp#1|#2|#3\\{% \ifshowindexmark\@showidx{#1}\fi \ifx\\#2\\% \protected@write\@auxout{}% {\string\@@wrindexm@m{\@idxfile}% \ifm@mxindy{#1}\else{#1|hyperspindexpage(\thepage)}\fi {\@nameuse{the\@sptheidx}}}% \else \def\Hy@temp@A{#2}% \ifx\Hy@temp@A\HyInd@ParenLeft \protected@write\@auxout{}% {\string\@@wrindexm@m{\@idxfile}% \ifm@mxindy{#1|#2}\else{#1|#2hyperspindexpage(\thepage)}\fi {\@nameuse{the\@sptheidx}}}% \else \protected@write\@auxout{}% {\string\@@wrindexm@m{\@idxfile}{#1|#2}% {\@nameuse{the\@sptheidx}}}% \fi \fi \endgroup \@esphack} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{environment}{theindex} % Problem noted by Erik Quaeghebeur\footnote{\texttt{equaeghe@nospammail.net}} % in a CTT posting \textit{memoir, openleft and \cs{clear*page} commands} on % 2006/01/04 that an index did not start on a verso page when the % \textsf{openleft} option is in effect. % \begin{macrocode} \renewenvironment{theindex}{% \clearforchapter% <- added \if@twocolumn \@restonecolfalse \else \@restonecoltrue \fi \ifonecolindex \onecolumn \chapter*{\indexname} \preindexhook \else \setlength{\columnseprule}{\indexrule}% \setlength{\columnsep}{\indexcolsep}% \twocolumn[\@makeschapterhead{\indexname} \preindexhook]% \fi \indexmark \ifnoindexintoc\else \phantomsection \addcontentsline{toc}{chapter}{\indexname} \fi \thispagestyle{chapter}\parindent\z@ \parskip\z@ \@plus .3\p@\relax \let\item\@idxitem}% {\if@restonecol\onecolumn\else\twocolumn\fi} % \end{macrocode} % \end{environment} % % \subsection{Verse numbering} % % \begin{macro}{\verselinebreak} % Aaron Rendahl (\texttt{arendahl@stat.umn.edu}) provided the \cs{ignorespaces} % fix for an extra indent when using \verb?\\>[0pt]? to end a verse line. % \changes{v4.4}{2006/01/14}{Added \cs{ignorespaces} to \cs{verselinebreak}} % \begin{macrocode} %%% \ignorespaces fix by Aaron Rendahl to remove extraneous space %%% with \\>[0pt] ending a verse line \renewcommand*{\verselinebreak}[1][\z@]{\newline\hspace*{#1}\ignorespaces} % \end{macrocode} % \end{macro} % % \begin{macro}{\verselinenumbersright} % \begin{macro}{\verselinenumbersleft} % \begin{macro}{\@vslnumright} % \begin{macro}{\@vslnumleft} % \begin{macro}{\@vscentercr} % New declarations for setting verse line numbers at the right (default) % or at the left. % \changes{v4.4}{2006/01/15}{Added code for switching verse line numbers left/right} % \begin{macrocode} %%% Use the \verselinenumbersleft declaration to set verse line numbers %%% at the left. To later return to the default of setting them at the right %%% use the \verselinenumbersright declaration. \newcommand*{\verselinenumbersright}{\def\@vstypelinenum{\@vslnumright}} \newcommand*{\verselinenumbersleft}{\def\@vstypelinenum{\@vslnumleft}} \verselinenumbersright \newcommand*{\@vslnumright}{% \hfill\rlap{\kern\rightskip\kern\rightmargin% \vlvnumfont\getthelinenumber{poemline}}} \newcommand*{\@vslnumleft}{% \hfill\rlap{\kern-\textwidth\kern-\rightskip% \vlvnumfont\getthelinenumber{poemline}}} \renewcommand*{\@vscentercr}{% \ifhmode \unskip\else \@nolnerr\fi \@vstypelinenum% \@vsifgt{\verselinebreak}{% \incr@vsline \par\@ifstar{\nobreak\@vsxcentercr}{% \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}}}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Wrapped verbatims} % % \begin{macro}{\raggedwrap} % \begin{macro}{\wrappingon} % Paul (\texttt{paulaugust2003@yahoo.com}) found that wrapped verbatims in % a list environment (e.g. \texttt{itemize}) were not indented although % regular verbatims were. % % \cs{raggedwrap} is a variation on \cs{raggedright} (\cs{leftskip} is set % to \cs{@totalleftmargin} instead of 0pt). Hopefully this fix will not % mess up any existing wrapped verbatims. % \changes{v4.4}{2006/01/16}{Fixed surprise in wrapped verbatims} % \begin{macrocode} %%% Fix for wrapped verbatims in list environments. \newcommand*{\raggedwrap}{% \@rightskip\@flushglue \rightskip\@rightskip \leftskip\@totalleftmargin \parindent\ragrparindent} \renewcommand*{\wrappingon}{% \def\@xobeysp{~\discretionary{\verbatimbreakchar}% {\kern\verbatimindent}{}}% \def\wrapright{\raggedwrap}} % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Page after a Part heading} % % \begin{macro}{\partblankpage} % \begin{macro}{\nopartblankpage} % \begin{macro}{\ifm@mnopartnewpage} % \begin{macro}{\m@mnopartnewpagetrue} % \begin{macro}{\m@mnopartnewpagefalse} % \begin{macro}{\@endpart} % Code to prevent a \cs{part} outputting a blank page. Provided by % Frederic Connes. % \changes{v4.4}{2006/01/15}{Added controls for \cs{part} blank pages} % \begin{macrocode} %%% Use the \nopartblankpage declaration if you don't want a blank %%% page after a Part title page. The default is set by \partblankpage. \newif\ifm@mnopartnewpage \newcommand*{\partblankpage}{\m@mnopartnewpagefalse} \newcommand*{\nopartblankpage}{\m@mnopartnewpagetrue} \renewcommand*{\@endpart}{\afterpartskip \ifm@mnopartnewpage \else \if@twoside \if@openright \null \thispagestyle{afterpart}% \newpage \fi \fi \fi \if@tempswa \twocolumn \fi} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\partnumberline} % Let's make sure that there is a space between the part number and % title in the ToC. % \changes{v4.4}{2006/01/16}{Added space after part number in ToC} % \begin{macrocode} \renewcommand{\partnumberline}[1]{% \hb@xt@\@tempdima{% \cftpartname\@cftbsnum #1\@cftasnum\hfil}\@cftasnumb\space} % \end{macrocode} % \end{macro} % % \begin{macro}{\ps@afterpart} % \begin{macro}{\ps@book} % \begin{macro}{\ps@afterbook} % Some new page styles for the page after a Part page, and a Book and % its following page. % \begin{macrocode} \aliaspagestyle{afterpart}{empty} \aliaspagestyle{book}{empty} \aliaspagestyle{afterbook}{empty} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Book document division} % % Frederic Connes tells me that in French typography there is often % a sectional division above Part. He called this \cs{superpart} but % I think that \cs{book} more closely resembles the English usage. % He provided code for implementing his \cs{superpart}. (I have just % checked and the Chicago Manual of Style does have an example of % a Book, Part, Chapter, Subsection hierarchy). % % \begin{macro}{\book} % \begin{macro}{\book*} % Here we go with a \cs{book} division. % \changes{v4.4}{2006/01/15}{Added a \cs{book} division with all that that entails} % \begin{macrocode} %%% The \book (and \book*) document division is one level higher than %%% a \cs{part}. It has the same kind of controls over its appearance in %%% the body of the document and in the ToC as \part has. \newcommand*{\book}{% \@setupbook \secdef\@book\@sbook} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\bookmark} % \begin{macro}{\c@book} % \begin{macro}{\thebook} % \begin{macro}{\theHbook} % \begin{macro}{\toclevel@book} % Start of the setting up. \cs{theHbook} and \cs{toclevel@book} are for % \Lpack{hyperref} % \begin{macrocode} \newcommand*{\bookmark}[1]{} \newcounter{book} \setcounter{book}{0} \renewcommand*{\thebook}{\Roman{book}} \newcommand*{\theHbook}{\arabic{book}} \newcommand*{\toclevel@book}{-2} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\beforebookskip} % \begin{macro}{\midbookskip} % \begin{macro}{\afterbookskip} % \begin{macrocode} \newcommand*{\beforebookskip}{\null\vfil} \newcommand*{\midbookskip}{\par \vskip 2\baselineskip} \newcommand*{\afterbookskip}{\vfil\newpage} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@setupbook} % Start off the book page. % \begin{macrocode} \newcommand*{\@setupbook}{% \if@openright \cleardoublepage \else \clearpage \fi \thispagestyle{book}% \if@twocolumn \@tempswatrue \else \@tempswafalse \fi \beforebookskip} % \end{macrocode} % \end{macro} % % \begin{macro}{\bookname} % \begin{macro}{\booknamefont} % \begin{macro}{\booknumfont} % \begin{macro}{\booktitlefont} % Specify the typesetting styles. % \begin{macrocode} \newcommand*{\bookname}{Book} \newcommand*{\booknamefont}{\normalfont\huge\bfseries} \newcommand*{\booknumfont}{\normalfont\huge\bfseries} \newcommand*{\booktitlefont}{\normalfont\Huge\bfseries} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\printbookname} % \begin{macro}{\booknamenum} % \begin{macro}{\printbooknum} % \begin{macro}{\printbooktitle} % \begin{macrocode} \newcommand*{\printbookname}{\booknamefont \bookname} \newcommand*{\booknamenum}{\space} \newcommand*{\printbooknum}{\booknumfont \thebook} \newcommand{\printbooktitle}[1]{\booktitlefont #1} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\membookinfo} % \begin{macro}{\membookstarinfo} % \begin{macrocode} \newcommand*{\membookinfo}[3]{} \newcommand*{\membookstarinfo}[1]{} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@book} % \begin{macro}{\@sbook} % \begin{macrocode} \long\def\@book[#1]#2{% \M@gettitle{#1}% \phantomsection \ifnum\c@secnumdepth > -3\relax \refstepcounter{book}% \addcontentsline{toc}{book}% {\protect\booknumberline{\thebook}#1}% \membookinfo{\thebook}{#1}{#2}% \else \addcontentsline{toc}{book}{#1}% \membookinfo{}{#1}{#2}% \fi \bookmark{#1}% {\centering \interlinepenalty \@M \normalfont \ifnum \c@secnumdepth >-3\relax \printbookname \booknamenum \printbooknum \midbookskip \fi \printbooktitle{#2}\par}% \@endbook} \def\@sbook#1{% \M@gettitle{#1}% \phantomsection \membookstarinfo{#1}% {\centering \interlinepenalty \@M \normalfont \printbooktitle{#1}\par}% \@endbook} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\bookblankpage} % \begin{macro}{\nobookblankpage} % \begin{macro}{\ifm@mnobooknewpage} % \begin{macro}{\m@mnobooknewpagetrue} % \begin{macro}{\m@mnobooknewpagefalse} % \begin{macro}{\@endbook} % Code to prevent a \cs{book} outputting a blank page. Provided by % Frederic Connes. % \changes{v4.4}{2006/01/15}{Added controls for \cs{book} blank pages} % \begin{macrocode} %%% Use the \nobookblankpage declaration if you don't want a blank %%% page after a Book title page. The default is set by \bookblankpage. \newif\ifm@mnobooknewpage \newcommand*{\bookblankpage}{\m@mnobooknewpagefalse} \newcommand*{\nobookblankpage}{\m@mnobooknewpagetrue} \newcommand*{\@endbook}{\afterbookskip \ifm@mnobooknewpage \else \if@twoside \if@openright \null \thispagestyle{afterbook}% \newpage \fi \fi \fi \if@tempswa \twocolumn \fi} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\cftbookname} % \begin{macro}{\l@book} % \begin{macro}{\booknumberline} % Now for the ToC entry. % \begin{macrocode} \newcommand*{\cftbookname}{} \newcommand*{\l@book}[2]{% \ifnum\c@tocdepth >-3\relax \addpenalty{-\@highpenalty}% \addvspace{\cftbeforebookskip}% \begingroup {\leftskip \cftbookindent\relax \rightskip \@tocrmarg \parfillskip -\rightskip \parindent \cftbookindent\relax\@afterindenttrue \interlinepenalty\@M \leavevmode \settowidth{\@tempdima}{\cftbookfont\cftbookname}% \addtolength{\@tempdima}{\cftbooknumwidth}% \let\@cftbsnum \cftbookpresnum \let\@cftasnum \cftbookaftersnum \let\@cftasnumb \cftbookaftersnumb \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip {\cftbookfont #1}% \cftbookfillnum{#2}} \nobreak \global\@nobreaktrue \everypar{\global\@nobreakfalse\everypar{}}% \endgroup \fi} \newcommand{\booknumberline}[1]{% \hb@xt@\@tempdima{% \cftbookname\@cftbsnum #1\@cftasnum\hfil}\@cftasnumb\space} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\cftbeforebookskip} % \begin{macro}{\cftbookindent} % \begin{macro}{\cftbooknumwidth} % \begin{macro}{\cftbookfont} % \begin{macro}{\cftbookpresnum} % \begin{macro}{\cftbookaftersnum} % \begin{macro}{\cftbookaftersnumb} % \begin{macro}{\cftbookleader} % \begin{macro}{\cftbookdotsep} % \begin{macro}{\cftbookpagefont} % \begin{macro}{\cftbookafterpnum} % \begin{macro}{\cftbookfillnum} % \begin{macrocode} % ToC layout parameters. \newlength{\cftbeforebookskip} \setlength{\cftbeforebookskip}{2.25em \@plus\p@} \newdimen\cftbookindent \setlength{\cftbookindent}{0em} \newdimen\cftbooknumwidth \setlength{\cftbooknumwidth}{1.5em} \newcommand*{\cftbookfont}{\large\bfseries} \newcommand*{\cftbookpresnum}{} \newcommand*{\cftbookaftersnum}{} \newcommand*{\cftbookaftersnumb}{} \newcommand*{\cftbookleader}{% \large\bfseries\cftdotfill{\cftbookdotsep}} \newcommand*{\cftbookdotsep}{\cftnodots} \newcommand*{\cftbookpagefont}{\large\bfseries} \newcommand{\cftbookafterpnum}{} \newcommand{\cftbookfillnum}[1]{% {\cftbookleader}% {\hb@xt@\@pnumwidth{\hss {\cftbookpagefont #1}}}% \cftbookafterpnum\par} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@setclcnt} % Add the book to \cs{@setclcnt} % \begin{macrocode} \renewcommand*{\@setclcnt}[2]{% \@tempswafalse \nametest{#1}{none}% \ifsamename \setcounter{#2}{-10}% \@tempswatrue \fi \nametest{#1}{book}% \ifsamename \setcounter{#2}{-2}% \@tempswatrue \fi \nametest{#1}{part}% \ifsamename \setcounter{#2}{-1}% \@tempswatrue \fi \nametest{#1}{chapter}% \ifsamename \setcounter{#2}{0}% \@tempswatrue \fi \nametest{#1}{section}% \ifsamename \setcounter{#2}{1}% \@tempswatrue \fi \nametest{#1}{subsection}% \ifsamename \setcounter{#2}{2}% \@tempswatrue \fi \nametest{#1}{subsubsection}% \ifsamename \setcounter{#2}{3}% \@tempswatrue \fi \nametest{#1}{paragraph}% \ifsamename \setcounter{#2}{4}% \@tempswatrue \fi \nametest{#1}{subparagraph}% \ifsamename \setcounter{#2}{5}% \@tempswatrue \fi \nametest{#1}{all}% \ifsamename \setcounter{#2}{50}% \@tempswatrue \fi \if@tempswa\else \@memerror{% Unknown document division name (#1) }{% I'll ignore it. Type \space and I'll continue.\MessageBreak If you haven't mistyped the name then use \protect\setcounter\space instead.}% \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\settocdepth} % Add \cs{book} to ToC depth setting. % \begin{macrocode} \renewcommand*{\settocdepth}[1]{% \@tempswafalse \nametest{#1}{none}% \ifsamename \addtocontents{toc}{\changetocdepth{-10}}% \@tempswatrue \fi \nametest{#1}{book}% \ifsamename \addtocontents{toc}{\changetocdepth{-2}}% \@tempswatrue \fi \nametest{#1}{part}% \ifsamename \addtocontents{toc}{\changetocdepth{-1}}% \@tempswatrue \fi \nametest{#1}{chapter}% \ifsamename \addtocontents{toc}{\changetocdepth{0}}% \@tempswatrue \fi \nametest{#1}{section}% \ifsamename \addtocontents{toc}{\changetocdepth{1}}% \@tempswatrue \fi \nametest{#1}{subsection}% \ifsamename \addtocontents{toc}{\changetocdepth{2}}% \@tempswatrue \fi \nametest{#1}{subsubsection}% \ifsamename \addtocontents{toc}{\changetocdepth{3}}% \@tempswatrue \fi \nametest{#1}{paragraph}% \ifsamename \addtocontents{toc}{\changetocdepth{4}}% \@tempswatrue \fi \nametest{#1}{subparagraph}% \ifsamename \addtocontents{toc}{\changetocdepth{5}}% \@tempswatrue \fi \nametest{#1}{all}% \ifsamename \addtocontents{toc}{\changetocdepth{50}}% \@tempswatrue \fi \if@tempswa % \end{macrocode} % The next bit is from Heiko Oberdiek (CTT {\itshape Re: Memoir, \verb?\settocdepth? % and pdflatex \verb?=>? problem with PDF bookmarks}, 2006/07/21) as % \Lpack{hyperref} needs \verb?\tocdepth? set in the body not just in the ToC. % \begin{macrocode} \@ifundefined{toclevel@#1}{% @memwarn{Unknown toclevel for #1}% }{% \setcounter{tocdepth}{\@nameuse{toclevel@#1}}% } \else \@memerror{% Unknown document division name (#1) }{% I'll ignore it. Type \space and I'll continue.}% \fi} % \end{macrocode} % \end{macro} % % \section{Mempatch version 4.5} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Version 4.5 (2006/02/11 and later) % \end{macrocode} % % \subsection{Odds and ends} % % \begin{macro}{\DisemulatePackage} % Undoes an \cs{EmulatedPackage} % \begin{macrocode} %%% \DisemulatePackage{pack} undoes a previous \EmulatedPackage{pack}. %%% For example \DisemulatePackage{index} if you need to use the index package. \providecommand*{\DisemulatePackage}[1]{% \@namelet{ver@#1.\@pkgextension}\relax} % \end{macrocode} % \end{macro} % % \begin{macro}{\@nameedef} % Add a missing \verb?%? (noticed by Lars Madsen). % \begin{macrocode} \renewcommand{\@nameedef}[1]{% \expandafter\protected@edef\csname #1\endcsname} % \end{macrocode} % \end{macro} % % \begin{macro}{\@smemmain} % Change the timing of \cs{clear[double]page}. Problem noted by David Wilson % \url{David.Wilson@murdoch.edu.au} in email dated 2006/01/29. It now matches % the other \cs{...matter} macros. % \begin{macrocode} %%% change timing of \@mainmattertrue in \@smemmain \renewcommand*{\@smemmain}{% \ifartopt \clearpage \else \cleardoublepage \counterwithin{figure}{chapter}% \counterwithin{table}{chapter}% \fi \@mainmattertrue \setcounter{secnumdepth}{\value{maxsecnumdepth}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@footnotetext} % This was fixed in v1.618, except that I unfixed it later in the class file. % This really should be done in a new class release, but it's not time for % that yet. % \begin{macrocode} \renewcommand{\@footnotetext}[1]{% \reset@font\m@mold@footnotetext{#1}\m@mmf@prepare} % \end{macrocode} % \end{macro} % % \begin{macro}{\ifm@mpn@new@chap} % \begin{macro}{\m@mpn@new@chapfalse} % \begin{macro}{\m@mpn@new@chaptrue} % \begin{macro}{\ifm@mpn@new@schap} % \begin{macro}{\m@mpn@new@schapfalse} % \begin{macro}{\m@mpn@new@schaptrue} % These are for supporting the page/end notes, flagging that a % \verb?\chapter(*)? has been called. % \begin{macrocode} \newif\ifm@mpn@new@chap \m@mpn@new@chapfalse \newif\ifm@mpn@new@schap \m@mpn@new@schapfalse % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\@chapter} % \begin{macro}{\f@rbdy} % Fix from Lars Madsen for mistiming \verb?\chaptermark? in articles. % Also adding \verb?\m@m@new@chap? flag, and setting \verb?\f@rbdy? % to the chapter title for the body of the text. % \begin{macrocode} %%% Fix for mistiming of \chaptermark with article option \def\@chapter[#1]#2{% \m@mpn@new@chaptrue \def\f@rbdy{#2}% \ifx\ch@pt@c\@empty % no optional args \def\f@rtoc{#2}% \def\f@rhdr{#2}% \else % at least one opt arg \let\f@rtoc\ch@pt@c \ifx\@empty#1\@empty \let\f@rhdr\ch@pt@c \else \def\f@rhdr{#1}% \fi \fi \m@m@Andfalse \ifnum \c@secnumdepth >\m@ne \if@mainmatter \m@m@Andtrue \fi \fi \ifm@m@And \refstepcounter{chapter}% \fi \ifartopt \@makechapterhead{#2}% \@afterheading \chaptermark{\f@rhdr}% \else \chaptermark{\f@rhdr}% \insertchapterspace \if@twocolumn \@topnewpage[\@makechapterhead{#2}]% \else \@makechapterhead{#2}% \fi \@afterheading \fi \ifm@m@And \ifanappendix \addcontentsline{toc}{appendix}{% \protect\chapternumberline{\thechapter}\f@rtoc}% \memappchapinfo{\thechapter}{\f@rtoc}{\f@rhdr}{#2}% \else \addcontentsline{toc}{chapter}{% \protect\chapternumberline{\thechapter}\f@rtoc}% \memchapinfo{\thechapter}{\f@rtoc}{\f@rhdr}{#2}% \fi \else \addcontentsline{toc}{chapter}{\f@rtoc}% \ifanappendix \memappchapinfo{}{\f@rtoc}{\f@rhdr}{#2}% \else \memchapinfo{}{\f@rtoc}{\f@rhdr}{#2}% \fi \fi \ifheadnameref\M@gettitle{\f@rhdr}\else\M@gettitle{\f@rtoc}\fi} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@schapter} % \begin{macro}{\@m@mschapter} % Make the same page/end note extensions to \verb?\@schapter?. % \begin{macrocode} \renewcommand{\@schapter}[1]{% \m@mpn@new@schaptrue \def\f@rbdy{#1}% \ifartopt \@makeschapterhead{#1}% \else \if@twocolumn \@topnewpage[\@makeschapterhead{#1}] \else \@makeschapterhead{#1}% \fi \fi \@afterheading} \renewcommand{\@m@mschapter}[2][\@empty]{% \@schapter{#2}% \ifx \@empty#1 \def\f@rhdr{#2}% \else \def\f@rhdr{#1}% \setcounter{secnumdepth}{-10}% \chaptermark{#1}% \setcounter{secnumdepth}{\value{maxsecnumdepth}}% \fi \ifanappendix \memappchapstarinfo{\f@rhdr}{#2}% \else \memchapstarinfo{\f@rhdr}{#2}% \fi \ifheadnameref\M@gettitle{\f@rhdr}\else\M@gettitle{#2}\fi} % \end{macrocode} % \end{macro} % \end{macro} % % % \subsection{Switch trims on/off} % % \begin{macro}{\showtrimson} % \begin{macro}{\showtrimsoff} % \begin{macro}{\mem@shipii} % Switch trimming marks off and on. Requested by a James Hunt on CTT, % \emph{Are crop marks needed on every page?}, February 2006. % \begin{macrocode} %%%% Use \showtrimsoff and \showtrimson to switch trim marks off and on. %%%% If the showtrims option has not been used, these do nothing. \newcommand*{\showtrimsoff}{\showtrimsfalse} \newcommand*{\showtrimson}{\showtrimstrue} \renewcommand*{\mem@shipii}{% \ifvoid\@cclv \mem@oldshipout\box\@cclv \else \ifshowtrims \mem@oldshipout\vbox{\trimmarks\unvbox\@cclv}% \else \mem@oldshipout\box\@cclv \fi \fi} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Sidepars} % % \begin{macro}{\@sidepar} % Sidepars have a nasty habit of moving up or down depending on whether % characters in the sidepar and the main text line have ascenders and/or % descenders. The length \verb?\sideparvshift? was provided to % enable adjustments. This code from Dan Luecking % (CTT \textit{Re: sidepars drift up a point}, 2006/04/11) does a much % better job, % and the default for \verb?\sideparvshift? is now 0pt. % \begin{macrocode} %%%% Fix to stop \sidepars moving up or down \long\def\@sidepar[#1]#2{\@bsphack\strut\vadjust{% \checkoddpage \ifsideparswitch \ifreversesidepar \ifoddpage \oddpagefalse \else \oddpagetrue \fi \fi \else \oddpagetrue \ifreversesidepar \oddpagefalse \fi \fi \rlap{\kern-\parindent \if@twocolumn \if@firstcolumn% put at left \kern -\marginparsep \kern -\marginparwidth \else% put at right \kern \columnwidth \kern \marginparsep \fi \else \ifoddpage% put at right \kern \textwidth \kern \marginparsep \else% put at left \kern -\marginparsep \kern -\marginparwidth \fi \fi \setbox0=\vtop to 0pt{% \begin{minipage}[t]{\marginparwidth}% \ifoddpage #2\else #1\fi% \end{minipage}% \vss}% \vtop to 0pt{\kern\sideparvshift% default should be 0pt \kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}% \@esphack} \setlength{\sideparvshift}{0pt} % \end{macrocode} % \end{macro} % % \subsection{Anonymous divisions} % % \begin{macro}{\@fbreak} % \begin{macro}{\@sfbreak} % The \verb?\fancybreak? macros start a paragraph and so should end it as well, % as noted by Dan Luecking (CTT \textit{Re: Appendix Package - adding % semicolon ``:'' after appendix letter in ToC} 2006/04/20). % % \begin{macrocode} %%%% Ensure that fancybreaks close the paragraph they start \renewcommand{\@fbreak}[1]{\par \penalty -100 \noindent\parbox{\linewidth}{\centering #1}% \par % \penalty -20 \@afterindentfalse \@afterheading} \renewcommand{\@sfbreak}[1]{\par \penalty -100 \noindent\parbox{\linewidth}{\centering #1}% \par % \penalty -20 \@afterindenttrue \@afterheading} % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Vertically center text} % % \begin{environment}{vplace} % An environment which centers its body vertically. This is more robust % than that proposed in the manual. The optional argument, which is a % (decimal) number, increases ($>1.0$) or decreases ($<1.0$) the space % above the body with respect to that below. % \begin{macrocode} %%%% \begin{vplace}[] vertically centered stuff \end{vplace} %%%% adjusts above space wrt to below space \newenvironment{vplace}[1][1]{% \par\vspace*{\stretch{#1}}% }{% \vspace*{\stretch{1}}% \par} % \end{macrocode} % \end{environment} % % \subsection{End notes} % % This is from the \Lpack{pagenote} package, with minor amendments. % % \begin{macrocode} %%%% %%%% Include the functions of the pagenote package %%%% % \end{macrocode} % % \begin{macro}{\ifm@mpnpageopt} % \begin{macro}{\ifm@mpncontopt} % We need two flags for the options. % \begin{macrocode} \newif\ifm@mpnpageopt \m@mpnpageoptfalse \newif\ifm@mpncontopt \m@mpncontoptfalse % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\notepageref} % \begin{macro}{\continuousnotenums} % Let the user change the default options. % \begin{macrocode} \newcommand*{\notepageref}{\m@mpnpageopttrue} \newcommand*{\continuousnotenums}{% \counterwithout{pagenote}{chapter} \renewcommand{\thepagenote}{\arabic{pagenote}}} % \end{macrocode} % \end{macro} % \end{macro} % % % \begin{macro}{\c@pagenote} % \begin{macro}{\thepagenote} % We need a counter for the notes. Just how it is defined depends on the % \Lopt{continuous} option. % \begin{macrocode} %\ifm@mpncontopt % \newcounter{pagenote} %\else \newcounter{pagenote}[chapter] %\fi \renewcommand{\thepagenote}{\arabic{pagenote}} \setcounter{pagenote}{0} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\ifmempagenotes} % Need to check if notes are required. % \begin{macrocode} \newif\ifmempagenotes \mempagenotesfalse % \end{macrocode} % \end{macro} % % \begin{macro}{\makepagenote} % This sets up the note file. At the end it emasculates itself so it can only % be used once. % \begin{macrocode} \newcommand*{\makepagenote}{% \newwrite\@notefile \immediate\openout\@notefile=\jobname.ent \mempagenotestrue % \end{macrocode} % \begin{macro}{\pagenote} % Make sure that this has a useful definition. % \begin{macrocode} \def\pagenote{\@bsphack\begingroup \@sanitize \m@m@wrpnote}% % \end{macrocode} % \end{macro} % \begin{macrocode} \typeout{Writing note file \jobname.ent}% \let\makepagenote\@empty} % \end{macrocode} % \end{macro} % % % \begin{macro}{\immediate@protected@write} % We might have to do some immediate writes. This is an immediate % version of the kernel \verb?\protected@write?. % \begin{macrocode} \newcommand{\immediate@protected@write}[3]{% \begingroup #2% \let\protect\@unexpandable@protect \edef\reserved@a{\immediate\write#1{#3}}% \reserved@a \endgroup \if@nobreak\ifvmode\nobreak\fi\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@m@pnwrite} % If the \Lopt{page} option is used we cannot use an immediate write % because the page number is only known in the output routine. % \begin{macrocode} \ifm@mpnpageopt \let\m@m@pnwrite\protected@write \else \let\m@m@pnwrite\immediate@protected@write \fi % \end{macrocode} % \end{macro} % % \begin{macro}{\pnchap} % \begin{macro}{\pnschap} % Redefine these for different subheadings in the notes list. % \begin{macrocode} \newcommand*{\pnchap}{\f@rtoc} \newcommand*{\pnschap}{\f@rbdy} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\m@m@wrpnote} % This writes the note information to the note file. It first increments the % note counter and calls \verb?\notenumintext? to handle its appearance in % the body text. % \begin{macrocode} \newcommand{\m@m@wrpnote}[2][]{% \refstepcounter{pagenote}% \notenumintext{\thepagenote}% % \end{macrocode} % Check if this is the first note in a division, and if so indicate this % in the file. % \begin{macrocode} \ifm@mpn@new@chap \global\m@mpn@new@chapfalse \addtonotes{\string\pagenotesubhead{\@chapapp}{\thechapter}{\pnchap}}% \fi \ifm@mpn@new@schap \global\m@mpn@new@schapfalse \addtonotes{\string\pagenotesubhead{\@chapapp}{}{\pnschap}}% \fi % \end{macrocode} % Finally, write the entry. % \begin{macrocode} \m@m@pnwrite\@notefile{} {\string\noteentry{\thepagenote}{#1}{#2}{\thepage}}% \endgroup \@esphack} % \end{macrocode} % \end{macro} % % % \begin{macro}{\pagenote} % The user command to generate a note. It is given substance % by \verb?\makepagenote?. % \begin{macrocode} \def\pagenote{\@bsphack\begingroup \@sanitize\m@m@pagenote} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@m@pagenote} % \begin{macrocode} \newcommand{\m@m@pagenote}[2][]{\endgroup\@esphack} % \end{macrocode} % \end{macro} % % \begin{macro}{\pagetofootnote} % \begin{macro}{\foottopagenote} % \begin{macro}{\memsavefootnote} % \begin{macro}{\memsavepagenote} % Let the user change pagenotes to footnotes, or vice-versa. In either % case the optional argument is ignored. % \begin{macrocode} \newcommand*{\pagetofootnote}{% \let\memsavepagenote\pagenote \renewcommand{\pagenote}[2][]{\footnote{##2}}} \newcommand*{\foottopagenote}{% \let\memsavefootnote\footnote \renewcommand*{\footnote}[2][]{\pagenote{##2}}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\addtonotes} % \verb?\addtonotes?\marg{text} puts \meta{text} into the notes file. % \begin{macrocode} \newcommand{\addtonotes}[1]{% \ifmempagenotes \IfFileExists{\jobname.ent}{\m@m@pnwrite\@notefile{}{#1}}{\mempnofilewarn}% \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\notenumintext} % \begin{macro}{\notenuminnotes} % \verb?\notenumintext?\marg{notenum} typesets \meta{notenum} (in the body text). % \begin{macrocode} \newcommand{\notenumintext}[1]{% \textsuperscript{#1}} % \end{macrocode} % \verb?\notenuminnotes?\marg{notenum} typesets \meta{notenum} (as part of the note). % \begin{macrocode} \newcommand{\notenuminnotes}[1]{% {\normalfont #1.}\space} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\noteentry} % \verb?\noteentry?\marg{notenum}\marg{id}\marg{pagenum}\marg{text} % typesets a note. % \begin{macrocode} \newcommand{\noteentry}[4]{% \prenoteinnotes \noteidinnotes{#1}{#2}\pageinnotes{#4}\noteinnotes{#3}% \postnoteinnotes} % \end{macrocode} % \end{macro} % % \begin{macro}{\idtextinnotes} % \verb?\idtextinnotes?\marg{id text} typesets the note's \meta{id text}. % \begin{macrocode} \newcommand{\idtextinnotes}[1]{% [#1]\space} % \end{macrocode} % \end{macro} % % \begin{macro}{\noteidinnotes} % \verb?\noteidinnotes?\marg{notenum}\marg{id} is used to typeset the note % identification (in the note listing). It is set so that it typesets the % \meta{id} if it is not empty, otherwise it sets the \meta{notenum}. % \begin{macrocode} \newcommand{\noteidinnotes}[2]{% \@ifmtarg{#2}{% \notenuminnotes{#1}}{\idtextinnotes{#2}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\pageinnotes} % \begin{macro}{\printpageinnotes} % \verb?\pageinnotes?\meta{pagenum} calls % \verb?\printpageinnotes?\marg{pagenum} to typeset the originating % page number (in the note), but only if the \verb?\notepageref? declaration % has been used (the page number is not trustworthy unless the % \verb?\notepageref? has been used). % \begin{macrocode} \newcommand{\pageinnotes}[1]{% \ifm@mpnpageopt \printpageinnotes{#1}\fi} \newcommand*{\printpageinnotes}[1]{% (\pagerefname\ #1)\space} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\noteinnotes} % \verb?\noteinnotes?\marg{text} is used to typeset the note's text % (in the note list). % \begin{macrocode} \newcommand{\noteinnotes}[1]{#1} % \end{macrocode} % \end{macro} % % \begin{macro}{\prenoteinnotes} % \begin{macro}{\postnoteinnotes} % These are called immediately before and after the note information is % typeset. % \begin{macrocode} \newcommand{\prenoteinnotes}{\par\noindent} \newcommand{\postnoteinnotes}{\par} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\notesname} % \begin{macro}{\notedivision} % Heading for note list. % \begin{macrocode} \providecommand*{\notesname}{Notes} \newcommand*{\notedivision}{\chapter{\notesname}} % \end{macrocode} % \end{macro} % \end{macro} % % % \begin{macro}{\printnotes} % \begin{macro}{\printpagenotes*} % User commands to print the note file. % \begin{macrocode} \newcommand*{\printpagenotes}{\@ifstar{\@sprintpagenotes}{\@printpagenotes}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\mempnofilewarn} % Warning when the notes file does not exist. % \begin{macrocode} \newcommand*{\mempnofilewarn}{% \ClassWarning{memoir}{There is no .ent file}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@sprintpagenotes} % Macro implementing \verb?\printpagenotes*?. % \begin{macrocode} \newcommand*{\@sprintpagenotes}{% \ifmempagenotes \notedivision \IfFileExists{\jobname.ent}{% \immediate\closeout\@notefile \input{\jobname.ent}% \immediate\openout\@notefile=\jobname.ent% }{% \mempnofilewarn }% \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\@printpagenotes} % Macro implementing \verb?\printpagenotes?. % \begin{macrocode} \newcommand*{\@printpagenotes}{% \ifmempagenotes \notedivision \IfFileExists{\jobname.ent}{% \immediate\closeout\@notefile \input{\jobname.ent}% }{% \mempnofilewarn } \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\pagenotesubhead} % The section heading before each set of notes. \\ % \verb?\pagenotesubhead?\marg{chaptername}\marg{number}\marg{title} % \begin{macrocode} \newcommand*{\pagenotesubhead}[3]{% \section*{#1 #2 #3}} % \end{macrocode} % \end{macro} % % Prevent loading of the \Lpack{pagenote} package. % \begin{macrocode} \EmulatedPackage{pagenote} % \end{macrocode} % % \subsection{ToC, LoF, etc lists} % % Lars Madsen suggested that macros like \verb?\cftfigurename? be added for use % in the LoF, and so on. % % \begin{macro}{\@cftn@me} % \begin{macro}{\numberline} % \begin{macrocode} \newcommand*{\@cftn@me}{} \renewcommand*{\numberline}[1]{% \hb@xt@\@tempdima{\@cftn@me\@cftbsnum #1\@cftasnum\hfil}\@cftasnumb} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\newlistentry} % Extend \cs{newlistentry} to add \cs{cftXname}. % \begin{macrocode} \renewcommand*{\newlistentry}[4][\@empty]{% \@ifundefined{c@#2}{% check & set the counter \ifx \@empty#1\relax newcounter{#2}% \else \newcounter{#2}[#1]% \expandafter\edef\csname the#2\endcsname{% \expandafter\noexpand\csname the#1\endcsname.\noexpand\arabic{#2}}% \fi}{} \setcounter{#2}{0} \@namedef{l@#2}##1##2{% \ifnum \@nameuse{c@#3depth} > #4\relax \vskip \@nameuse{cftbefore#2skip}% {\leftskip \@nameuse{cft#2indent}\relax \rightskip \@tocrmarg \parfillskip -\rightskip \parindent \@nameuse{cft#2indent}\relax\@afterindenttrue \interlinepenalty\@M \leavevmode \settowidth{\@tempdima}{\@nameuse{cft#2font}\@nameuse{cft#2name}}% \addtolength{\@tempdima}{\@nameuse{cft#2numwidth}}% \expandafter\let\expandafter\@cftbsnum\csname cft#2presnum\endcsname \expandafter\let\expandafter\@cftasnum\csname cft#2aftersnum\endcsname \expandafter\let\expandafter\@cftasnumb\csname cft#2aftersnumb\endcsname \expandafter\let\expandafter\@cftn@me\csname cft#2name\endcsname \advance\leftskip\@tempdima \null\nobreak\hskip -\leftskip {\@nameuse{cft#2font}##1}\nobreak \@nameuse{cft#2fillnum}{##2}} \fi }% end of \l@#2 \expandafter\newlength\csname cftbefore#2skip\endcsname \setlength{\@nameuse{cftbefore#2skip}}{\z@ \@plus .2\p@} \expandafter\newlength\csname cft#2indent\endcsname \expandafter\newlength\csname cft#2numwidth\endcsname \ifcase #4\relax% 0 (level 1) \setlength{\@nameuse{cft#2indent}}{0em} \setlength{\@nameuse{cft#2numwidth}}{2.3em} \or% 1 (level 2) \setlength{\@nameuse{cft#2indent}}{2.3em} \setlength{\@nameuse{cft#2numwidth}}{3.2em} \or% 2 (level 3) \setlength{\@nameuse{cft#2indent}}{5.5em} \setlength{\@nameuse{cft#2numwidth}}{4.1em} \or% 3 (level 4) \setlength{\@nameuse{cft#2indent}}{8.5em} \setlength{\@nameuse{cft#2numwidth}}{5.0em} \else% anything else \setlength{\@nameuse{cft#2indent}}{10.5em} \setlength{\@nameuse{cft#2numwidth}}{6.0em} \fi \@namedef{cft#2font}{\normalfont} \@namedef{cft#2name}{} \@namedef{cft#2presnum}{} \@namedef{cft#2aftersnum}{} \@namedef{cft#2aftersnumb}{} \@namedef{cft#2dotsep}{\cftdotsep} \@namedef{cft#2leader}{\normalfont\cftdotfill{\@nameuse{cft#2dotsep}}} \@namedef{cft#2pagefont}{\normalfont} \@namedef{cft#2afterpnum}{} \@namedef{cft#2toclevel@#2}{#4} \@namedef{cft#2fillnum}##1{% {\@nameuse{cft#2leader}}\nobreak \hb@xt@\@pnumwidth{% \hfil\@nameuse{cft#2pagefont}##1}\@nameuse{cft#2afterpnum}\par} }% end of \newlistentry % \end{macrocode} % \end{macro} % % \begin{macrocode} \let\cftbeforesectionskip\relax \let\cftsectionindent\relax \let\cftsectionnumwidth\relax \newlistentry[chapter]{section}{toc}{0} \cftsetindents{section}{1.5em}{2.3em} \let\cftbeforesubsectionskip\relax \let\cftsubsectionindent\relax \let\cftsubsectionnumwidth\relax \newlistentry[section]{subsection}{toc}{1} \cftsetindents{subsection}{3.8em}{3.2em} \let\cftbeforesubsubsectionskip\relax \let\cftsubsubsectionindent\relax \let\cftsubsubsectionnumwidth\relax \newlistentry[subsection]{subsubsection}{toc}{2} \cftsetindents{subsubsection}{7.0em}{4.1em} \let\cftbeforeparagraphskip\relax \let\cftparagraphindent\relax \let\cftparagraphnumwidth\relax \newlistentry[subsubsection]{paragraph}{toc}{3} \cftsetindents{paragraph}{10.0em}{5.0em} \let\cftbeforesubparagraphskip\relax \let\cftsubparagraphindent\relax \let\cftsubparagraphnumwidth\relax \newlistentry[paragraph]{subparagraph}{toc}{4} \cftsetindents{subparagraph}{12.0em}{6.0em} % \end{macrocode} % % \begin{macrocode} \let\cftbeforefigureskip\relax \let\cftfigureindent\relax \let\cftfigurenumwidth\relax \newlistentry[chapter]{figure}{lof}{0} \cftsetindents{figure}{0em}{2.3em} \let\cftbeforetableskip\relax \let\cfttableindent\relax \let\cfttablenumwidth\relax \newlistentry[chapter]{table}{lot}{0} \cftsetindents{table}{0em}{2.3em} % \end{macrocode} % % \subsection{Page layout} % % Morten H{\o}gholm suggested (2006/07/26) that instead of using TeX syntax I should use % \verb?\setlength? when setting up the page layout so that the \Lpack{calc} % package can be used, e.g. \\ % \verb?\settypeblocksize{41\baselineskip+\topskip}{310pt}{*}? % % % \begin{macro}{\setrectanglesize} % The macro \cs{setrectanglesize}\marg{H}\marg{W}\marg{r} % calculates the height and width of a rectangle given any two out of % the three arguments. An unvalued argument is denoted by \texttt{*}. % % Table~\ref{tab:setrect} shows the argument combinations and the result % for each combination. % \begin{table} % \centering % \caption{Arguments and results for \cs{setrectanglesize}}\label{tab:setrect} % \begin{tabular}{ccc|l} \hline % H & W & r & Result \\ \hline % * & W & r & $H = rW$ \\{} % * & W & * & $H = W$ \\{} % * & * & r & ambiguous \\{} % * & * & * & ambiguous \\{} % H & W & r & $H, W$ \\ % H & W & * & $H, W$ \\ % H & * & r & $W = rH$ \\ % H & * & * & $W = H$ \\ % \hline % \end{tabular} % \end{table} % % The % calculated height and width are stored in \cs{@tempdima} and \cs{@tempdimb} % respectively. Both lengths are set to zero if there is an error. % \begin{macrocode} \renewcommand*{\setrectanglesize}[3]{% \nametest{#1}{*}% \ifsamename % H = * \nametest{#2}{*}% \ifsamename % W = * \@memerror{% The combination of argument values is ambiguous.\MessageBreak The lengths will be set to zero}{\@ehd} \setlength{\@tempdima}{0pt}% \setlength{\@tempdimb}{0pt}% \else % W \nametest{#3}{*}% \ifsamename % r = * \setlength{\@tempdimb}{#2}% \setlength{\@tempdima}{\@tempdimb}% \else % r \setlength{\@tempdimb}{#2} \setlength{\@tempdima}{#3\@tempdimb} \fi \fi \else % H \nametest{#2}{*}% \ifsamename % W = * \nametest{#3}{*}% \ifsamename % r = * \setlength{\@tempdima}{#1}% \setlength{\@tempdimb}{\@tempdima}% \else % r \setlength{\@tempdima}{#1}% \setlength{\@tempdimb}{#3\@tempdima}% \fi \else % W \setlength{\@tempdima}{#1}% \setlength{\@tempdimb}{#2}% \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\setfillsize} % Consider a set of 4 lengths, $T$, $L$, $C$, and $R$, such that % $T = L + C + R$, where $T$ is a fixed size and normally $C$ is also fixed. % Also $L$ and $R$ may be specified independently of each other or as a % ratio (i.e., $L = rR$ or $R = rL$). % The macro % \cs{setfillsize}\marg{T}\marg{C}\marg{L}\marg{R}\marg{r} % maintains these constraints among the variables, where an unvalued % argument is denoted by \texttt{*}. % % Table~\ref{tab:setfill} shows the argument combinations and the result % for each combination. % \begin{table} % \centering % \caption{Arguments and results for \cs{setfillsize}}\label{tab:setfill} % \begin{tabular}{cccc|ll} \hline % C & L & R & r & Result & \\ \hline % * & * & R & r & $L = rR$, & $C = T - L - R$ \\{} % * & * & R & * & $L = R$, & $C = T - L - R$ \\{} % * & * & * & r & ambigous & \\{} % * & * & * & * & ambiguous & \\{} % * & L & R & r & $L$, $R$, & $C = T - L - R$ \\{} % * & L & R & * & $L$, $R$, & $C = T - L - R$ \\{} % * & L & * & r & $R = rL$, & $C = T - L - R$ \\{} % * & L & * & * & $R = L$, & $C = T - L - R$ \\{} % C & * & R & r & $L = T - C - R$ & $C$ \\ % C & * & R & * & $L = T - C - R$, & $C$ \\ % C & * & * & r & $L + R = T - C$, $R = rL$, & $C$ \\ % C & * & * & * & $L + R = T - C$, $R = L$, & $C$ \\ % C & L & R & r & ambiguous & $C$ \\ % C & L & R & * & ambiguous & $C$ \\ % C & L & * & r & $R = T - C - L$, & $C$ \\ % C & L & * & * & $R = T - C - L$, & $C$ \\ % \hline % \end{tabular} % \end{table} % % % The % calculated values of \meta{C}, \meta{L} and \meta{R} are stored in % \cs{@tempdimc}, \cs{@tempdima} and \cs{@tempdimb} respectively. % If there is an error the lengths are set to zero. % \begin{macrocode} \renewcommand*{\setfillsize}[5]{% \nametest{#2}{*}% \ifsamename % C = * \nametest{#3}{*}% \ifsamename % L = * \nametest{#4}{*}% \ifsamename % R = * \@memerror{% The combination of argument values is ambiguous.\MessageBreak The lengths will be set to zero}{\@ehd} \setlength{\@tempdima}{0pt}% \setlength{\@tempdimb}{0pt}% \setlength{\@tempdimc}{0pt}% \else % R \nametest{#5}{*}% \ifsamename % r = * \setlength{\@tempdimb}{#4}% \setlength{\@tempdima}{\@tempdimb}% \setlength{\@tempdimc}{#1}% \advance\@tempdimc -\@tempdima \advance\@tempdimc -\@tempdimb \else % r \setlength{\@tempdimb}{#4}% \setlength{\@tempdima}{#5\@tempdimb}% \setlength{\@tempdimc}{#1}% \advance\@tempdimc -\@tempdima \advance\@tempdimc -\@tempdimb \fi \fi \else % L \nametest{#4}{*}% \ifsamename % R = * \nametest{#5}{*}% \ifsamename % r = * \setlength{\@tempdima}{#3}% \setlength{\@tempdimb}{\@tempdima}% \setlength{\@tempdimc}{#1}% \advance\@tempdimc -\@tempdima \advance\@tempdimc -\@tempdimb \else % r \setlength{\@tempdima}{#3}% \setlength{\@tempdimb}{#5\@tempdima}% \setlength{\@tempdimc}{#1}% \advance\@tempdimc -\@tempdima \advance\@tempdimc -\@tempdimb \fi \else % R \setlength{\@tempdima}{#3}% \setlength{\@tempdimb}{#4}% \setlength{\@tempdimc}{#1}% \advance\@tempdimc -\@tempdima \advance\@tempdimc -\@tempdimb \fi \fi \else % C is valued \nametest{#3}{*}% \ifsamename % L = * \nametest{#4}{*}% \ifsamename % R = * \nametest{#5}{*}% \ifsamename % r = * \setlength{\@tempdimc}{#2}% \setlength{\@tempdima}{#1}% \advance\@tempdima -\@tempdimc \@tempdima = 0.5\@tempdima \@tempdimb = \@tempdima \else % r (CODE PERHAPS FIXED) \setlength{\@tempdimc}{#2}% \setlength{\@tempdimb}{#1}% % T \advance\@tempdimb -\@tempdimc % T - C \@tempdima = 1000sp \@tempdima = #5\@tempdima % 1000r sp \advance\@tempdima by 1000sp % 1000(1+r)sp \@tempcnta = \@tempdima % 1000(1+r) \@tempdima = \@tempdimb % T - C \divide\@tempdima by \@tempcnta % (T-C)/1000(1+r) pts \@tempdima = 1000\@tempdima % (T-C)/(1+r) pts = L \advance\@tempdimb by -\@tempdima % = R \fi \else % R \setlength{\@tempdimc}{#2}% \setlength{\@tempdimb}{#4}% \setlength{\@tempdima}{#1}% \advance\@tempdima -\@tempdimc \advance\@tempdima -\@tempdimb \fi \else % L \nametest{#4}{*}% \ifsamename % R = * \setlength{\@tempdimc}{#2}% \setlength{\@tempdima}{#3}% \setlength{\@tempdimb}{#1}% \advance\@tempdimb -\@tempdimc \advance\@tempdimb -\@tempdima \else % R \@memerror{% The combination of argument values is ambiguous.\MessageBreak The lengths will be set to zero}{\@ehd}% \setlength{\@tempdima}{0pt}% \setlength{\@tempdimb}{0pt}% \setlength{\@tempdimc}{#2}% \fi \fi \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mclassicht} % The classic adjustment of the \cs{textheight} to get an integral number % of lines (given an integral number of baselineskips returns a height % giving one more line in the block). % \begin{macrocode} \newcommand*{\m@mclassicht}{% \setlength{\@tempdima}{\textheight}% \divide\@tempdima \baselineskip \@tempcnta=\@tempdima \setlength{\textheight}{\@tempcnta\baselineskip}% \addtolength{\textheight}{\topskip}} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mlinesht} % The adjustment of the \cs{textheight} to get an integral number % of lines (given an inegral number of baselineskips returns a height % giving that number of lines). % \begin{macrocode} \newcommand*{\m@mlinesht}{% \setlength{\@tempdima}{\textheight}% \advance\@tempdima -\baselineskip \divide\@tempdima \baselineskip \@tempcnta=\@tempdima \setlength{\textheight}{\@tempcnta\baselineskip}% \addtolength{\textheight}{\topskip}} % \end{macrocode} % \end{macro} % % \begin{macro}{\m@mnearestht} % The adjustment of the \cs{textheight} to get an integral number % of lines with the calculated height being as the closest to the given % height. Algorithm supplied by Lars Madsen and Morten H{\o}lmgren on % 2006/07/27. % \begin{macrocode} \newcommand*{\m@mnearestht}{% \setlength{\@tempdima}{\textheight}% \advance\@tempdima -\topskip \advance\@tempdima 0.5\baselineskip \divide\@tempdima \baselineskip \@tempcnta=\@tempdima \setlength{\textheight}{\@tempcnta\baselineskip}% \addtolength{\textheight}{\topskip}} % \end{macrocode} % \end{macro} % % \begin{macro}{\checkthelayout} % \cs{checkthelayout}\oarg{text} is the user level macro for % checking the layout. The \meta{text} argument controls which % algorithm should be used to calculate the \cs{textheight}. % % \begin{macrocode} \renewcommand*{\checkthelayout}[1][classic]{% % \end{macrocode} % First check the dimensions are not negative. % \begin{macrocode} \@memnegtest{\trimedge} \@memnegtest{\trimtop} \@memznegtest{\stockwidth} \@memznegtest{\paperwidth} \@memznegtest{\textwidth} \@memznegtest{\spinemargin} \@memznegtest{\foremargin} \@memznegtest{\marginparsep} \@memznegtest{\marginparwidth} \@memznegtest{\stockheight} \@memznegtest{\paperheight} \@memznegtest{\textheight} \@memznegtest{\uppermargin} \@memznegtest{\lowermargin} \@memznegtest{\headheight} \@memznegtest{\headsep} \@memznegtest{\footskip} % \end{macrocode} % % Carry on regardless. We may need to adjust the \cs{textheight} % to get an integral number of lines. % \begin{macrocode} \nametest{#1}{classic}% \ifsamename \m@mclassicht \else \nametest{#1}{lines}% \ifsamename \m@mlinesht \else \nametest{#1}{nearest}% \ifsamename \m@mnearestht \else \nametest{#1}{fixed} \ifsamename \else% not classic, lines, nearest, or fixed \@memerror{Optional argument is not one of:\MessageBreak classic, fixed, lines, or nearest. \MessageBreak I will assume the default}% {\@ehc}% \fi \fi \fi \fi \setulmargins{\uppermargin}{*}{*} % \end{macrocode} % % Check that all the sums add up correctly, or % at least to within a small (\cs{@tempdimb}) error. % \begin{macrocode} \@tempdimb = -1pt \@tempdima=\stockwidth \advance\@tempdima -\trimedge \advance\@tempdima -\paperwidth \ifdim\@tempdima<\@tempdimb \@tempdima = -\@tempdima \@memerror{\protect\paperwidth\space and/or \protect\trimedge\space are too large for \protect\stockwidth\space by \the\@tempdima}% {\@ehd} \fi \@tempdima = \paperwidth \advance\@tempdima -\foremargin \advance\@tempdima -\textwidth \advance\@tempdima -\spinemargin \ifdim\@tempdima<\@tempdimb \@tempdima = -\@tempdima \@memerror{\protect\spinemargin\space and/or \protect\textwidth\space and/or \protect\foremargin\space are too large for \protect\paperwidth\space by \the\@tempdima}% {\@ehd} \fi \@tempdima = \stockheight \advance\@tempdima -\trimtop \advance\@tempdima -\paperheight \ifdim\@tempdima<\@tempdimb \@tempdima = -\@tempdima \@memerror{\protect\paperheight\space and/or \protect\trimtop\space are too large for \protect\stockheight\space by \the\@tempdima}% {\@ehd} \fi \@tempdima = \paperheight \advance\@tempdima -\uppermargin \advance\@tempdima -\textheight \advance\@tempdima -\lowermargin \ifdim\@tempdima<\@tempdimb \@tempdima = -\@tempdima \@memerror{\protect\uppermargin\space and/or \protect\textheight\space and/or \protect\lowermargin\space are too large for \protect\paperheight\space by \the\@tempdima}% {\@ehd} \fi \@tempdima = \uppermargin \advance\@tempdima -\headheight \advance\@tempdima -\headsep \ifdim\@tempdima<\@tempdimb \@tempdima = -\@tempdima \@memerror{\protect\headheight\space and/or \protect\headsep\space are too large for \protect\uppermargin\space by \the\@tempdima}% {\@ehd} \fi \@tempdima = \lowermargin \advance\@tempdima -\footskip \ifdim\@tempdima<\z@ \@tempdima = -\@tempdima \@memerror{\protect\footskip is too large for \protect\lowermargin\space by \the\@tempdima}% {\@ehd} \fi } % \end{macrocode} % \end{macro} % % % \begin{macro}{\checkandfixthelayout} % This macro checks and fixes the layout, and reports the result. It takes the % same optional argument as \cs{checkthelayout}. % \begin{macrocode} \renewcommand*{\checkandfixthelayout}[1][classic]{% \checkthelayout[#1]% \fixthelayout \typeoutlayout} % \end{macrocode} % \end{macro} % % \subsection{Overlong lines} % % LaTeX provides \cs{fussy} and \cs{sloppy} to control the amount of slack % in a line while trying to make justified lines. Their definitions are: % \begin{verbatim} % \def\fussy{% % \emergencystretch\z@ % \tolerance 200% % \hfuzz .1\p@ % \vfuzz\hfuzz} % \def\sloppy{% % \tolerance 9999% % \emergencystretch 3em% % \hfuzz .5\p@ % \vfuzz\hfuzz} % \end{verbatim} % % \begin{macro}{\midsloppy} % Somewhere between \cs{fussy} and \cs{sloppy}. % \begin{macrocode} \newcommand*{\midsloppy}{% \tolerance 5000% \hbadness 4000% \emergencystretch 1.5em% \hfuzz .1\p@ \vfuzz\hfuzz} % \end{macrocode} % \end{macro} % % \begin{environment}{midsloppypar} % A paragraph form of \cs{midsloppy}; equivalent to \verb?\par \midsloppy ... \par}? % \begin{macrocode} \newenvironment{midsloppypar}{\par\midsloppy}{\par} % \end{macrocode} % \end{environment} % % \subsection{Lists} % % \begin{macro}{\everylistparindent} % \begin{macro}{\list} % The kernel sets \cs{listparindent} to zero within a \cs{list}, where it % can be overridden in \cs{lits}'s second argument. Here it is set to % \cs{everyparlistindent} by default, which in turn is 0pt. % \begin{macrocode} \newdimen\everylistparindent \everylistparindent \z@ \renewcommand*{\list}[2]{% \ifnum \@listdepth >5\relax \@toodeep \else \global\advance\@listdepth\@ne \fi \rightmargin\z@ \listparindent\everylistparindent \itemindent\z@ \csname @list\romannumeral\the\@listdepth\endcsname \def\@itemlabel{#1}% \let\makelabel\@mklab \@nmbrlistfalse #2\relax \@trivlist \parskip\parsep \parindent\listparindent \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin \advance\@totalleftmargin \leftmargin \parshape \@ne \@totalleftmargin \linewidth \ignorespaces} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\defaultlists} % This is a simplification of memoir's original, and will apply to any font % size. % \begin{macrocode} \renewcommand*{\defaultlists}{% \setlength{\partopsep}{0.2\onelineskip \@plus 0.1\onelineskip \@minus 0.1\onelineskip}% \parsepi = 0.3333\onelineskip \@plus 0.1667\onelineskip \@minus \p@ \itemsepi = \parsepi \topsepi = 0.6667\onelineskip \@plus 0.3333\onelineskip \@minus 0.2\onelineskip \parsepii = 0.1667\onelineskip \@plus \p@ \@minus \p@ \topsepii = \parsepi \topsepiii = \parsepii \everylistparindent \z@} \defaultlists % \end{macrocode} % \end{macro} % % These are the original versions of \cs{firmlist} and \cs{tightlist}. % \begin{verbatim} % \newcommand*{\firmlist}{% % \setlength{\itemsep}{0.5\itemsep}\setlength{\parskip}{0.5\parskip}} % % \newcommand*{\tightlist}{% % \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} % \end{verbatim} % % \begin{macro}{\firmlists} % \begin{macro}{\firmlists*} % \begin{macro}{\m@msfirmlists} % \begin{macro}{\m@mfirmlists} % These give approximately half the vertical spacing of the default lists, % with all spaces equal. The starred version allows slightly less space % before and after the list when it is preceded by a blank line. % % \begin{macrocode} \newcommand*{\firmlists}{% \@ifstar{\m@msfirmlists}{\m@mfirmlists}} \newcommand*{\m@msfirmlists}{ \setlength{\partopsep}{\z@ \@plus \p@ \@minus \p@}% \parsepi = 0.1667\onelineskip \@plus 0.0833\onelineskip \@minus \p@ \itemsepi = \parsepi \topsepi = \parsepi \parsepii = 0.0833\onelineskip \@plus \p@ \@minus \p@ \topsepii = \parsepi \topsepiii = \parsepii \everylistparindent\z@} \newcommand*{\m@mfirmlists}{ \setlength{\partopsep}{0.1\onelineskip \@plus 0.05\onelineskip \@minus 0.05\onelineskip}% \parsepi = 0.1667\onelineskip \@plus 0.0833\onelineskip \@minus \p@ \itemsepi = \parsepi \topsepi = \parsepi \parsepii = 0.0833\onelineskip \@plus \p@ \@minus \p@ \topsepii = \parsepi \topsepiii = \parsepii \everylistparindent\z@} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\tightlists} % \begin{macro}{\tightlists*} % \begin{macro}{\m@mstightlists} % \begin{macro}{\m@mtightlists} % These give zero vertical spacing of the default lists. % The starred version allows slightly no extra space % before and after the list when it is preceded by a blank line, % whereas the unstarred version puts half a \cs{onelineskip} % before and after. % % \begin{macrocode} \renewcommand*{\tightlists}{% \@ifstar{\m@mstightlists}{\m@mtightlists}} \newcommand*{\m@mstightlists}{% \setlength{\partopsep}{\z@ \@plus \p@ \@minus \p@}% \parsepi = \z@ \@plus \p@ \@minus \p@ \itemsepi = \parsepi \topsepi = \z@ \@plus \p@ \@minus \p@ \parsepii = \z@ \@plus \p@ \@minus \p@ \topsepii = \parsepi \topsepiii = \parsepii \everylistparindent\parindent} \newcommand*{\m@mtightlists}{% \setlength{\partopsep}{0.5\onelineskip \@plus \p@ \@minus \p@}% \parsepi = \z@ \@plus \p@ \@minus \p@ \itemsepi = \parsepi \topsepi = \z@ \@plus \p@ \@minus \p@ \parsepii = \z@ \@plus \p@ \@minus \p@ \topsepii = \parsepi \topsepiii = \parsepii \everylistparindent\parindent} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % The end of the patch file % % \begin{macrocode} % % \end{macrocode} % % % \bibliographystyle{alpha} % \begingroup % \raggedright % \begin{thebibliography}{GMSN94A} % % % \bibitem[GMS94]{GOOSSENS94} % Michel Goossens, Frank Mittelbach, and Alexander Samarin. % \newblock \emph{The LaTeX Companion}. % \newblock Addison-Wesley Publishing Company, 1994. % % % \bibitem[Rah01]{NAMEREF} % Sebastian Rahtz. % \newblock \emph{Section name references in LaTeX}. % \newblock January 2001. % \newblock (Available from CTAN in % \texttt{/macros/latex/contrib/hyperref}) % % \bibitem[Rah02]{HYPERREF} % Sebastian Rahtz. % \newblock \emph{Hypertext marks in LaTeX}. % \newblock March 2002. % \newblock (Available from CTAN in % \texttt{/macros/latex/contrib/hyperref}) % % \bibitem[Wil04]{MEMOIR} % Peter Wilson. % \newblock \emph{The LaTeX \Lpack{memoir} class for configurable % typesetting: Source code}. % \newblock January 2004. % \newblock (Available from CTAN in % \texttt{macros/latex/contrib/memoir}) % % % \end{thebibliography} % \endgroup % % \Finale % \endinput %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%