% \iffalse %% %% File: textarea.dtx Copyright (C) 2005 by Alexander I. Rozhenko %% %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{textarea} % [2005/12/26 v1.0 Text area control (NCC)] % % \changes{v1.0}{2005/12/26}{Initial version} % %<*driver> \let\makeindex\relax \documentclass{ltxdoc} \usepackage{textarea} \GetFileInfo{textarea.sty} \begin{document} \title{The \textsf{textarea} package\thanks{This file has version number \fileversion, last revised \filedate.}} \author{Alexander I. Rozhenko\\rozhenko@oapmg.sscc.ru} \date{\filedate} \maketitle \DocInput{textarea.dtx} \end{document} % % \fi % % The package allows expand the text area of a document on other % areas: footer, header, and margin. There are two ways for such % expansion --- temporary expansion of a current page on the header using % a special negative vertical skip, or global change of page layout % parameters with possibility of later restoration them to the original % values. All these actions should be applied at the beginning of page. % % \section{User Interface} % % \DescribeMacro\StartFromTextArea % Applied at the beginning of page, it allows using the non-starred % form of the |\vspace| command after it. The introduced command provides % exact vertical skips at the beginning of page. Unlike it, the standard % \LaTeX's |\vspace*| command skips more space at the beginning of page % than it is required in its parameter. So, using the % |\StartFromTextArea| command prevents % incorrect spacing at the beginning of page. % % \DescribeMacro\StartFromHeaderArea % Applied at the beginning of page, it adjusts the beginning of text area % to the header area by inserting a negative vertical skip. The header % of this page should be empty. Otherwise, the consequent text will % overprint the header. % % \DescribeMacro{\ExpandTextArea\oarg{hfm}} % Expands the text area on other areas of page by changing page layout % parameters. It can be used in one-column mode only. % The letters in optional argument mean the following: |h| (header), % |f| (footer), and |m| (margins). If an optional argument is omitted % or equals to |[*]|, the temporary expansion to the header is applied % with the |\StartFromHeaderArea| command. Anyway, you can use the % non-starred form of the |\vspace| command after expansion of the % text area. % % When a text area is expanded (non-temporary), the repeated call of % this command is disallowed. % % \DescribeMacro\RestoreTextArea % Restores page layout parameters to their previous values. After that, % the |\ExpandTextArea| command can be applied again. % % \DescribeMacro\NCC@restoretextarea % This hook can be used to provide an automatic restoration of the text % area. In \textbf{ncc} class, we use it as follows: set it empty at % the beginning of |titlepage| environment and call this command at % the end of |titlepage| environment. So, if the text area will be % expanded within the |titlepage| environment, it will be automatically % restored at the end of it. % % \StopEventually{} % % \section{The Implementation} % % \begin{macro}{\StartFromTextArea} % \begin{macro}{\StartFromHeaderArea} % Both these commands are defined in two packages: in this and in % \textbf{nccsect}. To be sure that the commands are specified % in these packages only, we mutually test packages to be loaded. % \begin{macrocode} %<*package> \@ifpackageloaded{nccsect}{}{% \newcommand\StartFromTextArea{\par {\parskip\z@ \strut\par}\vskip -\baselineskip } \newcommand\StartFromHeaderArea{% \StartFromTextArea \vskip -\headsep \vskip -\ht\strutbox } } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\RestoreTextArea} % This command is usually empty. But it is globally redefined % when the layout of page is modified by the |\ExpandTextArea| % command. % \begin{macrocode} \newcommand*\RestoreTextArea{} % \end{macrocode} % \end{macro} % % \begin{macro}{\ExpandTextArea} % This command should be applied at the beginning of page % in one-column mode only. % \begin{macrocode} \newcommand*\ExpandTextArea[1][*]{% \if@twocolumn \PackageError{textarea}% {The \string\ExpandTextArea\space command\MessageBreak cannot work in two-column mode}{}% % \end{macrocode} % Test for temporary expansion mode and do it. % \begin{macrocode} \else \def\@tempa{*}\edef\@tempb{#1}% \ifx\@tempa\@tempb \StartFromHeaderArea % \end{macrocode} % Otherwise, apply the permanent expansion but in the only case if % it was not already applied. % \begin{macrocode} \else \ifx\RestoreTextArea\@empty % \end{macrocode} % |\NCC@|\meta{x} hooks will be applied right here to modify the layout and % |\NCC@resore@|\meta{x} hooks will applied later when the original layout % will be restored. % \begin{macrocode} \let\NCC@h\@empty \global\let\NCC@restore@h\@empty \let\NCC@f\@empty \global\let\NCC@restore@f\@empty \let\NCC@m\@empty \global\let\NCC@restore@m\@empty % \end{macrocode} % Analyze letters in the optional parameter and prepare the respective hooks. % The first parameter in all adjustment commands is a sign of adjustment: % the empty value means adjust and the minus sign means restore. % \begin{macrocode} \expandafter\@tfor\expandafter\@tempa\expandafter:\expandafter=#1\do{% \if h\@tempa \def\NCC@h{\NCC@adjusttoheader{}}% \gdef\NCC@restore@h{\NCC@adjusttoheader-}% \else \if f\@tempa \def\NCC@f{\NCC@adjusttofooter{}}% \gdef\NCC@restore@f{\NCC@adjusttofooter-}% \else \if m\@tempa \if@reversemargin \@tempcnta\@ne \else \@tempcnta\tw@ \fi \edef\NCC@m{\noexpand\NCC@adjusttomargin{}{\the\@tempcnta}}% \xdef\NCC@restore@m{\noexpand\NCC@adjusttomargin-{\the\@tempcnta}}% \fi \fi \fi }% % \end{macrocode} % Modify the layout, apply the |\StartFromTextArea| command, and prepare % the |\RestoreTextArea| command and the auto-restoration hook. % \begin{macrocode} \NCC@h\NCC@f\NCC@m \StartFromTextArea \gdef\RestoreTextArea{% \NCC@restore@h\NCC@restore@f\NCC@restore@m \global\let\RestoreTextArea\@empty }% \def\NCC@restoretextarea{\RestoreTextArea}% \fi \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\NCC@adjusttoheader} % Adjust text height parameters and |\topmargin|. % \begin{macrocode} \def\NCC@adjusttoheader#1{% \@tempdima #1\headheight \advance\@tempdima #1\headsep \global\advance\textheight\@tempdima \global\advance\topmargin-\@tempdima \global\@colht\textheight \global\@colroom\textheight \global\vsize\textheight } % \end{macrocode} % \end{macro} % % \begin{macro}{\NCC@adjusttofooter} % Adjust text height parameters. % \begin{macrocode} \def\NCC@adjusttofooter#1{% \global\advance\textheight#1\footskip \global\@colht\textheight \global\@colroom\textheight \global\vsize\textheight } % \end{macrocode} % \end{macro} % % \begin{macro}{\NCC@adjusttomargin} % Adjust text width parameters, |\oddsidemargin| or % |\evensidemargin|. The second parameter specifies % the mode of marginal notes: reverse (1) or normal (2) margins. % \begin{macrocode} \def\NCC@adjusttomargin#1#2{% \@tempdima #1\marginparwidth \advance\@tempdima #1\marginparsep \@tempcnta#2% \ifodd\@tempcnta \global\advance\oddsidemargin -\@tempdima \else \global\advance\evensidemargin -\@tempdima \fi \global\advance\textwidth\@tempdima \global\columnwidth\textwidth \global\linewidth\textwidth \global\hsize\textwidth } % \end{macrocode} % \end{macro} % % \begin{macro}{\NCC@restoretextarea} % Text area auto-restoration hook. % \begin{macrocode} \let\NCC@restoretextarea\@empty % % \end{macrocode} % \end{macro} \endinput