From 3e8e2ea55ae43a6463f8f1d793f132e09fa951ce Mon Sep 17 00:00:00 2001 From: Mateusz Kwiatkowski Date: Wed, 25 Jun 2025 11:16:10 +0000 Subject: Update on Overleaf. --- vu-cs-standard-thesis/vmargin.sty | 576 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 576 insertions(+) create mode 100644 vu-cs-standard-thesis/vmargin.sty (limited to 'vu-cs-standard-thesis/vmargin.sty') diff --git a/vu-cs-standard-thesis/vmargin.sty b/vu-cs-standard-thesis/vmargin.sty new file mode 100644 index 0000000..2f4f67d --- /dev/null +++ b/vu-cs-standard-thesis/vmargin.sty @@ -0,0 +1,576 @@ +%%---------------------------------------------------------------------- +%% vmargin.sty +% +% LaTeX package which introduces paper sizes and provides macros for +% setting document margins. +% This package supersedes package vpage. +% +% This file can be made part of a format by typing \input vmargin.sty +% before dumping the format. +% +% Documentation & history after (last) \endinput. +% +% Still works with LaTeX 2.09. +% Supported = yes. +% +% +% Copyright (C) 1993, 1994, 1995, 1996, 1999 by: +% +% Volker Kuhlmann +% c/o University of Canterbury +% ELEC Dept +% Creyke Road +% Christchurch, New Zealand +% E-Mail: v.kuhlmann@elec.canterbury.ac.nz +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License, distributed from CTAN +% archives as macros/latex/base/lppl.txt; either +% version 1 of the License, or (at your option) any later version. +% +%%---------------------------------------------------------------------- + +%\def\filename{Vmargin} +\def\filename{vmargin} +\def\fileversion{V2.2} +\def\filedate{1999/06/01} + +\@ifundefined{Vmargin}{}{\endinput} + +\@ifundefined{documentclass}{ + \edef\Vmargin{Style `\filename', \fileversion, \filedate} + \expandafter\everyjob\expandafter{\the\everyjob\typeout{\Vmargin}} + \typeout{\Vmargin} +}{ + \NeedsTeXFormat{LaTeX2e}[1994/06/01] + \ProvidesPackage{\filename}[\filedate] + \edef\Vmargin{Package `\filename', \fileversion, <\filedate>} + \expandafter\everyjob\expandafter{\the\everyjob\typeout{\Vmargin}} + \typeout{\Vmargin} +} + + +% new lengths: \PaperWidth, \PaperHeight +% new if: \ifLandscape +% +\newdimen\PaperWidth +\newdimen\PaperHeight +% +\newif\ifLandscape + + +% \setpapersize +% +\def\setpapersize{\@ifnextchar[{\@@setps}{\@@setps[portrait]}} +\def\@@setps[#1]{% + \@ifundefined{po@#1}{\@name@err{#1}}{\@nameuse{po@#1}}% + \@@@setps} +\def\@@@setps#1{% + \@ifundefined{paper@#1}{\@name@err{#1}}{}% + \csname paper@#1\endcsname} + % \usename{paper@#1} inside arg to \@ifundefined does not work + % with papersize "custom". +\def\po@portrait{\Landscapefalse} +\def\po@landscape{\Landscapetrue} +\def\@po@{\ifLandscape\dimen0\PaperWidth + \PaperWidth\PaperHeight\PaperHeight\dimen0\fi + \@ifundefined{paperwidth}{}{\paperwidth\PaperWidth}% + \@ifundefined{paperheight}{}{\paperheight\PaperHeight}} +\@ifundefined{PackageError}{ + \def\@name@err#1{% + \typeout{*****> \string\setpapersize: illegal parameter: #1}} +}{ + \def\@name@err#1{\PackageError{\filename}% + {Paper size or orientation unknown: #1}{}} +} + + +% pre-defined paper/envelope sizes +% +% A0, A1, A2, ..., A9, B0, B1, ..., B9, C0, C1, ..., C9 +% USletter, USlegal, USexecutive +% custom +% +\def\@defmetricpaper#1#2#3{% + \begingroup + \count0=0 + \def\w{\dimen1 }\def\h{\dimen2 }\def\s{\dimen3 }% + \w#2\h#3 + \def\l{11} + \loop + \begingroup + \def\t{\the\count0} + \catcode`\t=11 % letter + \expandafter\xdef\csname paper@#1\the\count0\endcsname{% + \PaperWidth\the\w\PaperHeight\the\h\noexpand\@po@} + \endgroup + \s\w\w.5\h\h\s + \ifnum\the\count0<9 + \advance\count0 by 1 + \repeat + \endgroup +} +% +\@defmetricpaper{A}{840.9mm}{1189.2mm} +\@defmetricpaper{B}{1000mm}{1414mm} +\@defmetricpaper{C}{917mm}{1297mm} +% +\let\@defmetricpaper=\relax % delete definition to save memory +% +\def\paper@USletter{\PaperWidth 8.5in \PaperHeight 11in \@po@} +\def\paper@USlegal{\PaperWidth 8.5in \PaperHeight 14in \@po@} +\def\paper@USexecutive{\PaperWidth 7.25in\PaperHeight 10.5in \@po@} +% +\def\paper@custom#1#2{\PaperWidth#1\PaperHeight#2\@po@} + + +% margin@offset +% +% Compensates for the +1in/+1in top/left corner +% by either reducing the margins or \hoffset, \voffset by 1in. +% This macro is only defined here if it is not already defined! +% (see documentation at the end) +% +\newif\if@shiftmargins +\@shiftmarginsfalse % this MUST be default (pageframe.sty) +% +\@ifundefined{margin@offset}{ +\def\margin@offset{ + \if@shiftmargins + \oddsidemargin -1in\evensidemargin -1in\topmargin -1in + \hoffset 0in\voffset 0in\relax + \else + \oddsidemargin 0in\evensidemargin 0in\topmargin 0in + \hoffset -1in\voffset -1in\relax + \fi +}}{} +% +\def\shiftmargins{\@shiftmarginstrue} + + +% Setting margins +% +% \setmargins{leftmargin}{topmargin}{textwidth}{textheight}% +% {headheight}{headsep}{footheight}{footskip} +% +\newcommand\setmargins[8]{% + \margin@offset + \advance\oddsidemargin #1 + \advance\evensidemargin \PaperWidth % = paperwidth - left + \advance\evensidemargin -#1 % - width + \advance\evensidemargin -#3 + \advance\topmargin #2 + \textwidth #3 + \textheight #4 + \headheight #5 + \headsep #6 + \@ifundefined{footheight}{}{\footheight=#7}% + \footskip #8 + \chk@dimen{#1}{#2}{#3}{#4}% +} +% +% \setmarginsrb{leftmargin}{topmargin}{rightmargin}{bottommargin}% +% {headheight}{headsep}{footheight}{footskip} +% +\newcommand\setmarginsrb[8]{% + \margin@offset + \textwidth \PaperWidth % = paperwidth + \advance\textwidth -#1 % - left - right + \advance\textwidth -#3 + \textheight \PaperHeight % = paperheight - top + \advance\textheight -#2 % - headheight + \advance\textheight -#5 % - headsep + \advance\textheight -#6 % - footskip - bottom + \advance\textheight -#8 + \advance\textheight -#4 + \advance\oddsidemargin #1 + \advance\evensidemargin \PaperWidth % = paperwidth + \advance\evensidemargin -#1 % - left - width + \advance\evensidemargin -\textwidth + \advance\topmargin #2 + \headheight #5 + \headsep #6 + \@ifundefined{footheight}{}{\footheight=#7}% + \footskip #8 + \chk@dimen{#1}{#2}{#3}{#4}% +} +% +% \setmargnohf{leftmargin}{topmargin}{textwidth}{textheight} +% headheight, headsep, footheight, footskip set to 0pt +\newcommand\setmargnohf[4]{% + \setmargins{#1}{#2}{#3}{#4}\z@\z@\z@\z@ + \pagestyle{empty}} +% +% \setmargnohfrb{leftmargin}{topmargin}{rightmargin}{bottommargin} +% headheight, headsep, footheight, footskip set to 0pt +\newcommand\setmargnohfrb[4]{% + \setmarginsrb{#1}{#2}{#3}{#4}\z@\z@\z@\z@ + \pagestyle{empty}} +% +% \setmarg{leftmargin}{topmargin}{textwidth}{textheight} +% headheight, headsep, footheight, footskip unchanged +\newcommand\setmarg[4]{% + \setmargins{#1}{#2}{#3}{#4}% + \headheight\headsep\footheight\footskip} +% +% \setmargrb{leftmargin}{topmargin}{rightmargin}{bottommargin} +% headheight, headsep, footheight, footskip unchanged +\newcommand\setmargrb[4]{% + \setmarginsrb{#1}{#2}{#3}{#4}% + \headheight\headsep\footheight\footskip} +% +% h-warning if [leftmarg + textwidth > paperwidth] resp. +% if [leftmarg + rightmarg > paperwidth]. +% v-warning if [topmarg + textheight > paperheight] resp. +% if [topmarg + bottommarg > paperheight]. +\def\chk@dimen#1#2#3#4{% + \dimen0= #1 + \advance\dimen0 by#3 + \advance\dimen0 -\PaperWidth + \dimen1= #2 + \advance\dimen1 by#4 + \advance\dimen1 \headheight + \advance\dimen1 \headsep + \advance\dimen1 \footskip + \advance\dimen1 -\PaperHeight + \chk@dimen@err +} +\@ifundefined{PackageError}{ + \def\chk@dimen@err{ + \ifnum\dimen0>\z@\typeout{vmargin Warning: Horizontal dimensions + exceed paper width by \the\dimen0}\fi + \ifnum\dimen1>\z@\typeout{vmargin Warning: Vertical dimensions + exceed paper height by \the\dimen1}\fi + } +}{ + \def\chk@dimen@err{ + \ifnum\dimen0>\z@\PackageError{\filename}{% + Horizontal dimensions exceed paper width by \the\dimen0}{}\fi + \ifnum\dimen1>\z@\PackageError{\filename}{% + Vertical dimensions exceed paper height by \the\dimen1}{}\fi + } +} + + +% +% DEFAULTS: +% +\setpapersize{A4} +\def\@hf@dflt{} +\@ifundefined{DeclareOption}{ +}{ + \DeclareOption{shiftmargins}{\shiftmargins} + \DeclareOption{portrait}{\Landscapefalse} + \DeclareOption{landscape}{\Landscapetrue} + \DeclareOption{nohf}{\def\@hf@dflt{y}} + \DeclareOption*{\@@@setps{\CurrentOption}} + \ProcessOptions\relax % process options in order of declaration! +} +\if y\@hf@dflt + \setmargnohfrb{35mm}{20mm}{25mm}{15mm}% +\else + \setmarginsrb{35mm}{20mm}{25mm}{15mm}{12pt}{11mm}{0pt}{11mm}% +\fi + + +\endinput + +%%---------------------------------------------------------------------- + +Page Size and Margins +===================== + +These macros make it easy to set page margins for a chosen paper size. +Actual dimensions of the most common paper sizes are stored and need +not be remembered. + +Two sided printing is supported, meaning that if on odd pages the left +margin is, say, 30mm and the right margin is 20mm, it will be vice +versa on even pages. This gives equal margins on the outer and equal +margins on the inner edge of the paper, as expected e.g. for a book. + +vmargin is designed to be reasonably restricted in both memory usage +and processing time, so that the common task of setting margins is not +too distracting. If you are looking for something fancier try the +geometry package. + +The basic procedure of using vmargin is to first set a paper size, and +then to set the margins. The margin setting functions depend on the +paper size. Setting the paper size and margins are two independent +operations, i.e. setting the paper size does not directly affect the +margins but will affect the next margin setting command. + +The size of the paper can be set with + + \setpapersize{} + + can be A0, A1, ..., A9, B0, B1, ..., B9, C0, ..., C9, USletter, +USlegal, and USexecutive. The metric paper sizes are not stored but +calculated. \setpapersize by default sets the orientation to portrait. + +Landscape format is selected by using the optional argument + + \setpapersize[landscape]{} + +which swaps the width and height dimensions of the paper. +\setpapersize[portrait]{} is allowed but is the default. + +If you have a size which is not pre-defined use + + \setpapersize{custom}{}{} + +For and insert the respective dimensions of your +paper. + +\setpapersize stores the actual dimensions of the paper in the length +variables + + \PaperWidth + \PaperHeight + +which can be used further, if desired. + + \ifLandscape + +yields true if a landscape format is selected. Do not write to +\PaperWidth, \PaperHeight, or call \Landscapetrue or \Landscapefalse, +it will not work!! + +The margins can be set with + + \setmargins{leftmargin}{topmargin}{textwidth}{textheight}% + {headheight}{headsep}{footheight}{footskip} + +or with + + \setmarginsrb{leftmargin}{topmargin}{rightmargin}{bottommargin}% + {headheight}{headsep}{footheight}{footskip} + +In the latter case \textwidth and \textheight are calculated using the +width and height of the selected paper. The first four parameters of +the above two commands are used to set \oddsidemargin, \evensidemargin, +\textwidth, \topmargin, and \textheight. + + \setmargnohf, \setmargnohfrb + +Provide a page with no header and footer. They work the same as +\setmargins, \setmarginsrb except that they only need the first 4 +parameters. The last 4 parameters are set to 0pt. These 2 commands set +the pagestyle to empty (\pagestyle{empty}) as there is no space for +headers or footers. + + \setmarg, \setmargrb + +are the same as \setmargnohf, \setmargnohfrb except that the last 4 +parameters to \setmargins, \setmarginsrb are unchanged. + +Example: + + A4 paper, left margin 30mm, top, right, and bottom margin 20mm + each, no headers or footers: + + \setpapersize{A4} + \setmarginsrb{30mm}{20mm}{20mm}{20mm}{0pt}{0mm}{0pt}{0mm} + \pagestyle{empty} + +The same settings would result with: + + \setpapersize{A4} + \setmargnohfrb{30mm}{20mm}{20mm}{20mm} + +For the default settings please see the part after "DEFAULTS:" (last +part before \endinput). + +The default top and left margins of TeX are +1in. \setmargXXX call + + \margin@offset + +which initialises \hoffset, \voffset to -1in and \oddsidemargin, +\evensidemargin, \topmargin to 0in. \setmargXXX then add the given +dimensions to \topmargin, \oddsidemargin, \evensidemargin. In some +cases it might be desired to use \XXXmargin instead of \Xoffset for +compensation. This can be achieved by telling \margin@offset to +initialise \Xoffset to 0in and \XXXmargin to -1in. This is done by +% + \shiftmargins. +% +If \margin@offset is already defined at the time vmargin is loaded it +is NOT redefined! Therefore if \margin@offset is defined before vmargin +is loaded the above mentioned compensation can be replaced by a +different mechanism. In any case \setmargXXX call \margin@offset and +then expect that \XXXmargin are set to useful values. \Xoffset are not +touched by \setmargXXX. \margin@offset should be defined in a separate +file which is included BEFORE vmargin, i.e. appears in the list of +document-substyles of the \documentstyle command before vmargin. +% +Any better way of doing this? (grumble) + +Example: \documentstyle[...,margins,vmargin,...]{...} + if \margin@offset is defined in a file called margins.sty. + +LaTeX2e: \documentclass[...]{...} + \usepackage{...,margins,vmargin,...} + + +LaTeX2e +------- + +This package now uses some of the new LaTeX2e features for package +programming. It will still work with LaTeX 2.09 (in which case the new +features are not used, resp. are inaccessible). + +LaTeX2e (unless in compatibility mode) does not know \footheight any +more. vmargin does not set this variable if it does not exist, and sets +it if it does. As \footheight was not used by LaTeX 2.09 all this has +little significance. + +LaTeX2e now has the dimensions \paperwidth, \paperheight which hold the +size of the paper. \PaperWidth, \PaperHeight are copied into +\paperwidth, \paperheight if the latter exist. This makes vmargin work +correctly with anything that expects \paperwidth, \paperheight to be +set properly. The names \PaperWidth, \PaperHeight had been chosen in +the first place to avoid clashes with style files that also use these +names (namely pageframe.sty). + +The following package options are available under LaTeX2e: + +shiftmargins same as \shiftmargins +portrait +landscape +A4, etc. same as using \setpapersize[...]{...} + Note: \setpapersize always sets the orientation to + portrait unless landscape is given. Using \setpapersize + after \usepackage causes package option landscape to be + ignored. +nohf do not make space for header and footer lines; this also + sets the pagestyle to empty + +All unknown options are treated as a paper size, if necessary +generating an error that the requested paper size is not defined. + + +Inclusion in TeX formats +------------------------ + +This file may be loaded in initex before dumping the format, by typing + \makeatletter + \input vmargin.sty + \makeatother +Note: this produces a non-standard format. + + +Hints for using pageframe.sty +----------------------------- + +vmargin.sty and pageframe.sty can be used together if the following +points are considered: + +vmargin uses \hoffset and \voffset and writes negative values into it, +pageframe expects them to be zero to give a 1in space on the left and +the top where it prints additional information. Initially, set both to +0mm (in the pre-amble of your text) and adjust them later on. + +pageframe needs to know the trimmed height of the paper (= the height +of the "page frame"). Unless the trimmed(!) size of the paper is +equivalent to one of the standard paper sizes (unlikely...) the size +should be specified with + + \setpapersize{custom}{}{} + +The correct height of the trimmed page can then be given to pageframe +using + + \paperheight{\PaperHeight} + +and the margins of the final product (inside the page frame) can be +specified using \setmargXXX. + +Warning: if \setmargXXXrb is used the 3rd parameter (right margin) is +ignored. Instead, the dimension of the right margin has to be assigned +to \evensidemargin. This is because pageframe.sty re-defines the meaning +of \evensidemargin to be the right margin of your text, on all pages. + +Remember: all these assignments and macro calls have to be in the +pre-amble of the document. + + +Bugs: +----- + +I have not tested this with older versions of LaTeX2e because I don't +have any. If there are any problems pleease do let me know and I'll do +something about it. + + +To do: +------ + +* The way the metric paper sizes are stored takes up a lot of space. A + metric size could be computed by \setpapersize. + + +SUMMARY: +======== + +new lengths: + \PaperWidth + \PaperHeight + +new ifs: + \ifLandscape + +new macros: + \setpapersize[]{}, + \setpapersize[]{custom}{}{} + (optional) = landscape or portrait (default) + = A4, B5, ... + , = actual dimensions of the paper + \setmargins{leftmargin}{topmargin}{textwidth}{textheight}% + {headheight}{headsep}{footheight}{footskip} + \setmarginsrb{leftmargin}{topmargin}{rightmargin}{bottommargin}% + {headheight}{headsep}{footheight}{footskip} + \setmargnohf{leftmargin}{topmargin}{textwidth}{textheight} + \setmargnohfrb{leftmargin}{topmargin}{rightmargin}{bottommargin} + \setmarg{leftmargin}{topmargin}{textwidth}{textheight} + \setmargrb{leftmargin}{topmargin}{rightmargin}{bottommargin} +% + \margin@offset + \shiftmargins + +LaTeX2e package options: + shiftmargins + portrait + landscape + nohf + all other options are treated as paper sizes + + +If you have any comments (positive or negative) please let me know! + + + +HISTORY: +======== + + . + . Created out of Vpage.sty. + . +V1.7 21 May 1994 Changed file header. +V1.72 21 May 1994 Fixed bug in \setpapersize{custom} +V1.8 28 May 94 Commented \chk@dimen; reduced load on TeX's + parameter stack (changed \chk@dimen). + Put a conditional around references + to \footheight. +V1.9 22 Jun 94 Corrected spelling in comment. +V2.0 28 Jun 94 Added support for LaTeX2e \paperwidth, + \paperheight. +V2.1 20 Sep 94 \@defmetricpaper now defines \w, \h, \s locally. + Thanks to branderhorst@fgg.eur.nl! +V2.12 28 Mar 95 Fixed documentation for \setmargrb. +V2.13 26 Jun 96 Fixed comment for \setmarginsrb. +V2.2 31 May 99 Released under LPPL. + Changed references to Vmargin to vmargin. + LaTeX2e package options introduced. +% +%% EOF vmargin.sty +%%---------------------------------------------------------------------- -- cgit v1.2.3