summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ncctools/source/tocenter.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/ncctools/source/tocenter.dtx')
-rw-r--r--macros/latex/contrib/ncctools/source/tocenter.dtx315
1 files changed, 315 insertions, 0 deletions
diff --git a/macros/latex/contrib/ncctools/source/tocenter.dtx b/macros/latex/contrib/ncctools/source/tocenter.dtx
new file mode 100644
index 0000000000..21193964f7
--- /dev/null
+++ b/macros/latex/contrib/ncctools/source/tocenter.dtx
@@ -0,0 +1,315 @@
+% \iffalse
+%%
+%% File: tocenter.dtx Copyright (C) 2002--2004 by Alexander I. Rozhenko
+%%
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{tocenter}
+%<package> [2004/12/09 v1.1 Centering Page Layout (NCC)]
+%
+% \changes{v1.0}{2002/01/31}{This version was uploaded to CTAN}
+% \changes{v1.1}{2004/12/09}{Documentation was prepared}
+%
+%<*driver>
+\let\makeindex\relax
+\documentclass{ltxdoc}
+\usepackage{tocenter}
+\GetFileInfo{tocenter.sty}
+\begin{document}
+\title{The \textsf{tocenter} package\thanks{This file
+ has version number \fileversion, last
+ revised \filedate.}}
+\author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru}
+\date{\filedate}
+\maketitle
+\DocInput{tocenter.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% The package provides commands
+% customizing the layout parameters of a documents.
+%
+% \section{User Interface}
+%
+% \DescribeMacro{\ToCenter}
+% The |\ToCenter|\oarg{hfm}\marg{text-width}\marg{text-height} command
+% calculates margins in such a way to center the specified text area
+% together with header/footer/marginals areas on a sheet of paper.
+% The optional \meta{hfm} parameter specifies what additional areas take into
+% account while centering. It is a combination of three letters |h| (headers),
+% |f| (footers), and |m| (marginal notes). If this parameters is omitted,
+% additional areas are ignored while calculations. For example,
+% the following command
+% \begin{quote}
+% |\ToCenter[h]{\textwidth}{\textheight}|
+% \end{quote}
+% centers the text+header area on the page. The text height and wight
+% are not changed here. This command is useful in books without marginal
+% notes.
+%
+% \DescribeMacro{\FromMargins}
+% The |\FromMargins|\oarg{hfm}\marg{left}\marg{right}\marg{top}\marg{bottom}
+% command calculates the page layout parameters in the MS Word-like style.
+% It sets page margins to the values specified in the last four
+% parameters and calculates the width and
+% height of the text area in such a way to satisfy the requirements.
+% For example, the command
+% \begin{quote}
+% |\FromMargins[hf]{20mm}{10mm}{25mm}{15mm}|
+% \end{quote}
+% calculates the text area dimensions and margins in such a way to
+% provide 20~mm distance from the left edge of the page, 10~mm
+% distance from the right edge, 25~mm distance from the top edge, and
+% 15~mm distance from the bottom edge in assumption that header and
+% footer are in use.
+%
+% If twoside mode is turned on, the left and right margins specified
+% in the |\FromMargins| command are considered for odd pages.
+% For even pages, their values are swapped.
+%
+% If |m|-letter is specified in the optional parameter, the margins are
+% determined depending on two-side and two-column switches. In two-column mode,
+% marginal notes are posed on both sides of paper, but in one-column mode
+% the marginal notes are posed on the outer side of a page in two-side mode
+% and to the right of the text area in one-side mode. All these specifics
+% is taken into account while calculations of text margins.
+% The reverse margin mode is also supported.
+%
+% \DescribeMacro{\ToCenter*}
+% \DescribeMacro{\FromMargins*}
+% The star-forms of these commands
+% \begin{quote}
+% |\ToCenter*|\marg{text-width}\marg{text-height}\\
+% |\FromMargins*|\marg{left}\marg{right}\marg{top}\marg{bottom}
+% \end{quote}
+% are intended for positioning of simple documents without headers,
+% footers, marginal notes, cross-references, and table of contents.
+% Additionally, the empty page style is set and the writing to aux-file
+% is suppressed.
+%
+% \textit{All mentioned commands are allowed in the preamble only.}
+% \StopEventually{}
+%
+% \section{The Implementation}
+%
+% \begin{macro}{\NCC@pos}
+% The |\NCC@pos|\marg{hfm} command parses the \meta{hfm} parameter
+% and prepares |\NCC@h|\marg{register}, |\NCC@f|\marg{register},
+% and |\NCC@m|\marg{register} commands to adjust values of skip
+% registers. The |\NCC@pos| command is also useful in the |cropmark| package.
+% \begin{macrocode}
+%<*package>
+\def\NCC@pos#1{%
+ \let\NCC@h\@gobble \let\NCC@f\@gobble \let\NCC@m\@gobble
+ \@tfor\@tempa:=#1\do{%
+% \end{macrocode}
+% If |h|-letter appears, the |\NCC@h| hook will adjust the value of register
+% on the header height and separation:
+% \begin{macrocode}
+ \if h\@tempa
+ \def\NCC@h##1{\advance##1\headsep \advance##1\headheight}%
+ \else
+% \end{macrocode}
+% If |f|-letter appears, the |\NCC@f| hook will adjust the value of register
+% on the footer skip distance:
+% \begin{macrocode}
+ \if f\@tempa
+ \def\NCC@f##1{\advance##1\footskip}%
+ \else
+% \end{macrocode}
+% If |m|-letter appears, the |\NCC@m| hook will adjust the value of register
+% on the width and separation of marginal paragraphs:
+% \begin{macrocode}
+ \if m\@tempa
+ \def\NCC@m##1{\advance##1\marginparwidth
+ \advance##1\marginparsep}%
+ \fi
+ \fi
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ToCenter}
+% The star-form of this command differs in the omitted
+% optional parameter, empty page style, and suppressed
+% writing to external files:
+% \begin{macrocode}
+\newcommand{\ToCenter}{%
+ \@ifstar{\pagestyle{empty}\nofiles\NCC@center[]}{\NCC@center}%
+}
+\@onlypreamble\ToCenter
+% \end{macrocode}
+% At the first, we parse the \meta{hfm} parameter:
+% \begin{macrocode}
+\newcommand*{\NCC@center}[3][]{\NCC@pos{#1}%
+% \end{macrocode}
+% Start calculations from horizontal margins and width:
+% set text width and calculate in |\@tempdima| the
+% whole width of area to be centered.
+% \begin{macrocode}
+ \setlength\textwidth{#2}%
+ \@tempdima\textwidth \NCC@m\@tempdima
+% \end{macrocode}
+% In two-column mode, margins appear on both sides of text.
+% We must add the width of marginal area again to |\@tempdima|:
+% \begin{macrocode}
+ \if@twocolumn
+ \NCC@m\@tempdima
+% \end{macrocode}
+% In two-column mode, we set the odd and even side margins to
+% \begin{quote}
+% |\NCC@m{(\paperwidth-\@tempdima)/2}|:
+% \end{quote}
+% \begin{macrocode}
+ \@tempdimb\paperwidth
+ \advance\@tempdimb -\@tempdima
+ \@tempdima .5\@tempdimb \NCC@m\@tempdima
+ \oddsidemargin\@tempdima
+ \evensidemargin\@tempdima
+% \end{macrocode}
+% In one-column mode with reverse margins, we set
+% \begin{quote}
+% |\evensidemargin:=(\paperwidth-\@tempdima)/2|\\
+% |\oddsidemargin:=\NCC@m{(\paperwidth-\@tempdima)/2}|
+% \end{quote}
+% and, with normal margins, we set
+% \begin{quote}
+% |\oddsidemargin:=(\paperwidth-\@tempdima)/2|\\
+% |\evensidemargin:=\NCC@m{(\paperwidth-\@tempdima)/2}|
+% \end{quote}
+% \begin{macrocode}
+ \else
+ \@tempdimb\paperwidth
+ \advance\@tempdimb -\@tempdima \@tempdima .5\@tempdimb
+ \if@reversemargin
+ \evensidemargin\@tempdima
+ \NCC@m\@tempdima
+ \oddsidemargin\@tempdima
+ \else
+ \oddsidemargin\@tempdima
+ \NCC@m\@tempdima
+ \evensidemargin\@tempdima
+ \fi
+ \fi
+% \end{macrocode}
+% Now we calculate the vertical layout parameters.
+% Again, in the |\@tempdima| we calculate the full
+% height of useful areas and set the top margin to
+% \begin{quote}
+% |(\paperwidth-\@tempdima)/2|
+% \end{quote}
+% if headers are in use.
+% \begin{macrocode}
+ \setlength\textheight{#3}%
+ \@tempdima\textheight \NCC@h\@tempdima \NCC@f\@tempdima
+ \@tempdimb\paperheight
+ \advance\@tempdimb -\@tempdima
+ \topmargin .5\@tempdimb
+% \end{macrocode}
+% Otherwise, we decrease the value of top margin on the height
+% and separation of header:
+% \begin{macrocode}
+ \ifx\NCC@h\@gobble
+ \advance\topmargin -\headsep
+ \advance\topmargin -\headheight
+ \fi
+% \end{macrocode}
+% Do final correction of all margins: decrease their values
+% on 1~inch. This compensates the default adjustment applied by
+% dvi drivers.
+% \begin{macrocode}
+ \advance \oddsidemargin -1in
+ \advance \evensidemargin -1in
+ \advance \topmargin -1in
+}
+\@onlypreamble\NCC@center
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FromMargins}
+% Finally, we implement the |\FromMargins| command.
+% \begin{macrocode}
+\newcommand{\FromMargins}{%
+ \@ifstar{\pagestyle{empty}\nofiles\NCC@margin[]}{\NCC@margin}%
+}
+\@onlypreamble\FromMargins
+% \end{macrocode}
+% Again, start from parsing the \meta{hfm} parameter:
+% \begin{macrocode}
+\newcommand*{\NCC@margin}[5][]{\NCC@pos{#1}%
+% \end{macrocode}
+% Calculate horizontal parameters at first.
+% In two-side mode, the left margin is equal to the
+% |\oddsidemargin| and the right margin is equal to the
+% |\evensidemargin|. In one-side mode, the
+% |\oddsidemargin| is calculated in the same manner
+% and the |\evensidemargin| is useless. So, we need
+% not distinguish one-side and two-side modes here
+% and do all things as for two-side mode.
+% \begin{macrocode}
+ \setlength\oddsidemargin{#2}%
+ \setlength\evensidemargin{#3}%
+% \end{macrocode}
+% Calculate in |\@tempdima| the amount of space occupied
+% by horizontal margins and marginal notes.
+% \begin{macrocode}
+ \@tempdima\oddsidemargin \advance\@tempdima\evensidemargin
+ \NCC@m\@tempdima
+% \end{macrocode}
+% In two-column mode, marginal notes should be counted twice
+% and the values of odd and even margins must be adjusted
+% on the marginal width.
+% \begin{macrocode}
+ \if@twocolumn
+ \NCC@m\@tempdima
+ \textwidth\paperwidth
+ \advance\textwidth -\@tempdima
+ \NCC@m\oddsidemargin \NCC@m\evensidemargin
+% \end{macrocode}
+% In one-column mode, we must adjust only one margin
+% depending on placement of marginal notes.
+% \begin{macrocode}
+ \else
+ \textwidth\paperwidth
+ \advance\textwidth -\@tempdima
+ \if@reversemargin
+ \NCC@m\oddsidemargin
+ \else
+ \NCC@m\evensidemargin
+ \fi
+ \fi
+% \end{macrocode}
+% Now we calculate the vertical layout parameters.
+% We set the |\@tempdima| to the sum of
+% top margin, bottom margin, header, and footer.
+% \begin{macrocode}
+ \setlength\topmargin{#4}%
+ \setlength\@tempdima{#5}\advance\@tempdima\topmargin
+ \NCC@h\@tempdima \NCC@f\@tempdima
+% \end{macrocode}
+% The rest of page is the text height:
+% \begin{macrocode}
+ \textheight\paperheight
+ \advance\textheight -\@tempdima
+% \end{macrocode}
+% We must decrease the |\topmargin| on the header separation
+% and height if headers are useless.
+% \begin{macrocode}
+ \ifx\NCC@h\@gobble
+ \advance\topmargin -\headsep
+ \advance\topmargin -\headheight
+ \fi
+% \end{macrocode}
+% Do final correction of all margins:
+% \begin{macrocode}
+ \advance \oddsidemargin -1in
+ \advance \evensidemargin -1in
+ \advance \topmargin -1in
+}
+\@onlypreamble\NCC@margin
+%</package>
+% \end{macrocode}
+% \end{macro}
+\endinput