From 82e26f27acac86b76d864486d11071bf51cd1e1a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 23 Apr 2015 21:16:25 +0000 Subject: memoir (23apr15) git-svn-id: svn://tug.org/texlive/trunk@37021 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/memoir/README | 25 ++ Master/texmf-dist/doc/latex/memoir/memman.pdf | Bin 2732722 -> 2732108 bytes Master/texmf-dist/doc/latex/memoir/memman.tex | 177 +++++++++---- Master/texmf-dist/doc/latex/memoir/memsty.sty | 6 +- Master/texmf-dist/source/latex/memoir/memoir.dtx | 304 +++++++++++++++++------ Master/texmf-dist/tex/latex/memoir/memoir.cls | 192 +++++++++----- 6 files changed, 524 insertions(+), 180 deletions(-) diff --git a/Master/texmf-dist/doc/latex/memoir/README b/Master/texmf-dist/doc/latex/memoir/README index 9373d859e8e..c056617a96a 100644 --- a/Master/texmf-dist/doc/latex/memoir/README +++ b/Master/texmf-dist/doc/latex/memoir/README @@ -36,6 +36,31 @@ o Backmatter: Bibliography, indexes ~ 50 pages + +Changed (2015/04/23) + +o memoir v3.7d + +-- \end@dblfloat code reversion now only happens if fixltx2e has a + release date older than 2014/01/01. Newer versions of fixltx2e has + no problems with memoir +-- added \feetatbottom. Use it to force footnotes to be added + from the bottom up when in a \raggedbottom context. Has no effect + under \flushbottom +-- \twocolumnfootnotes, \threecolumnfootnotes, \paragraphfootnotes now + use \skip\footins +-- added \setfootins, it will set \skip\footins and its minipage + counterpart, plus the \...v@r versions used by e.g., + \twocolumnfootnotes +-- fixed a bug in page styles whereby one could not apply rule + prefixes to a copied style. +-- Fixed typo in manual about \newleadpage, + reported by Werner Grundlingh +-- updated our version of \@doclearpage to match fixltx2e v1.1s (which + will also be in the next ltx kernel). This will change float + placement in a twocolumn doc (for the better) + + Changed (2015/03/05) o memoir v3.7c diff --git a/Master/texmf-dist/doc/latex/memoir/memman.pdf b/Master/texmf-dist/doc/latex/memoir/memman.pdf index 2eac2443afb..0758ee99f16 100644 Binary files a/Master/texmf-dist/doc/latex/memoir/memman.pdf and b/Master/texmf-dist/doc/latex/memoir/memman.pdf differ diff --git a/Master/texmf-dist/doc/latex/memoir/memman.tex b/Master/texmf-dist/doc/latex/memoir/memman.tex index 10944f6ac0d..45cb6ded596 100644 --- a/Master/texmf-dist/doc/latex/memoir/memman.tex +++ b/Master/texmf-dist/doc/latex/memoir/memman.tex @@ -125,18 +125,20 @@ layout=marginnote } + \begin{document} + %#% extstart input intro.tex -\tightlists -%\firmlists +%\tightlists +\firmlists \midsloppy \raggedbottom \chapterstyle{demo3} @@ -1248,8 +1250,8 @@ been answered. \svnidlong {$Ignore: $} -{$LastChangedDate: 2015-03-05 18:49:59 +0100 (Thu, 05 Mar 2015) $} -{$LastChangedRevision: 516 $} +{$LastChangedDate: 2015-04-22 17:17:51 +0200 (Wed, 22 Apr 2015) $} +{$LastChangedRevision: 527 $} {$LastChangedBy: daleif $} \chapter{Introduction to the eighth edition} @@ -1753,8 +1755,6 @@ For referential purposes, arguments are denoted by \meta{arg} \\ \end{syntax} - - \section{Acknowledgements} Many people have contributed to the \Lclass{memoir} class and this manual @@ -1954,6 +1954,8 @@ can also write me directly via \texttt{daleif (at) math dot au dot dk}. %#% extend + + %#% extstart include terminology.tex \svnidlong @@ -2164,8 +2166,8 @@ an em, often a quad is 1em. \svnidlong {$Ignore: $} -{$LastChangedDate: 2014-11-05 16:28:11 +0100 (Wed, 05 Nov 2014) $} -{$LastChangedRevision: 501 $} +{$LastChangedDate: 2015-04-23 14:33:14 +0200 (Thu, 23 Apr 2015) $} +{$LastChangedRevision: 528 $} {$LastChangedBy: daleif $} \chapter{Starting off} \label{chap:starting} @@ -2537,9 +2539,11 @@ definitions within the class code). file containing all the size and space specifications for your chosen font size, and also tell \Mname\ the name of the file. \emph{Before} the \cmd{\documentclass} command define two macros, \cmd{\anyptfilebase} and -\cmd{\anyptsize} like: \\ -\verb?\newcommand*{\anyptfilebase}?\marg{chars} -\verb?\newcommand*{\anyptsize}?\marg{num} \\ +\cmd{\anyptsize} like: +\begin{lcode} + \newcommand*{\anyptfilebase}\marg{chars} + \newcommand*{\anyptsize}\marg{num} +\end{lcode} \glossary(anyptsize)% {\cs{anyptsize}}% {Second part (the pointsize) of the name the \texttt{clo} file for the @@ -2772,8 +2776,8 @@ want to put \cmd{\raggedbottom} in the preamble\index{preamble}. \svnidlong {$Ignore: $} -{$LastChangedDate: 2015-02-24 12:51:39 +0100 (Tue, 24 Feb 2015) $} -{$LastChangedRevision: 508 $} +{$LastChangedDate: 2015-04-22 13:01:10 +0200 (Wed, 22 Apr 2015) $} +{$LastChangedRevision: 524 $} {$LastChangedBy: daleif $} \chapter{Laying out the page} \label{chap:layingpage} @@ -2833,8 +2837,36 @@ On the other hand, if, say, you are designing a document, that is to be printed on one type of paper (the stock), and then trimmed to another, please read on. +% Before we start let use summarize what laying out the page +% involves\fxnote{where did the spacings around enumerate go? Had to add +% a blank line} + +% \begin{enumerate}[(a)] +% \item Figure out the stock size of your document and whether or not +% you need to trim the stock to get the desired paper size. + +% Most people just specify the stick and paper size via a class option +% like \Lopt{a4paper}. Thus you can proceed to +% section~\ref{sec:typeblock2}. +% \item Specify the text block, basically the margins. + +% The class provide two interfaces for this: (1) Set the margins +% around the text block, thereby defining the text block, and (2), +% specify the size of the text block directly and then place it on the +% page. +% \item Specify auxiliary layout, like placement of headers, footers and +% margin notes. +% \item At the end (\emph{very important}) we ask the class to put +% everything together and check that they make sense. +% \end{enumerate} + + + + + \section{Stock material} +\label{sec:stock-material} Printing is the act of laying symbols onto a piece of stock\index{stock} material. Some print on T-shirts by a process @@ -2861,6 +2893,7 @@ the norm. \section{The page} +\label{sec:page} The class assumes that there will be only a single page on a side of each piece of stock\index{stock}; two sides means that there can be two @@ -3864,9 +3897,31 @@ is set to \meta{push}. We may add other auto adjusting features to future \theclass\ releases. \end{note} - \index{marginalia|)} %| + +\section{Other} +\label{sec:other} + + +\begin{syntax} +\cmd{\setfootins}\marg{length for normal}\marg{length for minipage} \\ +\end{syntax} +% \glossary(setfootins)% +% {\cs{setfootins}\marg{length for normal}\marg{length for minipage}}% +% {Sets \cs{skip}\cs{footins} and its minipage counterpart.} + +\noindent +When footnotes are added to the text block they are added +\cs{skip}\cs{footins} below the text. Since this is a skip it usually +needs special syntax to change it. Instead we have provided an +interface to set it.\footnote{This interface also sets the equivalent + lengths used when \cs{twocolumnfootnotes} and friends are being + used.} The default sizes are \cs{bigskipamount}. + + + + \section{Putting it together} The page layout parameters\index{page layout!class parameters} @@ -4630,7 +4685,6 @@ effect. %#% extend - %#% extstart include text-and-fonts.tex \svnidlong @@ -6797,7 +6851,6 @@ and thanks notes are meant to be different. \index{thanks!styling|)} %#% extend - %#% extstart include abstracts.tex \svnidlong @@ -7073,8 +7126,8 @@ optional argument of the \cmd{\twocolumn} command. In fact, \svnidlong {$Ignore: $} -{$LastChangedDate: 2015-02-23 14:55:22 +0100 (Mon, 23 Feb 2015) $} -{$LastChangedRevision: 506 $} +{$LastChangedDate: 2015-04-22 15:51:45 +0200 (Wed, 22 Apr 2015) $} +{$LastChangedRevision: 526 $} {$LastChangedBy: daleif $} %%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -7897,19 +7950,29 @@ titling. Something like this may do the trick \begin{syntax} \cmd{\newleadpage}\oarg{page-style}\marg{cmdname}\marg{title} \\ -\cmd{\newleadpage*}\oarg{page-style}\marg{cmdname}\marg{title} \\ +%\cmd{\newleadpage*}\oarg{page-style}\marg{cmdname}\marg{title} \\ \cmd{\renewleadpage}\oarg{page-style}\marg{cmdname}\marg{title} \\ -\cmd{\renewleadpage*}\oarg{page-style}\marg{cmdname}\marg{title} \\ -\end{syntax} -\cmd{\newleadpage} and associates are variants of the \cmd{\newcommand} -and companions.\footnote{The suggestions for these came from +%\cmd{\renewleadpage*}\oarg{page-style}\marg{cmdname}\marg{title} \\ +\end{syntax} +\glossary(newleadpage)% +{\cs{newleadpage}\oarg{page-style}\marg{cmdname}\marg{title}}% +{Creates a macro to that when used will generate a sort of title +page. Very similar to \cs{appendixpage}.} +\glossary(renewleadpage)% +{\cs{renewleadpage}\oarg{page-style}\marg{cmdname}\marg{title}}% +{Redefines an existing new lead page macro.} +The \cmd{\newleadpage}\footnote{The suggestions for this came from Danie Els\index{Els, Danie} and Lars Madsen\index{Madsen, Lars}.} -The \cmd{\newleadpage} command defines a macro \verb?\cmdname? that when called +command defines a macro \verb?\cmdname? that when called will typeset an Appendixpage-like page (see \Sref{sec:appendices}) with a -title \meta{title} -using the \meta{page-style} as the pagestyle for the page. The default -is the \pstyle{empty} pagestyle. The macro \cmd{\renewleadpage} redefines -an existing leadpage command. As an example: +title \meta{title} using the \meta{page-style} as the pagestyle for +the page. The default is the \pstyle{empty} pagestyle. The macro +\cmd{\renewleadpage} redefines an existing leadpage command. +\cmd{\cmdname} will add an entry to the TOC, the similarly defined +\cmd{\cmdname*} will not. + + +As an example: \begin{lcode} \newleadpage{plates}{Picture Gallery} \end{lcode} @@ -7919,6 +7982,10 @@ part-like page with the title \textbf{Picture Gallery}. \begin{syntax} \cmd{\leadpagetoclevel} \\ \end{syntax} +\glossary(leadpagetoclevel)% +{\cs{leadpagetoclevel}}% +{Holds the default toc level for \cs{newleadpage} generated macros, +default is \texttt{chapter}.} When \cs{(re)newleadpage} is used the resulting command adds \meta{title} to the \toc\ as though it was an unnumbered \cmd{\leadpagetoclevel} entry, whose definition is @@ -7930,8 +7997,6 @@ If you wished them to be entered like a \cmd{\part} header then simply: \renewcommand*{\leadpagetoclevel}{part} \end{lcode} - When the starred versions \cs{(re)newleadpage*} are used the resulting -command will not add \meta{title} to the \toc. The layout of the page matches that for unnumbered \cmd{\part} pages, and internally the resulting commands use \cmd{\partmark} in case you @@ -12431,7 +12496,6 @@ other environments. \index{list|)} %| %#% extend - %#% extstart include content-lists.tex \svnidlong @@ -17573,8 +17637,6 @@ package can be used with the class, but there are a few caveats: %#% extend - - %#% extstart include rows-and-columns.tex \svnidlong @@ -19550,8 +19612,8 @@ illustrate these points. \svnidlong {$Ignore: $} -{$LastChangedDate: 2014-05-07 13:21:44 +0200 (Wed, 07 May 2014) $} -{$LastChangedRevision: 481 $} +{$LastChangedDate: 2015-04-22 17:17:51 +0200 (Wed, 22 Apr 2015) $} +{$LastChangedRevision: 527 $} {$LastChangedBy: daleif $} \chapter{Page notes} \label{chap:mnotes} @@ -19674,7 +19736,7 @@ the separator. Its default definition is: \glossary(feetbelowfloat)% {\cs{feetbelowfloat}}% {Typeset footnotes below bottom floats.} -In\fxnote{this needs checking} the standard classes, footnotes on a page that has a float at the +In the standard classes, footnotes on a page that has a float at the bottom are typeset before the float. I think that this looks peculiar. Following the \cmd{\feetbelowfloat} declaration footnotes will be typeset at the bottom of the page below any bottom @@ -19684,6 +19746,22 @@ as opposed to being put just after the bottom line of text. The standard positioning is used following the \cmd{\feetabovefloat} declaration, which is the default. +\begin{syntax} +\cmd{\feetatbottom} \\ +\end{syntax} +\glossary(feetatbottom)% + {\cs{feetatbottom}}% + {Place footnotes at the very bottom of the text block whenever we + are in a non \cs{flushbottom} context.} +Then\Added{2015/04/22} we use \cs{raggedbottom} or similar, \LaTeX{} +will by default attach the footnotes just below the text. In many +cases it may look better if the footnotes are being build from the +bottom of the texst block up. Issuing \cs{feetatbottom} does +this. Please note that \cs{feetatbottom} has no effect whenever +\cs{flushbottom} is active. + + + \subsection{A variety of footnotes} \begin{syntax} @@ -20235,6 +20313,26 @@ and if you later want rules you can write: \end{lcode} +\fancybreak{} + + +In \fref{fig:fn} we see that the footnotes are separated from the text +by \cs{skip}\cs{footins}. We provide a special interface to set this skip:\Added{2015/04/22} +\begin{syntax} +\cmd{\setfootins}\marg{length for normal}\marg{length for minipage} \\ +\end{syntax} +\glossary(setfootins)% +{\cs{setfootins}\marg{length for normal}\marg{length for minipage}}% +{Sets \cs{skip}\cs{footins} and its minipage counterpart.} +The default is similar to +\begin{lcode} + \setfootins{\bigskipamount}{\bigskipamount} +\end{lcode} +Internally \cmd{\setfootins} also sets the skips being used by +\cmd{\twocolumnfootnotes} and friends. + + + \index{footnote!styling|)} \index{footnote|)} @@ -21465,13 +21563,6 @@ ignored as for \cmd{\pagenote} it can be arbitrary text whereas for %#% extend - - - - - - - %#% extstart include decorative-text.tex \svnidlong diff --git a/Master/texmf-dist/doc/latex/memoir/memsty.sty b/Master/texmf-dist/doc/latex/memoir/memsty.sty index 5abe01f7c3d..d0b3b10cdf1 100644 --- a/Master/texmf-dist/doc/latex/memoir/memsty.sty +++ b/Master/texmf-dist/doc/latex/memoir/memsty.sty @@ -22,7 +22,7 @@ \providecommand{\LMnote}[2]{} \providecommand{\PWnote}[2]{} - +\newcommand\Added[1]{\sidepar{\tiny Added #1}} %%%%%%%%%%%%%%%%%%% kill scale change warning in layouts \renewcommand*{\setlayoutscale}[1]{\setlength{\l@youtunitlength}{1pt} @@ -482,12 +482,12 @@ official r\^ole in fluffy souffl\'es?' } % after, looks a bit better} \newenvironment{lcode}{\@zeroseps \nopagebreak - \vskip0.2em plus 0.1em minus 0.2em + \vskip0.4em plus 0.1em minus 0.2em \renewcommand{\verbatim@startline}{\verbatim@line{\hskip\gparindent}} \small\setlength{\baselineskip}{\onelineskip}\verbatim}% {\endverbatim \vspace{-\baselineskip} - \vskip0.3em plus 0.1em minus 0.2em + \vskip0.6em plus 0.1em minus 0.2em \noindent} %%%%% LaTeX syntax diff --git a/Master/texmf-dist/source/latex/memoir/memoir.dtx b/Master/texmf-dist/source/latex/memoir/memoir.dtx index 80ebb97512a..f7d554e4978 100644 --- a/Master/texmf-dist/source/latex/memoir/memoir.dtx +++ b/Master/texmf-dist/source/latex/memoir/memoir.dtx @@ -20,7 +20,7 @@ % This work consists of the files listed in the README file. % % \fi -% \CheckSum{30606} +% \CheckSum{30748} % % \changes{v0.1}{2001/05/20}{First public alpha release} % \changes{v0.2}{2001/06/03}{First beta release} @@ -110,7 +110,8 @@ % \changes{v3.6k}{2013/05/17}{Various fixes and long overdue maintenance} % \changes{v3.7}{2013/05/22}{Bumped version} % \changes{v3.7b}{2013/05/30}{Bugfix, sidecaption} -% \changes{v3.7c}{2013/05/30}{Bugfix} +% \changes{v3.7c}{2015/03/05}{Bugfix} +% \changes{v3.7d}{2015/04/23}{Misc. bugfixes} % % \def\dtxfile{memoir.dtx} % @@ -162,6 +163,7 @@ % \def\fileversion{v3.7} \def\filedate{2013/05/22} % \def\fileversion{v3.7b} \def\filedate{2013/05/30} % \def\fileversion{v3.7c} \def\filedate{2015/03/05} +% \def\fileversion{v3.7d} \def\filedate{2015/04/23} % \title{The LaTeX \Lpack{memoir} class for configurable book % typesetting: Source code\thanks{This % file (\texttt{\dtxfile}) has version number \fileversion, last revised @@ -391,11 +393,11 @@ % Announce the name, option files and version for LaTeX2e files: % \begin{macrocode} %\ProvidesClass{memoir}% -% [2015/03/05 v3.7c configurable book, report, article document class] +% [2015/04/23 v3.7d configurable book, report, article document class] % \end{macrocode} % In the manual it is useful to know the current version. % \begin{macrocode} -%\newcommand\memversion{v3.7c, 2015/03/05} +%\newcommand\memversion{v3.7d, 2015/04/23} %<9pt>\ProvidesFile{mem9.clo}% %<9pt> [2008/01/30 v0.4 memoir class 9pt size option] %<10pt>\ProvidesFile{mem10.clo}% @@ -4453,6 +4455,25 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}{\setfootins} +% \cs{setfootins}\marg{length}\marg{length} sets +% \cs{skip}\cs{footins} and its minipage counterpart. It will also +% set \cs{skip}\cs{footinsv@r} and similar for minipages to the same +% values. These are used by for example \cs{twocolumnfootnotes}. +% \begin{macrocode} +\newcommand\setfootins[2]{ + \setlength{\skip\footins}{#1} + \setlength{\skip\footinsv@r}{#1} + \setlength{\skip\@mpfootins}{#2} + % not explicitly used + \setlength{\skip\@mpfootinsv@r}{#2} +} + +% \end{macrocode} +% +% \end{macro} +% +% % Initialise the paper size and trimming to their default values. % \begin{macrocode} \settrimmedsize{\stockheight}{\stockwidth}{*} @@ -5755,16 +5776,18 @@ % \cs{makefootrule}\marg{style}\marg{width}\marg{height}\marg{skip} % specifies the width, height and skip for the footrule. % \changes{v1.61803398d}{2010/02/09}{Added safe change test} +% \changes{v3.7d}{2015/04/22}{Moved \cs{...(head|foot)ruleprefix} out and +% added them else where} % \begin{macrocode} \newcommand{\makeheadrule}[3]{% \mem@ps@safe@change{#1}% \@namedef{#1headrule}{% - \@nameuse{#1headruleprefix}\hrule\@width #2\@height #3 \vskip-#3}} + \hrule\@width #2\@height #3 \vskip-#3}} \newcommand{\makefootrule}[4]{% \mem@ps@safe@change{#1}% \@namedef{#1footrule}{% \vskip-#4\vskip-#3% - \@nameuse{#1footruleprefix}\hrule\@width #2\@height #3 \vskip #4}} + \hrule\@width #2\@height #3 \vskip #4}} % \end{macrocode} % \end{macro} @@ -6026,7 +6049,17 @@ % the main direction of the document.} % \begin{macrocode} \nametest{#2}{head}\ifsamename\let\mem@hfboxer\mem@hvboxm\else\let\mem@hfboxer\mem@fvboxm\fi% - \mem@hfboxer{\nametest{#2}{foot}\ifsamename\@nameuse{#1#2rule}\fi% +% \end{macrocode} +% \changes{v3.7d}{2015/04/22}{Moved \cs{...footruleprefix} outside +% \cs{...footrule}. Otherwise copy does not work correctly. Reported +% at http://tex.stackexchange.com/q/231454/3929} +% \begin{macrocode} + \mem@hfboxer{\nametest{#2}{foot}\ifsamename% + \begingroup% to prevent colors from bleeding into the footer + \@nameuse{#1#2ruleprefix}% + \@nameuse{#1#2rule}% + \endgroup% + \fi% \hbox{% \rlap{% \parbox[\@nameuse{#1#2vplacement}]{\@nameuse{#1#2runwidth}}{% @@ -6048,8 +6081,13 @@ % headline if \texttt{\#2} equals \texttt{head}. % \changes{v3.6k}{2012/05/31}{Forgot to separate head/foot position into the % factorization} +% \changes{v3.7d}{2015/04/22}{Moved \cs{...headruleprefix} outside +% \cs{...headrule}. Otherwise copy does not work correctly.} % \begin{macrocode} - \nametest{#2}{head}\ifsamename\@nameuse{#1#2rule}\fi% + \nametest{#2}{head}\ifsamename% + \@nameuse{#1#2ruleprefix}% + \@nameuse{#1#2rule}% + \fi% }}\@nameuse{#1#3#2pr}}% % \end{macrocode} % And end by letting the LaTeX head/foot use our version @@ -18817,28 +18855,44 @@ \@memlistsubcaptions{\@captype}\@memoldedblfloat} % \end{macrocode} -% Unfortunately the \Lpack{fixltx2e} package, version 1.1h (current as of 2005/09/03) makes assumptions -% about \cs{end@float} which do not hold for memoir. The code has to be reverted back to that in version 1.0b of \Lpack{fixltx2e}. -% \changes{v1.618}{2005/09/03}{Dealt with incompatibilities between fixltx2e and memoir's \cs{end@dblfloat} (mempatch v3.7)} +% Unfortunately the \Lpack{fixltx2e} package, version 1.1h (current as +% of 2005/09/03) makes assumptions about \cs{end@float} which do not +% hold for memoir. The code has to be reverted back to that in version +% 1.0b of \Lpack{fixltx2e}. +% \changes{v1.618}{2005/09/03}{Dealt with incompatibilities between +% fixltx2e and memoir's \cs{end@dblfloat} (mempatch v3.7)} +% % \changes{v3.7c}{2015/03/05}{Note quite sure why this fix is needed, -% so we add a trick so that it can be deleted by defining a macro -% before \cs{documentclass}, that makes it easier to test} +% so we add a trick (\cs{MEMOIROVERRIDE}) so that it can be deleted by +% defining a macro before \cs{documentclass}, that makes it easier to +% test} +% +% Update 2015: The problematic code from \Lpack{fixltx2e} is no +% longer present from version 1.1s and on. This version is to be +% build into the LaTeX2e kernel for the TeX Live 2015 release. We +% change the code reversion so it only happens if older \Lpack{fixltx2e} +% versions are being used. +% \changes{v3.7d}{2015/03/17}{Adding check for older \Lpack{fixltx2e} +% and removing \cs{MEMOIROVERRIDE}} % \begin{macrocode} -\@ifundefined{MEMOIROVERRIDE}{ -\AtBeginDocument{\@ifpackageloaded{fixltx2e}{% - \def\end@dblfloat{% - \if@twocolumn - \@endfloatbox - \ifnum\@floatpenalty<\z@ - \@largefloatcheck - \global\dp\@currbox1sp % - \@cons\@deferlist\@currbox - \fi - \ifnum\@floatpenalty=-\@Mii \@Esphack\fi - \else - \end@float - \fi}}{}} -}{\typeout{MEMOIROVERRIDE initiated, ignoring internal fixltx2e 'patch'}} +\AtBeginDocument{% + \@ifpackageloaded{fixltx2e}{% + \@ifpackagelater{fixltx2e}{2014/01/01}{}{% package older than 2014/01/01 + \def\end@dblfloat{% + \if@twocolumn + \@endfloatbox + \ifnum\@floatpenalty<\z@ + \@largefloatcheck + \global\dp\@currbox1sp % + \@cons\@deferlist\@currbox + \fi + \ifnum\@floatpenalty=-\@Mii \@Esphack\fi + \else + \end@float + \fi}% + } + }{} +} % \end{macrocode} % \end{macro} @@ -18862,6 +18916,10 @@ % \begin{macrocode} \def\mem@fb@botlist{\@botlist} \def\mem@fb@topblock{\suppressfloats[t]} +% \end{macrocode} +% \changes{v3.7d}{2015/03/12}{\cs{\@dbldeferlist} may be removed in a +% comming LaTeX kernel update} +% \begin{macrocode} \def\FloatBlock{\par\begingroup \let\@elt\relax \edef\@tempa{\mem@fb@botlist\@deferlist\@dbldeferlist}% \ifx\@tempa\@empty @@ -24383,21 +24441,30 @@ % \begin{macro}{\raggedbottom} % \begin{macro}{\flushbottom} % \begin{macro}{\@texttop} +% \begin{macro}{\mem@flshbot} % These kernel macros need changing because of the new \cs{@indexbox} % marginal insert. +% \changes{v3.7d}{2015/04/21}{It makes more sense to explicitly call +% \cs{flushbottom} than just let \cs{@texttop}. We also add a switch +% macro to see if \cs{flushbottom} is active. \cs{raggedbottom} and +% \cs{sloppybottom} sets the switch to false} % \begin{macrocode} \renewcommand{\raggedbottom}{% + \def\mem@flshbot{01}% \def\@textbottom{\vskip\z@ plus.0001fil}% \let\@texttop\@mkidx} \renewcommand{\flushbottom}{% + \def\mem@flshbot{00}% \let\@textbottom\relax \let\@texttop\@mkidx} \let\@texttop\@mkidx +\flushbottom % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \subsection{Widows and sloppybottom} % @@ -24428,8 +24495,10 @@ % ... % \end{verbatim} % \changes{v1.61803}{2008/01/30}{Added \cs{sloppybottom} (mempatch v4.6)} +% \changes{v3.7d}{2015/04/21}{Added flush bottom switch} % \begin{macrocode} \newcommand*{\sloppybottom}{% + \def\mem@flshbot{01}% \def\@textbottom{\vskip \z@ \@plus.0001fil \@minus .95\topskip}% \topskip=1\topskip \@plus 0.625\topskip \@minus .95\topskip \def\@texttop{\vskip \z@ \@plus -0.625\topskip \@minus -0.95\topskip}} @@ -26831,11 +26900,19 @@ % \end{macro} % % \begin{macro}{\m@make@footstart} -% \cs{m@make@footstart}\marg{series} creates \cs{@footstart} +% \cs{m@make@footstart}\marg{series} creates \cs{@footstart}. +% +% The footnote series should of course use +% the skip associated with that series not just +% \cs{vskip}\cs{bigskipamount}. +% \changes{v3.7d}{2015/04/22}{Changed the \cs{vskip}} +% \changes{v3.7d}{2015/04/22}{Added the feet at bottom part} % \begin{macrocode} \newcommand{\m@make@footstart}[1]{% \@namedef{@footstart#1}{% - \vskip\bigskipamount + %\vskip\bigskipamount + \mem@if@flushbottomF\m@mopfn@bottom + \vskip\skip\csname footins#1\endcsname \leftskip=\z@ \rightskip=\z@ \footnoterule}} @@ -27646,6 +27723,9 @@ % I thought that I could get away with using the kernel's % \cs{@doclearpage} but [RS] discovered that I couldn't. % \changes{v1.62}{2004/03/14}{Redid \cs{@doclearpage} using [RS] code} +% \changes{v3.7d}{2015/04/23}{Opdated \cs{mem@doclearpage} to match +% \Lpack{fixltx2e} v1.1s (which will be the base of the ltx kernel for +% TL15)} % \begin{macrocode} \let\memold@doclearpage\@doclearpage \newcommand{\mem@doclearpage}{% @@ -27654,36 +27734,72 @@ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa \setbox\@tempboxa\box\@cclv \xdef\@deferlist{\@toplist\@botlist\@deferlist}% - \global\let\@toplist\@empty - \global\let\@botlist\@empty - \global\@colroom\@colht + \global \let \@toplist \@empty + \global \let \@botlist \@empty + \global \@colroom \@colht \ifx \@currlist\@empty \else - \@latexerr{Float(s) lost}\@ehb - \global\let\@currlist\@empty + \@latexerr{Float(s) lost}\@ehb + \global \let \@currlist \@empty \fi \@makefcolumn\@deferlist \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% \if@twocolumn \if@firstcolumn - \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% - \global\let\@dbltoplist\@empty - \global\@colht\textheight + \xdef\@deferlist{\@dbltoplist\@deferlist}% + \global \let \@dbltoplist \@empty + \global \@colht \textheight \begingroup - \@dblfloatplacement - \@makefcolumn\@dbldeferlist - \@whilesw\if@fcolmade \fi{\@outputpage - \@makefcolumn\@dbldeferlist}% - \endgroup - \else + \@dblfloatplacement + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@outputpage + \@makefcolumn\@deferlist}% + \endgroup + \else \vbox{}\clearpage \fi \fi + \ifx\@deferlist\@empty \else\clearpage \fi \else \setbox\@cclv\vbox{\box\@cclv\vfil}% \@makecol\@opcol \clearpage - \fi} + \fi + % older version + % \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa + % \setbox\@tempboxa\box\@cclv + % \xdef\@deferlist{\@toplist\@botlist\@deferlist}% + % \global\let\@toplist\@empty + % \global\let\@botlist\@empty + % \global\@colroom\@colht + % \ifx \@currlist\@empty + % \else + % \@latexerr{Float(s) lost}\@ehb + % \global\let\@currlist\@empty + % \fi + % \@makefcolumn\@deferlist + % \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% + % \if@twocolumn + % \if@firstcolumn + % \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% + % \global\let\@dbltoplist\@empty + % \global\@colht\textheight + % \begingroup + % \@dblfloatplacement + % \@makefcolumn\@dbldeferlist + % \@whilesw\if@fcolmade \fi{\@outputpage + % \@makefcolumn\@dbldeferlist}% + % \endgroup + % \else + % \vbox{}\clearpage + % \fi + % \fi + % \else + % \setbox\@cclv\vbox{\box\@cclv\vfil}% + % \@makecol\@opcol + % \clearpage + % \fi +} % \end{macrocode} % Replace the kernel's \cs{@doclearpage}. % \begin{macrocode} @@ -27729,12 +27845,20 @@ % % \begin{macro}{\m@mopfootnote} % (footnote) code for possible use in \cs{@makecol}. +% \changes{v3.7d}{2015/04/21}{Added feature to force footnotes to the +% bottom of the page in a ragged context} % \begin{macrocode} \newcommand*{\m@mopfootnote}{\setbox\@outputbox \vbox{% \boxmaxdepth\@maxdepth \@tempdima\dp\@cclv \unvbox\@cclv \vskip-\@tempdima +% \end{macrocode} +% We then add a macro call that is only activated if we are not using +% \cs{flushbottom}. If \cs{feetatbottom} is active, then a +% \cs{vfill} is added. Solution inspired by \Lpack{footmisc}. +% \begin{macrocode} + \mem@if@flushbottomF\m@mopfn@bottom \vskip \skip\footins \color@begingroup \normalcolor @@ -27748,13 +27872,19 @@ % \begin{macro}{\m@mopfootnotebf} % (footnote) code in support of footnotes below floats. % Problem with original code noted by J{\o}rgen Larsen (\url{jl@ruc.dk}) -% on 2008/05/24. +% on 2008/05/24. Updated 2015. % \changes{v1.618033}{2008/06/02}{Added \cs{m@mopfootnotebf}} +% \changes{v3.7d}{2015/04/21}{Added feature to force footnotes to the +% bottom of the page in a ragged context} % \begin{macrocode} \newcommand*{\m@mopfootnotebf}{% \setbox\@outputbox \vbox{% \boxmaxdepth\@maxdepth \unvbox\@outputbox +% \end{macrocode} +% We then add a macro call as above. +% \begin{macrocode} + \mem@if@flushbottomF\m@mopfn@bottom \vskip\skip\footins \color@begingroup \normalcolor @@ -27782,48 +27912,50 @@ % \begin{macro}{\mem@makecol} % DA's latest version of \cs{@makecol} (giving the standard % footnote order (bottom floats after footnotes)) putting the sidebar -% insert after the others (from mempatch v4.9). +% insert after the others (from mempatch v4.9). The code is renewed on +% page~\pageref{makecol} onwards. % \begin{macrocode} -\gdef\mem@makecol{% - \m@m@makecolintro - \ifvoid\footins - \setbox\@outputbox \box\@cclv - \else - \m@mopfootnote - \fi - \m@mdoextrafeet - \m@m@makecolfloats - \m@mopsidebar - \m@m@makecoltext - \global \maxdepth \@maxdepth} + % \gdef\mem@makecol{% + % \m@m@makecolintro + % \ifvoid\footins + % \setbox\@outputbox \box\@cclv + % \else + % \m@mopfootnote + % \fi + % \m@mdoextrafeet + % \m@m@makecolfloats + % \m@mopsidebar + % \m@m@makecoltext + % \global \maxdepth \@maxdepth} % \end{macrocode} % \end{macro} % % \begin{macro}{\mem@makecolbf} % A version of \cs{@makecol} which puts footnotes at the bottom of the page -% (after any bottom floats). +% (after any bottom floats). The code is renewed on +% page~\pageref{makecol} onwards. % \changes{v1.618033}{2008/06/02}{Used \cs{m@mopfootnotebf} instead of % \cs{m@mopfootnote} in \cs{mem@makecolbf}} % \begin{macrocode} -\gdef\mem@makecolbf{% - \m@m@makecolintro - \setbox\@outputbox \box\@cclv - \m@m@makecolfloats - \ifvoid\footins\else - \m@mopfootnotebf - \fi - \m@mdoextrafeet - \m@mopsidebar - \m@m@makecoltext - \global\maxdepth \@maxdepth} + % \gdef\mem@makecolbf{% + % \m@m@makecolintro + % \setbox\@outputbox \box\@cclv + % \m@m@makecolfloats + % \ifvoid\footins\else + % \m@mopfootnotebf + % \fi + % \m@mdoextrafeet + % \m@mopsidebar + % \m@m@makecoltext + % \global\maxdepth \@maxdepth} % \end{macrocode} % \end{macro} % % \begin{macro}{\mem@makecoldblf} % A version of \cs{@makecol} which is a placeholder to fix the doublefloat -% problem. +% problem. % % \begin{macrocode} \gdef\mem@makecoldblf{% @@ -27857,6 +27989,32 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\feetatbottom} +% \begin{macro}{\feetbelowragged} +% \begin{macro}{\m@mopfn@bottom} +% \begin{macro}{\mem@if@flushbottomF} +% If a page is typeset with a ragged bottom then any footnotes are +% added directly under the text. It may look better if the footnotes +% are added to the text block from the bottom up. +% \begin{macrocode} +\newcommand\feetatbottom{\def\m@mopfn@bottom{\vfill\relax}} +\newcommand\feetbelowragged{\let\m@mopfn@bottom\relax} +\feetbelowragged +% \end{macrocode} +% Next we add a test to see if \cs{flushbottom} is active. This macro +% is used within \cs{m@mopfootnote} and \cs{m@mopfootnotebf} to +% force the footnotes to the bottom \emph{only} when \cs{flushbottom} +% is \emph{not} active, hince the \texttt{F} in the name. +% \begin{macrocode} +\newcommand\mem@if@flushbottomF[1]{% + \if\mem@flshbot\else#1\fi% +} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}{\@reinserts} % DA's final version from last patch. @@ -28177,7 +28335,7 @@ % \begin{macro}{\@reinserts} % \begin{macro}{\@mem@extranofeet} % \begin{macro}{@mem@testifnofoot} -% Revise these to cater for the new sidefoot insert. +% Revise these to cater for the new sidefoot insert.\label{makecol} % \changes{v3.7c}{2013/11/28}{Spurious space} % \begin{macrocode} \gdef\mem@makecol{% diff --git a/Master/texmf-dist/tex/latex/memoir/memoir.cls b/Master/texmf-dist/tex/latex/memoir/memoir.cls index 0fb671d7dc5..4e2948001e5 100644 --- a/Master/texmf-dist/tex/latex/memoir/memoir.cls +++ b/Master/texmf-dist/tex/latex/memoir/memoir.cls @@ -28,8 +28,8 @@ %% \NeedsTeXFormat{LaTeX2e} \ProvidesClass{memoir}% - [2015/03/05 v3.7c configurable book, report, article document class] -\newcommand\memversion{v3.7c, 2015/03/05} + [2015/04/23 v3.7d configurable book, report, article document class] +\newcommand\memversion{v3.7d, 2015/04/23} \newcommand*{\@ptsize}{} \newcommand*{\@memptsize}{} \newlength{\onelineskip} @@ -1001,6 +1001,14 @@ \setlength{\marginparwidth}{#2}% \setlength{\marginparpush}{#3}} +\newcommand\setfootins[2]{ + \setlength{\skip\footins}{#1} + \setlength{\skip\footinsv@r}{#1} + \setlength{\skip\@mpfootins}{#2} + % not explicitly used + \setlength{\skip\@mpfootinsv@r}{#2} +} + \settrimmedsize{\stockheight}{\stockwidth}{*} \settrims{\z@}{\z@} @@ -1617,12 +1625,12 @@ \newcommand{\makeheadrule}[3]{% \mem@ps@safe@change{#1}% \@namedef{#1headrule}{% - \@nameuse{#1headruleprefix}\hrule\@width #2\@height #3 \vskip-#3}} + \hrule\@width #2\@height #3 \vskip-#3}} \newcommand{\makefootrule}[4]{% \mem@ps@safe@change{#1}% \@namedef{#1footrule}{% \vskip-#4\vskip-#3% - \@nameuse{#1footruleprefix}\hrule\@width #2\@height #3 \vskip #4}} + \hrule\@width #2\@height #3 \vskip #4}} \newcommand\makeheadfootruleprefix[3]{% \@namedef{#1headruleprefix}{#2}% @@ -1736,7 +1744,12 @@ \@namedef{#1@#3#2}{% \@nameuse{#1#3#2pl}\hb@xt@\@nameuse{#1#2runwidth}{\m@mhe@dreset% \nametest{#2}{head}\ifsamename\let\mem@hfboxer\mem@hvboxm\else\let\mem@hfboxer\mem@fvboxm\fi% - \mem@hfboxer{\nametest{#2}{foot}\ifsamename\@nameuse{#1#2rule}\fi% + \mem@hfboxer{\nametest{#2}{foot}\ifsamename% + \begingroup% to prevent colors from bleeding into the footer + \@nameuse{#1#2ruleprefix}% + \@nameuse{#1#2rule}% + \endgroup% + \fi% \hbox{% \rlap{% \parbox[\@nameuse{#1#2vplacement}]{\@nameuse{#1#2runwidth}}{% @@ -1753,7 +1766,10 @@ \mem@ps@entry@wrap{\@nameuse{#1#4#2r}}% \@nameuse{#1ps#2strut}}}% }% - \nametest{#2}{head}\ifsamename\@nameuse{#1#2rule}\fi% + \nametest{#2}{head}\ifsamename% + \@nameuse{#1#2ruleprefix}% + \@nameuse{#1#2rule}% + \fi% }}\@nameuse{#1#3#2pr}}% \@namedef{@#3#2}{\@nameuse{#1@#3#2}}% } @@ -6367,21 +6383,24 @@ \def\end@dblfloat{% \@memlistsubcaptions{\@captype}\@memoldedblfloat} -\@ifundefined{MEMOIROVERRIDE}{ -\AtBeginDocument{\@ifpackageloaded{fixltx2e}{% - \def\end@dblfloat{% - \if@twocolumn - \@endfloatbox - \ifnum\@floatpenalty<\z@ - \@largefloatcheck - \global\dp\@currbox1sp % - \@cons\@deferlist\@currbox - \fi - \ifnum\@floatpenalty=-\@Mii \@Esphack\fi - \else - \end@float - \fi}}{}} -}{\typeout{MEMOIROVERRIDE initiated, ignoring internal fixltx2e 'patch'}} +\AtBeginDocument{% + \@ifpackageloaded{fixltx2e}{% + \@ifpackagelater{fixltx2e}{2014/01/01}{}{% package older than 2014/01/01 + \def\end@dblfloat{% + \if@twocolumn + \@endfloatbox + \ifnum\@floatpenalty<\z@ + \@largefloatcheck + \global\dp\@currbox1sp % + \@cons\@deferlist\@currbox + \fi + \ifnum\@floatpenalty=-\@Mii \@Esphack\fi + \else + \end@float + \fi}% + } + }{} +} \def\mem@fb@botlist{\@botlist} \def\mem@fb@topblock{\suppressfloats[t]} @@ -8529,14 +8548,18 @@ \vss}} \renewcommand{\raggedbottom}{% + \def\mem@flshbot{01}% \def\@textbottom{\vskip\z@ plus.0001fil}% \let\@texttop\@mkidx} \renewcommand{\flushbottom}{% + \def\mem@flshbot{00}% \let\@textbottom\relax \let\@texttop\@mkidx} \let\@texttop\@mkidx +\flushbottom \newcommand*{\sloppybottom}{% + \def\mem@flshbot{01}% \def\@textbottom{\vskip \z@ \@plus.0001fil \@minus .95\topskip}% \topskip=1\topskip \@plus 0.625\topskip \@minus .95\topskip \def\@texttop{\vskip \z@ \@plus -0.625\topskip \@minus -0.95\topskip}} @@ -9453,7 +9476,9 @@ \newcommand{\m@make@footstart}[1]{% \@namedef{@footstart#1}{% - \vskip\bigskipamount + %\vskip\bigskipamount + \mem@if@flushbottomF\m@mopfn@bottom + \vskip\skip\csname footins#1\endcsname \leftskip=\z@ \rightskip=\z@ \footnoterule}} @@ -9874,36 +9899,72 @@ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa \setbox\@tempboxa\box\@cclv \xdef\@deferlist{\@toplist\@botlist\@deferlist}% - \global\let\@toplist\@empty - \global\let\@botlist\@empty - \global\@colroom\@colht + \global \let \@toplist \@empty + \global \let \@botlist \@empty + \global \@colroom \@colht \ifx \@currlist\@empty \else - \@latexerr{Float(s) lost}\@ehb - \global\let\@currlist\@empty + \@latexerr{Float(s) lost}\@ehb + \global \let \@currlist \@empty \fi \@makefcolumn\@deferlist \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% \if@twocolumn \if@firstcolumn - \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% - \global\let\@dbltoplist\@empty - \global\@colht\textheight + \xdef\@deferlist{\@dbltoplist\@deferlist}% + \global \let \@dbltoplist \@empty + \global \@colht \textheight \begingroup - \@dblfloatplacement - \@makefcolumn\@dbldeferlist - \@whilesw\if@fcolmade \fi{\@outputpage - \@makefcolumn\@dbldeferlist}% - \endgroup - \else + \@dblfloatplacement + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@outputpage + \@makefcolumn\@deferlist}% + \endgroup + \else \vbox{}\clearpage \fi \fi + \ifx\@deferlist\@empty \else\clearpage \fi \else \setbox\@cclv\vbox{\box\@cclv\vfil}% \@makecol\@opcol \clearpage - \fi} + \fi + % older version + % \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa + % \setbox\@tempboxa\box\@cclv + % \xdef\@deferlist{\@toplist\@botlist\@deferlist}% + % \global\let\@toplist\@empty + % \global\let\@botlist\@empty + % \global\@colroom\@colht + % \ifx \@currlist\@empty + % \else + % \@latexerr{Float(s) lost}\@ehb + % \global\let\@currlist\@empty + % \fi + % \@makefcolumn\@deferlist + % \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% + % \if@twocolumn + % \if@firstcolumn + % \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% + % \global\let\@dbltoplist\@empty + % \global\@colht\textheight + % \begingroup + % \@dblfloatplacement + % \@makefcolumn\@dbldeferlist + % \@whilesw\if@fcolmade \fi{\@outputpage + % \@makefcolumn\@dbldeferlist}% + % \endgroup + % \else + % \vbox{}\clearpage + % \fi + % \fi + % \else + % \setbox\@cclv\vbox{\box\@cclv\vfil}% + % \@makecol\@opcol + % \clearpage + % \fi +} \gdef\@doclearpage{\mem@doclearpage} \newcommand*{\m@m@makecolfloats}{% @@ -9929,6 +9990,7 @@ \@tempdima\dp\@cclv \unvbox\@cclv \vskip-\@tempdima + \mem@if@flushbottomF\m@mopfn@bottom \vskip \skip\footins \color@begingroup \normalcolor @@ -9940,6 +10002,7 @@ \setbox\@outputbox \vbox{% \boxmaxdepth\@maxdepth \unvbox\@outputbox + \mem@if@flushbottomF\m@mopfn@bottom \vskip\skip\footins \color@begingroup \normalcolor @@ -9954,30 +10017,30 @@ \unvbox\@outputbox} \fi} -\gdef\mem@makecol{% - \m@m@makecolintro - \ifvoid\footins - \setbox\@outputbox \box\@cclv - \else - \m@mopfootnote - \fi - \m@mdoextrafeet - \m@m@makecolfloats - \m@mopsidebar - \m@m@makecoltext - \global \maxdepth \@maxdepth} - -\gdef\mem@makecolbf{% - \m@m@makecolintro - \setbox\@outputbox \box\@cclv - \m@m@makecolfloats - \ifvoid\footins\else - \m@mopfootnotebf - \fi - \m@mdoextrafeet - \m@mopsidebar - \m@m@makecoltext - \global\maxdepth \@maxdepth} + % \gdef\mem@makecol{% + % \m@m@makecolintro + % \ifvoid\footins + % \setbox\@outputbox \box\@cclv + % \else + % \m@mopfootnote + % \fi + % \m@mdoextrafeet + % \m@m@makecolfloats + % \m@mopsidebar + % \m@m@makecoltext + % \global \maxdepth \@maxdepth} + + % \gdef\mem@makecolbf{% + % \m@m@makecolintro + % \setbox\@outputbox \box\@cclv + % \m@m@makecolfloats + % \ifvoid\footins\else + % \m@mopfootnotebf + % \fi + % \m@mdoextrafeet + % \m@mopsidebar + % \m@m@makecoltext + % \global\maxdepth \@maxdepth} \gdef\mem@makecoldblf{% \m@m@makecolintro @@ -9996,6 +10059,13 @@ \newcommand{\feetbelowfloat}{\gdef\@makecol{\mem@makecolbf}} \feetabovefloat +\newcommand\feetatbottom{\def\m@mopfn@bottom{\vfill\relax}} +\newcommand\feetbelowragged{\let\m@mopfn@bottom\relax} +\feetbelowragged +\newcommand\mem@if@flushbottomF[1]{% + \if\mem@flshbot\else#1\fi% +} + % \gdef\@reinserts{% % \ifvoid\footins\else\insert\footins{\unvbox\footins}\fi % \m@mdodoreinextrafeet -- cgit v1.2.3