template generation and testing...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2021-08-04 14:52:58 +03:00
parent 7cdad5f453
commit cef9975d48
3 changed files with 365 additions and 132 deletions

View File

@ -23,23 +23,9 @@
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Class/package options...
\RequirePackage{calc}
\RequirePackage{xargs}
\RequirePackage{ifthen}
\RequirePackage{iftex}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\RequirePackage{atbegshi}
\RequirePackage[unicode]{hyperref}
\RequirePackage{graphicx}
\RequirePackage{geometry}
\RequirePackage{eso-pic}
\RequirePackage[
overlay,absolute,
%showboxes,
]{textpos}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -51,9 +37,8 @@
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% options...
% mode...
% layout mode...
%
% - block (default):
%
@ -170,22 +155,25 @@
% spine width and spine fold...
%
% NOTE: this is only used when layoutmode=cover
\DeclareStringOption[0]{spinewidth}[0]
\DeclareStringOption[0]{spinefold}[7mm]
\DeclareStringOption[0]{coverboardgrow}[3mm]
\DeclareStringOption[0pt]{spinewidth}[0pt]
\DeclareStringOption[0pt]{spinefold}[7mm]
\DeclareStringOption[0pt]{coverboardgrow}[3mm]
% XXX defaults should depend on cover type...
% XXX not implemented...
\DeclareStringOption[0]{coverflap}[17mm]
\DeclareStringOption[0]{jacketwrap}[2mm]
\DeclareStringOption[0]{jacketflap}[50mm]
%\DeclareStringOption{jacketflapfront}
%\DeclareStringOption{jacketflapback}
\DeclareStringOption[0pt]{coverflap}[17mm]
\DeclareStringOption[0pt]{jacketwrap}[2mm]
\DeclareStringOption[0pt]{jacketflap}[50mm]
\DeclareStringOption[0pt]{jacketflapfront}[50mm]
\DeclareStringOption[0pt]{jacketflapback}[50mm]
% pdf layout...
%
% defaults:
% - TwoColumnLeft (for layoutmode=block)
% - SinglePage
%
% see: hyperref's pdfpagelayout for more options...
\DeclareStringOption[TwoPageRight]{pdfpagelayout}[TwoPageRight]
\DeclareStringOption{pdfpagelayout}
\@DeclareLiteralOptionTo{pdfpagelayout}{SinglePage}
\@DeclareLiteralOptionTo{pdfpagelayout}{OneColumn}
\@DeclareLiteralOptionTo{pdfpagelayout}{TwoColumnRight}
@ -260,17 +248,65 @@
\ProcessKeyvalOptions*
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Parent class...
%
\LoadClass[9pt, final, openany]{book}
%----------------------------------------------------------------------
% Packages...
%
% NOTE: imports are after \LoadClass{ .. } to avoid figting over macro
% names...
\RequirePackage{calc}
\RequirePackage{xargs}
\RequirePackage{ifthen}
\RequirePackage{iftex}
\RequirePackage{etoolbox}
\RequirePackage{atbegshi}
\RequirePackage[unicode]{hyperref}
\RequirePackage{eso-pic}
\RequirePackage{graphicx}
\RequirePackage[
overlay,absolute,
%showboxes,
]{textpos}
\RequirePackage[linewidth=1pt]{mdframed}
%----------------------------------------------------------------------
% Globals...
\edef\layoutmode{\photobook@layoutmode}
% layout modes...
%
\newif\ifcoverlayout
\coverlayoutfalse
\newif\ifhardcoverlayout
\hardcoverlayoutfalse
\newif\ifsoftcoverlayout
\softcoverlayoutfalse
\newif\ifendpaperlayout
\endpaperlayoutfalse
\newif\ifjacketlayout
\jacketlayoutfalse
% agrigate...
\newif\ifcoverlikelayout
\coverlikelayoutfalse
\newlength\spinewidth
\setlength\spinewidth{\photobook@spinewidth}
@ -280,6 +316,18 @@
\newlength\coverboardgrow
\setlength\coverboardgrow{\photobook@coverboardgrow}
\newlength\coverflap
\newlength\jacketwrap
\newlength\jacketflap
\newlength\jacketflapfront
\setlength\jacketflapfront{\photobook@jacketflapfront}
\newlength\jacketflapback
\setlength\jacketflapback{\photobook@jacketflapback}
% NOTE: page and bleed block sizes are set via \RecalculatePageLengths
\newlength\blockwidth
\newlength\blockheight
@ -288,6 +336,11 @@
\newlength\bleedblockwidth
\newlength\bleedblockheight
% original page block size...
%
% for the block layout these are the same as \blockwidth and \blockheight
% for other layouts these are the original page layout size while the
% \blockwidth are set tho the current layout visible size...
\newlength\pageblockwidth
\newlength\pageblockheight
@ -298,11 +351,10 @@
\setlength\bindingoffset{\photobook@bindingoffset}
% NOTE: since this can be any number but we need to detect if it was set
% manually we'll set it to a really big and random not so random
% prime and hope no will print something big enough and dare to use
% it as image clearence...
% manually we'll set it to \maxdimen and hope noe will print
% something big enough and dare to use it as image clearence...
\newlength{\clearimage}
\setlength\clearimage{32553}
\setlength\clearimage{\maxdimen}
\edef\imageblockwidth{\photobook@imageblockwidth}
@ -316,6 +368,43 @@
% Commands...
\newcommand\RecalculatePageLengths{
% layout bools...
\ifdefstring{\layoutmode}{cover}{
\coverlayouttrue
\coverlikelayouttrue }{}
\ifdefstring{\layoutmode}{hardcover}{
\hardcoverlayouttrue
\coverlikelayouttrue }{}
\ifdefstring{\layoutmode}{softcover}{
\softcoverlayouttrue
\coverlikelayouttrue }{}
\ifdefstring{\layoutmode}{jacket}{%
\jacketlayouttrue
\coverlikelayouttrue }{}
\ifdefstring{\layoutmode}{endpaper}{
\endpaperlayouttrue }
% pdf layout...
\ifx\photobook@pdfpagelayout\empty
\ifcoverlikelayout
\def\photobook@pdfpagelayout{SinglePage}
\else
\def\photobook@pdfpagelayout{TwoPageRight}
\fi
\fi
% items to ignore in different layouts...
% XXX is this the correct way to go???
\ifcoverlayout
\setlength\coverflap{\photobook@coverflap}
\else
\setlength\coverflap{0pt}
\fi
\ifjacketlayout
\setlength\jacketwrap{\photobook@jacketwrap}
\setlength\jacketflap{\photobook@jacketflap}
\else
\setlength\jacketwrap{0pt}
\setlength\jacketflap{0pt}
\fi
% block size...
\ifnum\blockwidth=0
% layout: block...
@ -330,7 +419,7 @@
\fi}
\setlength\pageblockwidth{\blockwidth}
% layout: cover...
\ifdefstring{\layoutmode}{cover}{
\ifcoverlayout
\setlength\blockwidth{
\dimexpr
2\blockwidth
@ -338,9 +427,9 @@
+ 2\spinefold
+ 2\coverboardgrow
+ 2\coverflap
\relax } }{}
\relax } \fi
% layout: jacket...
\ifdefstring{\layoutmode}{jacket}{
\ifjacketlayout
\setlength\blockwidth{
\dimexpr
2\blockwidth
@ -348,11 +437,11 @@
+ 2\spinefold
+ 2\jacketwrap
+ 2\jacketflap
\relax } }{}
\relax } \fi
% layout: endpaper...
\ifdefstring{\layoutmode}{endpaper}{
\ifendpaperlayout
\setlength\blockwidth{
2\blockwidth } }{}
2\blockwidth } \fi
\fi
\ifnum\blockheight=0
% layout: block / endpaper...
@ -364,23 +453,23 @@
\fi}
\setlength\pageblockheight{\blockheight}
% layout: cover...
\ifdefstring{\layoutmode}{cover}{
\ifcoverlayout
\setlength\blockheight{
\dimexpr
\blockheight
+ 2\coverboardgrow
+ 2\coverflap
\relax } }{}
\relax } \fi
% layout: jacket...
\ifdefstring{\layoutmode}{jacket}{
\ifjacketlayout
\setlength\blockheight{
\dimexpr
\blockheight
+ 2\coverboardgrow
\relax } }{}
\relax } \fi
\fi
% default image clearence...
\ifdim\clearimage=32553
\ifdim\clearimage=\maxdimen
\ifx\photobook@clearimage\empty
\setlength\clearimage{-\bleed}
\else
@ -406,16 +495,23 @@
\relax} }
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% update global values...
%----------------------------------------------------------------------
% Setup...
% init lengths...
\RecalculatePageLengths
% minimal geometry setup...
\RequirePackage[
% paper size (incl. bleeds)...
paperwidth=\bleedblockwidth, paperheight=\bleedblockheight,
]{geometry}
%----------------------------------------------------------------------
% Setup...
\AtEndPreamble{
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -504,10 +600,14 @@
%----------------------------------------------------------------------
% Generic Commands....
\def\@keywords{}
\newcommand\keywords[1]{%
\def\@keywords{#1}}
\def\@subject{}
\newcommand\subject[1]{%
\def\@subject{#1}}
@ -669,15 +769,28 @@
\null
\clearpage }
% XXX TEST...
% cover-like layout components...
%
% XXX BUG: when \jacketwrap is 0 flaps ans covers overlap...
% XXX BUG: the visible page height seems to be a bit less than \cellheight...
%
% XXX should this be full size of block or \textwidth???
% XXX make minipage cetering configurable...
% XXX need to reserve the page for these, i.e. add:
% \null
% \clearpage
% but only once...
% ...see: \begin{page} ... above
\newenvironment{frontcover}{%
\ifcoverlikelayout
\newlength\cellwidth
\newlength\cellheight
% front cover...
%
\newenvironment{frontcover}{%
\setlength\cellwidth{\dimexpr
\pageblockwidth
+ \coverboardgrow \relax }
\setlength\cellheight{\dimexpr
\pageblockheight
+ 2\coverboardgrow \relax }
\begin{textblock*}{\pageblockwidth + \coverboardgrow}(
\bleed
+ \jacketflapback
@ -689,15 +802,71 @@
+ \spinewidth,
\bleed
+ \coverflap )%
\begin{minipage}%
[c][\dimexpr \pageblockheight + 2\coverboardgrow \relax][c]%
{\dimexpr \pageblockwidth + \coverboardgrow \relax}%
}{%
\begin{minipage}[t][\cellheight][t]{\cellwidth}%
}{%
\end{minipage}%
\end{textblock*} }
% XXX TEST...
\newenvironment{frontflap}{%
% 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...
%
% XXX should this be hirizontaly or vertically oriented???
% ...options, different envs???
\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*} }
\fi
% jacket components...
%
% NOTE: jacket is part of cover-like layouts...
\ifjacketlayout
% front flap...
%
\newenvironment{frontflap}{%
\setlength\cellwidth{\dimexpr
\jacketflapfront \relax }
\setlength\cellheight{\dimexpr
\pageblockheight
+ 2\coverboardgrow \relax }
\begin{textblock*}{\jacketflapfront}(
\bleed
+ \jacketflapback
@ -709,69 +878,67 @@
+ \spinewidth,
\bleed
+ \coverflap )%
\begin{minipage}%
[c][\dimexpr \pageblockheight + 2\coverboardgrow \relax][c]%
{\jacketflapfront}%
}{%
\begin{minipage}[t][\cellheight][t]{\cellwidth}%
}{%
\end{minipage}%
\end{textblock*} }
% XXX
% XXX should this be hirizontaly or vertically oriented???
% ...options, different envs???
\newenvironment{spine}{%
\begin{textblock*}{\spinewidth}(
\bleed
+ \jacketflapback
+ \coverflap
+ \jacketwrap
+ \coverboardgrow
+ \pageblockwidth
+ \spinefold,
\bleed
+ \coverflap )%
\begin{minipage}%
[c][\dimexpr \pageblockheight + 2\coverboardgrow \relax][c]%
{\spinewidth}%
}{%
\end{minipage}%
\end{textblock*} }
% XXX
\newenvironment{backcover}{%
\begin{textblock*}{\pageblockwidth + \coverboardgrow}(
\bleed
+ \jacketflapback
+ \coverflap
+ \jacketwrap,
\bleed
+ \coverflap )%
\begin{minipage}%
[c][\dimexpr \pageblockheight + 2\coverboardgrow \relax][c]%
{\dimexpr \pageblockwidth + \coverboardgrow \relax}%
}{%
\end{minipage}%
\end{textblock*} }
% XXX
\newenvironment{backflap}{%
% back flap...
%
\newenvironment{backflap}{%
\setlength\cellwidth{\dimexpr
\jacketflapback \relax }
\setlength\cellheight{\dimexpr
\pageblockheight
+ 2\coverboardgrow
\relax }
\begin{textblock*}{\jacketflapback}(
\bleed,
\bleed
+ \coverflap )%
\begin{minipage}%
[c][\dimexpr \pageblockheight + 2\coverboardgrow \relax][c]%
{\jacketflapback}%
}{%
\begin{minipage}[t][\cellheight][t]{\cellwidth}%
}{%
\end{minipage}%
\end{textblock*} }
\fi
% XXX might be a good idea to have an ability to just render a template...
% ...guides and stuff with placeholders...
% XXX this should simply figure out the current mode from setup options...
\newcommand\GenerateTemplate{}
\newcommand\photobook@TemplateCell[1]{
\fbox{\parbox[t][\cellheight][t]{\cellwidth}{%
\begin{center}
\vfill
#1 \\
(\the\cellwidth \space x \the\cellheight)
\vfill
\end{center} }} }
% XXX centering seems to be off...
% XXX guides...
\newcommand\GenerateTemplate{
%\TPoptions{showboxes=true}
\begin{page}
\setlength{\parindent}{0em}
\ifcoverlikelayout
\begin{frontcover}
\photobook@TemplateCell{FRONT COVER}
\end{frontcover}
\begin{spine}
\photobook@TemplateCell{SPINE}
\end{spine}
\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
\end{page} }

View File

@ -0,0 +1,33 @@
%----------------------------------------------------------------------
\documentclass[
layoutmode=cover,
spinewidth=20mm,
spinefold=7mm,
coverboardgrow=3mm,
coverflap=17mm,
jacketflap=50mm,
jacketwrap=2mm,
% page size...
blockwidth=240mm, blockheight=220mm,
bleed=4mm,
bindingoffset=5mm,
% image block configuration...
imageblockwidth=0.98, imageblockheight=0.98,
imageblockoffsettop=-0.1,
% misc...
9pt,final,openany
]{photobook}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\begin{document}
\GenerateTemplate
\end{document}
%----------------------------------------------------------------------
% vim:set ts=4 sw=4 :

View File

@ -0,0 +1,33 @@
%----------------------------------------------------------------------
\documentclass[
layoutmode=jacket,
spinewidth=20mm,
spinefold=7mm,
coverboardgrow=3mm,
coverflap=17mm,
jacketflap=50mm,
jacketwrap=0mm,
% page size...
blockwidth=240mm, blockheight=220mm,
bleed=4mm,
bindingoffset=5mm,
% image block configuration...
imageblockwidth=0.98, imageblockheight=0.98,
imageblockoffsettop=-0.1,
% misc...
9pt,final,openany
]{photobook}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\begin{document}
\GenerateTemplate
\end{document}
%----------------------------------------------------------------------
% vim:set ts=4 sw=4 :