From 2e7faac8a8f8c76a0db8ab04b14188aecad6d45c Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sat, 7 Aug 2021 03:55:00 +0300 Subject: [PATCH] lots of tweaks and refactoring... Signed-off-by: Alex A. Naanou --- photobook.cls | 497 ++++++++++++++++++++++++++------------------------ 1 file changed, 254 insertions(+), 243 deletions(-) diff --git a/photobook.cls b/photobook.cls index f3e4ee4..7d2dbb7 100644 --- a/photobook.cls +++ b/photobook.cls @@ -267,44 +267,41 @@ \RequirePackage{iftex} \RequirePackage{etoolbox} \RequirePackage{atbegshi} +%\RequirePackage{afterpage} +%\RequirePackage{changepage} \RequirePackage[unicode]{hyperref} +%\RequirePackage{pdfcomment} \RequirePackage{eso-pic} \RequirePackage{environ} +\RequirePackage{xcolor} +\RequirePackage{colorspace} \RequirePackage{graphicx} -\RequirePackage[ - overlay,absolute, - %showboxes, -]{textpos} +\RequirePackage[overlay,absolute]{textpos} \RequirePackage[linewidth=1pt]{mdframed} \RequirePackage{rotating} +% XXX flow text frames... +\RequirePackage{flowfram} %---------------------------------------------------------------------- % Globals... +% +% NOTE: most of these are setup in \InitPageLengths... \edef\layoutmode{\photobook@layoutmode} -\edef\pdfpagelayout{\photobook@pdfpagelayout} - - -% layout modes... -% +% layout mode tests... \newif\ifcoverlayout - \newif\ifhardcoverlayout - \newif\ifsoftcoverlayout - \newif\ifendpaperlayout - \newif\ifjacketlayout - % agrigates... \newif\ifcoverlikelayout - \newif\ifblocklayout +\edef\pdfpagelayout{\photobook@pdfpagelayout} \newlength\spinewidth \setlength\spinewidth{\photobook@spinewidth} @@ -316,16 +313,11 @@ \setlength\coverboardgrow{\photobook@coverboardgrow} \newlength\coverflap - \newlength\jacketwrap - \newlength\jacketflap - \newlength\jacketflapfront - \newlength\jacketflapback - -% NOTE: page and bleed block sizes are set via \RecalculatePageLengths +% NOTE: page and bleed block sizes are set via \InitPageLengths \newlength\blockwidth \newlength\blockheight % NOTE: these are equivalent to \paperwidth and \paperheight but are @@ -362,10 +354,10 @@ %---------------------------------------------------------------------- -% Commands... +% Init / reset... -\newcommand\RecalculatePageLengths{ - % layout bools... +\newcommand\InitPageLengths{ + % layout bools/tests... \coverlayoutfalse \hardcoverlayoutfalse \softcoverlayoutfalse @@ -509,15 +501,17 @@ \setlength\blockheight{0mm} \edef\pdfpagelayout{} % - \RecalculatePageLengths } + \InitPageLengths } + + %---------------------------------------------------------------------- -% Setup (early)... +% Setup... % init/update lengths... -\RecalculatePageLengths +\InitPageLengths % minimal geometry setup... \RequirePackage[ @@ -528,7 +522,8 @@ %---------------------------------------------------------------------- -% Setup (late)... +% Setup (pre-document)... + \AtEndPreamble{ % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -548,7 +543,7 @@ % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Geometry... - \RecalculatePageLengths + \InitPageLengths % no-defaults -- the user is expected to set things up... \ifphotobook@geometrynodefaults @@ -641,6 +636,32 @@ \fi } +\newcommand\pdfpagecount[1]{ + \ifpdftex + \pdfximage{#1} + \number\pdflastximagepages% + \else\ifxetex + \number\XeTeXpdfpagecount"#1"% + \else\ifluatex + \number\directlua{% + local pages = 0 + local doc = pdfe.open("\luaescapestring{#1}") + if doc then + pages = pdfe.getnofpages(doc) + pdfe.close(doc) + end + tex.write(pages) } \fi\fi } + + +% \pdfspinewidth{paper-thikness}{cover-thikness}{block-pdf} +% +% NOTE: really "like" how LaTeX overcomplicats simple math... +\newcommand\pdfspinewidth[3]{% + \setlength\spinewidth{\dimexpr + (#1 mm) * \numexpr \pdfpagecount{#3} / 2 \relax + + ((#2 mm) * 2) + \relax} } + % XXX workaround a problem with xelatex vs. lualatex... \ifxetex @@ -775,11 +796,21 @@ %---------------------------------------------------------------------- -% Cover/endpaper Templates... +% Envs... % % XXX need a way to place images / templates into these... % XXX should these only be visible in respective modes or for non-zero widths??? + +% within a block/cell env these store the cell width and height... +\newlength\cellwidth +\newlength\cellheight + + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Generic... + % XXX this may span more than one page if there is enoug stuff packed % into it... \newenvironment{page}{}{% @@ -787,211 +818,185 @@ \clearpage } -%%% \photobook@newtemplatecell{name}{x}{y}{width}{heigth} -%%% -%%% XXX need to quote arguments to make them eval on env expansion and not -%%% on command expansion.... -%%\newcommand\photobook@newtemplatecell[5]{ -%% \newenvironment{#1}{% -%% \setlength\cellwidth{#4} -%% \setlength\cellheight{#5} -%% % -%% \begin{textblock*}{\pageblockwidth}(#2, #3)% -%% \begin{minipage}[t][\cellheight][t]{\cellwidth}% -%% }{% -%% \end{minipage}% -%% \end{textblock*} } } - - -\newlength\cellwidth -\newlength\cellheight - - - % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Covers, Jackets and endpapers... + % endpaper... % % XXX for some reason naming this anything starting with endpaper will % make LaTeX complain that that is already defined... -\newenvironment{leftside}{% - \setlength\cellwidth{\pageblockwidth} - \setlength\cellheight{\pageblockheight} - % - \begin{textblock*}{\pageblockwidth}(\bleed, \bleed)% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } +\NewEnviron{leftside}{% + \ifendpaperlayout + \setlength\cellwidth{\pageblockwidth} + \setlength\cellheight{\pageblockheight} + % + \begin{textblock*}{\pageblockwidth}(\bleed, \bleed)% + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } + +\NewEnviron{rightside}{% + \ifendpaperlayout + \setlength\cellwidth{\pageblockwidth} + \setlength\cellheight{\pageblockheight} + % + \begin{textblock*}{\pageblockwidth}( + \bleed + + \pageblockwidth, + \bleed )% + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } -\newenvironment{rightside}{% - \setlength\cellwidth{\pageblockwidth} - \setlength\cellheight{\pageblockheight} - % - \begin{textblock*}{\pageblockwidth}( - \bleed - + \pageblockwidth, - \bleed )% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } - - -% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -% cover-like layout components... - -% front cover... +% front/back covers... % -\newenvironment{frontcover}{% - \setlength\cellwidth{\dimexpr - \pageblockwidth - + \coverboardgrow \relax } - \setlength\cellheight{\dimexpr - \pageblockheight - + 2\coverboardgrow \relax } - % - \begin{textblock*}{\pageblockwidth + \coverboardgrow}( +\NewEnviron{frontcover}{% + \ifcoverlikelayout + \setlength\cellwidth{\dimexpr + \pageblockwidth + + \coverboardgrow \relax } + \setlength\cellheight{\dimexpr + \pageblockheight + + 2\coverboardgrow \relax } + % + \begin{textblock*}{\pageblockwidth + \coverboardgrow}( + \bleed + + \jacketflapback + + \coverflap + + \jacketwrap + + \coverboardgrow + + \pageblockwidth + + 2\spinefold + + \spinewidth, + \bleed + + \coverflap )% + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } + +\NewEnviron{backcover}{% + \ifcoverlikelayout + \setlength\cellwidth{\dimexpr + \pageblockwidth + + \coverboardgrow \relax } + \setlength\cellheight{\dimexpr + \pageblockheight + + 2\coverboardgrow \relax } + % + \begin{textblock*}{\pageblockwidth + \coverboardgrow}( + \bleed + + \jacketflapback + + \coverflap + + \jacketwrap, + \bleed + + \coverflap )% + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } + + +% spines... +% +\NewEnviron{spine}{% + \ifcoverlikelayout + \setlength\cellwidth{\dimexpr + \spinewidth \relax } + \setlength\cellheight{\dimexpr + \pageblockheight + + 2\coverboardgrow \relax } + % + \begin{textblock*}{\spinewidth}( \bleed + \jacketflapback + \coverflap + \jacketwrap + \coverboardgrow + \pageblockwidth + + \spinefold, + \bleed + + \coverflap )% + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } + +% XXX make args be up or down... +\NewEnviron{vspine}[1][270]{% + \ifcoverlikelayout + \setlength\cellwidth{\dimexpr + \spinewidth \relax } + \setlength\cellheight{\dimexpr + \pageblockheight + + 2\coverboardgrow \relax } + % + \begin{textblock*}{\spinewidth}( + \bleed + + \jacketflapback + + \coverflap + + \jacketwrap + + \coverboardgrow + + \pageblockwidth + + \spinefold, + \bleed + + \coverflap )% + % XXX this does not work for some reason... + %\begin{turn}{\ifdefstring{#1}{up}{270}{90}} + \begin{turn}{#1} + \begin{minipage}[t][\cellwidth][t]{\cellheight}% + \BODY% + \end{minipage}% + \end{turn} + \end{textblock*} \fi } + + +% jackets flaps... +% +\NewEnviron{frontflap}{% + \ifjacketlayout + \setlength\cellwidth{\jacketflapfront } + \setlength\cellheight{\dimexpr + \pageblockheight + + 2\coverboardgrow \relax } + % + \begin{textblock*}{\jacketflapfront}( + \bleed + + \jacketflapback + + 2\jacketwrap + + 2\coverboardgrow + + 2\pageblockwidth + 2\spinefold + \spinewidth, + \bleed + + \coverflap )% + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } + +\NewEnviron{backflap}{% + \ifjacketlayout + \setlength\cellwidth{\jacketflapback} + \setlength\cellheight{\dimexpr + \pageblockheight + + 2\coverboardgrow \relax } + % + \begin{textblock*}{\jacketflapback}( + \bleed, \bleed + \coverflap )% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } - - -% back cover... -% -\newenvironment{backcover}{% - \setlength\cellwidth{\dimexpr - \pageblockwidth - + \coverboardgrow \relax } - \setlength\cellheight{\dimexpr - \pageblockheight - + 2\coverboardgrow \relax } - % - \begin{textblock*}{\pageblockwidth + \coverboardgrow}( - \bleed - + \jacketflapback - + \coverflap - + \jacketwrap, - \bleed - + \coverflap )% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } - - -% spine... -% -\newenvironment{spine}{% - \setlength\cellwidth{\dimexpr - \spinewidth \relax } - \setlength\cellheight{\dimexpr - \pageblockheight - + 2\coverboardgrow \relax } - % - \begin{textblock*}{\spinewidth}( - \bleed - + \jacketflapback - + \coverflap - + \jacketwrap - + \coverboardgrow - + \pageblockwidth - + \spinefold, - \bleed - + \coverflap )% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } - - -% vertical spine... -% -% XXX make args be up or down... -\newenvironment{vspine}[1][270]{% - \setlength\cellwidth{\dimexpr - \spinewidth \relax } - \setlength\cellheight{\dimexpr - \pageblockheight - + 2\coverboardgrow \relax } - % - \begin{textblock*}{\spinewidth}( - \bleed - + \jacketflapback - + \coverflap - + \jacketwrap - + \coverboardgrow - + \pageblockwidth - + \spinefold, - \bleed - + \coverflap )% - % XXX this does not work for some reason... - %\begin{turn}{\ifdefstring{#1}{up}{270}{90}} - \begin{turn}{#1} - \begin{minipage}[t][\cellwidth][t]{\cellheight}% -}{% - \end{minipage}% - \end{turn} - \end{textblock*} } + \begin{minipage}[t][\cellheight][t]{\cellwidth}% + \BODY% + \end{minipage}% + \end{textblock*} \fi } % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -% jacket components... - - -% front flap... -% -\newenvironment{frontflap}{% - \setlength\cellwidth{\jacketflapfront } - \setlength\cellheight{\dimexpr - \pageblockheight - + 2\coverboardgrow \relax } - % - \begin{textblock*}{\jacketflapfront}( - \bleed - + \jacketflapback - + 2\jacketwrap - + 2\coverboardgrow - + 2\pageblockwidth - + 2\spinefold - + \spinewidth, - \bleed - + \coverflap )% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } - - -% back flap... -% -\newenvironment{backflap}{% - \setlength\cellwidth{\jacketflapback} - \setlength\cellheight{\dimexpr - \pageblockheight - + 2\coverboardgrow \relax } - % - \begin{textblock*}{\jacketflapback}( - \bleed, - \bleed - + \coverflap )% - \begin{minipage}[t][\cellheight][t]{\cellwidth}% -}{% - \end{minipage}% - \end{textblock*} } - \newcommand\photobook@TemplateCell[1]{ % XXX this seems to be bigger than the size given... @@ -1010,37 +1015,44 @@ \TPoptions{showboxes=true} \begin{page} \setlength{\parindent}{0em} - \ifendpaperlayout - \begin{leftside} - \photobook@TemplateCell{ENDPAPER LEFT} - \end{leftside} - \begin{rightside} - \photobook@TemplateCell{ENDPAPER RIGHT} - \end{rightside} - \fi - \ifcoverlikelayout - \begin{frontcover} - \photobook@TemplateCell{FRONT COVER} - \end{frontcover} - %\begin{vspine}[90] - \begin{vspine}%[down] - \photobook@TemplateCell{SPINE} - \end{vspine} - \begin{backcover} - \photobook@TemplateCell{BACK COVER} - \end{backcover} - \fi - \ifjacketlayout - \begin{frontflap} - \photobook@TemplateCell{FRONT FLAP} - \end{frontflap} - \begin{backflap} - \photobook@TemplateCell{BACK FLAP} - \end{backflap} - \fi + % NOTE: only the relevant blocks will be visible... + \begin{leftside} + \photobook@TemplateCell{ENDPAPER LEFT} + \end{leftside} + \begin{rightside} + \photobook@TemplateCell{ENDPAPER RIGHT} + \end{rightside} + \begin{frontcover} + \photobook@TemplateCell{FRONT COVER} + \end{frontcover} + %\begin{vspine}[90] + %\begin{vspine}[down] + \begin{vspine} + \photobook@TemplateCell{SPINE} + \end{vspine} + \begin{backcover} + \photobook@TemplateCell{BACK COVER} + \end{backcover} + \begin{frontflap} + \photobook@TemplateCell{FRONT FLAP} + \end{frontflap} + \begin{backflap} + \photobook@TemplateCell{BACK FLAP} + \end{backflap} \end{page} } +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% pages... + +% XXX + + + + + + + %---------------------------------------------------------------------- @@ -1668,13 +1680,12 @@ - - %---------------------------------------------------------------------- %%% XXX DEBUG... %%\AtBeginDocument{ %%} + %---------------------------------------------------------------------- % vim:set ts=4 sw=4 :