summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/flexipage
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-07-10 19:58:42 +0000
committerKarl Berry <karl@freefriends.org>2022-07-10 19:58:42 +0000
commit538222e8262b9facd5f9ed4f7969f542d5f2d580 (patch)
tree636ba1303320a25936225ec7968f6ed3c0cd6ce8 /Master/texmf-dist/tex/latex/flexipage
parent1d1b57937fa608ddcd6ce0e9e1cc617aa115645f (diff)
flexipage (10jul22)
git-svn-id: svn://tug.org/texlive/trunk@63865 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/flexipage')
-rw-r--r--Master/texmf-dist/tex/latex/flexipage/flexipage.sty446
1 files changed, 446 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/flexipage/flexipage.sty b/Master/texmf-dist/tex/latex/flexipage/flexipage.sty
new file mode 100644
index 00000000000..d6341cbc354
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/flexipage/flexipage.sty
@@ -0,0 +1,446 @@
+%%
+%% This is file `flexipage.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% flexipage.dtx (with options: `package')
+%%
+%% Copyright (C) 2022 by Anton Vrba
+%% --------------------------------
+%%
+%% 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 this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008-05-04 or later.
+%%
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Anton Vrba.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\ProvidesPackage{flexipage}
+ [2022/07/09 1.00 Easy page geometry]
+
+
+\RequirePackage{xparse} % new LaTeX3 syntax to define macros and environments
+\RequirePackage{l3keys2e} % nice way for option processing
+\RequirePackage{calc} % length manipulation
+\RequirePackage{fp} % floating point calculation
+\RequirePackage{ifoddpage}
+\RequirePackage{graphics} % provides landscaping
+\RequirePackage{mparhack} % not needed here, but the user certainly needs it.
+\RequirePackage{etoolbox} % provides \patchcmd
+\newlength{\fleximarginparsep}
+\newlength{\flx@paperheight}
+\newlength{\flx@paperwidth}
+\newlength{\flx@temp}
+\newlength{\flx@LSfix}
+\setlength{\flx@LSfix}{0pt}
+\newlength{\flx@lsfix}
+\setlength{\flx@lsfix}{0pt}
+\newlength{\flx@textheigt}
+\newlength{\flx@orgtextwidth}
+\newlength{\flx@oldparsep}
+\newlength{\flx@oparsep}
+\newlength{\flx@binding}
+\newlength{\marginparsepodd}
+\newlength{\marginparsepeven}
+\newlength{\flx@inner}
+\newlength{\flx@outer}
+\newlength{\flx@top}
+\newlength{\flx@bot}
+\newlength{\flx@parsep}
+\newlength{\flx@printarea}
+\newlength{\flx@outerbleed}
+\newlength{\flx@innerbleed}
+\setlength{\flx@binding} {9pt}
+\setlength{\flx@inner} {36pt}
+\setlength{\flx@outer} {36pt}
+\setlength{\flx@top} {36pt}
+\setlength{\flx@bot} {45pt}
+\setlength{\flx@parsep}{3ex}
+\setlength{\flx@outerbleed} {0pt}
+\setlength{\flx@innerbleed} {0pt}
+\FPset\flx@m{3}
+\FPset\flx@g{12}
+\newif\ifSF@frame\SF@framefalse
+\newif\ifFix@Margin\Fix@Margintrue
+\newif\ifUse@fancyhdr\Use@fancyhdrtrue
+\setlength{\flx@paperheight}{\paperheight}
+\setlength{\flx@paperwidth}{\paperwidth}
+
+\NewDocumentCommand \flx@setpapersize {o o m}{
+\setlength{\flx@paperheight}{#2#3}
+\setlength{\flx@paperwidth}{#2#3}
+}
+
+\ExplSyntaxOn
+\keys_define:nn { flexiprint }
+{
+ binding .code:n = \setlength{\flx@binding}{#1},
+ inner .code:n = \setlength{\flx@inner}{#1},
+ outer .code:n = \setlength{\flx@outer}{#1},
+ top .code:n = \setlength{\flx@top}{#1},
+ bot .code:n = \setlength{\flx@bot}{#1},
+ marginparsep .code:n = \setlength{\flx@parsep}{#1},
+ paperheight .code:n = \setlength{\flx@paperheight}{#1},
+ paperwidth .code:n = \setlength{\flx@paperwidth}{#1},
+ outerbleed .code:n = \setlength{\flx@outerbleed}{#1},
+ innerbleed .code:n = \setlength{\flx@innerbleed}{#1},
+ grid .code:n = \FPset\flx@g{#1},
+ marginalgrid .code:n = \FPset\flx@m{#1} ,
+ show .code:n = \SF@frametrue ,
+ NoFixMargin .code:n = \Fix@Marginfalse ,
+ headsep .code:n = \setlength{\headsep}{#1},
+ headheight .code:n = \setlength{\headheight}{#1},
+ footskip .code:n = \setlength{\footskip}{#1},
+ fancyhdrOff .code:n = \Use@fancyhdrfalse,
+ a4paper .code:n = \flx@setpapersize[210][297]{mm},
+ a5paper .code:n = \flx@setpapersize[148][210]{mm},
+ b4paper .code:n = \flx@setpapersize[250][353]{mm},
+ b5paper .code:n = \flx@setpapersize[176][250]{mm},
+ c4paper .code:n = \flx@setpapersize[229][324]{mm},
+ c5paper .code:n = \flx@setpapersize[162][229]{mm},
+ b4jpaper .code:n = \flx@setpapersize[257][364]{mm},
+ b5jpaper .code:n = \flx@setpapersize[182][257]{mm},
+ letterpaper .code:n = \flx@setpapersize[8.5][11]{in},
+ legalpaper .code:n = \flx@setpapersize[8.5][14]{in},
+ executivepaper .code:n = \flx@setpapersize[7.25][10.5]{in},
+ 10x8paper .code:n = \flx@setpapersize[8][10]{in},
+ US-Trade .code:n = \flx@setpapersize[6][9]{in},
+ UK-B-Format .code:n = \flx@setpapersize[135][210]{mm},
+ US-B-Format .code:n = \flx@setpapersize[129][198]{mm},
+ UK-Royal .code:n = \flx@setpapersize[156][234]{mm},
+ Quarto .code:n = \flx@setpapersize[9.5][12]{in},
+ Octavo .code:n = \flx@setpapersize[6][9]{in},
+ CrownQuarto .code:n = \flx@setpapersize[189][246]{mm},
+ Demi .code:n = \flx@setpapersize[138][216]{mm},
+}
+\ProcessKeysOptions { flexiprint }
+
+\DeclareExpandableDocumentCommand{\IfNoValueOrEmptyTF}{ m m m }
+{
+ \IfNoValueTF{#1}
+ {#2}
+ {\tl_if_empty:nTF {#1} {#2} {#3}}
+}
+\ExplSyntaxOff
+
+\FPset\flx@oldg{\flx@g}
+\FPset\flx@oldm{\flx@m}
+\FPset\flx@og{\flx@g}
+\FPset\flx@om{\flx@m}
+\setlength{\flx@oparsep}{\flx@parsep}
+\ifUse@fancyhdr
+ \RequirePackage{fancyhdr}
+ \pagestyle{fancy}
+\fi
+
+\setlength{\flx@oldparsep}{\flx@parsep}
+\setlength{\flx@oparsep}{\flx@parsep}
+\addtolength{\flx@binding}{\flx@innerbleed}
+\global\hoffset=0pt
+\global\voffset=0pt
+
+\NewDocumentCommand \flx@setpagevertical {} {
+ \setlength{\flx@temp}{\flx@paperwidth+\flx@innerbleed+\flx@outerbleed}
+ \global\paperwidth=\flx@temp
+
+ \setlength{\flx@temp}{\flx@paperheight+2\flx@outerbleed}
+ \global\paperheight=\flx@temp
+
+ \setlength{\flx@temp}{\flx@top+\flx@outerbleed-72pt}
+ \setlength{\topmargin}{\flx@temp}
+
+ \setlength{\flx@temp}{\paperheight - \flx@top %
+ - \headheight - \headsep -\footskip - \flx@bot - 2\flx@outerbleed}
+ \setlength{\textheight}{\flx@temp}
+}
+\flx@setpagevertical
+\setlength{\flx@textheigt}{\textheight}
+\newlength{\flx@linewidth}
+
+\NewDocumentCommand \flx@setpage {} {
+ \FPifgt\flx@m0\relax\else\setlength{\flx@parsep}{0pt}\fi
+ \setlength{\flx@temp}{\flx@binding+\flx@inner-72pt}
+ \global\oddsidemargin=\flx@temp
+
+ \setlength{\flx@linewidth}{\paperwidth-\oddsidemargin-\flx@outer-72pt-\flx@outerbleed}
+ \ifUse@fancyhdr
+ \setlength{\headwidth}{\flx@linewidth}
+ \fi
+ \setlength{\flx@printarea}{\flx@linewidth-\flx@parsep}
+ \FPsub\flx@t\flx@g\flx@m
+ \setlength{\flx@temp}{\flx@printarea * \real{\flx@t}/\real{\flx@g} }
+ \global\textwidth=\flx@temp
+
+ \setlength{\flx@temp}{\flx@printarea * \real{\flx@m}/\real{\flx@g} }
+ \global\marginparwidth=\flx@temp
+ \global\marginparsep=\flx@parsep
+ \if@twoside
+ \setlength{\flx@temp}{\flx@outer+\marginparwidth+\marginparsep-1in+\flx@outerbleed}
+ \global\evensidemargin=\flx@temp
+ \else
+ \global\evensidemargin=\oddsidemargin
+ \fi
+ \global\fleximarginparsep=\marginparsep
+ \global\hsize=\textwidth
+}
+\flx@setpage
+\flx@orgtextwidth=\textwidth
+\FPset\flx@oldg\flx@g
+\FPset\flx@oldm\flx@m
+\setlength{\flx@oparsep}{\flx@parsep}
+\setlength{\flx@oldparsep}{\flx@parsep}
+\NewDocumentCommand \NewMarginPage {o d<> m} {
+ \FPset\flx@oldg\flx@g
+ \FPset\flx@oldm\flx@m
+ \setlength{\flx@oldparsep}{\flx@parsep}
+ \ResetFlexiPage
+ \IfNoValueOrEmptyTF{#2}{\relax}{\setlength{\flx@parsep}{#2} }
+ \IfNoValueOrEmptyTF{#1}{\relax}{\FPset\flx@g{#1}}
+ \FPset\flx@m{#3}
+ \flx@setpage
+ \flx@marginparcorrection
+}
+\NewDocumentCommand \OldMarginPage {} {
+ \FPset\flx@m\flx@oldm
+ \FPset\flx@g\flx@oldg
+ \flx@ResetFlexiPage
+ \setlength{\flx@parsep}{\flx@oldparsep}
+ \flx@setpage
+ \flx@marginparcorrection
+}
+\NewDocumentCommand \NewFullPage {}{
+ \FPset\flx@oldg\flx@g
+ \FPset\flx@oldm\flx@m
+ \setlength{\flx@oldparsep}{\flx@parsep}
+ \flx@ResetFlexiPage
+ \FPset\flx@m{0}
+ \setlength{\flx@parsep}{0pt}
+ \flx@setpage
+}
+\NewDocumentCommand \ResetFlexiPage{} {
+ \FPset\flx@oldg\flx@g
+ \FPset\flx@oldm\flx@m
+ \flx@ResetFlexiPage
+}
+\NewDocumentCommand \flx@ResetFlexiPage{} {
+ \clearpage
+ \FPset\flx@g\flx@og
+ \FPset\flx@m\flx@om
+ \setlength{\flx@parsep}{\flx@oparsep}
+ \flx@setpage
+ \flx@marginparcorrection
+}
+\NewDocumentCommand \Landscape {}
+{
+ \FPset\flx@oldm\flx@m
+ \FPset\flx@oldg\flx@g
+ \setlength{\flx@oldparsep}{\flx@parsep}
+ \clearpage
+ \setlength{\flx@LSfix}{\textheight-\flx@linewidth}
+ \FPset\flx@m{0}
+ \setlength{\flx@parsep}{0ex}
+ \flx@setpage
+ \flx@landscape
+}
+\NewDocumentCommand \endLandscape {}
+{
+ \flx@endlandscape
+ \FPset\flx@m\flx@oldm
+ \FPset\flx@g\flx@oldg
+ \setlength{\flx@parsep}{\flx@oldparsep}
+ \flx@setpage
+ \setlength{\flx@LSfix}{0pt}
+ \flx@marginparcorrection
+}
+\NewDocumentCommand \landscape {}
+{
+ \FPset\flx@oldm\flx@m
+ \FPset\flx@oldg\flx@g
+ \setlength{\flx@oldparsep}{\flx@parsep}
+ \clearpage
+ \setlength{\flx@LSfix}{\textheight-\textwidth}
+ \FPset\flx@m{0}
+ \setlength{\flx@parsep}{0ex}
+ \flx@landscape
+}
+\NewDocumentCommand \endlandscape {}
+{
+ \flx@endlandscape
+ \FPset\flx@m\flx@oldm
+ \FPset\flx@g\flx@oldg
+ \setlength{\flx@parsep}{\flx@oldparsep}
+ \flx@setpage
+ \setlength{\flx@LSfix}{0pt}
+ \flx@marginparcorrection
+}
+
+\def\flx@LS@rot{%
+ \setbox\@outputbox\vbox{\hbox{\rotatebox{90}{\box\@outputbox}}}}
+
+\def\flx@landscape{%
+ \let\flx@LS@makecol=\@makecol
+ \let\flx@LS@makefcolumn=\@makefcolumn
+ \clearpage
+ \begingroup
+ \global\vsize=\textwidth
+ \global\hsize=\textheight
+ \linewidth=\hsize
+ \columnwidth=\hsize
+ \@colroom=\vsize
+ \textheight=\vsize
+ \@colht=\vsize
+ \def\@makecol{\flx@LS@makecol\flx@LS@rot}%
+ \def\@makefcolumn##1{\flx@LS@makefcolumn{##1}\flx@LS@rot}}
+
+\def\flx@endlandscape{%
+ \clearpage
+ \endgroup
+ \global\@colht=\textheight
+ \global\vsize=\textheight
+ \global\@colroom=\textheight}
+\NewDocumentCommand\flx@marginparcorrection{}{
+\ifFix@Margin
+ \setlength{\marginparsepodd}{\marginparsep-\flx@orgtextwidth+\textwidth}
+ \setlength{\marginparsepeven}{\marginparsep}
+ \patchcmd{\@addmarginpar}%In this command
+ {\mph@orig@addmarginpar}%...replace this...
+ {\if@twoside\ifodd\c@page\relax%...with this
+ \marginparsep=\marginparsepodd%Page isodd
+ \else%twoside and eveb
+ \marginparsep=\marginparsepeven%Page iseven
+ \fi
+ \else% oneside
+ \marginparsep=\marginparsepodd
+ \fi
+ \mph@orig@addmarginpar}
+ {}%success
+ {\message{Error! Couldn't hook into command %failure
+ `\string\@addmarginpar'}} %end patch command
+
+ {
+ \def\patcherr{%
+ \message{Error!Couldn't hook into command`\string\@mn@@@marginnote'}}
+ \def\patchok{%
+ \let\patcherr\relax%Only display error if first patch fails
+ \patch%Now patch again.
+ }
+ \def\patch{
+ \patchcmd{\@mn@@@marginnote}%In this command
+ {\kern\marginparsep}%...replace this...
+ {\ifx\@mn@currpage\relax\else%...with this
+ \if@twoside\ifodd\@mn@currpage\relax
+ \kern\marginparsepodd%Page is odd
+ \else
+ \kern\marginparsepeven
+ \fi
+ \else% one side
+ \kern\marginparsepodd
+ \fi
+ \fi}
+ {\message{Patched!}\patchok}%success(recurse)
+ {\patcherr}%fail
+ }
+ \message{Patching`\string\@mn@@@marginnote`!}
+ \patch
+ \global\let\@mn@@@marginnote\@mn@@@marginnote%Makepatch global
+ }
+\fi
+}
+\ifSF@frame\RequirePackage{eso-pic}\fi % so that below code can draw frames
+
+\ifSF@frame\AddToShipoutPictureBG{\flx@ShowFramePicture}\fi
+
+\newcommand*\flx@framecolor{\color{green}}
+\newcommand*\flx@frameline{.8pt}
+\newdimen\SF@tempdima
+
+\newcommand\flx@ShowFramePicture{%
+ \begingroup
+ \color{orange}\linethickness{\flx@frameline}%
+ \if@twoside
+ \ifodd\c@page
+ \AtPageUpperLeft{%
+ \put(\flx@innerbleed,-\paperheight+\flx@outerbleed){%
+ \framebox(\paperwidth-\flx@outerbleed-\flx@innerbleed,\paperheight-2\flx@outerbleed){}}}%
+ \else
+ \AtPageUpperLeft{%
+ \put(\flx@outerbleed,-\paperheight+\flx@outerbleed){%
+ \framebox(\paperwidth-\flx@outerbleed-\flx@innerbleed,\paperheight-2\flx@outerbleed){}}}%
+ \fi
+ \else
+ \AtPageUpperLeft{%
+ \put(\flx@innerbleed,-\paperheight+\flx@outerbleed){%
+ \framebox(\paperwidth-\flx@outerbleed-\flx@innerbleed,\paperheight-2\flx@outerbleed){}}}%
+ \fi
+ \flx@framecolor\linethickness{\flx@frameline}%
+ \AtTextLowerLeft{%
+ \put(0,-\flx@LSfix){\framebox(\textwidth,\textheight+\flx@LSfix){}}}%
+
+\ifUse@fancyhdr
+ \if@twoside
+ \ifodd\c@page
+ \AtPageUpperLeft{%
+ \put(\flx@inner+\flx@binding,-\flx@outerbleed-\flx@top-\headheight){%
+ \framebox(\flx@linewidth,\headheight){}}}%
+ \AtPageUpperLeft{%
+ \put(\flx@inner+\flx@binding,%
+ -\flx@outerbleed-\flx@top-\headheight-\headsep-\textheight%
+ -\footskip -\flx@LSfix){%
+ \line(1,0){\flx@linewidth}}}%
+ \else
+ \AtPageUpperLeft{%
+ \put(\flx@outer+\flx@outerbleed,-\flx@outerbleed-\flx@top-\headheight){%
+ \framebox(\flx@linewidth,\headheight){}}}%
+ \AtPageUpperLeft{%
+ \put(\flx@outer+\flx@outerbleed,%
+ -\flx@outerbleed-\flx@top-\headheight-\headsep-\textheight%
+ -\footskip -\flx@LSfix){%
+ \line(1,0){\flx@linewidth}}}%
+
+ \fi
+ \else
+ \AtPageUpperLeft{%
+ \put(\flx@inner+\flx@binding,-\flx@outerbleed-\flx@top-\headheight){%
+ \framebox(\flx@linewidth,\headheight){}}}%
+ \AtPageUpperLeft{%
+ \put(\flx@inner+\flx@binding,%
+ -\flx@outerbleed-\flx@top-\headheight-\headsep-\textheight%
+ -\footskip -\flx@LSfix){%
+ \line(1,0){\flx@linewidth}}}%
+ \fi
+\else
+ \AtTextUpperLeft{%
+ \put(0,\headsep){%
+ \framebox(\textwidth,\headheight){}}}%
+ \AtTextLowerLeft{%
+ \put(0,-\footskip-\flx@LSfix){%
+ \line(1,0){\textwidth}}}%
+\fi
+\FPifgt\flx@m 0{%
+ \AtTextLowerLeft{%
+ \SF@tempdima=\textwidth\advance\SF@tempdima\marginparsep%
+ \if@twoside
+ \ifodd\c@page\else
+ \if@mparswitch
+ \SF@tempdima=-\marginparsep\advance\SF@tempdima-\marginparwidth
+ \fi
+ \fi
+ \fi
+ \put(\SF@tempdima,0)%
+ {\framebox(\marginparwidth,\textheight){}}%
+ }%
+ }\fi
+ \endgroup
+}
+\endinput
+%%
+%% End of file `flexipage.sty'.