From 56bd1f5b8377f54b4af39a114362a7762d27f13c Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 7 May 2020 03:01:09 +0000 Subject: CTAN sync 202005070301 --- macros/luatex/optex/base/margins.opm | 78 ++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 macros/luatex/optex/base/margins.opm (limited to 'macros/luatex/optex/base/margins.opm') diff --git a/macros/luatex/optex/base/margins.opm b/macros/luatex/optex/base/margins.opm new file mode 100644 index 0000000000..a02bf3e57a --- /dev/null +++ b/macros/luatex/optex/base/margins.opm @@ -0,0 +1,78 @@ +%% This is part of OpTeX project, see http://petr.olsak.net/optex + +\_codedecl \margins {Macros for margins setting <2020-03-14>} % preloaded in format + + \_doc ---------------------------- + \`\margins``/ (,,,)` + takes its parameters, does calculation and sets `\hoffset`, `\voffset`, + `\hsize` and `\vsize` registers. Note that \OpTeX/ sets the page origin at + the top left corner of the paper, no at the obscure position 1\,in, 1\,in. + It is much more comfortable for macro writers. + \_cod ---------------------------- + +\_newdimen\_pgwidth \_newdimen\_pgheight \_pgwidth=0pt +\_newdimen\_shiftoffset + +\_def\_margins/#1 #2 (#3,#4,#5,#6)#7 {\_def\_tmp{#7}% + \_ifx\_tmp\_empty + \_opwarning{\_string\_margins: missing unit, mm inserted}\_def\_tmp{mm}\_fi + \_setpagedimens #2 % setting \_pgwidth, \_pgheight + \_ifdim\_pgwidth=0pt \_else + \_hoffset=0pt \_voffset=0pt + \_if$#3$\_if$#4$\_hoffset =\_dimexpr (\_pgwidth -\_hsize)/2 \_relax + \_else \_hoffset =\_dimexpr \_pgwidth -\_hsize - #4\_tmp \_relax % only right margin + \_fi + \_else \_if$#4$\_hoffset = #3\_tmp \_relax % only left margin + \_else \_hsize =\_dimexpr \_pgwidth - #3\_tmp - #4\_tmp \_relax % left+right margin + \_hoffset = #3\_tmp \_relax + \_fi\_fi + \_if$#5$\_if$#6$\_voffset =\_dimexpr (\_pgheight -\_vsize)/2 \_relax + \_else \_voffset =\_dimexpr \_pgheight -\_vsize - #6\_tmp \_relax % only bottom margin + \_fi + \_else \_if$#6$\_voffset = #5\_tmp \_relax % only top margin + \_else \_vsize=\_dimexpr \_pgheight - #5\_tmp - #6\_tmp \_relax % top+bottom margin + \_voffset = #5\_tmp \_relax + \_fi\_fi + \_if 1#1\_shiftoffset=0pt \_def\_prepoffsets{}\_else \_if 2#1% double-page layout + \_shiftoffset = \_dimexpr \_pgwidth -\_hsize -2\_hoffset \_relax + \_def\_prepoffsets{\_ifodd\_pageno \_else \_advance\_hoffset \_shiftoffset \_fi}% + \_else \_opwarning{use \_string\_margins/1 or \_string\_margins/2}% + \_fi\_fi\_fi +} +\_def\_setpagedimens{\_isnextchar({\_setpagedimensB}{\_setpagedimensA}} +\_def\_setpagedimensA#1 {\_ifcsname _pgs:#1\_endcsname + \_ea\_ea\_ea\_setpagedimensB \_csname _pgs:#1\_ea\_endcsname\_space + \_else \_opwarning{page specification "#1" is undefined}\_fi} +\_def\_setpagedimensB (#1,#2)#3 {\_setpagedimensC\_pgwidth=#1:#3 + \_setpagedimensC\_pgheight=#2:#3 + \_pdfpagewidth=\_pgwidth \_pdfpageheight=\_pgheight +} +\_def\_setpagedimensC #1=#2:#3 {#1=#2\_ifx^#3^\_tmp\_else#3\_fi\_relax\_truedimen#1} + +\_public \margins ; + + \_doc ---------------------------- + The common page dimensions are defined here. + \_cod ---------------------------- + +\_sdef{_pgs:a3}{(297,420)mm} \_sdef{_pgs:a4}{(210,297)mm} \_sdef{_pgs:a5}{(148,210)mm} +\_sdef{_pgs:a3l}{(420,297)mm} \_sdef{_pgs:a4l}{(297,210)mm} \_sdef{_pgs:a5l}{(210,148)mm} +\_sdef{_pgs:b5}{(176,250)mm} \_sdef{_pgs:letter}{(8.5,11)in} + + \_doc ---------------------------- + \`\magscale` `[]` does `\mag=` and recalculates page + dimensions to their true values. + \_cod ---------------------------- + +\_def\_trueunit{} +\_def\_magscale[#1]{\_mag=#1\_def\_trueunit{true}% + \_ifdim\_pgwidth=0pt \_else \_truedimen\_pgwidth \_truedimen\_pgheight \_fi + \_truedimen\_pdfpagewidth \_truedimen\_pdfpageheight +} +\_def\_truedimen#1{\_ifx\_trueunit\_empty \_else#1=\_ea\_ignorept\_the#1truept \_fi} + +\_public \magscale ; + +\_endcode % ----------------------------------------- + + -- cgit v1.2.3