diff options
author | Karl Berry <karl@freefriends.org> | 2022-07-10 19:58:42 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-07-10 19:58:42 +0000 |
commit | 538222e8262b9facd5f9ed4f7969f542d5f2d580 (patch) | |
tree | 636ba1303320a25936225ec7968f6ed3c0cd6ce8 /Master/texmf-dist/tex/latex | |
parent | 1d1b57937fa608ddcd6ce0e9e1cc617aa115645f (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')
-rw-r--r-- | Master/texmf-dist/tex/latex/flexipage/flexipage.sty | 446 |
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'. |