texlive[65625] trunk: pagelayout (24jan23)

commits+karl at tug.org commits+karl at tug.org
Tue Jan 24 22:10:40 CET 2023


Revision: 65625
          http://tug.org/svn/texlive?view=revision&revision=65625
Author:   karl
Date:     2023-01-24 22:10:39 +0100 (Tue, 24 Jan 2023)
Log Message:
-----------
pagelayout (24jan23)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/Makefile.am
    trunk/Build/source/texk/texlive/linked_scripts/Makefile.in
    trunk/Build/source/texk/texlive/linked_scripts/scripts.lst
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc

Added Paths:
-----------
    trunk/Build/source/texk/texlive/linked_scripts/pagelayout/
    trunk/Build/source/texk/texlive/linked_scripts/pagelayout/pagelayoutapi
    trunk/Build/source/texk/texlive/linked_scripts/pagelayout/textestvis
    trunk/Master/bin/aarch64-linux/pagelayoutapi
    trunk/Master/bin/aarch64-linux/textestvis
    trunk/Master/bin/amd64-freebsd/pagelayoutapi
    trunk/Master/bin/amd64-freebsd/textestvis
    trunk/Master/bin/amd64-netbsd/pagelayoutapi
    trunk/Master/bin/amd64-netbsd/textestvis
    trunk/Master/bin/armhf-linux/pagelayoutapi
    trunk/Master/bin/armhf-linux/textestvis
    trunk/Master/bin/i386-cygwin/pagelayoutapi
    trunk/Master/bin/i386-cygwin/textestvis
    trunk/Master/bin/i386-freebsd/pagelayoutapi
    trunk/Master/bin/i386-freebsd/textestvis
    trunk/Master/bin/i386-linux/pagelayoutapi
    trunk/Master/bin/i386-linux/textestvis
    trunk/Master/bin/i386-netbsd/pagelayoutapi
    trunk/Master/bin/i386-netbsd/textestvis
    trunk/Master/bin/i386-solaris/pagelayoutapi
    trunk/Master/bin/i386-solaris/textestvis
    trunk/Master/bin/universal-darwin/pagelayoutapi
    trunk/Master/bin/universal-darwin/textestvis
    trunk/Master/bin/x86_64-cygwin/pagelayoutapi
    trunk/Master/bin/x86_64-cygwin/textestvis
    trunk/Master/bin/x86_64-darwinlegacy/pagelayoutapi
    trunk/Master/bin/x86_64-darwinlegacy/textestvis
    trunk/Master/bin/x86_64-linux/pagelayoutapi
    trunk/Master/bin/x86_64-linux/textestvis
    trunk/Master/bin/x86_64-linuxmusl/pagelayoutapi
    trunk/Master/bin/x86_64-linuxmusl/textestvis
    trunk/Master/bin/x86_64-solaris/pagelayoutapi
    trunk/Master/bin/x86_64-solaris/textestvis
    trunk/Master/texmf-dist/doc/latex/pagelayout/
    trunk/Master/texmf-dist/doc/latex/pagelayout/1x1.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/2x1.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/3x2.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/LICENSE
    trunk/Master/texmf-dist/doc/latex/pagelayout/README.md
    trunk/Master/texmf-dist/doc/latex/pagelayout/banner.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/banner.svg
    trunk/Master/texmf-dist/doc/latex/pagelayout/banner.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/kopi.jpg
    trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-1.svg
    trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-2.svg
    trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-3.svg
    trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.pdf
    trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.tex
    trunk/Master/texmf-dist/doc/latex/pagelayout/tests.zip
    trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.1
    trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/textestvis.1
    trunk/Master/texmf-dist/doc/man/man1/textestvis.man1.pdf
    trunk/Master/texmf-dist/scripts/pagelayout/
    trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi
    trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi.1.md
    trunk/Master/texmf-dist/scripts/pagelayout/textestvis
    trunk/Master/texmf-dist/scripts/pagelayout/textestvis.1.md
    trunk/Master/texmf-dist/tex/latex/pagelayout/
    trunk/Master/texmf-dist/tex/latex/pagelayout/pagelayout.cls
    trunk/Master/tlpkg/tlpsrc/pagelayout.tlpsrc

Modified: trunk/Build/source/texk/texlive/linked_scripts/Makefile.am
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/Makefile.am	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Build/source/texk/texlive/linked_scripts/Makefile.am	2023-01-24 21:10:39 UTC (rev 65625)
@@ -69,6 +69,8 @@
 	listbib/listbib \
 	listings-ext/listings-ext.sh \
 	ltxfileinfo/ltxfileinfo \
+	pagelayout/pagelayoutapi \
+	pagelayout/textestvis \
 	pdfbook2/pdfbook2 \
 	pdfjam/pdfjam \
 	pdftex-quiet/pdftex-quiet \
@@ -98,9 +100,7 @@
 	texosquery/texosquery-jre8.sh \
 	tikztosvg/tikztosvg \
 	typeoutfileinfo/typeoutfileinfo.sh \
-	wordcount/wordcount.sh \
-	xput/xput \
-	xput/xputserver
+	wordcount/wordcount.sh
 
 texmf_other_scripts = \
 	a2ping/a2ping.pl \

Modified: trunk/Build/source/texk/texlive/linked_scripts/Makefile.in
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/Makefile.in	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Build/source/texk/texlive/linked_scripts/Makefile.in	2023-01-24 21:10:39 UTC (rev 65625)
@@ -283,6 +283,8 @@
 	listbib/listbib \
 	listings-ext/listings-ext.sh \
 	ltxfileinfo/ltxfileinfo \
+	pagelayout/pagelayoutapi \
+	pagelayout/textestvis \
 	pdfbook2/pdfbook2 \
 	pdfjam/pdfjam \
 	pdftex-quiet/pdftex-quiet \
@@ -312,9 +314,7 @@
 	texosquery/texosquery-jre8.sh \
 	tikztosvg/tikztosvg \
 	typeoutfileinfo/typeoutfileinfo.sh \
-	wordcount/wordcount.sh \
-	xput/xput \
-	xput/xputserver
+	wordcount/wordcount.sh
 
 texmf_other_scripts = \
 	a2ping/a2ping.pl \

Added: trunk/Build/source/texk/texlive/linked_scripts/pagelayout/pagelayoutapi
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/pagelayout/pagelayoutapi	                        (rev 0)
+++ trunk/Build/source/texk/texlive/linked_scripts/pagelayout/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,371 @@
+#!/bin/sh
+#
+# Copyright (c) 2022-2023 by Friedemann Bartels
+#
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c 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.
+#
+
+version=1.0.3
+
+_convert() {
+  turbo=$1
+  filename=$2
+  filenamecache=$3
+  fileextcache=$4
+  originalwidthsp=$5
+  originalheightsp=$6
+  originalcropleftsp=$7
+  originalcroprightsp=$8
+  originalcroptopsp=$9
+  originalcropbottomsp=${10}
+  density=${11}
+  displaywidth=${12}
+  displayheight=${13}
+  resizethreshold=${14}
+  unsharp=${15}
+  quality="${16}"
+
+  mkdir -p cache/"$filenamecache"
+  originalwidth=$( magick identify -ping -format %w "$filename" )
+  originalheight=$( magick identify -ping -format %h "$filename" )
+  width=$(( (10 * originalwidth * (originalwidthsp - originalcropleftsp - originalcroprightsp) / originalwidthsp + 5) / 10 ))
+  height=$(( (10 * originalheight * (originalheightsp - originalcroptopsp - originalcropbottomsp) / originalheightsp + 5) / 10 ))
+  cropleft=$(( (10 * originalwidth * originalcropleftsp / originalwidthsp + 5) / 10 ))
+  croptop=$(( (10 * originalheight * originalcroptopsp / originalheightsp + 5) / 10 ))
+  resizewidth=$(( (10 * displaywidth * 100 * density / 473628672 + 5) / 10 ))
+  if [ $(( resizewidth * resizethreshold / 100 )) -gt $width ]; then
+    resizewidth=$width
+    resizeheight=$height
+  else
+    resizeheight=$(( resizewidth * height / width + 1 ))
+  fi
+
+  x="x"
+  if [ $turbo = 1 ]; then
+    export MAGICK_THREAD_LIMIT=1
+  fi
+  if [ "$quality" != "" ]; then
+    quality="-quality $quality"
+  fi
+  if [ "$unsharp" != "" ]; then
+    unsharp="-unsharp $unsharp"
+  fi
+
+  magick "$filename" -crop $width$x$height+$cropleft+$croptop -resize $resizewidth$x$resizeheight $unsharp $quality "cache/$filenamecache/.g$fileextcache"
+  mv "cache/$filenamecache/.g$fileextcache" "cache/$filenamecache/g$fileextcache"
+}
+
+_startbatchprocess() {
+  success=0
+  for file in cache/*; do
+    if [ -f "$file" ]; then
+      success=1
+      name=$( basename "${file}" )
+      mv "$file" "cache/.$name" 2> /dev/null
+      if [ $? -eq 0 ]; then
+        line=$(head -n 1 "cache/.$name")
+
+        IFS="%"
+        set -- $line
+        IFS=" "
+        _convert 1 "$@"
+
+        rm "cache/.$name"
+        break
+      fi
+    fi
+  done
+
+  if [ $success -eq 1 ]; then
+    _startbatchprocess
+  fi
+}
+
+getwidth() {
+  if command -v magick >/dev/null 2>&1; then
+    filename=$1
+
+    originalwidth=$( magick identify -ping -format %w "$filename" )
+    echo $originalwidth
+  else
+    echo errormagicknotinstalled
+  fi
+}
+
+optimize() {
+  if command -v magick >/dev/null 2>&1; then
+    filenamecache=$2
+    fileextcache=$3
+
+    if [ -f cache/"$filenamecache" ]; then
+      mv cache/"$filenamecache" cache/."$filenamecache" 2> /dev/null
+      if [ $? -eq 0 ]; then
+        line=$(head -n 1 "cache/.$filenamecache")
+
+        IFS="%"
+        set -- $line
+        IFS=" "
+        _convert 1 "$@"
+
+        rm "cache/.$filenamecache"
+      else
+        while [ ! -f cache/"$filenamecache"/g"$fileextcache" ]; do
+          sleep 0.05
+        done
+      fi
+    elif [ -d cache/"$filenamecache" ]; then
+      while [ ! -f cache/"$filenamecache"/g"$fileextcache" ]; do
+        sleep 0.05
+      done
+    else
+      _convert 0 "$@"
+    fi
+
+    echo ok
+  else
+    echo errormagicknotinstalled
+  fi
+}
+
+makeshadow() {
+  if command -v magick >/dev/null 2>&1; then
+    filename=$1
+    stdDeviation=$2
+    opacity=$3
+    fill=$4
+    width=$5
+    height=$6
+    framewidth=$7
+    frameheight=$8
+    frameborder=$9
+    frameradius=${10}
+
+    [ ! -d cache ] && mkdir cache
+    mkdir -p cache/$filename
+    echo "<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+      <svg
+        width='$width'
+        height='$height'
+        version='1.1'
+        xmlns='http://www.w3.org/2000/svg'
+        xmlns:svg='http://www.w3.org/2000/svg'>
+        <defs>
+          <filter
+            style='color-interpolation-filters:sRGB'
+            id='blur'
+            x='-4'
+            y='-4'
+            width='8'
+            height='8'>
+            <feGaussianBlur
+              stdDeviation='$stdDeviation' />
+          </filter>
+        </defs>
+        <rect
+          style='filter:url(#blur);opacity:$opacity;fill:$fill'
+          width='$framewidth'
+          height='$frameheight'
+          x='$frameborder'
+          y='$frameborder'
+          rx='$frameradius'
+          ry='$frameradius' />
+      </svg>
+    " > cache/$filename/s.svg
+    inkscape cache/$filename/s.svg --export-dpi=600 --export-filename cache/$filename/s.pdf
+    rm cache/$filename/s.svg
+
+    echo ok
+  else
+    echo errorinkscapenotinstalled
+  fi
+}
+
+import() {
+  if [ -d import ]; then
+    importdir=import
+  elif [ "$PAGELAYOUT_IMPORT_DIRECTORY" != "" ]; then
+    if [ -d "$PAGELAYOUT_IMPORT_DIRECTORY" ]; then
+      importdir="$PAGELAYOUT_IMPORT_DIRECTORY"
+    else
+      echo $PAGELAYOUT_IMPORT_DIRECTORY
+      exit
+    fi
+  else
+    echo errornoimportdir
+    exit
+  fi
+
+  defaultdirectory=$( echo $1 | sed -e 's/^{//g' | sed -e 's/}{.*//g' )
+  directorylist=$( echo $1 | sed -e 's/^{//g' | sed -e 's/}$//g' | sed -e 's/}{/$/g' )
+
+  for entry in "$importdir"/*.*
+  do
+    if [ -f "$entry" ]; then
+      name=$( basename "${entry}" )
+      if [ "$directorylist" != "" ]; then
+        echo "$directorylist" | tr '$' '\n' | while read directory; do
+          if [ -f "$directory$name" ]; then
+            mv "$entry" "$directory"
+          fi
+        done
+      fi
+      if [ -f "$entry" ]; then
+        if [ -d "$defaultdirectory" ]; then
+          mv "$entry" "$defaultdirectory"
+        else
+          mv "$entry" .
+        fi
+      fi
+      cachename=$( echo "$name" | sed -e 's/\.[a-zA-Z]*$//g' )
+      rm -rf cache/"$cachename"*
+    fi
+  done
+}
+
+startturbo() {
+  file="$(echo $1 | sed -e 's/\.pdflatex$//g')"
+  if [ -f $file.tex ]; then
+    tmpdir=$( mktemp -d 2>/dev/null )/pagelayoutturbo$( date "+%Y%m%d%H%M%S" )$RANDOM
+    mkdir $tmpdir
+
+    cp $file.tex $tmpdir/pagelayoutturbobatchoptimizexyz.tex
+
+    command=$(echo $(ps -p $PPID -o command ))
+    engine=$(echo $command | sed -e 's/^[A-Z ]*//g' | sed -e 's/ .*//g' | tr -d '\n')
+
+    case "$command" in
+      *-shell-escape*)
+        shellescape="--shell-escape"
+        ;;
+    esac
+
+    if [ "$engine" = "xelatex" ]; then
+      nopdf="-no-pdf"
+    fi
+
+    $engine $shellescape -interaction=batchmode $nopdf --output-directory $tmpdir $tmpdir/pagelayoutturbobatchoptimizexyz.tex > /dev/null
+
+    rm -rf $tmpdir
+  fi
+}
+
+batchoptimize() {
+  [ ! -d cache ] && mkdir cache
+
+  length=$(( $# / 15 ))
+  cores=$( nproc )
+  [ $cores -gt $length ] && cores=$length
+
+  while [ $length -gt 0 ]; do
+    filenamecache="$2"
+
+    if [ ! -e cache/"$filenamecache" ]; then
+      index=0
+      while [ $index -lt 15 ]; do
+        if [ $index -eq 0 ]; then
+          item="$1"
+        else
+          item="$item%$1"
+        fi
+
+        shift
+        index=$(( index + 1 ))
+      done
+
+      echo $item > cache/"$filenamecache"
+    else
+      shift 15
+    fi
+
+    length=$(( length - 1 ))
+  done
+
+  cores=$(( cores - 1 ))
+  while [ $cores -gt 0 ]; do
+    _startbatchprocess &
+    sleep 0.01
+    cores=$(( cores - 1 ))
+  done
+}
+
+usage() {
+  cat <<HELP_USAGE
+usage: pagelayoutapi getwidth % FILE
+       pagelayoutapi optimize % FILE % FILENAME % EXTENSION % ORIGINALWIDTH
+         % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM
+         % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+       pagelayoutapi makeshadow % FILENAME % STANDARDDEVIATION % OPACITY % COLOR
+         % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+       pagelayoutapi start [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+       pagelayoutapi batchoptimize % BATCHLIST
+
+   --help      Prints a help message.
+   --version   Prints version information.
+HELP_USAGE
+}
+
+version() {
+  echo pagelayoutapi $version
+}
+
+input=$( echo "$@" | sed -e 's/\\//g' | sed -e 's/ %/%/g' | sed -e 's/% /%/g' )
+IFS="%"
+set -- $input
+IFS=" "
+
+case "$1" in
+getwidth)
+  shift
+
+  getwidth "$1"
+  ;;
+optimize)
+  shift
+
+  optimize "$@"
+  ;;
+makeshadow)
+  shift
+
+  makeshadow "$@"
+  ;;
+start)
+  shift
+
+  if [ "$1" = "import" ]; then
+    shift
+
+    import "$1"
+
+    shift
+  fi
+
+  if [ "$1" = "turbo" ]; then
+    shift
+
+    startturbo "$1" &
+  fi
+
+  echo ok
+  ;;
+batchoptimize)
+  shift
+
+  batchoptimize "$@" &
+
+  echo ok
+  ;;
+--version)
+  version
+  ;;
+--help)
+  usage
+esac


Property changes on: trunk/Build/source/texk/texlive/linked_scripts/pagelayout/pagelayoutapi
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/texk/texlive/linked_scripts/pagelayout/textestvis
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/pagelayout/textestvis	                        (rev 0)
+++ trunk/Build/source/texk/texlive/linked_scripts/pagelayout/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,506 @@
+#!/bin/sh
+#
+# Copyright (c) 2022-2023 by Friedemann Bartels
+#
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c 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.
+#
+
+version=1.0.3
+
+OK="$( tput setaf 2 )•$( tput sgr0 )"
+FAILED="$( tput setaf 1 )$( tput bold )x$( tput sgr0 )"
+NEW="$( tput setaf 3 )$( tput bold )+$( tput sgr0 )"
+REMOVED="$( tput setaf 5 )$( tput bold )-$( tput sgr0 )"
+ERROR="$( tput setaf 1 )$( tput bold )!$( tput sgr0 )"
+
+_playok() {
+  if [ -f /System/Library/Sounds/Glass.aiff ]; then
+    afplay /System/Library/Sounds/Glass.aiff >/dev/null 2>&1
+  fi
+}
+
+_playhm() {
+  if [ -f /System/Library/Sounds/Basso.aiff ]; then
+    afplay /System/Library/Sounds/Basso.aiff >/dev/null 2>&1
+  fi
+}
+
+_playerror() {
+  if [ -f /System/Library/Sounds/Sosumi.aiff ]; then
+    afplay /System/Library/Sounds/Sosumi.aiff >/dev/null 2>&1
+  fi
+}
+
+_gettime() {
+  if command -v gdate &> /dev/null; then
+    echo $( gdate +%s%3N )
+  else
+    if command -v date &> /dev/null; then
+      milliseconds=$( date +%3N )
+      if [ $milliseconds = 3N ]; then
+        echo $(( SECONDS * 1000 ))
+      else
+        echo $( date +%s%3N )
+      fi
+    else
+      echo $(( SECONDS * 1000 ))
+    fi
+  fi
+}
+
+_starttimer() {
+  starttime=$( _gettime )
+}
+
+_stoptimer() {
+  endtime=$( _gettime )
+
+  elapsedtime=$(( endtime - starttime ))
+  elapsedseconds=$(( elapsedtime / 1000 ))
+  elapsedmilliseconds=$(( elapsedtime % 1000 ))
+  elapsed=$elapsedseconds.$( printf "%03d" "$elapsedmilliseconds" )
+}
+
+test() {
+  _starttimer
+  tmpdir=$( mktemp -d 2>/dev/null )/textest$( date "+%Y%m%d%H%M%S" )$RANDOM
+  mkdir $tmpdir
+
+  if [ $3 = true ] && [ -d cache ]; then
+    rm -rf cache
+  fi
+
+  okcount=0
+  failedcount=0
+  newcount=0
+  removedcount=0
+  fileokcount=0
+  filefailedcount=0
+  defaultfiller=23
+
+  echo ""
+  for entry in *$5*.tex
+  do
+    if [ $entry != "*$5*.tex" ]; then
+      name=$( echo $entry | sed -e 's/\.tex$//g' )
+      if [ ${name:0:1} != _ ]; then
+        printf "$( tput sgr0 )$name"
+
+        runtwice=0
+        if [ "${name:$(( ${#name} - 2 )):2}" = "@2" ]; then
+          runtwice=1
+        fi
+
+        if [ "$4" != "xelatex" ]; then
+          name="$name.$4"
+        fi
+
+        passed=1
+        rm -f $name.failed.*
+
+        cp $entry $tmpdir/$name.tex
+        shell=""
+        if [ $1 = true ]; then
+          shell="--shell-escape"
+        fi
+        $4 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$name.tex > /dev/null
+        if [ $? -eq 1 ]; then
+          passed=0
+        fi
+        if [ $runtwice -eq 1 ]; then
+          $4 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$name.tex > /dev/null
+          if [ $? -eq 1 ]; then
+            passed=0
+          fi
+        fi
+
+        magick convert -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png
+        if [ -f "$tmpdir/$name.png" ]; then
+          mv $tmpdir/$name.png $tmpdir/$name-0.png
+        fi
+
+        if [ -f "$name.approved.pdf" ]; then
+          magick convert -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png
+          if [ -f "$tmpdir/$name.approved.png" ]; then
+            mv $tmpdir/$name.approved.png $tmpdir/$name.approved-0.png
+          fi
+        fi
+
+        if [ $passed -eq 0 ]; then
+          filler=$(( defaultfiller - ${#name} - 2 ))
+        else
+          filler=$(( defaultfiller - ${#name} ))
+        fi
+        while [ 0 -le $filler ]; do
+          printf " "
+          filler=$(( filler - 1 ))
+        done
+        if [ $passed -eq 0 ]; then
+          printf " $ERROR"
+        fi
+
+        index=0
+        while [ -f "$tmpdir/$name-$index.png" ]; do
+          if [ -f "$tmpdir/$name.approved-$index.png" ]; then
+            changedpixels=$( magick compare -quiet -metric AE $tmpdir/$name-$index.png $tmpdir/$name.approved-$index.png null: 2>&1 )
+            if [ $changedpixels -eq 0 ]; then
+              okcount=$(( okcount + 1 ))
+              printf " $OK"
+            else
+              failedcount=$(( failedcount + 1 ))
+              passed=0
+              printf " $FAILED"
+              magick compare -quiet $tmpdir/$name-$index.png $tmpdir/$name.approved-$index.png $name.failed.$(( index + 1 )).png
+              if [ -f "$tmpdir/$name.pdf" ]; then
+                mv $tmpdir/$name.pdf $name.failed.pdf
+              fi
+            fi
+          else
+            newcount=$(( newcount + 1 ))
+            passed=0
+            printf " $NEW"
+            mv $tmpdir/$name-$index.png $name.failed.$(( index + 1 )).png
+            if [ -f "$tmpdir/$name.pdf" ]; then
+              mv $tmpdir/$name.pdf $name.failed.pdf
+            fi
+          fi
+          index=$(( index + 1 ))
+          if [ `expr $index % 20` -eq 0 ] && [ -f "$tmpdir/$name-$index.png" ]; then
+            echo ""
+            filler=$defaultfiller
+            while [ 0 -le $filler ]; do
+              printf " "
+              filler=$(( filler - 1 ))
+            done
+          fi
+        done
+        while [ -f "$tmpdir/$name.approved-$index.png" ]; do
+          removedcount=$(( removedcount + 1 ))
+          passed=0
+          printf " $REMOVED"
+          mv $tmpdir/$name.approved-$index.png $name.failed.$(( index + 1 )).png
+          if [ -f "$tmpdir/$name.pdf" ]; then
+            mv $tmpdir/$name.pdf $name.failed.pdf
+          fi
+          index=$(( index + 1 ))
+          if [ `expr $index % 20` -eq 0 ] && [ -f "$tmpdir/$name.approved-$index.png" ]; then
+            echo ""
+            filler=$defaultfiller
+            while [ 0 -le $filler ]; do
+              printf " "
+              filler=$(( filler - 1 ))
+            done
+          fi
+        done
+
+        if [ $passed -eq 1 ]; then
+          fileokcount=$(( fileokcount + 1 ))
+        else
+          filefailedcount=$(( filefailedcount + 1 ))
+        fi
+
+        echo ""
+      fi
+    fi
+  done
+
+  rm -rf $tmpdir
+  _stoptimer
+  seconds=$( printf "%.1f" "$elapsed" )
+
+  filecount=$(( fileokcount + filefailedcount ))
+
+  if [ $filecount -gt 0 ]; then
+    echo ""
+  fi
+  if [ $filecount -eq $fileokcount ]; then
+    if [ $filecount -eq 0 ]; then
+      _playhm &
+      echo "$( tput sgr0 )Tested 0 files 🧐."
+    else
+      _playok &
+      echo "$( tput sgr0 )Successfully tested $filecount files in $seconds seconds 🎉."
+    fi
+    echo ""
+  else
+    _playerror &
+    echo "$( tput sgr0 )Tested $filecount files in $seconds seconds."
+    echo ""
+
+    if [ $fileokcount -gt 0 ]; then
+      filler=$(( 6 + ${#filecount} - ${#fileokcount} ))
+      while [ 0 -le $filler ]; do
+        printf " "
+        filler=$(( filler - 1 ))
+      done
+      printf "$( tput setaf 2 )$fileokcount OK$( tput sgr0 )"
+      echo ""
+    fi
+    if [ $filefailedcount -gt 0 ]; then
+      filler=$(( 6 + ${#filecount} - ${#filefailedcount} ))
+      while [ 0 -le $filler ]; do
+        printf " "
+        filler=$(( filler - 1 ))
+      done
+      printf "$( tput setaf 1 )$filefailedcount Failed$( tput sgr0 )"
+      echo ""
+    fi
+    echo ""
+    exit 1
+  fi
+}
+
+approve() {
+  filecount=0
+
+  suffix=""
+  if [ "$1" != "xelatex" ]; then
+    suffix=".$1"
+  fi
+
+  echo ""
+  for entry in *$2*$suffix.failed.pdf
+  do
+    if [ $entry != "*$2*$suffix.failed.pdf" ]; then
+      filecount=$(( filecount + 1 ))
+      name=$( echo $entry | sed -e "s/$suffix.failed.pdf//" )
+      echo $name
+      rm -f $name$suffix.approved.pdf
+      if [ -f "$name.aux" ]; then
+        cp $name$suffix.failed.pdf $name$suffix.approved.pdf
+      else
+        mv $name$suffix.failed.pdf $name$suffix.approved.pdf
+      fi
+
+      rm -f $name$suffix.failed.*
+    fi
+  done
+
+  if [ $filecount -gt 0 ]; then
+    echo ""
+  fi
+  if [ $filecount -eq 1 ]; then
+    echo "Approved 1 file."
+  else
+    echo "Approved $filecount files."
+  fi
+  echo ""
+}
+
+compare() {
+  filea=$2
+  fileb=$3
+  tmpdir=$( mktemp -d 2>/dev/null)/textest$( date "+%Y%m%d%H%M%S" )$RANDOM
+  mkdir $tmpdir
+
+  namea=$( echo $filea | sed -e 's/\.\///g' | sed -e 's/\.pdf$//g' )
+  nameb=$( echo $fileb | sed -e 's/\.\///g' | sed -e 's/\.pdf$//g' )
+  basenamea=$(basename $namea)
+  basenameb=$(basename $nameb)
+
+  rm -f $namea.diff.*.png
+
+  spacer=""
+  if [ -f "$filea" ]; then
+    if [ -f "$fileb" ]; then
+      magick convert -density $1 -quiet $filea $tmpdir/$basenamea.png
+      if [ -f "$tmpdir/$basenamea.png" ]; then
+        mv $tmpdir/$basenamea.png $tmpdir/$basenamea-0.png
+      fi
+      magick convert -density $1 -quiet $fileb $tmpdir/$basenameb.png
+      if [ -f "$tmpdir/$basenameb.png" ]; then
+        mv $tmpdir/$basenameb.png $tmpdir/$basenameb-0.png
+      fi
+
+      index=0
+      while [ -f "$tmpdir/$basenamea-$index.png" ]; do
+        if [ -f "$tmpdir/$basenameb-$index.png" ]; then
+          changedpixels=$( magick compare -quiet -metric AE $tmpdir/$basenamea-$index.png $tmpdir/$basenameb-$index.png null: 2>&1 )
+          if [ $changedpixels -eq 0 ]; then
+            printf "$spacer$OK"
+            spacer=" "
+          else
+            printf "$spacer$FAILED"
+            spacer=" "
+            magick compare -quiet $tmpdir/$basenamea-$index.png $tmpdir/$basenameb-$index.png $namea.diff.$(( index + 1 )).png
+          fi
+        else
+          printf "$spacer$NEW"
+          spacer=" "
+        fi
+        index=$(( index + 1 ))
+      done
+      while [ -f "$tmpdir/$basenameb-$index.png" ]; do
+        printf "$spacer$REMOVED"
+        spacer=" "
+        index=$(( index + 1 ))
+      done
+      echo ""
+    else
+      echo "File $fileb not found."
+    fi
+  else
+    echo "File $filea not found."
+  fi
+
+  rm -rf $tmpdir
+}
+
+perf() {
+  if [ -f $4 ]; then
+    tmpdir=$( mktemp -d 2>/dev/null )/textestperf$( date "+%Y%m%d%H%M%S" )$RANDOM
+    mkdir $tmpdir
+    basename=$(basename $4)
+
+    if [ $1 = true ] && [ -d cache ]; then
+      rm -rf cache
+    fi
+
+    cp $4 $tmpdir
+    shell=""
+    if [ $2 = true ]; then
+      shell="--shell-escape"
+    fi
+    _starttimer
+    $3 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$basename > /dev/null
+    _stoptimer
+    echo "$elapsed"
+
+    rm -rf $tmpdir
+  else
+    echo "File $4 not found."
+  fi
+}
+
+usage() {
+  cat <<HELP_USAGE
+usage: textest [-cs] [-e ENGINE] [-d DENSITY] [PATTERN]
+       textest approve [-e ENGINE] [PATTERN]
+       textest compare [-d DENSITY] FILE FILE
+       textest perf [-cs] [-e ENGINE] FILE
+
+   -c          Clears cache.
+   -s          Enables shell escape.
+   -d DENSITY  Sets density in ppi (default 72).
+   -e ENGINE   Sets latex engine (default xelatex).
+   --help      Prints a help message.
+   --version   Prints version information.
+HELP_USAGE
+}
+
+version() {
+  echo textest $version
+}
+
+case "$1" in
+approve)
+  shift
+  engine=xelatex
+
+  while getopts ":e:" arg; do
+    case "${arg}" in
+      e)
+        engine="${OPTARG}"
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  approve $engine $1
+  ;;
+compare)
+  shift
+
+  density=72
+
+  while getopts ":d:" arg; do
+    case "${arg}" in
+      d)
+        density="${OPTARG}"
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  compare $density $1 $2
+  ;;
+perf)
+  shift
+
+  shell=false
+  clear=false
+  engine=xelatex
+
+  while getopts ":e:sc" arg; do
+    case "${arg}" in
+      c)
+        clear=true
+        ;;
+      e)
+        engine="${OPTARG}"
+        ;;
+      s)
+        shell=true
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  perf $clear $shell $engine $1
+  ;;
+--version)
+  version
+  ;;
+--help)
+  usage
+  ;;
+*)
+  density=72
+  shell=false
+  clear=false
+  engine=xelatex
+
+  while getopts ":e:d:sc" arg; do
+    case "${arg}" in
+      c)
+        clear=true
+        ;;
+      d)
+        density="${OPTARG}"
+        ;;
+      e)
+        engine="${OPTARG}"
+        ;;
+      s)
+        shell=true
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  test $shell $density $clear $engine $1
+esac


Property changes on: trunk/Build/source/texk/texlive/linked_scripts/pagelayout/textestvis
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Build/source/texk/texlive/linked_scripts/scripts.lst
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/scripts.lst	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Build/source/texk/texlive/linked_scripts/scripts.lst	2023-01-24 21:10:39 UTC (rev 65625)
@@ -10,6 +10,8 @@
 listbib/listbib
 listings-ext/listings-ext.sh
 ltxfileinfo/ltxfileinfo
+pagelayout/pagelayoutapi
+pagelayout/textestvis
 pdfbook2/pdfbook2
 pdfjam/pdfjam
 pdftex-quiet/pdftex-quiet
@@ -40,8 +42,6 @@
 tikztosvg/tikztosvg
 typeoutfileinfo/typeoutfileinfo.sh
 wordcount/wordcount.sh
-xput/xput
-xput/xputserver
 a2ping/a2ping.pl
 accfonts/mkt1font
 accfonts/vpl2ovp

Added: trunk/Master/bin/aarch64-linux/pagelayoutapi
===================================================================
--- trunk/Master/bin/aarch64-linux/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/aarch64-linux/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/aarch64-linux/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/aarch64-linux/textestvis
===================================================================
--- trunk/Master/bin/aarch64-linux/textestvis	                        (rev 0)
+++ trunk/Master/bin/aarch64-linux/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/aarch64-linux/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/amd64-freebsd/pagelayoutapi
===================================================================
--- trunk/Master/bin/amd64-freebsd/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/amd64-freebsd/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/amd64-freebsd/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/amd64-freebsd/textestvis
===================================================================
--- trunk/Master/bin/amd64-freebsd/textestvis	                        (rev 0)
+++ trunk/Master/bin/amd64-freebsd/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/amd64-freebsd/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/amd64-netbsd/pagelayoutapi
===================================================================
--- trunk/Master/bin/amd64-netbsd/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/amd64-netbsd/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/amd64-netbsd/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/amd64-netbsd/textestvis
===================================================================
--- trunk/Master/bin/amd64-netbsd/textestvis	                        (rev 0)
+++ trunk/Master/bin/amd64-netbsd/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/amd64-netbsd/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/armhf-linux/pagelayoutapi
===================================================================
--- trunk/Master/bin/armhf-linux/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/armhf-linux/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/armhf-linux/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/armhf-linux/textestvis
===================================================================
--- trunk/Master/bin/armhf-linux/textestvis	                        (rev 0)
+++ trunk/Master/bin/armhf-linux/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/armhf-linux/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-cygwin/pagelayoutapi
===================================================================
--- trunk/Master/bin/i386-cygwin/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/i386-cygwin/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-cygwin/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-cygwin/textestvis
===================================================================
--- trunk/Master/bin/i386-cygwin/textestvis	                        (rev 0)
+++ trunk/Master/bin/i386-cygwin/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-cygwin/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-freebsd/pagelayoutapi
===================================================================
--- trunk/Master/bin/i386-freebsd/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/i386-freebsd/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-freebsd/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-freebsd/textestvis
===================================================================
--- trunk/Master/bin/i386-freebsd/textestvis	                        (rev 0)
+++ trunk/Master/bin/i386-freebsd/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-freebsd/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-linux/pagelayoutapi
===================================================================
--- trunk/Master/bin/i386-linux/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/i386-linux/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-linux/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-linux/textestvis
===================================================================
--- trunk/Master/bin/i386-linux/textestvis	                        (rev 0)
+++ trunk/Master/bin/i386-linux/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-linux/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-netbsd/pagelayoutapi
===================================================================
--- trunk/Master/bin/i386-netbsd/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/i386-netbsd/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-netbsd/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-netbsd/textestvis
===================================================================
--- trunk/Master/bin/i386-netbsd/textestvis	                        (rev 0)
+++ trunk/Master/bin/i386-netbsd/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-netbsd/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-solaris/pagelayoutapi
===================================================================
--- trunk/Master/bin/i386-solaris/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/i386-solaris/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-solaris/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/i386-solaris/textestvis
===================================================================
--- trunk/Master/bin/i386-solaris/textestvis	                        (rev 0)
+++ trunk/Master/bin/i386-solaris/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/i386-solaris/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/universal-darwin/pagelayoutapi
===================================================================
--- trunk/Master/bin/universal-darwin/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/universal-darwin/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/universal-darwin/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/universal-darwin/textestvis
===================================================================
--- trunk/Master/bin/universal-darwin/textestvis	                        (rev 0)
+++ trunk/Master/bin/universal-darwin/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/universal-darwin/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-cygwin/pagelayoutapi
===================================================================
--- trunk/Master/bin/x86_64-cygwin/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/x86_64-cygwin/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-cygwin/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-cygwin/textestvis
===================================================================
--- trunk/Master/bin/x86_64-cygwin/textestvis	                        (rev 0)
+++ trunk/Master/bin/x86_64-cygwin/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-cygwin/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-darwinlegacy/pagelayoutapi
===================================================================
--- trunk/Master/bin/x86_64-darwinlegacy/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/x86_64-darwinlegacy/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-darwinlegacy/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-darwinlegacy/textestvis
===================================================================
--- trunk/Master/bin/x86_64-darwinlegacy/textestvis	                        (rev 0)
+++ trunk/Master/bin/x86_64-darwinlegacy/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-darwinlegacy/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-linux/pagelayoutapi
===================================================================
--- trunk/Master/bin/x86_64-linux/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/x86_64-linux/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-linux/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-linux/textestvis
===================================================================
--- trunk/Master/bin/x86_64-linux/textestvis	                        (rev 0)
+++ trunk/Master/bin/x86_64-linux/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-linux/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-linuxmusl/pagelayoutapi
===================================================================
--- trunk/Master/bin/x86_64-linuxmusl/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/x86_64-linuxmusl/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-linuxmusl/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-linuxmusl/textestvis
===================================================================
--- trunk/Master/bin/x86_64-linuxmusl/textestvis	                        (rev 0)
+++ trunk/Master/bin/x86_64-linuxmusl/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-linuxmusl/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-solaris/pagelayoutapi
===================================================================
--- trunk/Master/bin/x86_64-solaris/pagelayoutapi	                        (rev 0)
+++ trunk/Master/bin/x86_64-solaris/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/pagelayoutapi
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-solaris/pagelayoutapi
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/bin/x86_64-solaris/textestvis
===================================================================
--- trunk/Master/bin/x86_64-solaris/textestvis	                        (rev 0)
+++ trunk/Master/bin/x86_64-solaris/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+link ../../texmf-dist/scripts/pagelayout/textestvis
\ No newline at end of file


Property changes on: trunk/Master/bin/x86_64-solaris/textestvis
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/1x1.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/1x1.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/1x1.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/1x1.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/1x1.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/2x1.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/2x1.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/2x1.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/2x1.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/2x1.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/3x2.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/3x2.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/3x2.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/3x2.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/3x2.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/LICENSE
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/LICENSE	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/LICENSE	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c  2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+    Everyone is allowed to distribute verbatim copies of this
+    license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute.  This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work.  If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+   `Work'
+    Any work being distributed under this License.
+
+   `Derived Work'
+    Any work that under any applicable law is derived from the Work.
+
+   `Modification'
+    Any procedure that produces a Derived Work under any applicable
+    law -- for example, the production of a file containing an
+    original file associated with the Work or a significant portion of
+    such a file, either verbatim or with modifications and/or
+    translated into another language.
+
+   `Modify'
+    To apply any procedure that produces a Derived Work under any
+    applicable law.
+
+   `Distribution'
+    Making copies of the Work available from one person to another, in
+    whole or in part.  Distribution includes (but is not limited to)
+    making any electronic components of the Work accessible by
+    file transfer protocols such as FTP or HTTP or by shared file
+    systems such as Sun's Network File System (NFS).
+
+   `Compiled Work'
+    A version of the Work that has been processed into a form where it
+    is directly usable on a computer system.  This processing may
+    include using installation facilities provided by the Work,
+    transformations of the Work, copying of components of the Work, or
+    other activities.  Note that modification of any installation
+    facilities provided by the Work constitutes modification of the Work.
+
+   `Current Maintainer'
+    A person or persons nominated as such within the Work.  If there is
+    no such explicit nomination then it is the `Copyright Holder' under
+    any applicable law.
+
+   `Base Interpreter'
+    A program or process that is normally needed for running or
+    interpreting a part or the whole of the Work.
+
+    A Base Interpreter may depend on external components but these
+    are not considered part of the Base Interpreter provided that each
+    external component clearly identifies itself whenever it is used
+    interactively.  Unless explicitly specified when applying the
+    license to the Work, the only applicable Base Interpreter is a
+    `LaTeX-Format' or in the case of files belonging to the
+    `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1.  Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope.  In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2.  You may distribute a complete, unmodified copy of the Work as you
+received it.  Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3.  You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4.  If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work.  You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work.  Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5.  If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6.  If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition.  Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+  a. If a component of this Derived Work can be a direct replacement
+     for a component of the Work when that component is used with the
+     Base Interpreter, then, wherever this component of the Work
+     identifies itself to the user when used interactively with that
+     Base Interpreter, the replacement component of this Derived Work
+     clearly and unambiguously identifies itself as a modified version
+     of this component to the user when used interactively with that
+     Base Interpreter.
+
+  b. Every component of the Derived Work contains prominent notices
+     detailing the nature of the changes to that component, or a
+     prominent reference to another file that is distributed as part
+     of the Derived Work and that contains a complete and accurate log
+     of the changes.
+
+  c. No information in the Derived Work implies that any persons,
+     including (but not limited to) the authors of the original version
+     of the Work, provide any support, including (but not limited to)
+     the reporting and handling of errors, to recipients of the
+     Derived Work unless those persons have stated explicitly that
+     they do provide such support for the Derived Work.
+
+  d. You distribute at least one of the following with the Derived Work:
+
+       1. A complete, unmodified copy of the Work;
+          if your distribution of a modified component is made by
+          offering access to copy the modified component from a
+          designated place, then offering equivalent access to copy
+          the Work from the same or some similar place meets this
+          condition, even though third parties are not compelled to
+          copy the Work along with the modified component;
+
+       2. Information that is sufficient to obtain a complete,
+          unmodified copy of the Work.
+
+7.  If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8.  The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9.  Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+       provided that license itself honors the conditions listed in
+       Clause 6 above, in regard to the Work, though it does not have
+       to honor the rest of the conditions in this license.
+
+    b. If a Derived Work is distributed under a different license, that
+       Derived Work must provide sufficient documentation as part of
+       itself to allow each recipient of that Derived Work to honor the
+       restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12.  Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work.  Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose.  The entire risk as to the quality and performance
+of the Work is with you.  Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1.  Make a reasonable attempt to trace the Current Maintainer (and
+     the Copyright Holder, if the two differ) through the means of
+     an Internet or similar search.
+
+ 2.  If this search is successful, then enquire whether the Work
+     is still maintained.
+
+  a. If it is being maintained, then ask the Current Maintainer
+     to update their communication data within one month.
+
+  b. If the search is unsuccessful or no action to resume active
+     maintenance is taken by the Current Maintainer, then announce
+     within the pertinent community your intention to take over
+     maintenance.  (If the Work is a LaTeX work, this could be
+     done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+     maintenance of the Work to you, then this takes effect
+     immediately upon announcement.
+
+  b. If the Current Maintainer is not reachable and the Copyright
+     Holder agrees that maintenance of the Work be passed to you,
+     then this takes effect immediately upon announcement.
+
+ 4.  If you make an `intention announcement' as described in 2b. above
+     and after three months your intention is challenged neither by
+     the Current Maintainer nor by the Copyright Holder nor by other
+     people, then you may arrange for the Work to be changed so as
+     to name you as the (new) Current Maintainer.
+
+ 5.  If the previously unreachable Current Maintainer becomes
+     reachable once more within three months of a change completed
+     under the terms of 3b) or 4), then that Current Maintainer must
+     become or remain the Current Maintainer upon request provided
+     they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer.  You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license.  These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license.  You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license.  It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate.  Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component.  While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community.  It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one.  Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified.  Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+  %% pig.dtx
+  %% Copyright 2005 M. Y. Name
+  %
+  % 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.3 or later is part of all distributions of LaTeX
+  % version 2005/12/01 or later.
+  %
+  % This work has the LPPL maintenance status `maintained'.
+  %
+  % The Current Maintainer of this work is M. Y. Name.
+  %
+  % This work consists of the files pig.dtx and pig.ins
+  % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+   The LPPL requires that distributions of the Work contain all the
+   files of the Work.  It is therefore important that you provide a
+   way for the licensee to determine which files constitute the Work.
+   This could, for example, be achieved by explicitly listing all the
+   files of the Work near the copyright notice of each file or by
+   using a line such as:
+
+    % This work consists of all files listed in manifest.txt.
+
+   in that place.  In the absence of an unequivocal list it might be
+   impossible for the licensee to determine what is considered by you
+   to comprise the Work and, in such a case, the licensee would be
+   entitled to make reasonable conjectures as to which files comprise
+   the Work.
+

Added: trunk/Master/texmf-dist/doc/latex/pagelayout/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/README.md	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,90 @@
+![The pagelayout LaTeX class](banner.svg)
+
+The pagelayout class enables you to layout pages declaratively using simple macros for pages, covers, grids, templates, text, and graphics to create graphic rich, perfectly typeset, and print ready PDFs.
+
+The integration of [Inkscape](https://inkscape.org) allows your to create box shadows. Text shadows and SVG filters are ideas for future releases.
+
+The integration of [ImageMagick](https://imagemagick.org) allows you to configure compression and sharpening for bitmap graphics to export web, print or preview versions of your document. Parallelized image optimization, caching, and a draft mode enable fast PDF creation and a responsive workflow, even for large documents with lots of photos and graphics.
+
+The pagelayout class also integrates the [TikZ](https://www.ctan.org/pkg/pgf) and [tcolorbox](https://www.ctan.org/pkg/tcolorbox) LaTeX packages.
+
+## Quick Start
+
+### Generic Templates
+
+Generic templates are the easiest way to put content on a page. The template name describes the layout. You can arrange [l]andscape, [p]ortrait, [s]quare, [w]ide, [g]olden ratio, g[o]lden upright ratio or [f]lexible placeholders in rows [-]. A valid template name for example is `sg-ff`. Notice you cannot combine flexible with fixed aspect ratio placeholders within a row.
+
+```latex
+\template{ss}{
+  \text{
+    This text fills the first placeholder.
+  }
+}
+```
+
+![Generic template](quickstart-1.svg)
+
+### Custom Templates
+
+You can use the grid to layout content on a page. The grid has rows with cells. You can set width relations between cells and height relations between rows. You can give cells a explicit aspect ratio by adding a `!`.
+
+```latex
+\newtemplate{my template}{
+  \setgrid{
+    {[2]{3!}{2!}}
+  }
+  \placeholder{0 0 1 1}
+}
+
+\template{my template}{}
+```
+
+![Custom template](quickstart-2.svg)
+
+You can set margin and gutter for a single grid, on document level, or on page level.
+
+### Graphics
+
+You can scale and position a graphic. And you can add borders and box shadows to graphics and text frames.
+
+```latex
+\newborder{my border}{width=2mm, color=white, radius=5mm}
+\newshadow{my shadow}{size=8}
+
+\template[margin=7mm]{s}{
+  \graphic[
+    scale=1.1,
+    hpos=0.2,
+    unsharp=3x1,
+    shadow=my shadow,
+    border=my border,
+    border radius=0mm
+  ]{kopi}
+}
+```
+
+![Photo with border and shadow](quickstart-3.svg)
+
+Have a look at the [examples](doc) to learn how to create double pages, covers, and more.
+
+For a complete reference, read the [manual](pagelayout-manual.pdf).
+
+## Installation
+
+In general, you should use the package manager shipped with your TeX distribution to install the pagelayout package.
+
+To install manually, copy the contents of [pagelayout.tds.zip](https://github.com/friedemannbartels/latex-pagelayout/releases/download/v1.0.3/pagelayout.tds.zip) to your local TeX directory tree and run the command `texhash`.
+
+To enable image optimization, shadow creation, and preflight, perform these installation steps:
+
+- Make sure that ImageMagick 7.0 or later and Inkscape 1.0 or later are installed.
+
+- Find your top level _texmf.cnf_ with the command `kpsewhich texmf.cnf`, and add `pagelayoutapi` to the list of `shell_escape_commands`.
+  ```
+  shell_escape_commands = pagelayoutapi
+  ```
+- When installing manually, add the directory _scripts/pagelayout_ to your `PATH`.
+
+## Development
+
+Run visual regression tests inside the _tests_ directory with the command `textestvis`.


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/banner.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/banner.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/banner.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/banner.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/banner.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/banner.svg
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/banner.svg	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/banner.svg	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+<svg width="830" height="199" viewBox="0 0 622.5 149.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="a"><path style="stroke:none" d="M.453-14.328h10.938v1.625H6.906V0H4.953v-12.703h-4.5zm0 0"/></symbol><symbol overflow="visible" id="b"><path style="stroke:none" d="M10.094-6.656V0H8.313v-6.656c0-.969-.172-1.676-.516-2.125-.336-.457-.867-.688-1.594-.688-.824 0-1.46.293-1.906.875-.438.586-.656 1.422-.656 2.516V0H1.875v-14.938h1.766v5.797c.312-.613.734-1.078 1.265-1.39.54-.32 1.18-.485 1.922-.485 1.094 0 1.91.368 2.453 1.094.54.719.813 1.809.813 3.266zm0 0"/></symbol><symbol overflow="visible" id="c"><path style="stroke:none" d="M10.75-6.25v.86H3.094v.046c-.055 1.469.226 2.528.844 3.172.613.637 1.476.953 2.593.953.563 0 1.149-.086 1.766-.265.613-.176 1.27-.446 1.969-.813v1.75c-.68.274-1.329.477-1.954.61A8.052 8.052 0 0 1 6.5.28c-1.668 0-2.969-.5-3.906-1.5-.938-1-1.406-2.379-1.406-4.14 0-1.72.457-3.086 1.375-4.11.914-1.031 2.144-1.547 3.687-1.547 1.363 0 2.441.47 3.234 1.407.79.93 1.211 2.046 1.266 3.359Zm-1.766-.531a3.385 3.385 0 0 0-.812-1.922c-.461-.54-1.125-.813-2-.813-.856 0-1.559.282-2.11.844-.542.563-.84 1.2-.89 1.906zm0 0"/></symbol><symbol overflow="visible" id="d"><path style="stroke:none" d="M3.594-1.36v5.454H1.828V-10.75h1.766v1.375c.3-.531.695-.938 1.187-1.219.489-.281 1.051-.422 1.688-.422 1.3 0 2.32.508 3.062 1.516.739 1 1.11 2.39 1.11 4.172 0 1.75-.375 3.125-1.125 4.125C8.773-.211 7.758.28 6.469.28c-.657 0-1.23-.14-1.719-.422a2.954 2.954 0 0 1-1.156-1.218Zm5.187-4c0-1.374-.219-2.41-.656-3.109-.43-.695-1.07-1.047-1.922-1.047-.855 0-1.508.356-1.953 1.063-.438.7-.656 1.73-.656 3.094 0 1.355.219 2.386.656 3.093.445.7 1.098 1.047 1.953 1.047.852 0 1.492-.347 1.922-1.047.438-.695.656-1.726.656-3.093zm0 0"/></symbol><symbol overflow="visible" id="e"><path style="stroke:none" d="M6.734-5.406h-.578c-1.031 0-1.808.183-2.328.547-.523.367-.781.902-.781 1.609 0 .648.191 1.152.578 1.516.395.355.938.53 1.625.53.969 0 1.727-!
 .331 2.281-1 .563-.675.848-1.612.86-2.812v-.39Zm3.422-.735V0H8.391v-1.594c-.375.637-.852 1.11-1.422 1.422-.574.3-1.274.453-2.094.453-1.094 0-1.969-.304-2.625-.922-.648-.625-.969-1.453-.969-2.484 0-1.195.399-2.102 1.203-2.719.801-.625 1.977-.937 3.532-.937H8.39v-.282c-.012-.851-.23-1.472-.657-1.859-.43-.394-1.109-.594-2.046-.594-.606 0-1.215.09-1.829.266a7.692 7.692 0 0 0-1.796.75v-1.766c.656-.25 1.28-.437 1.874-.562a8.614 8.614 0 0 1 1.75-.188c.883 0 1.641.137 2.266.407A3.682 3.682 0 0 1 9.5-9.438c.238.325.406.72.5 1.188.102.469.156 1.172.156 2.11zm0 0"/></symbol><symbol overflow="visible" id="f"><path style="stroke:none" d="M8.234-5.469c0-1.32-.218-2.328-.656-3.015-.43-.688-1.055-1.032-1.875-1.032-.867 0-1.527.344-1.984 1.032-.45.687-.672 1.695-.672 3.015 0 1.336.226 2.352.687 3.047.457.688 1.118 1.031 1.985 1.031.812 0 1.43-.347 1.86-1.046.437-.696.655-1.708.655-3.032zM10-.687c0 1.613-.383 2.832-1.14 3.656-.762.832-1.883 1.25-3.36 1.25-.492 0-1-.047-1.531-.14a10.301 10.301 0 0 1-1.594-.391V1.952c.633.29 1.207.504 1.719.64.508.145.976.22 1.406.22.945 0 1.64-.262 2.078-.782.438-.523.656-1.344.656-2.469v-1.265C7.954-1.11 7.566-.66 7.078-.36c-.48.293-1.07.437-1.766.437-1.261 0-2.265-.5-3.015-1.5-.742-1.008-1.11-2.36-1.11-4.047 0-1.687.368-3.031 1.11-4.031.75-1.008 1.754-1.516 3.015-1.516.688 0 1.27.141 1.75.422.477.274.868.7 1.172 1.281v-1.406H10Zm0 0"/></symbol><symbol overflow="visible" id="g"><path style="stroke:none" d="M6.906-3.89c0 .792.145 1.39.438 1.796.289.406.718.61 1.281.61h2.063V0H8.453C7.398 0 6.582-.336 6-1.016c-.574-.675-.86-1.632-.86-2.875v-9.718H2.298v-1.375h4.61Zm0 0"/></symbol><symbol overflow="visible" id="h"><path style="stroke:none" d="M8.234-3.453C7.941-2.703 7.566-1.72 7.11-.5c-.636 1.688-1.062 2.719-1.28 3.094-.294.5-.665.875-1.11 1.125-.438.25-.95.375-1.532.375H1.766V2.609h1.046c.52 0 .926-.152 1.22-.453.288-.304.663-1.078 1.124-2.328L1-10.75h1.875l3.188 8.406 3.125-8.406h1.874zm0 0"/></symbol><symbol overflow="visible" id="i"><path style="stroke:none" d="M5.906-9.516c-.898 0-1.574.352-2.!
 031 1.047-.46.7-.688 1.735-.688 3.11 0 1.355.227 2.386.688 3.093.457.7 1.133 1.047 2.031 1.047.907 0 1.586-.347 2.047-1.047.457-.707.688-1.738.688-3.093 0-1.375-.23-2.41-.688-3.11-.46-.695-1.14-1.047-2.047-1.047Zm0-1.5c1.5 0 2.64.485 3.422 1.454.79.968 1.188 2.37 1.188 4.203 0 1.836-.399 3.234-1.188 4.203C8.547-.196 7.406.28 5.906.28c-1.492 0-2.633-.476-3.422-1.437-.78-.969-1.171-2.367-1.171-4.203 0-1.832.39-3.235 1.171-4.204.79-.968 1.93-1.453 3.422-1.453zm0 0"/></symbol><symbol overflow="visible" id="j"><path style="stroke:none" d="M1.875-4.063v-6.671h1.766v6.671c0 .961.171 1.668.515 2.125.344.461.867.688 1.578.688.832 0 1.47-.29 1.907-.875.445-.594.671-1.438.671-2.531v-6.078h1.782V0H8.313v-1.61C8-.991 7.57-.522 7.03-.202 6.488.117 5.86.28 5.141.28c-1.106 0-1.93-.36-2.47-1.078-.53-.719-.796-1.805-.796-3.265Zm0 0"/></symbol><symbol overflow="visible" id="k"><path style="stroke:none" d="M5.89-13.797v3.047h4.016v1.375H5.891v5.828c0 .805.148 1.36.453 1.672.3.313.828.469 1.578.469h1.984V0H7.75C6.426 0 5.488-.266 4.937-.797c-.542-.531-.812-1.445-.812-2.75v-5.828H1.25v-1.375h2.875v-3.047zm0 0"/></symbol><symbol overflow="visible" id="l"><path style="stroke:none" d="M2.063-14.328h1.953v12.703h6.921V0H2.063zm0 0"/></symbol><symbol overflow="visible" id="n"><path style="stroke:none" d="M1.89-14.328h8.5v1.625H3.829v3.86h6.281v1.64H3.83v5.578h6.75V0H1.89zm0 0"/></symbol><symbol overflow="visible" id="o"><path style="stroke:none" d="M.828-14.328h2.078l3.156 5.406 3.204-5.406h2.078L7.047-7.594 11.657 0H9.561l-3.5-6.172L2.267 0H.172l4.797-7.594Zm0 0"/></symbol><symbol overflow="visible" id="p"><path style="stroke:none" d="M10.188-.547a6.16 6.16 0 0 1-1.47.61c-.5.144-1.015.218-1.546.218-1.656 0-2.953-.5-3.89-1.5-.938-1-1.407-2.379-1.407-4.14 0-1.77.469-3.157 1.406-4.157.938-1 2.235-1.5 3.89-1.5.52 0 1.024.07 1.516.204.5.136 1 .343 1.5.624v1.86c-.468-.414-.937-.719-1.406-.906-.469-.188-1.008-.282-1.61-.282-1.105 0-1.952.36-2.546 1.079-.594.718-.89 1.746-.89 3.078 0 1.324.296 2.343.89 3.062.602.719 1.453 1.078 2.547 1.078.613 0!
  1.164-.093 1.656-.281a4.082 4.082 0 0 0 1.36-.875zm0 0"/></symbol><symbol overflow="visible" id="q"><path style="stroke:none" d="M9.344-10.375v1.734a6.777 6.777 0 0 0-1.531-.671 5.717 5.717 0 0 0-1.563-.22c-.805 0-1.402.134-1.797.391-.387.262-.578.657-.578 1.188 0 .48.145.84.438 1.078.289.23 1.019.46 2.187.688l.719.125c.875.167 1.535.5 1.984 1 .457.5.688 1.152.688 1.953 0 1.062-.383 1.898-1.141 2.5C8-.016 6.953.28 5.61.28 5.077.281 4.52.223 3.936.11a16.123 16.123 0 0 1-1.89-.5v-1.828a9.414 9.414 0 0 0 1.89.766c.602.168 1.172.25 1.704.25.78 0 1.382-.156 1.812-.469.426-.32.64-.766.64-1.328 0-.82-.78-1.39-2.343-1.703l-.078-.016-.656-.14c-1.024-.196-1.766-.532-2.235-1-.469-.47-.703-1.11-.703-1.922 0-1.032.348-1.828 1.047-2.39.695-.563 1.691-.845 2.984-.845.582 0 1.141.059 1.672.172a8.64 8.64 0 0 1 1.563.469zm0 0"/></symbol><symbol overflow="visible" id="m"><path style="stroke:none" d="M4.14-8.828 2.704-3.703h2.86Zm-.827-1.203h1.656L8.03 0H6.625l-.734-2.61H2.375L1.656 0H.25Zm0 0"/></symbol></defs><path style="fill:#fff;stroke-width:1.45384" d="M4.12 0h614.253a4.111 4.111 0 0 1 4.12 4.122v140.324a4.111 4.111 0 0 1-4.12 4.12H4.12A4.111 4.111 0 0 1 0 144.444V4.12A4.111 4.111 0 0 1 4.12 0Z"/><path style="fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384" d="M0 148.569v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.117v-.204h622.492v.204zm0-4.124v-.203h622.492v.203zm0-4.121v-.205h622.492v.203zm0-4.117v-.205h622.492v.203zm0-4.123v-.205h622.492v.203zm0-4.124v-.205h622.492v.204zm0-4.117v-.205h622.492v.204zm0-4.123v-.203h622.492v.203zm0-4.123v-.204h622.492v.204zm0-4.117v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.118v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.117v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.118v-.203h622.492v.203zm0-4.123V57.7h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.117v-.203h622.492v.203zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.4!
 92v.204zm0-4.117v-.204h622.492v.204zm0-4.124v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.117v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.123v-.204h622.492v.204zM0 8.45v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zM0 .205V0h622.492v.204Z"/><path style="fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384" d="M0 148.563V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.121 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.118 0V0h.206v148.563Zm4.121 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.118 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.122 0V0h.208v148.563Zm4.119 0V0h.206v148.563Zm4.121 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.207v1!
 48.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.122 0V0h.208v148.563Zm4.118 0V0h.207v148.563Zm4.122 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.118 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.122 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.203l.003 148.563Z"/><path style="fill:#000;stroke-width:1.09038" d="M12.176.1v8.246h.58V.1Zm597.567 0v8.246h.58V.1ZM.103 12.174v.58h!
 8.24v-.58zm614.053 0v.58h8.24v-.58zM.103 135.812v.58h8.24v-.579H.103Zm614.053 0v.58h8.24v-.579h-8.24zm-601.98 4.408v8.245h.58v-8.245zm597.567 0v8.245h.58v-8.245z"/><path style="color:#000;fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384;stroke-miterlimit:10;-inkscape-stroke:none" d="M0 136.206v-.204h622.492v.204zm0-20.609v-.205h622.492v.204zm0-20.603v-.204h622.492v.204zM0 74.39v-.204h622.492v.204zm0-20.61v-.203h622.492v.203zm0-20.603v-.204h622.492v.204zm0-20.61v-.204h622.492v.204z"/><path style="color:#000;fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384;stroke-miterlimit:10;-inkscape-stroke:none" d="M12.363 148.563V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.61 0V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.61 0V0h.206v148.563Zm20.603 0V0h.207v148.563Zm20.604 0V0h.207v148.563Zm20.608 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.207v148.563Zm20.603 0V0h.207v148.563Zm20.61 0V0h.206v148.563Zm20.602 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.604 0V0h.206v148.563Zm20.61 0V0h.206v148.563Zm20.603 0V0h.207v148.563Zm20.609 0V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.206v148.563Zm20.603 0V0h.207v148.563Zm20.604 0V0h.207v148.563Zm20.608 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.208v148.563Zm20.603 0V0h.207v148.563Z"/><path style="fill:none;stroke:#ffbfbf;stroke-width:.56693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M-.001.002v56.691h382.683V.002Zm0 0" transform="matrix(1.45384 0 0 -1.45384 33.072 115.497)"/><use xlink:href="#a" x="22.085" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#b" x="33.385" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#c" x="44.665" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .!
 103 .102)"/><use xlink:href="#d" x="68.386" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#e" x="80.472" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#f" x="92.735" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#c" x="104.605" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#g" x="114.529" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#e" x="125.81" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#h" x="137.287" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#i" x="148.39" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#j" x="159.671" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#k" x="170.362" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#l" x="194.082" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#m" x="198.886" y="74.787" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#a" x="204.241" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#n" x="2!
 12.828" y="84.475" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#o" x="222.239" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#p" x="245.979" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#g" x="255.707" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#e" x="266.987" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#q" x="278.838" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#q" x="289.745" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/></svg>
\ No newline at end of file

Added: trunk/Master/texmf-dist/doc/latex/pagelayout/banner.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/banner.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/banner.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,58 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[graphpaper,draft]{pagelayout}
+\usepackage{microtype}
+\usepackage{fontspec}
+
+\setmainfont{Menlo}
+
+\pagewidth=14.5cm
+\pageheight=3cm
+\bleed=3mm
+\margin=5mm
+
+\begin{document}
+
+  \page{
+    \tikzgraphic{
+      \draw[line width=0.2mm,draw=pink] (0,0) rectangle (\width,\height);
+    }
+
+    \setgrid[y=\y-1.8mm]{{{}}}
+    \text[bottom]{
+      \fontsize{19.8pt}{24pt}\selectfont
+      T\kern-0.03em
+      h\kern-0.03em
+      e
+      p\kern0.01em
+      a\kern0.02em
+      g\kern0.00em
+      e\kern-0.1em
+      l\kern-0.03em
+      a\kern-0.02em
+      y\kern-0.04em
+      o\kern-0.03em
+      u\kern-0.06em
+      t\ 
+      \LaTeX\ 
+      c\kern-0.11em
+      l\kern-0.03em
+      a\kern-0.00em
+      s\kern-0.05em
+      s
+    }
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/banner.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,107 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[
+  draft,
+  twoside,
+  beginright,
+  % fanfold,
+  import,
+  optimize={quality=50, density=72}
+]{pagelayout}
+
+\usepackage{lipsum}
+\usepackage{tgheros}
+\usepackage[T1]{fontenc}
+\renewcommand*\familydefault{\sfdefault}
+
+\pagewidth=200mm
+\pageheight=200mm
+\margin=20mm
+\innermargin=40mm
+\gutter=10mm
+\bleed=3mm
+\safetymargin=5mm
+\spinewidth=7mm
+
+\safezone
+
+\newbeforepage{primary}{
+  \setgrid[height=\margin, y=0mm]{{{}}}
+
+  \leftpage{
+    \text[center]{\thepage}
+  }
+
+  \rightpage{
+    \text[center]{\hspace*{\fill}\thepage}
+  }
+}
+\setbeforepage{primary}
+
+\begin{document}
+  \Large
+  \pagenumbering{roman}
+
+  \template[back cover,margin=0mm, inner margin=0mm]{f}{}
+
+  \page[front cover,color=white,page graphic=kopi, inner margin=\margin]{
+    \text[bottom]{
+      \fontsize{42mm}{46mm}\selectfont
+      \centering
+      KØPI
+    }
+
+    \ifspine{
+      \setgrid[width=\spinewidth,x=-\spinewidth]{{{1}}}
+      \place{0 0 1 1}
+      \tikzgraphic{
+        \node[rotate=90] at (0.5\width,0.5\height){
+          \fontsize{4mm}{8mm}\selectfont
+          KØPI
+        };
+      }
+    }
+  }
+
+  \page{
+    \text{
+      \strut
+      \tableofcontents
+    }
+  }
+
+  \pagenumbering{arabic}
+
+  \setcounter{page}{0}
+  \page[before page=]{}
+
+  \page{
+    \text{
+      \strut
+      \section{Introduction}
+      \lipsum[1][1-7]
+    }
+  }
+
+  \newgraphic{kopi wide}{vpos=0.43, file=kopi}
+  \page[double, page graphic=kopi wide, before page=, color=white]{
+    \rightpage{
+      \text[bottom]{
+        \lipsum[1][8-10]
+      }
+    }
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-book.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,52 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[draft]{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=15cm
+\pageheight=15cm
+\gutter=10mm
+
+\newborder{my border}{width=2mm, color=magenta, radius=5mm}
+\newshadow{my shadow}{size=5, color=magenta, opacity=1}
+
+\begin{document}
+
+  \template{ff-ff}{
+    \graphic[
+      border=my border,
+      border radius=10mm
+    ]{1x1}
+
+    \graphic[
+      border=my border,
+      shadow=my shadow
+    ]{1x1}
+
+    \text[
+      shadow=my shadow,
+      shadow color=black,
+      shadow opacity=0.2
+    ]{\lipsum[1][1-5]}
+
+    \graphic[
+      shadow size=5,
+      shadow opacity=0.6,
+      shadow xshift=1mm,
+      shadow yshift=1mm
+    ]{1x1}
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-borders-and-shadows.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,35 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass{pagelayout}
+
+\pagewidth=20cm
+\pageheight=20cm
+\bleed=3mm
+
+\optimize[quality=50, density=72]
+\preflight
+\safezone
+
+\newgraphic{kopi scaled}{scale=1.02, hpos=0.2, vpos=1, file=kopi}
+
+\begin{document}
+
+  \page{
+    \graphic[hpos=0, scale=1.2]{3x2}
+  }
+
+  \page[page graphic=kopi scaled]{}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-graphic.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,150 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=20cm
+\pageheight=20cm
+\gutter=10mm
+
+\grid
+
+\begin{document}
+
+  \page{
+    \setgrid{
+      {{1}{1}}
+      {{1}{1}}
+    }
+
+    \text{
+      A grid with two rows and two cells in each row.
+    }
+  }
+
+  \page{
+    \setgrid{
+      {{3}{2}}
+      {{2}{3}}
+    }
+
+    \text{
+      A grid with a width relation between cells.
+    }
+  }
+
+  \page{
+    \setgrid{
+      {[3]{1}{1}}
+      {[1]{1}{1}}
+    }
+
+    \text{
+      A grid with a height relation between rows.
+    }
+  }
+
+  \page{
+    \setgrid{
+      {[2]{1}{3!}}
+      {[2]{1}{2!}}
+    }
+
+    \text{
+      A grid with a fixed aspect ratio of some cells.
+    }
+
+    \graphic{3x2}
+
+    \place{1 1 2 2}
+    \graphic{1x1}
+  }
+
+  \page{
+    \setgrid{
+      {[1]{1!}{1!}{1!}}
+      {[2]{4!}{3!}}
+    }
+
+    \text{
+      A grid with a fixed aspect ratio of all cells.
+    }
+
+    \place{0 0 1 1}
+    \graphic{1x1}
+
+    \graphic{1x1}
+
+    \graphic{1x1}
+
+    \graphic{2x1}
+
+    \graphic{3x2}
+  }
+
+  \page{
+    \setgrid{
+      {[2]{2!}{2!}{2!}}
+      {[2!]{4!}{3}}
+    }
+
+    \graphic{1x1}
+
+    \graphic{1x1}
+
+    \graphic{1x1}
+
+    \graphic{2x1}
+
+    \text{
+      A grid with a fixed height relation between rows.
+    }
+  }
+
+  \page[gutter=10mm]{
+    \setgrid[
+      width=0.5\width,
+      x=\margin
+    ]{
+      {{1}}
+    }
+    \text{
+      Multiple grids on one page.
+    }
+    \setgrid[
+      width=0.5\width-\gutter,
+      x=\margin+0.5\width+\gutter
+    ]{
+      {{1}}
+      {{1}}
+      {{1}}
+    }
+  }
+
+  \page{
+    \setgrid[width=\height]{
+      {{1}{1}}
+      {{1}{1}}
+    }
+    \text{
+      A grid with free positioned content. The gutter is preserved.
+    }
+    \place{0.5 0.5 1.5 1.5}
+    \graphic{1x1}
+    \place{1.5 1.5 2 2}
+    \graphic{1x1}
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-grid.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,46 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[draft]{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=15cm
+\pageheight=15cm
+\gutter=10mm
+
+\begin{document}
+
+  \template[gutter=5mm]{so-gs}{
+    \text{
+      This is a generic template.
+    }
+  }
+
+  \newtemplate{my template}{
+    \setgrid[height=\height-20mm]{
+      {[1]{1!}{1}}
+      {[1]{1!}{1}}
+    }
+    \placeholder{0 0 1 1}
+    \placeholder{1 0 2 1}
+    \placeholder{0 1 2 2}
+  }
+
+  \template[outer margin=10mm]{my template}{
+    \text{
+      This is a custom template.
+    }
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-template.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,53 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=15cm
+\pageheight=15cm
+\gutter=10mm
+
+\setgrid{
+  {{1}{1}}
+}
+
+\begin{document}
+
+  \page{
+    \text[breakable, name=lorem]{
+      \lipsum[2-3]
+      \par
+      \lipsum[4]
+    }
+    \usetext[lorem]
+  }
+
+  \page{
+    \usetext[lorem]
+    \tcbset{
+      boxrule=1mm,
+      boxsep=1mm,left=2mm,right=2mm,top=2mm,bottom=2mm,
+      colback=yellow,
+      colframe=red!75!black,
+      opacityframe=1,
+      opacityback=1,
+      arc=1mm
+    }
+    \text{
+      Text boxes use the package tcolorbox, so you can style these with the tcolorbox macro \texttt{tcbset}
+    }
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/example-text.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/kopi.jpg
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/kopi.jpg
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/kopi.jpg	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/kopi.jpg	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/kopi.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,41 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[
+  bleed=3mm,
+  margin=10mm,
+  gutter=5mm,
+  page width=20cm,
+  page height=20cm,
+  safety margin=2mm,
+  draft,
+  safezone,
+  grid,
+  graphpaper
+]{pagelayout}
+
+\begin{document}
+
+  \newtemplate{layoutguidesexample}{
+    \setgrid{
+      {{6}{1}}
+    }
+    \placeholder{0 1 1 2}
+    \placeholder{0 0 1 1}
+  }
+  \template{layoutguidesexample}{
+
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual-layout-guides.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,473 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[a4paper]{ltxdoc}
+\usepackage{microtype}
+\usepackage{hyperref}
+\usepackage{tikz}
+\OnlyDescription
+\hypersetup{pdfborder={0 0 0}}
+\def\pagelayoutversion{1.0.3}
+
+\begin{document}
+
+\title{
+  \Huge The \textsf{pagelayout} class\vskip3mm
+  \Large Manual for Version \pagelayoutversion\vskip3mm
+  \normalsize\url{https://github.com/friedemannbartels/latex-pagelayout}
+}
+
+\author{\href{mailto:mail at friedemannbartels.de}{Friedemann Bartels}}
+
+\maketitle
+
+\tableofcontents
+
+\newpage
+
+\section{Introduction}
+
+When Apple discontinued its photo book feature in Apple Photos, I was missing an easy-to-use photo book application.
+In 2020, I started to develop my own solution.
+What started with some SVG templates and shell scripts ended up in the pagelayout class, a declarative desktop publishing approach.
+\par
+With the pagelayout class you can create single- and double-sided documents, create pages with margins, safety margins, and bleed, use templates, align text and graphics in a grid, wrap text across multiple pages and use before pages.
+Generic templates, automatic grid layout and a simple and consistent user interface make it easier than ever to create graphics-rich documents with \LaTeX.
+Under the hood the TikZ and tcolorbox packages, ImageMagick and Inkscape are used.
+
+\section{Document}\label{sec:document}
+
+The document options described in the following can be either set as a document option (|\documentclass[twoside]{pagelayout}|) or with a macro (|\twoside|) in the preamble.
+
+\DescribeMacro {\documentclass}
+Use the class with the |\documentclass|\oarg{options}|{pagelayout}| macro.
+A single sided document is the default.
+\begin{figure}[h!]
+\begin{tikzpicture}
+  \draw[black, thin] (0,0) rectangle (1,1);
+  \draw[black, line width=1.5pt,line cap=round] (0,0) -- (0,1);
+  \draw[black, thin] (1.25,0) rectangle (2.25,1);
+  \draw[black, line width=1.5pt,line cap=round] (1.25,0) -- (1.25,1);
+  \draw[black, thin] (2.5,0) rectangle (3.5,1);
+  \draw[black, line width=1.5pt,line cap=round] (2.5,0) -- (2.5,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\twoside}
+Using the document option |twoside| results in a document with left and right pages.
+When you create a two-sided document, your document always has an even number of pages.
+If you create a document with an odd number of pages, an additional page is automatically inserted.
+Two-sided documents start with a right page by default.
+\begin{figure}[h!]
+\begin{tikzpicture}
+  \draw[black, thin] (0,0) rectangle (1,1);
+  \draw[black, line width=1.5pt,line cap=round] (0,0) -- (0,1);
+  \draw[black, thin] (1.25,0) rectangle (2.25,1);
+  \draw[black, line width=1.5pt,line cap=round] (2.25,0) -- (2.25,1);
+  \draw[black, thin] (2.35,0) rectangle (3.35,1);
+  \draw[black, line width=1.5pt,line cap=round] (2.35,0) -- (2.35,1);
+  \draw[black, thin] (3.6,0) rectangle (4.6,1);
+  \draw[black, line width=1.5pt,line cap=round] (4.6,0) -- (4.6,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\beginleft}
+Use the option |beginleft| to begin with a left page.
+\begin{figure}[h!]
+\begin{tikzpicture}
+  \draw[black, thin] (0,0) rectangle (1,1);
+  \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+  \draw[black, thin] (1.1,0) rectangle (2.1,1);
+  \draw[black, line width=1.5pt,line cap=round] (1.1,0) -- (1.1,1);
+  \draw[black, thin] (2.35,0) rectangle (3.35,1);
+  \draw[black, line width=1.5pt,line cap=round] (3.35,0) -- (3.35,1);
+  \draw[black, thin] (3.45,0) rectangle (4.45,1);
+  \draw[black, line width=1.5pt,line cap=round] (3.45,0) -- (3.45,1);
+\end{tikzpicture}
+\end{figure}
+
+By default, each page is placed on one paper.
+\DescribeMacro {\fanfold}
+With the |fanfold| option you can change this behavior so that a left and a right page are placed on one paper.
+In this case, the first page is a left one by default.
+\begin{figure}[h!]
+\begin{tikzpicture}
+  \draw[black, thin] (0,0) rectangle (1,1);
+  \draw[black, thin] (1,0) rectangle (2,1);
+  \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+  \draw[black, thin] (2.25,0) rectangle (3.25,1);
+  \draw[black, thin] (3.25,0) rectangle (4.25,1);
+  \draw[black, line width=1.5pt,line cap=round] (3.25,0) -- (3.25,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\cover}
+The |cover| option is similar to the |fanfold| option, but only applied to cover pages.
+Read more about cover pages in section~\ref{sec:pages}.
+\begin{figure}[h!]
+\begin{tikzpicture}
+  \draw[black, thin] (0,0) rectangle (2.3,1);
+  \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+(3.25,1);
+  \draw[black, line width=1.5pt,line cap=round] (1.3,0) -- (1.3,1);
+(3.25,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\beginright}
+If you want your fanfold document to start with a right hand page, you can use the option |beginright|.
+\begin{figure}[h!]
+\begin{tikzpicture}
+  \draw[black, thin] (0,0) rectangle (1,1);
+  \draw[black, thin] (0,0) -- (1,1);
+  \draw[black, thin] (0,1) -- (1,0);
+  \draw[black, thin] (1,0) rectangle (2,1);
+  \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+  \draw[black, thin] (2.25,0) rectangle (3.25,1);
+  \draw[black, thin] (3.25,0) rectangle (4.25,1);
+  \draw[black, line width=1.5pt,line cap=round] (3.25,0) -- (3.25,1);
+  \draw[black, thin] (4.5,0) rectangle (5.5,1);
+  \draw[black, thin] (5.5,0) rectangle (6.5,1);
+  \draw[black, thin] (5.5,0) -- (6.5,1);
+  \draw[black, thin] (5.5,1) -- (6.5,0);
+  \draw[black, line width=1.5pt,line cap=round] (5.5,0) -- (5.5,1);
+\end{tikzpicture}
+\end{figure}
+
+\subsection{Lengths}\label{subsec:size}
+
+The document lengths described below can be set either as a document option (|\documentclass[page width=21cm]{pagelayout}|) or by assigning the dimension directly (|\pagewidth=21cm|) in the preamble or in the document.
+
+\DescribeMacro {\pagewidth}
+\DescribeMacro {\pageheight}
+You can set the lengths |page width| and |page height|.
+The default page size is |210mm| by |297mm|.
+
+\DescribeMacro {\bleed}
+You can set the |bleed| length.
+It applies to all paper edges.
+The default bleed is |0mm|.
+You can override the bleed for each edge separately by defining the lengths |top bleed|, |inner bleed|, |bottom bleed|, |outer bleed|.
+The paper size results from the page size and the bleed.
+
+\DescribeMacro {\safetymargin}
+The |safety margin| is the only length that has no influence on the final result.
+Its only purpose is to control the safe zone during editing.
+It is |0mm| by default and can be configured for each edge by defining |top safety margin|, |inner safety margin|, |bottom safety margin| and |outer safety margin|.
+
+\DescribeMacro {\margin}
+\DescribeMacro {\gutter}
+You can set the lengths |margin| and |gutter| for the document, for a page (see section~\ref{sec:pages}) or for a grid (see section~\ref{sec:grid}).
+The default margin is |20mm|, the default gutter is |0mm|.
+Similar to bleed and safety margin, the margin can be defined for each edge individually by setting |top margin|, |outer margin|, |bottom margin| and |inner margin|.
+
+You can create documents with cover pages.
+\DescribeMacro {\coverwidth}
+\DescribeMacro {\coverheight}
+Read more about creating cover pages in section~\ref{sec:pages}.
+You can set the lengths |coverwidth| and |coverheight|.
+By default, the cover pages are the same size as the inside pages.
+If you want to create a cover with a spine, use the |fanfold| or |cover| option described in section~\ref{sec:document}.
+In this case the length |spinewidth| takes effect.
+The default spine width is |3mm|.
+\par
+You can overwrite the bleed and the safety margin for cover pages.
+To do this, prefix the respective lengths described above.
+For example, define |cover inner bleed| or |cover safety margin|.
+
+\subsection{Page Graphics and Colors}\label{subsec:colors}
+
+You can define a page graphic and a page color with the options |page graphic| and |page color|.
+Set the option |color| to define the text color.
+These options can be defined for the document or for each page (see section~\ref{sec:pages}).
+\par
+Read how to set the scale and crop of a page graphic with the |\newgraphic| macro in section~\ref{sec:content}.
+
+\subsection{Layout Guides}
+
+The layout guides described in the following can be either set as a document option (|\documentclass[grid]{pagelayout}|) or using a macro (|\grid|) in the preamble or the document.
+Layout guides can be switched on (|\safezone|) or off (|\nosafezone|).
+
+\DescribeMacro {\grid}
+The |grid| option visualizes the margin and the grid gutters with green lines.
+Read more about the grid in section~\ref{sec:grid}.
+\DescribeMacro {\safezone}
+The |safezone| layout guide shows a red border for the bleed and a thin pink line to indicate the safety margin.
+\DescribeMacro {\cuttingmarks}
+As an alternative to |safezone|, you can also use |cutting marks| to display cutting marks.
+\DescribeMacro {\graphpaper}
+Show a graph paper with the |graph paper| option.
+
+\begin{figure}[h]
+\begin{tikzpicture}
+  \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[trim={15cm 16.5cm 0cm 0},clip,scale=1,page=1]{pagelayout-manual-layout-guides.pdf}};
+  \node[anchor=south west,text depth=0mm,text width=4cm] (bleed) at (65mm,33mm) {Bleed};
+  \draw (bleed) -- ++(-32mm,0);
+  \node[anchor=south west,text depth=0mm,text width=4cm] (bleed) at (65mm,27mm) {Safety margin};
+  \draw (bleed) -- ++(-35mm,0.0);
+  \node[anchor=south west,text depth=0mm,text width=4cm] (margin) at (65mm,21mm) {Margin};
+  \draw (margin) -- ++(-43mm,0.0);
+  \node[anchor=south west,text depth=0mm,text width=4cm] (gutter) at (65mm,15mm) {Gutter};
+  \draw (gutter) -- ++(-70mm,0.0);
+  \node[anchor=south west,text depth=0mm,text width=4cm] (placeholder) at (65mm,9mm) {Placeholder};
+  \draw (placeholder) -- ++(-50mm,0.0);
+  \node[anchor=south west,text depth=0mm,text width=4cm] (graphpaper) at (65mm,3mm) {Graph paper};
+  \draw (graphpaper) -- ++(-40mm,0.0);
+\end{tikzpicture}%
+\end{figure}
+
+\DescribeMacro {\placeholders}
+The |placeholders| option shows template placeholders.
+Read more about templates in section~\ref{sec:templates}.
+\DescribeMacro {\fillpages}
+If you create a document with a cover and a first right hand page, use the |fill pages| option during editing to add blank pages to get a better impression of the final result.
+
+\subsection{Draft Mode}\label{subsec:draftmode}
+
+The |draft| option is a shortcut to enable the options |placeholders|, |cutting marks| and |fill pages|.
+It also speeds up rebuilding the PDF when changing the document.
+
+\section{Pages}\label{sec:pages}
+
+\DescribeMacro {\page}
+Create a page with the macro |\page|\oarg{options}\marg{content}.
+You can overwrite the document options |margin|, |top margin|, |bottom margin|, |inner margin|, |outer margin|, |gutter|, |page color|, |page graphic| and |color| for each page.
+
+Use the option |double| to create a double page.
+When creating a double page after a left page, a right page is automatically inserted before the double page.
+The option |double| is only recognized for double sided documents.
+\par
+Use the options |front cover| or |back cover| to create a front or back cover.
+If you have a back cover and a front cover, the back cover page must be defined first.
+If no option is active, the front cover is placed as the first page and the back cover as the last page of the document.
+In this case, the only difference from normal pages is that the cover pages are not counted in the page numbering.
+\par
+If the option |fanfold| or |cover| is selected, the back and front covers are laid out on one paper so that the cover is suitable for a book with a hard or soft cover (see section~\ref{sec:document}).
+Space is reserved between the back and front covers for the spine.
+Set the |spine width| document option as described in section~\ref{subsec:size}.
+\par
+With the options |hpos| and |vpos| you can set the default grid alignment for a page.
+Read more about the grid in the next section.
+
+\DescribeMacro {\setpagecolor}Alternativly to the option you can use the macro |\setpagecolor|\marg{color} to set the page color for all following pages.
+
+\DescribeMacro {\setpagegraphic}With the macro |\setpagegraphic|\oarg{options}\marg{name} you can define a page graphic for all following pages.
+The name references a graphic version created with the |\newgraphic| macro (see section~\ref{sec:content}).
+If no graphic version with the given name exists, the macro uses the name as the file name.
+You can change the clipping by defining relative decimal values for the options |scale| (>1), |hpos| and |vpos| (0-1).
+
+\DescribeMacro {\newbeforepage}With the macro |\newbeforepage|\marg{name}\marg{content} you can create a reusable page layer, that can be set before pages.
+\DescribeMacro {\setbeforepage}
+Use the macro |\setbeforepage|\marg{name} to define a before page for all following pages or use the page option |before page| to specify a before page for a individual page.
+
+\DescribeMacro {\ifleftpage}
+\DescribeMacro {\ifrightpage}
+Use the condition |\ifleftpage|\marg{content} and |\ifrightpage|\marg{content} to check for the current page alignment.
+
+\DescribeMacro {\leftpage}
+Within a page scope you can use the |\leftpage|\marg{content} macro to place content only on a left page.
+In comparison to the |\ifleftpage|\marg{content} condition, the macro sets a grid for a single page.
+That way you can combine single with double page layouts.
+\DescribeMacro {\rightpage}
+Accordingly you can use the |\rightpage|\marg{content} macro.
+
+\section{Grid}\label{sec:grid}
+
+The grid allows you to create rows with cells.
+You can define width and height relations between rows and cells.
+All definitions are relative.
+The size and position results from these relations and the configured dimensions page width, page height, margin and gutter.
+
+\DescribeMacro{\setgrid}
+Create a grid with the macro |\setgrid|\oarg{options}\marg{config}.
+The grid configuration is a nested list of rows and cells.
+A cell is defined by a number that describes the width ratio to the other cells in the row.
+The default grid describes a row with one cell:
+
+\begin{verbatim}
+  \setgrid{
+    {{}}}
+\end{verbatim}
+
+You can define a width relation between cells by adding a integer value for each cell:
+
+\begin{verbatim}
+  \setgrid{
+    {{1}{2}}}
+\end{verbatim}
+
+With an optional integer value for each row you can set a height relation between rows:
+
+\begin{verbatim}
+  \setgrid{
+    {[2]{1}{2}}
+    {[1]{1}{2}}}
+\end{verbatim}
+
+You can set an aspect ratio for a cell by adding a |!| to the width.
+This way the aspect ratio is defined by the width of the cell and the height of the row.
+If all cells in a row have a fixed aspect ratio, the aspect ratio of the row is fixed too.
+In the following, a row with only fixed cells is named a fixed row.
+Because the height of a fixed row is determined by the aspect ratios of the cells, the height relation to the flexible rows is broken.
+In this case, you can force a height relation between flexible and fixed rows by adding a |!| to the height of the flexible row.
+In the following, a row with a forced height is named a forced row.
+
+The example defines a first fixed row with one cell and an aspect ratio of 3:2.
+The height of the second row is forced half of the height of the first row.
+The cells in the second row share the available width in the ratio one to two:
+
+\begin{verbatim}
+  \setgrid{
+    {[2]{3!}}
+    {[1!]{1}{2}}}
+\end{verbatim}
+
+If the height of fixed and forced rows exceeds the available height, the grid shrinks to fit the available space.
+The defined aspect ratios of the cells are preserved and the grid is centered horizontally.
+In this case you can define the |hpos| option to align the grid horizontally.
+A value of |0| aligns the grid to the left, a value of |1| aligns the grid to the right.
+The default is a value of |0.5|.
+
+If the height of fixed and forced rows is less than the available height, all flexible rows share the excess height.
+If there are no flexible rows, the grid is centered vertically.
+In this case you can define the |vpos| option to align the grid vertically.
+A value of |0| aligns the grid to the top, a value of |1| aligns the grid to the bottom.
+The default is a value of |0.5|.
+
+As for a document or a page you can set |margin| and |gutter| options for a specific grid.
+With the options |width|, |height|, |x| and |y| you can override the intrinsic grid size and position.
+When overriding the grid size and position, you can calculate with the intrinsic values, for example |x=\x-1cm|.
+
+\subsection{Placing Content}
+
+The grid aligns content (see section~\ref{sec:content}) automatically in the given grid cells.
+To set the position of a content box manually use the macro |\place|\marg{fromrow fromcell torow tocell}.
+\DescribeMacro{\place}
+To place content in the first row and first cell use the macro |\place{0 0 1 1}| before the content.
+The definded place applies only for the following content box.
+The next boxes are then again placed with auto layout.
+\par
+The macro accepts decimals.
+That allows you to place content everywhere within the grid.
+The |gutter| is taken into account when calculating the positions.
+
+\section{Content}\label{sec:content}
+
+\subsection{Text}
+
+\DescribeMacro{\text}
+With the macro |\text|\oarg{options}\marg{text} you can place text.
+Align the text vertically with the |center| and |bottom| options.
+\par
+The |\text| macro uses the package tcolorbox and accepts tcolorbox options, for example to set text, frame or background color and transparency.
+The tcolorbox behaves slightly diffenrent then the standalone version: spacings, rules and background are removed by default.
+You can change the behaviour with the tcolorbox macro |\tcbset|\marg{options}.
+Also the |arc| options behaves different: if you set the |arc| to |0pt| the |outer arc| is also set to |0pt|.
+\par
+Add the option |breakable| to break text over multiple boxes and pages.
+\DescribeMacro{\usetext}
+Use the macro |\usetext|\oarg{name} to place the following text boxes in the grid.
+If you want to use multiple breakable text boxes you can initialize the text with the |name| option and define a name that you then can pass to the |\usetext| option.
+\par
+The |\text| macro accepts the options |shadow|, |shadow size|, |shadow color|, |shadow opacity|, |shadow xshift|, |shadow yshift|, |border|, |border width|,\break |border color| and |border radius|.
+Read more about shadows and borders in section~\ref{subsec:borders}.
+
+\subsection{Graphics}
+
+\DescribeMacro{\newgraphic}
+Create a reusable graphic version with the |\newgraphic|\marg{name}\marg{options} macro.
+Define the options |scale| (>1), |hpos| and |vpos| (0-1) to set the clipping of the graphic.
+With the option |file| you can link a file.
+If no file is defined, the name is used as the file name.
+
+\DescribeMacro{\graphic}
+The |\graphic|\oarg{options}\marg{name} macro places a graphic.
+The name references a graphic version created with the |\newgraphic| macro.
+If no graphic version with the given name exists, the macro uses the name as the file name.
+
+The graphic is scaled to fit in the content box.
+If the aspect ratio of the graphic differs from that of the defined content box, the graphic is cropped.
+You can change the cropping by defining relative decimal values for the options |scale| (>1), |hpos| and |vpos| (0-1).
+Same as the |\text| macro, the |\graphic| macro accepts the |border| and |shadow| options described in section~\ref{subsec:borders}.
+
+\DescribeMacro{\graphicspath}
+You can use the macro |\graphicspath|\marg{dir-list} of the graphics package to specify a list of directories in which to search for graphic files.
+
+\subsection{Other}
+
+\DescribeMacro{\xput}
+The macro |\xput|\marg{code} is an easy way to place arbitrary content in the grid.
+Within the code block the dimensions |\width| and |\height| represent the size of the content area and can be used to create graphics, that fit and adapt to the available size.
+\par
+\DescribeMacro{\tikzgraphic}
+The macro |\tikzgraphic|\marg{tikz code} works like the |\xput| macro, but wraps your input in a |tikzpicture|.
+
+\subsection{Shadows and Borders}\label{subsec:borders}
+
+Text and graphic content can be placed with a border or a shadow.
+You can define a border or shadow for a specific content box by using the options |border width|, |border color|, |border radius| to add a border or |shadow size|, |shadow color|, |shadow opacity|, |shadow xshift|, |shadow yshift| to add a shadow.
+\par
+\DescribeMacro{\newborder}
+\DescribeMacro{\newshadow}
+Define a reusable border or shadow with the |\newborder|\marg{name}\marg{options} or |\newshadow|\marg{name}\marg{options} macros.
+Apply the border or shadow to |\text| or |\graphic| with the option |border| or |shadow|.
+\par
+\DescribeMacro{\setborder}
+\DescribeMacro{\setshadow}
+To set a border or shadow within a page or document scope, use the macros |\setborder|\oarg{options}\marg{name} or |\setshadow|\oarg{options}\marg{name}.
+
+\section{Templates}\label{sec:templates}
+
+\DescribeMacro{\newtemplate}
+With the macro |\newtemplate|\marg{name}\marg{layout} you can create a reusable layout.
+Creating a template works the same way as creating a page.
+In addition to graphics and text you can define placeholders.
+\DescribeMacro{\placeholder}
+Use the macro |\placeholder|\marg{fromrow fromcell torow tocell} to define a content area that can later be filled with a text or a graphic.
+
+\DescribeMacro{\template}
+To use a template use the macro |\template|\oarg{options}\marg{name}\marg{content}.
+The available options are the same as for pages.
+
+The macro |\template| comes with an easy way to generate templates by using a name pattern.
+For example the template name \textit{sp} creates a template with a square and a portrait format placeholder.
+In this case the letter |s| specifies a square (1:1) and the letter |p| a portrait (2:3) format placeholder.
+Use the letter |l| to define a landscape ratio (3:2), |g| for golden ratio (5:3), |o| for golden upright ratio (3:5), |w| for wide ratio (2:1) or |f| for a flexible ratio.
+With the character |-| you can start a new row.
+Within a row you can mix the fixed placeholders (|s|, |p|, |l|, |g|, |o|, |w|) or use only flexible placeholders~(|f|).
+
+\section{Image Optimization}\label{sec:optimization}
+
+\DescribeMacro{\optimize}
+With the macro |\optimize|\oarg{options} you can enable image optimization.
+When enabled, JPG and PNG images are croped, resized and cached.
+This results in fast rebuilds when changing the document.
+You can set the options |density|, |quality|, |unsharp| and |downsample threshold|.
+The |density| option takes a number of the pixels per inch (default |300|), the |quality| option takes numbers between 1 and 100, the |unsharp| option an ImageMagick unsharp configuration (default |2x1|) and the |downsample threshold| a decimal value greater or equal 1 (default |1.2|).
+The |unsharp| option can also be applied for individual graphics.
+\par
+If you use image optimization and change the original graphics files, you must delete the cached versions so that the cache will update.
+\DescribeMacro{\import}
+The |\import| macro helps you to streamline this process.
+When enabled, you need an import directory in which to place the modified files.
+When the document is created, the files are moved to your image directory and the corresponding cached versions are automatically regenerated.
+The import directory is either the directory \emph{import} in your working directory.
+Or you can set a system wide import directory by defining the shell variable |PAGELAYOUT_IMPORT_DIRECTORY|.
+\par
+\DescribeMacro{\preflight}
+Use the |\preflight| macro to proof the image resolution.
+If images have a final resolution less then 300 ppi you get a warning, if less then 200 ppi you get an error.
+With preflight enabled the maximum possible resolution is shown next to each graphic.
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/pagelayout-manual.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-1.svg
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-1.svg	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-1.svg	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+<svg width="320" height="239" viewBox="0 0 240 179.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="a"><path style="stroke:none" d="M.14-4.563h3.485v.532H2.187V0h-.609v-4.031H.141zm0 0"/></symbol><symbol overflow="visible" id="b"><path style="stroke:none" d="M3.203-2.125V0h-.562v-2.125c0-.3-.059-.523-.172-.672-.106-.144-.274-.219-.5-.219-.262 0-.465.094-.61.282-.136.187-.203.453-.203.796V0H.594v-4.75h.562v1.844a1.03 1.03 0 0 1 .407-.438c.164-.101.367-.156.609-.156.344 0 .598.117.765.344.176.23.266.574.266 1.031zm0 0"/></symbol><symbol overflow="visible" id="c"><path style="stroke:none" d="M.969-3.406h1.437v2.969h1.11V0H.719v-.438h1.125v-2.53H.969zm.875-1.328h.562v.703h-.562zm0 0"/></symbol><symbol overflow="visible" id="d"><path style="stroke:none" d="M2.969-3.297v.547a1.853 1.853 0 0 0-.485-.203 1.731 1.731 0 0 0-.5-.078c-.25 0-.437.043-.562.125a.427.427 0 0 0-.188.375c0 .156.047.273.141.344.094.074.32.148.688.218l.234.047c.281.055.488.156.625.313.144.156.219.367.219.625 0 .336-.121.601-.36.796-.242.188-.574.282-1 .282-.168 0-.343-.024-.531-.063a3.437 3.437 0 0 1-.594-.156v-.578c.207.105.406.187.594.25.188.055.367.078.547.078.25 0 .441-.05.578-.156a.505.505 0 0 0 .203-.422c0-.258-.25-.442-.75-.547h-.031l-.203-.047c-.324-.062-.563-.164-.719-.312-.148-.157-.219-.36-.219-.61 0-.332.11-.586.328-.765.227-.176.547-.266.954-.266.187 0 .363.016.53.047.165.031.333.086.5.156zm0 0"/></symbol><symbol overflow="visible" id="e"><path style="stroke:none" d="M1.875-4.39v.968h1.281v.438H1.875v1.859c0 .25.047.43.14.531.094.094.258.14.5.14h.641V0H2.47c-.43 0-.73-.082-.906-.25-.168-.164-.25-.457-.25-.875v-1.86H.405v-.437h.906v-.969zm0 0"/></symbol><symbol overflow="visible" id="f"><path style="stroke:none" d="M3.422-1.984v.265H.984v.016c-.011.469.079.808.266 1.016.195.199.473.296.828.296.176 0 .363-.023.563-.078.195-.062.406-.148.625-.265v.562a3.72 3.72 0 0 1-.625.188c-.2.05-.391.078-.579.078-.53 0-.949-.157-1.25-.469C.52-.695.376-1.141.37!
 6-1.703c0-.55.145-.988.438-1.313.289-.32.68-.484 1.171-.484.438 0 .782.152 1.032.453.25.293.382.649.406 1.063zm-.563-.172a1.14 1.14 0 0 0-.265-.61c-.149-.175-.356-.265-.625-.265a.879.879 0 0 0-.672.281.943.943 0 0 0-.297.594Zm0 0"/></symbol><symbol overflow="visible" id="g"><path style="stroke:none" d="m3.406-3.422-1.219 1.64L3.532 0h-.656l-1-1.375L.875 0h-.64l1.343-1.781-1.234-1.64h.625l.906 1.233.906-1.234Zm0 0"/></symbol><symbol overflow="visible" id="h"><path style="stroke:none" d="M3.25-4.75v.469h-.64c-.212 0-.356.043-.438.125-.074.086-.11.23-.11.437v.297H3.25v.438H2.062V0H1.5v-2.984H.594v-.438H1.5v-.234c0-.375.082-.649.25-.828.176-.176.445-.266.813-.266Zm0 0"/></symbol><symbol overflow="visible" id="i"><path style="stroke:none" d="M2.188-1.234c0 .25.046.445.14.578.094.125.235.187.422.187h.656V0h-.719c-.335 0-.593-.102-.78-.313-.188-.218-.282-.523-.282-.921v-3.094h-.89v-.438h1.453Zm0 0"/></symbol><symbol overflow="visible" id="j"><path style="stroke:none" d="M3.531-2.719a1.364 1.364 0 0 0-.375-.203 1.361 1.361 0 0 0-.406-.062c-.355 0-.625.109-.813.328-.18.219-.265.539-.265.953V0h-.563v-3.422h.563v.672c.094-.238.234-.422.422-.547a1.22 1.22 0 0 1 .703-.203c.133 0 .258.023.375.063.125.03.242.085.36.156zm0 0"/></symbol><symbol overflow="visible" id="k"><path style="stroke:none" d="M1.14-.438v1.735H.579v-4.719h.563v.438a.961.961 0 0 1 .375-.375c.156-.094.336-.141.546-.141.407 0 .723.164.954.484.238.313.359.758.359 1.329 0 .554-.121.992-.36 1.312-.23.313-.546.469-.953.469-.21 0-.39-.043-.546-.125a.996.996 0 0 1-.375-.406zm1.657-1.265c0-.438-.074-.766-.219-.984a.67.67 0 0 0-.61-.344.7.7 0 0 0-.624.344c-.137.218-.203.546-.203.984 0 .43.066.758.203.984a.702.702 0 0 0 .625.328c.27 0 .472-.109.61-.328.144-.219.218-.547.218-.984zm0 0"/></symbol><symbol overflow="visible" id="l"><path style="stroke:none" d="M2.14-1.719h-.187c-.324 0-.57.059-.734.172-.168.117-.25.29-.25.516 0 .21.062.37.187.484.125.117.297.172.516.172.312 0 .555-.11.734-.328.176-.219.266-.516.266-.89v-.126zm1.094-.234V0h-.562v-.5c-.125.2-.281.352-.469.45!
 3a1.4 1.4 0 0 1-.656.14c-.344 0-.621-.097-.828-.296C.508-.398.406-.664.406-1c0-.375.125-.66.375-.86.258-.195.633-.296 1.125-.296h.766v-.094c0-.27-.074-.469-.219-.594-.137-.125-.351-.187-.64-.187-.2 0-.399.031-.594.094a2.867 2.867 0 0 0-.563.234v-.563a6.11 6.11 0 0 1 .594-.171c.188-.04.375-.063.563-.063.28 0 .519.043.718.125.196.086.36.21.485.375a.92.92 0 0 1 .171.375c.032.148.047.371.047.672zm0 0"/></symbol><symbol overflow="visible" id="m"><path style="stroke:none" d="M3.234-.172a1.732 1.732 0 0 1-.468.188c-.157.05-.32.078-.485.078-.531 0-.949-.157-1.25-.469-.293-.32-.437-.766-.437-1.328 0-.563.144-1 .437-1.313.301-.32.719-.484 1.25-.484.164 0 .328.023.485.063.156.042.312.109.468.203v.578a1.665 1.665 0 0 0-.453-.281 1.268 1.268 0 0 0-.5-.094c-.355 0-.625.117-.812.344-.188.23-.282.558-.282.984 0 .418.094.742.282.969.195.23.468.343.812.343.196 0 .375-.023.531-.078.157-.062.297-.156.422-.281Zm0 0"/></symbol><symbol overflow="visible" id="n"><path style="stroke:none" d="M.313-2.203h3.234v.515H.312Zm0 0"/></symbol><symbol overflow="visible" id="o"><path style="stroke:none" d="M1.875-3.031a.716.716 0 0 0-.64.344c-.15.218-.22.546-.22.984 0 .43.07.758.22.984.144.219.359.328.64.328.29 0 .508-.109.656-.328.145-.226.219-.554.219-.984 0-.438-.074-.766-.219-.984a.738.738 0 0 0-.656-.344Zm0-.469c.477 0 .844.156 1.094.469.25.304.375.746.375 1.328 0 .586-.125 1.031-.375 1.344-.25.304-.617.453-1.094.453-.469 0-.828-.149-1.078-.453-.25-.313-.375-.758-.375-1.344 0-.582.125-1.024.375-1.328.25-.313.61-.469 1.078-.469Zm0 0"/></symbol><symbol overflow="visible" id="p"><path style="stroke:none" d="M2.625-2.984V-4.75h.563V0h-.563v-.438a.996.996 0 0 1-.375.407c-.156.082-.34.125-.547.125-.406 0-.73-.16-.969-.485C.492-.71.375-1.156.375-1.719c0-.55.117-.984.36-1.297a1.15 1.15 0 0 1 .968-.484 1.046 1.046 0 0 1 .922.516zM.969-1.704c0 .438.066.766.203.985.133.219.336.328.61.328a.71.71 0 0 0 .624-.328c.145-.226.219-.554.219-.984 0-.438-.074-.766-.219-.984a.708.708 0 0 0-.625-.344.662.662 0 0 0-.61.344c-.136.218-.202.546-.202.984zm0 0"/></symbo!
 l><symbol overflow="visible" id="q"><path style="stroke:none" d="M1.188-1.234h1.078V0H1.187Zm0 0"/></symbol><symbol overflow="visible" id="r"><path style="stroke:none" d="M5.984-3.578h8.672V0H1.578v-3.469l2.219-2.344C6.41-8.601 8-10.316 8.562-10.953c.688-.79 1.18-1.492 1.485-2.11.3-.613.453-1.218.453-1.812 0-.914-.277-1.625-.828-2.125-.555-.5-1.34-.75-2.36-.75-.73 0-1.546.148-2.453.438-.906.28-1.851.699-2.828 1.25v-3.797a20.224 20.224 0 0 1 2.875-.813 13.977 13.977 0 0 1 2.719-.281c2.176 0 3.883.512 5.125 1.531 1.25 1.012 1.875 2.39 1.875 4.14A6.37 6.37 0 0 1 14.219-13c-.274.71-.735 1.496-1.39 2.36-.493.624-1.829 2.03-4.017 4.218a517.956 517.956 0 0 0-2.828 2.844zm0 0"/></symbol></defs><path style="fill:#fff;stroke-width:1.43381" d="M4.065.004h231.869a4.056 4.056 0 0 1 4.065 4.065v170.906a4.056 4.056 0 0 1-4.065 4.064H4.064A4.056 4.056 0 0 1 0 174.975V4.07A4.056 4.056 0 0 1 4.065.004Z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.037v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.066v-.204h239.999v.204zm0-4.068v-.2h239.999v.2zm0-4.058v-.205h239.999v.204zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.061v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06V126h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.06v-.201h239.999v.2zm0-4.067v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.058v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.066v-.201h239.999v.2zm0-4.058v-.204h239.999v.204zm0-4.07v-.2h239.999v.2zm0-4.063v-.2h239.999v.2zm0-4.06v-.204h239.999v.204ZM0 69.3v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.203zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06!
 6v-.205h239.999v.205zm0-4.06v-.206h239.999v.205zm0-4.067V8.13h239.999v.205zM0 4.27v-.205h239.999v.205zM0 .21V.003h239.999V.21z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.035V0h.2v179.033zm4.065 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.067 0V0h.202v179.033zm4.066 0V0h.203v179.033zm4.061 0V0h.202v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2Zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.204v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.203v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.057 0V0h.205v179.033zm4.07 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.064 0V0h.205v179.033zm4.069 0V0h.205v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.063 0V0h.205v179.033zm4.064 0V0h.205v179.033zm4.066 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.06 0V0h.202v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033z"/><path style="fill:#000;stroke-width:1.43381" d="M7.94.004v4.163h.57V.004zm223.546 0v4.163h.572V.004ZM0 7.946v.57h4.164v-.568H0Zm235.833 0v.57H240v-.568h-4.167zM0 170.525v.57h4.164v-.572H0Zm235.833 0v.57H240v-.572h-4.168zm-227.896 4.35v4.164h.571v-4.164zm223.546 0v4.164h.572v-4.164h-.57z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 170.91v-.203h239.999v.204zm0-20.318v-.205h239.999v.205zm0-20.326v-.205h239.999v.205zm0-20.323!
 v-.2h239..999v.2zm0-20.325v-.201h239.999v.2zM0 69.3v-.204h239.999v.204zm0-20.32v-.204h239.999v.204zm0-20.325v-.205h239.999v.205zm0-20.32V8.13h239.999v.205z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M8.125 179.035V0h.2v179.033zm20.324 0V0h.203v179.033zm20.32 0V0h.205v179.033zm20.32 0V0h.208v179.033h-.2Zm20.326 0V0h.2v179.033zm20.32 0V0h.204v179.033zm20.326 0V0h.2v179.033zm20.318 0V0h.203v179.033zm20.32 0V0h.201v179.033zm20.326 0V0h.201v179.033zm20.32 0V0h.201v179.033zm20.32 0V0h.208v179.033h-.2z"/><use xlink:href="#a" x="19.654" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#b" x="23.431" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#c" x="27.208" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#d" x="30.984" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="38.644" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="42.421" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#g" x="46.198" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="49.981" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#h" x="57.635" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#c" x="61.412" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/!
 ><use xlink:href="#i" x="65.195" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="68.971" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#d" x="72.748" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="19.842" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#b" x="23.619" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="27.396" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#h" x="34.018" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#c" x="37.794" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#j" x="41.571" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#d" x="45.348" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="49.131" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#k" x="55.747" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="59.524" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#l" x="63.3" y="47.366" width="100%" height="100%" st!
 yle="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#m" x="67.083" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="70.86" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#n" x="74.637" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#b" x="19.842" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#o" x="23.619" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="27.396" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#p" x="31.172" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="34.956" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#j" x="38.732" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#q" x="42.509" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><path style="fill:#b3e6fa;fill-opacity:.3;fill-rule:nonzero;stroke:#66ccf5;stroke-width:.28346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.3" d="M.002.002v56.691h56.691V.002Zm0 0" transform="matrix(1.43381 0 0 -1.43381 130.162 130.156)"/><use xlink:href="#r" x="110.523" y="72.878" width="100%" height="100%" style="fill:#66ccf5;fill-opacity:.3" transform="translate(.102 .102) scale(1.43381)"/></svg>
\ No newline at end of file

Added: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-2.svg
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-2.svg	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-2.svg	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+<svg width="320" height="239" viewBox="0 0 240 179.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="a"><path style="stroke:none" d="M2.078-2.875h3.64v-10.688l-3.39.844v-2.937l3.406-.813h3.141v13.594h3.64V0H2.079zm0 0"/></symbol></defs><path style="fill:#fff;stroke-width:1.43381" d="M4.065.004h231.869a4.056 4.056 0 0 1 4.065 4.065v170.906a4.056 4.056 0 0 1-4.065 4.064H4.064A4.056 4.056 0 0 1 0 174.975V4.07A4.056 4.056 0 0 1 4.065.004Z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.037v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.066v-.204h239.999v.204zm0-4.068v-.2h239.999v.2zm0-4.058v-.205h239.999v.204zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.061v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06V126h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.06v-.201h239.999v.2zm0-4.067v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.058v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.066v-.201h239.999v.2zm0-4.058v-.204h239.999v.204zm0-4.07v-.2h239.999v.2zm0-4.063v-.2h239.999v.2zm0-4.06v-.204h239.999v.204ZM0 69.3v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.203zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.206h239.999v.205zm0-4.067V8.13h239.999v.205zM0 4.27v-.205h239.999v.205zM0 .21V.003h239.999V.21z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.035V0h.2v179.033zm4.065 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.067 0V0h.202v179.033zm4.066 0V!
 0h.203v179.033zm4.061 0V0h.202v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2Zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.204v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.203v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.057 0V0h.205v179.033zm4.07 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.064 0V0h.205v179.033zm4.069 0V0h.205v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.063 0V0h.205v179.033zm4.064 0V0h.205v179.033zm4.066 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.06 0V0h.202v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033z"/><path style="fill:#000;stroke-width:1.43381" d="M7.94.004v4.163h.57V.004zm223.546 0v4.163h.572V.004ZM0 7.946v.57h4.164v-.568H0Zm235.833 0v.57H240v-.568h-4.167zM0 170.525v.57h4.164v-.572H0Zm235.833 0v.57H240v-.572h-4.168zm-227.896 4.35v4.164h.571v-4.164zm223.546 0v4.164h.572v-4.164h-.57z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 170.91v-.203h239.999v.204zm0-20.318v-.205h239.999v.205zm0-20.326v-.205h239.999v.205zm0-20.323v-.2h239.999v.2zm0-20.325v-.201h239.999v.2zM0 69.3v-.204h239.999v.204zm0-20.32v-.204h239.999v.204zm0-20.325v-.205h239.999v.205zm0-20.32V8.13h239.999v.205z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M8.125 179.035V0h.2v179.033zm20.324 0V0h.203v179.033zm20.32 0V0h.205v179.033zm20.32 0V0h.208v179.033h-.2Zm20.326 0V0h.2v179.033zm20.32 0V0h.204!
 v179.033zm20.326 0V0h.2v179.033zm20.318 0V0h.203v179.033zm20.32 0V0h.201v179.033zm20.326 0V0h.201v179.033zm20.32 0V0h.201v179.033zm20.32 0V0h.208v179.033h-.2z"/><path style="fill:#b3e6fa;fill-opacity:.3;fill-rule:nonzero;stroke:#66ccf5;stroke-width:.28346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.3" d="M.002 0v45.355h68.031V0Zm0 0" transform="matrix(1.43382 0 0 -1.43382 28.552 122.026)"/><use xlink:href="#a" x="47.032" y="70.624" width="100%" height="100%" style="fill:#66ccf5;fill-opacity:.3" transform="translate(.102 .102) scale(1.43382)"/><path style="fill:none;stroke:#00e300;stroke-width:14.1734;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.2" d="M94.96 85.04V39.685" transform="matrix(1.43382 0 0 -1.43382 .102 178.927)"/><path style="fill:none;stroke:#00e300;stroke-width:.56693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.8" d="M19.844 85.04V39.685h127.558V85.04zm0 0" transform="matrix(1.43382 0 0 -1.43382 .102 178.927)"/><path style="fill:none;stroke:#00e300;stroke-width:.56693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:2.83466,2.83466;stroke-opacity:.8" d="M19.844 85.04v19.844h127.558V85.04M19.844 39.685V19.84h127.558v19.844" transform="matrix(1.43382 0 0 -1.43382 .102 178.927)"/></svg>
\ No newline at end of file

Added: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-3.svg
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-3.svg	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart-3.svg	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1 @@
+<svg width="320" height="239" viewBox="0 0 240 179.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="k"><path style="stroke:none" d="M1.328-.797H3.25V0H.344v-.766l.5-.515c.57-.625.922-1.004 1.047-1.14.156-.177.265-.333.328-.47.07-.132.11-.27.11-.406a.612.612 0 0 0-.188-.469c-.125-.113-.297-.171-.516-.171-.168 0-.352.039-.547.109-.2.062-.406.152-.625.265v-.828a4.25 4.25 0 0 1 .64-.187c.208-.04.407-.063.595-.063.476 0 .851.118 1.125.344.28.219.421.527.421.922 0 .18-.03.344-.093.5a1.891 1.891 0 0 1-.297.516c-.117.136-.414.449-.89.937l-.626.625zm0 0"/></symbol><symbol overflow="visible" id="l"><path style="stroke:none" d="M.406-4.563h2.89v.641L1.75 0H.828l1.485-3.766H.405Zm0 0"/></symbol><symbol overflow="visible" id="m"><path style="stroke:none" d="M.578-.797h1V-3.75l-.937.234v-.812l.953-.234h.86v3.765h1.015V0H.579Zm0 0"/></symbol><symbol overflow="visible" id="n"><path style="stroke:none" d="M1.344-.484v1.78h-.89v-4.718h.89v.516A.994.994 0 0 1 2.25-3.5c.395 0 .695.156.906.469.219.312.328.758.328 1.328 0 .574-.109 1.016-.328 1.328-.219.313-.531.469-.937.469a.868.868 0 0 1-.485-.14 1.386 1.386 0 0 1-.39-.438zm1.25-1.235c0-.32-.059-.578-.172-.765-.106-.188-.258-.282-.453-.282-.188 0-.34.094-.453.282-.118.187-.172.445-.172.765 0 .336.054.594.172.782.113.187.265.28.453.28.195 0 .347-.093.453-.28.113-.188.172-.446.172-.782Zm0 0"/></symbol><symbol overflow="visible" id="o"><path style="stroke:none" d="M.672-3.422h1.765v2.735h1.126V0H.437v-.688h1.11v-2.046H.672zm.875-1.656h.89v1.047h-.89Zm0 0"/></symbol><clipPath id="g"><path d="M0 0h167.238v124.719H0Zm0 0"/></clipPath><clipPath id="d"><path d="M26.762 5.477h113.742v113.742H26.762Zm0 0"/></clipPath><clipPath id="c"><path d="M0 0h168v125H0z"/></clipPath><image id="b" width="952" height="952" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7gAAAO4CAAAAADdUgWHAAAAAmJLR0QA/4ePzL8AACAASURBVHic7Z3poprMEkWrvd/7P7J9f9BDTT0BmtOyVxIZNIoJy13VgCfQtwhfeyUA/hHxa6/0HZ0gLXgM35H380r9C2nx!
 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!
 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!
 pbJzZvo94ouf0XxOVe2GrVpG2VztbIVl1Xbm2/k7h6a8yWipnOewQb4+zV5h6nVG5UyY6yKm7zjK+tNlc9k3wF2eJGvaHr4trE0reOQ6O8da1Vy07ZzGdE4qqCvVcqw9DHYTtEUyqr2HWkdQPXiituvHQ2qWvMrdKaXte8n7y8eByXpxsJbymLRXnW9K/GWpu8ZV4Er0xca66rbr9mBj9KJKr/2zHNxrTmmMbA/lCg47gr5VOLxbFYonTOMflHYGNgN2V6/K1wvHx9ljJRB3Sbz96hJ26/zgxSEZu1FFLr6wets06OWjneutrWDxPV4/Z6APBrpB0/OOtK7AZK8iZv83wMFLO/VTqi7FO1yvGLaZuEJyqXH8T8t0K56iDWp+qdkBFs0Kq7m6WyqDpFS2njTzsr4tNNW28lC1zHXK/LVaXyqMeFuD9Le3BKN7equ+XVqyyQVXMrqmH/t5jWszFava7ocnXF3GlzBz1uW1zHWycnW8oqcRtlczN2be721G3KCod/AT+UWj1uvZXeSmnnvO3oa0aujLRCWz1GNSXuhXOVh97mOtn3diBuL3HZy0LcZ3NN3FwxlyI31czi12ADgvObdN1dnquev3zxvOVJcaUebkwHtVSC0y+RZeg6RbMKbhu4Sz2u1RTi/gJm1+8NTjk9bh2cKp2utpZdcqBlE9caMHPLSBfxIS510QFRWgjpModjMGtS5qG4/v7dKFildLJfdaQ1a9nAlXyuMtAsQ15Vy0vigl/A/L9Gb6HGLrseKJmqBqeMtSGGGOvYMjk5mWOWdOzmJ6hDZzGbGnupO6FvW1x3Vw8kxeDqBh67PGyFt7xStvKao0N1Jrmrsrekv1MoQ9wH4oib85ayQLFGbqCqrPY2RIrl8E0o48PkuVueTMQu1cQt32VD5UNAfH2NJ3CgtsALPa5sGwOfrc7yqD2Eqq2u+GNWZMeFubLP1draHld3uG76gh9GDOgEvirnLeUErD2u9Jai6G2PyCVq5CMrl+tBJl4zM12Lofwa3brJ03UyGXGbhbGzILOOqIqWV8oiWPrqiKuT19TevrZO5jZ9hb8/S1ZBLVMZjAo1gW2PW7pbilWyWEO32EvkpKM4pSPHuxr1KlGtWmf9hJ69ue5mrI0qBzlXlWGhWwrjbFiKXOWttTfpzf8+11cFrqyUTYero9e8AfBjOIdM0qTu9ofCR3mcja29bTpkE6iUyDUYk73Vu469x7AUr4fLqVh05DGxe/JfX4lbGorbSeCqLg+/OgRMZAekuK162eau+ASoHwGix+WR6xTLEPcxtMUtkzxilOpT0ePWUrlWuDGG9JuISJsmXqyU4KmvJXVwKOtLjrZ+ezvQeDpxg5jKzjJNSlsrBpr0gJRKV3bDpqpgVqWydBfiApoTN93EMom1x5VDU/pwqzwmJF8o8Bt2WjQfgQrErWXaJneJj33NsFIqCxm4urJQlnkYtLdCXLWeB7BIXC9wS9CXTfG6XCkrxP1ZopoPbHUZVy5Dyzlqj2jMkXsUyRRV4lKaUOlzw7urb7G35C4dPS/lP+RE7tL5GOd+koG0tpTJRVpRH3N/jaXaaF1eU36KQPXZuba82Ya4D0aLy2f5uHIZVU6mmsg9wjLWHrXqWgeTXu0+l0onG1juFk/l+JRXFE91u764Zv8O+g5mbQ2+0tgmV3MFbfJWi6sHrUoXrMeoVLnMMlcVyxD3aQzFLcdxWeAeLucjQOk4UIi5y01xe0Tt4W9ew18tsNuyi+WANWPL4siwHljW0obWodz1c5WDtlYkXyjypogsLjJDubh5EoTgLHF5qSx7XGEtxH04E+ISa2/T6HFggUu5PA7pOFCK2xCVtr5K7DwPdekgG4oqF+tSmdSzO1ZYuB7XEaCGLOtua+ImEalqyzXNs0Jd7i/LXRm6MnJ1lwtxH8mMuOkEDGI1cg7eGrksc6OskpvKBjHlpx6L0GVlsjoVK70IiYVuxbx8HLcWzULeYg9P3LyqqilkLQt+1ewPLkt7WbkMcZ/NnLjsOC7FXDFT7m3LoBTlM5QpxBq5phnNK!
 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!
 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!
 4NZHcQeQgR5NzqSwP38rAlYNW6qOnEvJ7PX2RgfjD7zi8KU4F8TaryFPBm7SVpXKoh3SdxO0PTsHWH6P+h0YxKeUyH5xqJW7KWjqMyz+zIBwX3r5lBGVxi6J8tzbmitFk39vPXWQg/42CWK55S+x3UMNU7F0bOT155WGgWirrwG0mLgannoLZ6RuDU8e8TtwcdmVwKpfKRd1A4QhbLa6vqzxNSp5wUS8GsoNTiyNTdPYnGdR13F4pL68oqrU8ct2MVe42yuTyT4fEfTYziUuNxK25e2Qtf9r85cmvyMdbtbgsdFXUVn2Zkur0ZDnD39OEvyeP41Yx2uaaxOWhW8VrUvNW2cv0pXwCFRL3mZxO3Gxs1vgolfMXoB+F8qt8w4USN4aglVXmErsp38tKJWhLWyta2xVWvizOpFZQj/PlzROZvkxgP3OlwvVn+PHQJX3mVPkIQeI+g7nE5f4GJm8OXjq+SCrS0ePmCMg7cvpuuKQp1b2O18dCYXaWVD0CRNF4mzYu8ol4c02jT11kUNblm2bs8uKCarHsO0vcVDlDUlgWuCzdmbxsa5C4v8wwcamUx3yu9La1VKYQKfW4JW0Pa4kViDYeCAAAIABJREFUdSEQlRGpKq0OWzOY7Oft6UL55E8yCOYmBH6nMVeEbk1NkiaKrreWyO6Aslsql0/KwLcUifvDtBM33ctDN5Zkq+bkWd7j1nOUj7Mv6i4W0xwT1QjsHAFSg8lUXp0Vyoujy1dPwFDxFoy2ySRVMSsLTb0sNBZ1tFa9uCvzliVu3U4k7s/h7+ypTGZHQ/kwlS2Vj6yl8vM0eQQIcWuL6/qapVVHgLyDQKeOATHWzlW2kes9qsjEjFUVM0lrTeYe82pgyporSuUqb9oQXio3Nxb8COn/M5absloPTpGKukiUf0pQoHoZbh2ayjtwjtdAIZQFk7QmbL2TLupWsCq6Lo05/51T+iZnXNWFG6srZm0rGTtJrK2DU/zx/VLZ+ZRB4v4Y0Zk7SKkrW91jho0ql5o15II5UKjXEkhxs6kh8gWS0ubEFerqg7fdLrdsf8/h0xfSl/lqLldW1so1Fl1/bbDWttZci6szV40qo1QGpVSuy6LVNZMQKeTBqUAU+FnKFOjobKMqI7PDeaoT9+hz3RrZKHv7hfTy38IsHpawdFO5yz+yuLQsf0XCcmOZrOXqAm0u63FFl4tS+XlMlMrExpf5JESqg1PlcBALnlwgZyt9XUXiUrG3vJA86cI9gjvf+p49AYObyytlUm86Cyqk5VGrOltbKktpud7U6XHZVqJU/mHapTKRKTf1kVNeLL+q3HofVvtuGpyKwdU1uc17W14nkwhd+fmxRBXX3ZFNYUzKgSDutubK3OUyK5G70vriBqqpywpl3uOiVH4kuVTmDa4do/J10eIelwUJT+0arXCjt9V1svKWFcy2dj7217L22s8Oyreyz2WlssrdopkTwNpgIy5PZZLidntc78NHrQY/QyDyBqqcMaqygt33tuLm9rbsnQ1hxWBUcHvbhrenWBFXxxdbCOb+4ExMxmppgxJU9bamCWZPadSV4trEBb9A/Q+NYiIf42rrlakhj0+lP+nCoECpsw0xsDklrFiWpXJnXIoF7orH56/HlTKUEao6I3M3sCXlrZ4ToasT13S5S4NTSNwfY7ivB/eIkAnechw3uXqYmuM28Ho5jy8XTa3ApUzOpTJ53obobMgsaz/YOrj3yT63lszEtaWWvXLOoAJXRi77TFDisk2DuI8lNM02bSX/rA/1dGSi1NVmgdmEaUtybtDayk0gtSVqvsHJHjfYib1hylLb3nZna2Tti1vVLQtq6yDugwhkrO3VolLcQIFyuBZ5s7ImbaW9k63t+QFlIjr1Q7/4jFstiy7Thi4fpRIFMilvyfNWi3v8O9fuVorb2F41C34MR1oVac696TafDJUqx9TUMnNLqay1reryUll7q05xjM0t6nPyGzBcc4852egGMQ1KXaWv4y35xq6IG+xWt98W2JxANNH5tv5eTdxUMB/jU9ZeEb8lakNtaeWRW1!
 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!
 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!
 YEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbgAbAjEBWBDIC4AGwJxAdgQiAvAhkBcADYE4gKwIRAXgA2BuABsCMQFYEMgLgAbAnEB2BCIC8CGQFwANgTiArAhEBeADYG4AGwIxAVgQyAuABsCcQHYEIgLwIZAXAA2BOICsCEQF4ANgbg!
 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!
 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!
 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!
 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!
 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!
 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!
 WYvl5f0Bk7voKeO4zrtKD8mVBO3trqi0YxO6tanFmmb1qr+Vnqr8taNW0TtQ2iL66irA7ftrqmbvQRmv6Xy1dsiLwvcU2ly5TunpLmk3KWanqQ63faTOE9G/Fo+XSrLHlcVy7zPtf84UPkX8Hd6O+Dj97ieuT13zWzjd/l4iGp7+OfDtfJv7Rsw5JEbcbcNyZK4IXW6vrnyWWx886dvlcolc72zLnAc94dZE7dfKltrValsHfZkJhu1xObEJkexMSsur5yrrFbbkeBaJKfIK6c+Smc9d/kZGOzYkjjRkeqlC6pUrj1uZJPu4SC0u7+F/v+Mei6q+agmXuIyVauivrJilS6R2fOVl2xm7tSeGfojr0HdBvaXApurU/5NbmVoqU7kVK0XD1XPVV806C1wb8m+MX8V+A283b3Z4ypzefXqlct8pircSmLPW6FuUZg3udHZwtZ7i664ZPZ9Xn7W0x2EREU0ba1jLoXj25JJ34gZ/XzpVaS6fAOVthiceiTRX9A9LvdGSuuaS8rQhrUynj1zy6vwzBXVshHXK0/PjyqnibxGgB3IPT4VRO0c883gUG55AnnaRflmDXYGdD4aVHpcr0bG4NQPM9vjEnOEmtoqeXOprA7PeuEq522HW2aZl9Fs4gJTiesdKjVFKytuScemyV3+Q7zqsVoVt36ZrOK2XyR37IS4v0B7pzc9rlcqsz+i0W1ErhRX18WNKjmSvXE+OeT2DRN3RVxmijRHtbnCPc9dVTVrv48/QtqWtszdfqncXgV+g16Pq8pP01c6oasmOXxdcb0Zaa2uktlnRqu3vSbuoMsVKvHUVeY2O15HXBm4dZ71uEJd7q4btZD1cbRLZS2KNGiq022r6j/URK3I3Pop4tzqWbZqUlxeLGt7pby2aObTZvoKYa20TF6hrvO5It4PSuUfZ6ZUls421GWtqJe7bXF7zvJnsepWZ2X5rrb+DnFlxhl5ncylwApfvzLWhbV5AvHbT1wnc1EqP4uZUtm666mrctKXtxnFXtq2w3ZYKH9C3Ia5bslsfjWLY1knswUndN3EJfWWIOvjiP6Sm7jNyJ0tmj2Ztbkib/3AXRc3ofdvYwFzpGOuH7xzv+SseT7vZdXtKHG99wc2pl0qy3t7iSuylv+eKZnbQWtbW/E6PW/tdpvl8xcZ8G+dORbzoVZ2qR+7Prd3jrJ+ZvNlG+yafQrELy+gekuhvjM2W5bVq6y/ZfD3ae7pJLUwiSu00vZ21W2tIpnb+bW1t+dYTlwZuTJveVXLq1wneJ3TGlVba1LXhq2XuPKNdGIVifsLtHd9x1hy3GW+anVV5gqDHWGNt5E9gZu3KnTV5rnvryxPiKvMtW1uS1ujb0NhX1xVJnN7W3Vyp0yGpg9hKXFl7ooOtJO5A2GluY665o8qlPk2XxJXeRHEjTRX3TaDVww1yxklrDFXBa7ubeXbgK+PJbpLYioi1yQiy9xmzTxQ1oYtD1xVsjt5e5O4tkBVxSvX1sauVzc7Ez7lz9Yuk+XmDd8N+GUmEtekbbapE7jt4J0LW/GRYGrkZuCeEdcTQmeuY28VrVUwOynrhi1/Jpm3NnBbb6PjK1T+BfSO3brHdI1evWxC0RulamnqP8Z8Fkhno9kkvq3Om1sT1xSitlqVwajN9eU16+XfUMo2zHWL5O57Ab9Mb2fXSjS9bcVl1HMdaVXout7a1BVv4DPiNs1V8k4kr36IEVf84dbqwBVvoi8rVP4F2olr7tVBpqTJi2zaqZqb+Sof6oftbKF8o7hCmJnM7crrxKyTtUG/Ss9c543A0MfR7AzrvHZGVK+OdbZwbpTQKmnF88hX4fKajxXvbfBVPXFdHYK+1V5p47ryDrO2E7e6RHY/ZzrvCPwU7extlsrc3tmC+VhvJW1Ia56tkbfG38Y7mhPXvds118/cYei2lA3eE5rXdOJWvAlY+nT8UtlzRQeuV+e2ymZvlRe5btTKOtn7kPHf0bS4WpOOub62g4gtf8GPWq2rcrb3NuDv48ub9HYAAAh5SURBVLA7/SB1m/LaollK7CVyecRy!
 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!
 AUJqxaN3FiRMa+5swb/V04p4SZzAwPLIVWQu+QUOXpdydO1B7U9zSmgNnDp6OZJw45rOc9ACMWA6+kZZ3aLui9dp+f6ZaHZ+vOJu0t37IgGewlHH+g8fjS1PHe87U6W0Wd/BzZyydcLf/WtAS3EdHmJnBpbmjtPdqe0KBT6k7/zfPPASAysmjQ3NjxOe0Xe5+13f68d+YvhZgJWfP2wmvH8f5MaDpA0QL6z6g7am9+nQGznuK8SjwTU6cEzHfxZ7N9z6nJDhfvi5Vw5cvgACgwclTmDvrZ48pnd0Yxbn9/spp/stDxlfUhNaP5coh0/bfXdTz0udDl7N79rU0PJexsBB8lIFBy3Z+Km2JLsgw9xfP5CgqZPBFrtl15p71Rzl8fLD27NHYTwx3g4ezrsnZS3kmX+l8Pf+NBrL3uHOHhQH4MFdOT5zV8Uobfs2Le67mvTTWBcCN3DCa9A1tr/sw//dvvCoPEoM7mVfovhMXr14ndN2BW4U7uTkwGcxzzplbz6O4fnnfHbv87VftwEPwh7j9YOwdV+Xe48i9FweefFoA7uVDde8tV9Pf5cbq8yw9HgKDL/JRDe/6Doz7nPjWgVdYDO7nlE83HxZe4lYNPnOp0ReeAjyM6wKdeYb7tL19r98oROH7L3CnC599zZu39PbdFxe8g5/l/gv0T/MJW750NhYA3+Kad58oCz6kCVpX8AvcoNyHivnP6fEvx6sBuMB9rn2uBf+sFH+vEAfA4xOGfXTg7OMafMsz+Awm+NYo9Mdf5yv7O6QCD+IrHw5fcwryggfwtePK3/UJ9oLf5asng/wfav1aFRzHSd4AAAAASUVORK5CYII="/><image id="e" width="952" height="952" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7gAAAO4CAIAAAB3W80MAAAABmJLR0QA/wD/AP+gvaeTAAAKYklEQVR4nO3BgQAAAADDoPlTn+AGVQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4LfAAHBu5hPAAAAAElFTkSuQmCC"/><image id="j" width="614" height="614" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4QHGRXhpZgAATU0AKgAAAAgACgEGAAMAAAABAAIAAAEOAAIAAAAOAAAAhgESAAMAAAABAAEAAAEaAAUAAAABAAAAlAEbAAUAAAABAAAAnAEoAAMAAAABAAIAAAEyAAIAAAAUAAAApAE7AAIAAAAJAAAAuAITAAMAAAABAAEAAIdpAAQAAAABAAAAwgAAAABUSjEzXzE1XzEgMDAxAAAAASwAAAABAAABLAAAAAEyMDE3OjA0OjA4IDAwOjAwOjAwAE1hY21pbmkgAAAAD5AAAAcAAAAEMDIyMZADAAIAAAAUAAABfJAEAAIAAAAUAAABkJAQAAIAAAAHAAABpJARAAIAAAAHAAABrJASAAIAAAAHAAABtJEBAAcAAAAEAQIDAJKQAAIAAAAEMDAwAJKRAAIAAAAEMDAwAJKSAAIAAAAEMDAwAKAAAAcAAAAEMDEwMKABAAMAAAABAAEAAKACAAQAAAABAAAPoKADAAQAAAABAAAPoKQGAAMAAAABAAAAAAAAAAAyMDE3OjA0OjA4IDAwOjAwOjAwADIwMTc6MDQ6MDggMDA6MDA6MDAAKzAyOjAwAAArMDI6MDAAACswMjowMAAAAAD/2wBDAAcFBQYFBAcGBgYIBwcICxILCwoKCxYPEA0SGhYbGhkWGRgcICgiHB4mHhgZIzAkJiorLS4tGyIyNTEsNSgsLSz/2wBDAQcICAsJCxULCxUsHRkdLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCz/wAARCAJmAmYDASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECAwQFBgcI/8QASRAAAgEDAwIFAgMGAwYEAwgDAQIDAAQRBRIhMUEGEyJRYRRxMoGRBxUjQqGxUsHwFiQzYtHhCHKC8SVDkhcmNHOisrPCJ4Oj/8QAGQEBAQEBAQEAAAAAAAAAAAAAAAECAwQF/8QAKxEBAQEAAgICAQQBBAIDAAAAAAERAiESMQNBURMiMmEEFHHh8CORQoGx/9oADAMBAAIRAxEAPwD0UCnKKXFOVa+nrzQ5RUq01RUiisVqHKKlWmKKkUVho4CpFFNUU8CsqcKeBSKKeBWapRThSAU4CshQKcBQBTgKigCnAUAUoFQKBSigU4CoE/KnUUCoFFOFIBS0UtKKQCnAVAUtFFAope1JS1AoooFLUBS0gpRQKKKKBRS0UUUBS0lLQFFFFQKKKKKAooooCiiloCiiigKKKKAooooCiiigKKKKAooooCiiigKKKKAooooEopaSgKKKKBKKWkoCkpaKBKKKKBKKWigbiilooOE2805Vp2Oaeq19HXDCKtSqKFFSKKzqwKKeooVakUVloKKeBQopwFZUqingUgFPArIAKcKAKcBWSACnAUAU4CooApwoApQKgAKdQKUUIKUCgClqKKUCgU4CoAUtFFA!
 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!
 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!
 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!
 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!
 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!
 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!
 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!
 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!
 SStJnEDkdT7isz1XcEqhQ5MDqAnTPlkjt71jlePKbxmJONnVZssbx3K72fzCPwOeq/wCL/XWpIDbS6nbQXDmO3YgOy/yoQf6ZxzW1rkUJ+jvmiMM7QCHygoI4G7n2HJ55qjpMsaa/byFhGUDAdudpwD/rril45zxJf2tCfSPD5snWHUUdod5A+och/YHHTiuOkQtDGcgErkj2r1Wa2ggubINbYQpI0hRAoy2zBJ9sDrXmskqMHK8ZdlkwM8buMDt0rXzcZxZ4XWT+KXGe1dT4ZjZY7rdvKBFdCCQY2yDng85AwR81zMm1bvjgEfpW1prMdrqDufEQwcEt2B4JxzyK87pHbeLLW0tn02GzESRXEBmkRWZiXyOTydvU4Ax1rHsNSn0TVbXU7Z42uLOQSKpXcjH/AJlzkj7EVzgOoXDIpVCIUEQWJFXhSeTgepueWPJpdtwW9ZbPsTUvyd7G5xdd4m8d6t4g8LXGm3b6VJGx83ZFassikDjBLHHer/iS5t7G4uNKtJJrp02I0yoEjCFFPBDEhhkjGOMDmuFa2uShyDgjPLAZFWhoWp3NpvfU1jt1I3tJcEIme5A/6dq3Pkt9p4tKKR8okbuHGFHmylgV+x6n5rY8JWiWFjdRxsZF8/JOQcZVep/LpXD2+m3l3BMsd87wo4UsS4BOB2PPercfhi4F7Dp8U8s7zsFKw5UAbQxYjPbIGT71Jcun03vEWyW9lkSQsWuWDKo9C4Rcc9Oef0rDklCOOdoDA47EVBqmhXel6m9jcO6uiq43NuPq56is6406TJZjv57DGRS8u/TL1v8AZ+QPDmtNG4k2ajDlsnnMT9uo9vvXZ+Ck/wD8jaI2cAyyA4558iT/AKiuT8DwqPCOrPGVMQvLQIh4KDZJnPb8QNdn4JwfHmhk9RNNz/8A6JMf3qR6J/F7WOlFNiLGJSw2kjJHtTqOYpGGVI96WightT6Cp7Gpqrx/w7plPRuRVigK5bxBodpe+LvD9+64mtJXIweoK966eQ7UJzj5rJvSH1+w5OAjvz+la49VWwBgYoqKe4SCBpXYKqDJJOABVHVtUFhZpJ5MszyHAiiBLuf8Ix3JwP6nABNZwi5c3cVpBNM7A+Wpcruxx/kKitp/qY/qCvoKggKwbj7jg/lXF6rrdzqtqJPprRiHYpbHdIzAMUCuRwMlmBwGwBntXXaM901gEnVAVJ2SLIHV0ycdAO2MfGOa1mRbEryLBKx8iXBx6oY93PTHHPYdfiisfxBHqBCfQwxXmDjyRcPCUXs2U5PO4HPHTjgmikiyaztNultra0uY77zpLmzsoIrOSVQnmuhw5IBfcVXH/lWuk4ycHI7GuIt/V+zzTLslYZxYWsoe2Qb2ZW2R4bBOSGAzjoT2rtESWN5RPMJHaRmGFChFPRB749+9dPc1izEgopgf+Jt9xmpApPQE9O3v0rKMTxpz4Nu0H88sC/8A/QV4fb3V9d6dcQWRiF0Ys2g3tuVlyx6DGMqB/TkGvXvHd2l74WubGzv1iu1vIkdFwZF2vk+k846HPsa8E1TWDoEdvPp91PqOrW15PC4MDphCGaQkhcH8IJHOOuMV6fjvjx7c+Xt2HhO6n1fw/pFzBcXcEV2BcZMomWMxko8eMDaNwyBzxWhpVt5q3lylzOjJqE8boxWTDxOUyGYEgEYO3PFcH4c13wzo11rH0Wo6jqNuZmuI3OnuYogx9ZG1gQPw5yBwo6d7lr480uSOZFv76R2dvKtoNHxJy2epkwRt6Zycdea7cefGSbYxZfp31lNIzXlxIzJLDePaAhc5jST0nA9wetW/qorE317cybYom8+RwCx2qoycDJPA6CvMn8baSonaE+IbmKGXduW1jQNlt23BO4Dtz2GKpan40hm0y4s20/WIH1CNgDA9uwAYDDEKMrxjK8HrzWv1OP5Zx3Osam/h3w3c6HcRTyjVF1F43tiZI4jJK7Kr8celwTx1yK5PxPerDfzahdw2t/bWUUYJRyocMTtjx13Hof1qvB46svEGrTLqFvLocEsBtg9vBGscqsSzeYX3FD!
 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!
 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!
 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!
 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!
 Sx2qc/hYHoOMZJ6YP5dL4QuLePWWt1xCqXK4870M2Wi55Azk9OBxisjTtNvbe2g5YTMXYKjeYzneED4zxgjg99vHTFO0zyrfxDulAlkjuonuHIOCfMB3j8j+eOnczjc5NPUrtIism11KRu4Ibg4yfesCGedtUuVjhjWFgRuZyS2MEZHYZOOtal1qlnel1RxO8qkr5bAkFiQCT271lFoiUEQt5pg3lsnnlDjPY4IPTOCK9d5T6rJusXj/7PPGIpF86IKC3pUMSSR79AxzW2iRQRrLcI0VuqHLudo27eufauF1jVbg3K6VZRTWqyLI53zBm3MjBiMEgAKT85IxXRXPijTmspot7qSAigZc8gFfsMEHrmsz5J3tMXL5bO500/TzRSuo9GCSVIHpOR+n2rE0dbKOK1j065kjsE3syRsjg+kZBPPvzWg3irTLaLDX6QIzHy1YMp2njofnPbpmsm0uNN06U2kUzxmOPcRsySOAOx4BDCuXLlLdjca0kcbs0LF2DDlVPAwF55GffinmHeBsAVV75wOvGf+nesee+tVvyLS5eaATsGJXkEAL27E+3tTBqVjcSyRPLKNucbmfauCDyRwf8ALOKl+T6hI6Hw0ILfTp4+ZGlkgZF3HLbVYFl4yvOzP36VueA0jk8XaPZz7CzXTALJnb5XlyMF2/IJ+5wa5jw7aOYZraYFHzHnDciMkgNu69dv5ZFanhu9+i8WW80ruJIJlO6AL6g0bLhBg7mI4C4JJOOa4T27T09z0u4hbR5IZHhH0cht97Y4CqChPvhXQEda5vRZtS1HxVqFwtt5ECX7QFZmCHcY0IcAc5AzlcghnX2Nc14a8VDTtevn1UyLpVw8l0JHjLNAyDaWJVdpJVMYAJDEAY5rqdDnfTvCRbVCkU1xvutUk3HMTzMztGowMyAbEwMe+Omew1vEWoyaVFbxQsHkkkRIZZg21pTJtCk4IC5IbI/wH4qC2mvIry0sIQr/AMIOGchXkI9J9I4UHBbrwAQeavaZY3M8YutWnjSUqqLbFFCQAKCY1wTubd1YkEkcAcYpWXnNrU16tqjtas0HmByPRjIGD+Jh6s+5b3pEbt7qEX7tupVkUpEQhZjtG7gj+pAr5y/atrMkGtXdpb3U8kE8i28s0pw0nljkFfYbup68mvb/ABBdNDpd4sCTSyC4tme3UkO5kdVEbdwpPpBA4wew5+evGh82+KyojztlmljwVlZmY5XgdRjt2rPLqH04GQRtfbSpKBcqEOMc9607OzF3qcVssiKJmSHMj7MGRgmc/G7PfiqUdsXdpGQ4QABh2LHgH2zgn/01ct4ZD5ssBHmwI0ivjOCBjv29We59P3rlPyy7GPw8h8To97ezXOn6dm3cLhC0yI0nlqCQ21cjJ5YnIA4r0f8AZ3cyz3sp0ZZ7ixmuiwWVw3mKB6lL4555zxk8/NcU939ddxaZZrBZ27yqZpUBAkyEaSTPVmZlI4Gf4hHQqK73T9LvdNudO3q6RtF9ODbRM7QqzmRlJjA3HZnIGdp2gDGa78ZN1p6Nol+LxZbwRbFkkKoyFWLKo27iBzyVcj8qhvrqVNR+qfzYIlSKPeW3qjOxKyFBxxjbnOTu5GAMlhHqUeoZlujNJBCwSIRqm8EgqTgYUgZXk9emanvYblbnZbk4dDtBYx+Wx3He2D6ucYHwav2MvR4Xj8QzLeqVvlhfyVeLziIDKc/h9K+oAdcnGTRWJrlnqN1d/UaKZL2+cl3j+rOnzQwtgqC6D1LwAAwBwBzgUUXHib2139M3+8eXEy+oxhcxkcgYI3AZzz0496ntUEU5mj2Bd0eAqg7cse44HT+v2qaMG3RrpyqRLtjnaXLDzCevTOM5I46E5qg115V2TKu3zZBMkQCgFcjcgx0/m556ivNxsztmzvpzuoXL3GqtBHEpmV49kXlF9+Tge+B6s4xyWFYkNulzo905mQmEhBM6MEHPpUEjOTzkc9B0xmum06/ewEF9bWpt9QdGtoLhj6MA53HIG50yeT8ewrPh0eG5tTAhdnRi2M8AY4OcHn7dPk1eM!
 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!
 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!
 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!
 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!
 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!
 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!
 3avZXFth/JkVY90Q3MOdwI4wc7cEdOtRXEaO0Zjn8pQi//MI2kKPUOPzwe4qNXUFpWLop/CsAGBgdvYcD55qsdRC7lySytwTzuz1+Opz+Zq7fQuRSQpJI/nHMyiVmViCG5XP6HP61EIt8ksIiR9w8xz+HOMYGM4PGT+VV3uIPNfyomzu3DDZzkDPHU9Kjku5I4nceY7BRgyNk9xx81L71ZcSQRB/UsycFuezrjgde3fuOMd6hluXuLg7EEcZONgOccckk/brULeshiFwwYbexwBx9zxTnHmwkRsscnlKhkBKo6qBwT2x8Z5p1VhqXU0ofEgmfIBMg3B/xAA47A54qBLxd62pGRIOC3cjr1/zp7BpUZE2xjcWABJLHtzj3/XNEaoLbfDII5N3KFeGB9uOO+c+4+ahNStOPSiTFoycqSuMnHIPuc5574pVVMspYeqM4z0znH9iT+VLa3CLctJE6BHRk5w4APyR1+Rg8VHAh8uWV13RwnAYZG5jwP75P/es1uGQp/vt1BiPy0lyxkJAHpX25/L+9P+k8y0NypeAMUdWXABPIwOO4BP5e9Nh8lLy9RnkRg6cj/wAv+fQVMEl8z6ZHikVfUck4YcZx+XaoivqdxCbO5WGIobjBEsinLlSDxz7/AM3H6VeQJKiSysRJjf5nmsQuRzjsB/Ws/U4cWbS798yxrlSAGQk4HHz8DsKvzafanwzK1w7pOyh+JCfNI55yT8D71djMlWNK8QT22oI8twIYI0KQq2AzH/EwHVj2xjioNSvPqp9zRSvIej4IBIzxk4ByT2+KzobeziuI5LONicbllJYOuffP6VN504V5NxkjGRnv17frWtEsjThFl8kIuFU59W4j25wD26/NXob6eMxyCJJBvaUnaMgYxjB69u4/65qXMPnMJjtUcMD1BHPfpThKWIaVljXpknIH2IpiNCS4wudsp2NgSL2HJ5Gc+wyftxRa6jGzlAJBEy4cjoeSenxxVGSbLgRZmBXcUQ8gc5PHT7GltrS7vDeTxwNcQ2PquJY/UsKEZzxgYHc8DNZ9tatnUFVfLgDMHH83GWwcf580txenyEj/AIayIwIaT1dPVz7j4/SqunS293ckIpkSAEmRQeTnjJ6f5femSyNO7spiAwwDli5bkg44A/v0qf0q5Heq+6SVUVSTsDqCjE/i49hVeadHtxgA25xmI8g4z0+2M4PvxUXlvcR7CJJVBIfHpyR/0pYWnsbho7a7uLQkhTsJRiCeSpBGGx+vFE7Ot7mKCKR5JJHtZdoVirbUIBwCSORk4z27+9VRLGVVEQksSVZTnHHQY6g5NbupeIZ49P32vinxLLdeZ6A80gQrkE5JkIJwemPg1zbvPdySGeSWdyf+KwILZPvxzwKtknoRBpY2kWJtsLgKw3YGM5Gf6HmpIXkhDROys6qQMcq3cN/T8/zqe80u5tdOju3R0guSVEodGZj1PpB3A8HqB04rJL3CehVlDAjhEOBz/Xt2pgsSXIaIejaON8m7tnkc9s896qBXZQyAnCjBI7Mepx+Qp8lrfvcMFtp3xliEiIAGevTgVPHHdptzZXMZA6GNsHnrjH2q+ojMkVi7ZYBc8kZwKmtopFkDKyqTjk8bc8ZrWs0Mmro91Z3TRP8AiVo2AB6cccj71FrFu76hJ9NaziFgCq7T/rqKeX0I3tzsB2OsisCSOM5I5/T+9OMpDkbxvA28ZyfkD5qusN8yk+ROV646Ypyw3LbFFswYnPqwoBx7k1PGmtGHVbl4FgkyV681MbloF3xNgn9ap6ekm0maLZ7cAVU1GVw52sVXpj39vuKeP0qX6z17wcNuGSU/m7k/cVtaddfvDzEUDcq5J24zz2xx0rm7eKWdZIR6zJs2Dd/MTwOfzH3NbeiRvpt4zyRYLZUBjyFGM8VOXU6JUd7cwxWF6n0/8VP4Skg4PPPI6jmpND/ha/Zxv/8ALlUyFzsMkoXO0kgjAIB5BB6Edai1K7W5v5kDMysmPKAGHIy2fgAgf1qDSmmR0uFhAdXJdgxJkxy2QOehP35FXjeuz2+orT!
 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!
 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!
 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!
 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!
 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!
 +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!
 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!
 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!
 swyNoIP4vvVqW9kjtkijONgGcmt/6i91zlydrNnrU9jdf7vMkNzHCUdJYPMVkRiQc5GCfbHX70Sa3rc2rK+nnRZHugp+oex8qWCMAcsfYE4xk5I6VUtryGNj5irmTJLDqecnNaWnyQW1215NloTgkoBl8D0r9qvx/P3+IXc1c8QhbOzllmMaWrKgeVYAJGw2ePbnkDtTbW+isrW4aW3WOWeaSZQQCyiRiwBI4JHxwKyNQupNX8kTT7IAzP5YT8LE9T26VTvL6SdyjT7lXgHpxWuf8AlTd4sQr2UUFrHIk2ZSGDAZGBnjFQ2im1tjb7mPmepstuz96baILiYr54TB43Uk2VvThgdvcV4Lz3qNXb3Ukt1vX1g4xtGfaoDdZQc8Lwo9qZPO090FbAA7CkkjVAOMntWbbfaRp2UmxATnrnj3qxPqCiweGRmjZwWGeSTWbBm2h3ZznmmSu11h249hW+EvqOnHroWL+ZC8m1g4Oc54oiDzXj+Y5bk8jpVnYILFVY7d/THenxyra2skahSXHJ71088q2yXVu6fbBaxROAUiA3A57k1natJBcKhRt0wGGNMWVBESzHGMVQlcSYAOAO9c7yt7cvJbRraHSLjezGZgQMc1mQafG8USzTSRRhsgrwT9z361YcEQlyy7UGMdzTYGMoCyDKIciszlYs5JrO0ghtBGHeQqcBz3FFP8zOVVAqjmimcr9oo2Mqxwm0hLMh5yfetLTzNbK8yyhcAxsGGd2aposULERDoetPSQLISRuya1Y1ukE5DpDszg45HNXYS7TbEXGeOTUNuvmTliB71eUDy3YShSOlXXT3FW7tblbVgIiVduq4qRbC0t0imad5Ekj3EEYKn2qaKchgSWdBycdKq3UhuJvSCUHAqVLkAu0yMlWQfykYJrNkkMsKwhdqBmbH3p8ySq/CYA6EUyBiCWb7VlnTIYQ8gXdxW7okdvb35uJY1nMY9Ibpn3rGjBSfeR07Vajumjd1UDLDrSJrXufE+oXDzfxFWFhjCDFYEs+8lT0LUxJWUMDyCahkVuCORmrbpK1YpQI2ViAOvTrQsskksQwOoI56D2rNklIUKDzTo5t7A5wB1rLe9Y6W81Z/3YdPDrsJ3MQMZNY1qoLeYGIZORUbSiZF2npyaS3miijIOS1X2zyuNeKYFWldvWOBz1qB77zXCew6VnfUBlYE8k0R+ptyH1Cs4zLauGZmAEnQHpUNxqszS7FwoHAFTPGWUSHgd6qyRI027GT2oa0LF2urlI2ZVTaS7HtUaRrIJdrZUMdp96zrjzYSCgPPXFEFxKSSx2iknStOOLywq5wpFSGGOaHBcAgYXiq0V3FIm2YMM8Air0cCuAUfKirW5wlQxW0lqrbZfVJ+LHTFXYhmNgrKvb7miXS7qZQ6HCn+b5qK80+Y7QGk3gDc2OPyqYTjGrHbW0FrFI853Mf+Eo4PuTVGWGAuzwjIPYnpU4tDbqE8zzNwwCaiMKRwsDxIOAR0qzpOX9Ky+W02GcIM56Uh8kyHGNw5zUItZZd6RfjHJJ5wKiSGRI2c9Rx80rN9JJnfzX2N6W42k06CEbCGUMF7HvUaRM4Vz3NXILebZ5iRljkDnpipPTE36Na3UozqoMbDYy9+fao/pY/OwyLweqjluMVosUZtiYyOT2qOWAjqRu602pdJaXLWEG8EKuWJTAIII2nI+RxUctlCYIiFU7eFH+EU3yfImkLSqUxkZHWmi43biCcN296vlfykPjhidxG65UDg+1WHgRXjm581UCMW5GBwKUTRwQjeodiO3ap4LqCWzYbA2T6g3tWpbZlXBDaRNbyFSSzEYQjr71pyafFFayXDRrvCYCnvxWbcXxtY1liQEGopNavb+WONNoQLtIp3O2+PSe9jUaZE7Hc5I9APSq3lvEg3RbeM9Oap3j3KSReZ+EHGMVopqO7e7qG449hU8rnZ7ivJcmWIjB8xazZ2LBt2QQeKnF48olfC/kKroRKDl8H5qRixWnl3KoTO4dTVYF2zu5xVgqFk9RqAuFZwDxSQiLfjg9qs2yB2J7AZr!
 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!
 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!
 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!
 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!
 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!
 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!
 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!
 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!
 8RR1qZbpJBgGufZz70JM6HINWcLjONa5dcHmsqRvWcUPcM/U1H961x44sWYJDuFXBMVXrWchIOacZCal49li0bo56003rY61UzQFzVxnxSG4ZjVmBmK5JqjjBqZXKipyn4anTUhl2d6uxXfODWIjuTirUG7vWJKze2ncOGSsi6TcavjO3LVQupcE8VqypDIo1A5q/bqprEa5YMcVPb3b5q5nbVdB5CsuMiqdxZrg8VVF44P4qmS93DBOabGJsUf3YzyewrSh0yOKLJAzTDfIgqncaqzelTxVa7RX6KrYWqG01YMvmHJ5pQikZqy5G9V+lFPdRniityrq4hHlg4pjNliCKKK4xkxkGeKmiHp60UU+hYilIGKWSQHORRRWFQSbdmcVSdj7nFFFdOAWIkmrG4lOtFFOSVGnDVLI25OlFFT7EKDBq1jK80UVK68RHHhxg1fgX00UVisxLKm5KzpY8HiiipPaVARsOfapFn+KKK6JCNcZUjFVzISaKKsgkVyKkWQk0UVKhr5aoScdKKKsDGc0isetFFbWH+cV/DxVhL1tvIzRRUyKhkfzDxxQtuGTPSiip6jUQypsJGelRAUUV04+mKQigCiitBcYqSNz0ooqUK/NRniiipxDQaerYNFFUTK2TzViOQqKKK5VFy1nLNhuavvEkkZBHSiiuX2ywby1VGJXiqq5U0UV24XY0txjctRyxgHNFFZntme09ugKU24t8ZOaKKzv7lntSGVfFWvxpzRRXXktQEcZoUA0UUDcc0u2iitKXOBTCTmiikWnKc08HFFFZZKetPjTJoorN9FXYkBqyuE7UUVeLAaclelZt1IXzjgUUVL7aigetTwkCiiunL0pzuRUaytnrRRWZOiEZyRUJ60UVuLC7iKesh20UUwMZiTRRRVH//Z"/><mask id="i"><g filter="url(#a)"><path style="fill:#000;fill-opacity:.4;stroke:none" d="M0 0h167.24v124.72H0z"/></g></mask><mask id="f"><use xlink:href="#b" width="100%" height="100%"/></mask><filter id="a" filterUnits="objectBoundingBox" x="0" y="0" width="1" height="1"><feColorMatrix in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><g clip-path="url(#d)" id="h"><use xlink:href="#e" mask="url(#f)" transform="translate(26.764 5.479) scale(.11947)" width="100%" height="100%"/></g></defs><path style="fill:#fff;stroke-width:1.43381" d="M4.065.004h231.869a4.056 4.056 0 0 1 4.065 4.065v170.906a4.056 4.056 0 0 1-4.065 4.064H4.064A4.056 4.056 0 0 1 0 174.975V4.07A4.056 4.056 0 0 1 4.065.004Z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.037v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.066v-.204h239.999v.204zm0-4.068v-.2h239.999v.2zm0-4.058v-.205h239.999v.204zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.061v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v!
 -.205h239.999v.205zm0-4.06V126h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.06v-.201h239.999v.2zm0-4.067v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.058v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.066v-.201h239.999v.2zm0-4.058v-.204h239.999v.204zm0-4.07v-.2h239.999v.2zm0-4.063v-.2h239.999v.2zm0-4.06v-.204h239.999v.204ZM0 69.3v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.203zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.206h239.999v.205zm0-4.067V8.13h239.999v.205zM0 4.27v-.205h239.999v.205zM0 .21V.003h239.999V.21z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.035V0h.2v179.033zm4.065 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.067 0V0h.202v179.033zm4.066 0V0h.203v179.033zm4.061 0V0h.202v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2Zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.204v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.203v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.057 0V0h.205v179.033zm4.07 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.064 0V0h.205v179.033zm4.069 0V0h.205v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.063 0V0h.205v179.033zm4.064 0V0h.205v179.033zm4.066 0V0h.205v179.033zm4.066 0V0h.201v17!
 9.033zm4..06 0V0h.202v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033z"/><path style="fill:#000;stroke-width:1.43381" d="M7.94.004v4.163h.57V.004zm223.546 0v4.163h.572V.004ZM0 7.946v.57h4.164v-.568H0Zm235.833 0v.57H240v-.568h-4.167zM0 170.525v.57h4.164v-.572H0Zm235.833 0v.57H240v-.572h-4.168zm-227.896 4.35v4.164h.571v-4.164zm223.546 0v4.164h.572v-4.164h-.57z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 170.91v-.203h239.999v.204zm0-20.318v-.205h239.999v.205zm0-20.326v-.205h239.999v.205zm0-20.323v-.2h239.999v.2zm0-20.325v-.201h239.999v.2zM0 69.3v-.204h239.999v.204zm0-20.32v-.204h239.999v.204zm0-20.325v-.205h239.999v.205zm0-20.32V8.13h239.999v.205z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M8.125 179.035V0h.2v179.033zm20.324 0V0h.203v179.033zm20.32 0V0h.205v179.033zm20.32 0V0h.208v179.033h-.2Zm20.326 0V0h.2v179.033zm20.32 0V0h.204v179.033zm20.326 0V0h.2v179.033zm20.318 0V0h.203v179.033zm20.32 0V0h.201v179.033zm20.326 0V0h.201v179.033zm20.32 0V0h.201v179.033zm20.32 0V0h.208v179.033h-.2z"/><g transform="translate(.102 .102) scale(1.43382)"><g clip-path="url(#g)"><use xlink:href="#h" mask="url(#i)" width="100%" height="100%"/></g><path style="color:#000;fill:#fff;stroke-miterlimit:10;-inkscape-stroke:none" d="M-5.67-5.668v85.039h85.041V-5.668Z" transform="matrix(1 0 0 -1 46.772 99.209)"/><use xlink:href="#j" transform="translate(46.772 25.509) scale(.12003)" width="100%" height="100%"/><path style="fill:#fff000;fill-opacity:.9;fill-rule:nonzero;stroke:none" d="M93.617 36.102h26.856V25.508H93.617Zm0 0"/><use xlink:href="#k" x="95.707" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#l" x="99.484" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#m" x="103.261" y="32.703" widt!
 h="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#n" x="107.037" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#n" x="110.82" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#o" x="114.597" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/></g></svg>
\ No newline at end of file

Added: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.tex	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,62 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\documentclass[draft,graphpaper,preflight,optimize={density=600}]{pagelayout}
+\usepackage{microtype}
+\usepackage{fontspec}
+
+\setmainfont{Menlo}
+
+\pagewidth=5.5cm
+\pageheight=4cm
+\margin=5mm
+\gutter=5mm
+\bleed=2mm
+
+\begin{document}
+  \fontsize{6.3pt}{8.6pt}\selectfont
+
+  % generic template
+  \template{ss}{
+    \text{
+      This text fills the first placeholder.
+    }
+  }
+
+  % custom template
+  \grid
+  \newtemplate{my template}{
+    \setgrid{
+      {[2]{3!}{2!}}
+    }
+    \placeholder{0 0 1 1}
+  }
+  \template{my template}{}
+  \nogrid
+
+  % graphics
+  \newborder{my border}{width=2mm, color=white, radius=5mm}
+  \newshadow{my shadow}{size=8}
+  \template[margin=7mm]{s}{
+    \graphic[
+      scale=1.05,
+      hpos=0,
+      vpos=0,
+      shadow=my shadow,
+      border=my border,
+      border radius=0mm
+    ]{kopi}
+  }
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/quickstart.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/pagelayout/tests.zip
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/pagelayout/tests.zip
===================================================================
--- trunk/Master/texmf-dist/doc/latex/pagelayout/tests.zip	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/latex/pagelayout/tests.zip	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/latex/pagelayout/tests.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.1	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.1	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,125 @@
+.\" generated with Ronn/v0.7.3
+.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.
+.TH "PAGELAYOUTAPI" "1" "January 2023" "" ""
+.
+.SH "NAME"
+\fBpagelayoutapi\fR \- API for the pagelayout LaTeX class
+.
+.SH "SYNOPSIS"
+\fBpagelayoutapi getwidth\fR % FILE
+.
+.P
+\fBpagelayoutapi optimize\fR % FILE % FILENAME % EXTENSION % ORIGINALWIDTH % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+.
+.P
+\fBpagelayoutapi makeshadow\fR % FILENAME % STANDARDDEVIATION % OPACITY % COLOR % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+.
+.P
+\fBpagelayoutapi start\fR [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+.
+.P
+\fBpagelayoutapi batchoptimize\fR % BATCHLIST
+.
+.SH "DESCRIPTION"
+This script provides an API for the pagelayout LaTeX class\.
+.
+.TP
+\fBpagelayoutapi getwidth\fR
+Returns the width in pixels for the given image file\.
+.
+.TP
+\fBpagelayoutapi optimize\fR
+Creates a cropped, rezised, sharpend and compressed image and stores it in the cache directory\.
+.
+.TP
+\fBpagelayoutapi makeshadow\fR
+Creates a shadow image and stores it in the cache directory\.
+.
+.TP
+\fBpagelayoutapi start\fR
+The import parameter triggers the image import (see pagelayout\-manual\.pdf chapter "Image Optimization")\. Running the command with the parameter turbo, where the jobname is the filename of the document, processes the document in a special batch mode, that creates a batch list and calls the command \fBpagelayoutapi batchoptimize\fR\.
+.
+.TP
+\fBpagelayoutapi batchoptimize\fR
+Optimizes multiple images in parallel\.
+.
+.SH "OPTIONS"
+.
+.TP
+\fB\-\-help\fR
+Prints a help message\.
+.
+.TP
+\fB\-\-version\fR
+Prints version information\.
+.
+.SH "PARAMETERS"
+.
+.TP
+FILE
+filename with extension (eg\. IMG1234\.JPEG)
+.
+.TP
+FILENAME
+filename without extension (eg\. IMG1234)
+.
+.TP
+EXTENSION
+optimized file extension (\.jpg|\.png)
+.
+.TP
+DENSITY
+density in ppi (eg\. 72)
+.
+.TP
+DOWNSAMPLETHRESHOLD
+downsample threshold (integer >= 100)
+.
+.TP
+UNSHARP
+unsharp filter (eg\. 2x1)
+.
+.TP
+QUALITY
+quality (integer > 0, <= 100)
+.
+.TP
+STANDARDDEVIATION
+standard deviation (decimal > 0\.0)
+.
+.TP
+OPACITY
+opacity (decimal >= 0\.0, <= 1\.0)
+.
+.TP
+COLOR
+color string (eg\. pink)
+.
+.TP
+GRAPHICSPATH
+list of directories (eg\. {images/}{tmp/})
+.
+.TP
+JOBNAME
+LaTeX filename without extension (eg\. my\-document)
+.
+.TP
+BATCHLIST
+a flat list of batch items where each batch item is a flat list of the 15 parameters required by the command `pagelayoutapi optimize`
+.
+.P
+All other parameters are length dimensions\. The command \fBpagelayoutapi optimize\fR expects integer values in the LaTeX unit sp (eg\. 65536)\. The command \fBpagelayoutapi makeshadow\fR expects decimal values in a SVG compatible unit (eg\. 420\.0pt)\.
+.
+.SH "ENVIRONMENT"
+\fBpagelayoutapi\fR requires ImageMagick 7\.0 or later and Inkscape 1\.0 or later\.
+.
+.TP
+\fBPAGELAYOUT_IMPORT_DIRECTORY\fR
+Defines a system wide import directory\.
+.
+.SH "AUTHOR"
+\fBpagelayoutapi\fR was written by Friedemann Bartels\. \fIhttps://github\.com/friedemannbartels\fR
+.
+.SH "LICENSE"
+Copyright (c) 2022-2023 Friedemann Bartels\. Free use of this software is granted under the terms of the LaTeX Project Public License version 1\.3c or later\.


Property changes on: trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.1
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.man1.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.man1.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.man1.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.man1.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/man/man1/pagelayoutapi.man1.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/man/man1/textestvis.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/textestvis.1	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/man/man1/textestvis.1	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,73 @@
+.\" generated with Ronn/v0.7.3
+.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.
+.TH "TEXTESTVIS" "1" "January 2023" "" ""
+.
+.SH "NAME"
+\fBtextestvis\fR \- visual regression tests for LaTeX
+.
+.SH "SYNOPSIS"
+\fBtextestvis\fR [\-cs] [\-e ENGINE] [\-d DENSITY] [PATTERN]
+.
+.P
+\fBtextestvis approve\fR [\-e ENGINE] [PATTERN]
+.
+.P
+\fBtextestvis compare\fR [\-d DENSITY] FILE FILE
+.
+.P
+\fBtextestvis perf\fR [\-cs] [\-e ENGINE] FILE
+.
+.SH "DESCRIPTION"
+Perform visual regression tests for LaTeX documents\.
+.
+.TP
+\fBtextestvis\fR
+Creates PDF files for all tex files matching the pattern and performs a visual regression test\. If no pattern is specified, all files in the current directory are tested except for files whose names begin with an underscore\.
+.
+.TP
+\fBtextestvis approve\fR
+Replaces the reference files with the test files\.
+.
+.TP
+\fBtextestvis compare\fR
+Creates a visual diff for two pdf files\.
+.
+.TP
+\fBtextestvis perf\fR
+Measures the time for creating a pdf file from the given tex file\.
+.
+.SH "OPTIONS"
+.
+.TP
+\fB\-c\fR
+Clears cache\.
+.
+.TP
+\fB\-s\fR
+Enables shell escape\.
+.
+.TP
+\fB\-d\fR \fIDENSITY\fR
+Sets density in ppi (default 72)\.
+.
+.TP
+\fB\-e\fR \fIENGINE\fR
+Sets latex engine (default xelatex)\.
+.
+.TP
+\fB\-\-help\fR
+Prints a help message\.
+.
+.TP
+\fB\-\-version\fR
+Prints version information\.
+.
+.SH "ENVIRONMENT"
+\fBtextestvis\fR requires ImageMagick 7\.0 or later\.
+.
+.SH "AUTHOR"
+\fBtextestvis\fR was written by Friedemann Bartels\. \fIhttps://github\.com/friedemannbartels\fR
+.
+.SH "LICENSE"
+Copyright (c) 2022-2023 Friedemann Bartels\. Free use of this software is granted under the terms of the LaTeX Project Public License version 1\.3c or later\.


Property changes on: trunk/Master/texmf-dist/doc/man/man1/textestvis.1
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/man/man1/textestvis.man1.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/man/man1/textestvis.man1.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/textestvis.man1.pdf	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/texmf-dist/doc/man/man1/textestvis.man1.pdf	2023-01-24 21:10:39 UTC (rev 65625)

Property changes on: trunk/Master/texmf-dist/doc/man/man1/textestvis.man1.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi
===================================================================
--- trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,371 @@
+#!/bin/sh
+#
+# Copyright (c) 2022-2023 by Friedemann Bartels
+#
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c 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.
+#
+
+version=1.0.3
+
+_convert() {
+  turbo=$1
+  filename=$2
+  filenamecache=$3
+  fileextcache=$4
+  originalwidthsp=$5
+  originalheightsp=$6
+  originalcropleftsp=$7
+  originalcroprightsp=$8
+  originalcroptopsp=$9
+  originalcropbottomsp=${10}
+  density=${11}
+  displaywidth=${12}
+  displayheight=${13}
+  resizethreshold=${14}
+  unsharp=${15}
+  quality="${16}"
+
+  mkdir -p cache/"$filenamecache"
+  originalwidth=$( magick identify -ping -format %w "$filename" )
+  originalheight=$( magick identify -ping -format %h "$filename" )
+  width=$(( (10 * originalwidth * (originalwidthsp - originalcropleftsp - originalcroprightsp) / originalwidthsp + 5) / 10 ))
+  height=$(( (10 * originalheight * (originalheightsp - originalcroptopsp - originalcropbottomsp) / originalheightsp + 5) / 10 ))
+  cropleft=$(( (10 * originalwidth * originalcropleftsp / originalwidthsp + 5) / 10 ))
+  croptop=$(( (10 * originalheight * originalcroptopsp / originalheightsp + 5) / 10 ))
+  resizewidth=$(( (10 * displaywidth * 100 * density / 473628672 + 5) / 10 ))
+  if [ $(( resizewidth * resizethreshold / 100 )) -gt $width ]; then
+    resizewidth=$width
+    resizeheight=$height
+  else
+    resizeheight=$(( resizewidth * height / width + 1 ))
+  fi
+
+  x="x"
+  if [ $turbo = 1 ]; then
+    export MAGICK_THREAD_LIMIT=1
+  fi
+  if [ "$quality" != "" ]; then
+    quality="-quality $quality"
+  fi
+  if [ "$unsharp" != "" ]; then
+    unsharp="-unsharp $unsharp"
+  fi
+
+  magick "$filename" -crop $width$x$height+$cropleft+$croptop -resize $resizewidth$x$resizeheight $unsharp $quality "cache/$filenamecache/.g$fileextcache"
+  mv "cache/$filenamecache/.g$fileextcache" "cache/$filenamecache/g$fileextcache"
+}
+
+_startbatchprocess() {
+  success=0
+  for file in cache/*; do
+    if [ -f "$file" ]; then
+      success=1
+      name=$( basename "${file}" )
+      mv "$file" "cache/.$name" 2> /dev/null
+      if [ $? -eq 0 ]; then
+        line=$(head -n 1 "cache/.$name")
+
+        IFS="%"
+        set -- $line
+        IFS=" "
+        _convert 1 "$@"
+
+        rm "cache/.$name"
+        break
+      fi
+    fi
+  done
+
+  if [ $success -eq 1 ]; then
+    _startbatchprocess
+  fi
+}
+
+getwidth() {
+  if command -v magick >/dev/null 2>&1; then
+    filename=$1
+
+    originalwidth=$( magick identify -ping -format %w "$filename" )
+    echo $originalwidth
+  else
+    echo errormagicknotinstalled
+  fi
+}
+
+optimize() {
+  if command -v magick >/dev/null 2>&1; then
+    filenamecache=$2
+    fileextcache=$3
+
+    if [ -f cache/"$filenamecache" ]; then
+      mv cache/"$filenamecache" cache/."$filenamecache" 2> /dev/null
+      if [ $? -eq 0 ]; then
+        line=$(head -n 1 "cache/.$filenamecache")
+
+        IFS="%"
+        set -- $line
+        IFS=" "
+        _convert 1 "$@"
+
+        rm "cache/.$filenamecache"
+      else
+        while [ ! -f cache/"$filenamecache"/g"$fileextcache" ]; do
+          sleep 0.05
+        done
+      fi
+    elif [ -d cache/"$filenamecache" ]; then
+      while [ ! -f cache/"$filenamecache"/g"$fileextcache" ]; do
+        sleep 0.05
+      done
+    else
+      _convert 0 "$@"
+    fi
+
+    echo ok
+  else
+    echo errormagicknotinstalled
+  fi
+}
+
+makeshadow() {
+  if command -v magick >/dev/null 2>&1; then
+    filename=$1
+    stdDeviation=$2
+    opacity=$3
+    fill=$4
+    width=$5
+    height=$6
+    framewidth=$7
+    frameheight=$8
+    frameborder=$9
+    frameradius=${10}
+
+    [ ! -d cache ] && mkdir cache
+    mkdir -p cache/$filename
+    echo "<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+      <svg
+        width='$width'
+        height='$height'
+        version='1.1'
+        xmlns='http://www.w3.org/2000/svg'
+        xmlns:svg='http://www.w3.org/2000/svg'>
+        <defs>
+          <filter
+            style='color-interpolation-filters:sRGB'
+            id='blur'
+            x='-4'
+            y='-4'
+            width='8'
+            height='8'>
+            <feGaussianBlur
+              stdDeviation='$stdDeviation' />
+          </filter>
+        </defs>
+        <rect
+          style='filter:url(#blur);opacity:$opacity;fill:$fill'
+          width='$framewidth'
+          height='$frameheight'
+          x='$frameborder'
+          y='$frameborder'
+          rx='$frameradius'
+          ry='$frameradius' />
+      </svg>
+    " > cache/$filename/s.svg
+    inkscape cache/$filename/s.svg --export-dpi=600 --export-filename cache/$filename/s.pdf
+    rm cache/$filename/s.svg
+
+    echo ok
+  else
+    echo errorinkscapenotinstalled
+  fi
+}
+
+import() {
+  if [ -d import ]; then
+    importdir=import
+  elif [ "$PAGELAYOUT_IMPORT_DIRECTORY" != "" ]; then
+    if [ -d "$PAGELAYOUT_IMPORT_DIRECTORY" ]; then
+      importdir="$PAGELAYOUT_IMPORT_DIRECTORY"
+    else
+      echo $PAGELAYOUT_IMPORT_DIRECTORY
+      exit
+    fi
+  else
+    echo errornoimportdir
+    exit
+  fi
+
+  defaultdirectory=$( echo $1 | sed -e 's/^{//g' | sed -e 's/}{.*//g' )
+  directorylist=$( echo $1 | sed -e 's/^{//g' | sed -e 's/}$//g' | sed -e 's/}{/$/g' )
+
+  for entry in "$importdir"/*.*
+  do
+    if [ -f "$entry" ]; then
+      name=$( basename "${entry}" )
+      if [ "$directorylist" != "" ]; then
+        echo "$directorylist" | tr '$' '\n' | while read directory; do
+          if [ -f "$directory$name" ]; then
+            mv "$entry" "$directory"
+          fi
+        done
+      fi
+      if [ -f "$entry" ]; then
+        if [ -d "$defaultdirectory" ]; then
+          mv "$entry" "$defaultdirectory"
+        else
+          mv "$entry" .
+        fi
+      fi
+      cachename=$( echo "$name" | sed -e 's/\.[a-zA-Z]*$//g' )
+      rm -rf cache/"$cachename"*
+    fi
+  done
+}
+
+startturbo() {
+  file="$(echo $1 | sed -e 's/\.pdflatex$//g')"
+  if [ -f $file.tex ]; then
+    tmpdir=$( mktemp -d 2>/dev/null )/pagelayoutturbo$( date "+%Y%m%d%H%M%S" )$RANDOM
+    mkdir $tmpdir
+
+    cp $file.tex $tmpdir/pagelayoutturbobatchoptimizexyz.tex
+
+    command=$(echo $(ps -p $PPID -o command ))
+    engine=$(echo $command | sed -e 's/^[A-Z ]*//g' | sed -e 's/ .*//g' | tr -d '\n')
+
+    case "$command" in
+      *-shell-escape*)
+        shellescape="--shell-escape"
+        ;;
+    esac
+
+    if [ "$engine" = "xelatex" ]; then
+      nopdf="-no-pdf"
+    fi
+
+    $engine $shellescape -interaction=batchmode $nopdf --output-directory $tmpdir $tmpdir/pagelayoutturbobatchoptimizexyz.tex > /dev/null
+
+    rm -rf $tmpdir
+  fi
+}
+
+batchoptimize() {
+  [ ! -d cache ] && mkdir cache
+
+  length=$(( $# / 15 ))
+  cores=$( nproc )
+  [ $cores -gt $length ] && cores=$length
+
+  while [ $length -gt 0 ]; do
+    filenamecache="$2"
+
+    if [ ! -e cache/"$filenamecache" ]; then
+      index=0
+      while [ $index -lt 15 ]; do
+        if [ $index -eq 0 ]; then
+          item="$1"
+        else
+          item="$item%$1"
+        fi
+
+        shift
+        index=$(( index + 1 ))
+      done
+
+      echo $item > cache/"$filenamecache"
+    else
+      shift 15
+    fi
+
+    length=$(( length - 1 ))
+  done
+
+  cores=$(( cores - 1 ))
+  while [ $cores -gt 0 ]; do
+    _startbatchprocess &
+    sleep 0.01
+    cores=$(( cores - 1 ))
+  done
+}
+
+usage() {
+  cat <<HELP_USAGE
+usage: pagelayoutapi getwidth % FILE
+       pagelayoutapi optimize % FILE % FILENAME % EXTENSION % ORIGINALWIDTH
+         % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM
+         % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+       pagelayoutapi makeshadow % FILENAME % STANDARDDEVIATION % OPACITY % COLOR
+         % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+       pagelayoutapi start [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+       pagelayoutapi batchoptimize % BATCHLIST
+
+   --help      Prints a help message.
+   --version   Prints version information.
+HELP_USAGE
+}
+
+version() {
+  echo pagelayoutapi $version
+}
+
+input=$( echo "$@" | sed -e 's/\\//g' | sed -e 's/ %/%/g' | sed -e 's/% /%/g' )
+IFS="%"
+set -- $input
+IFS=" "
+
+case "$1" in
+getwidth)
+  shift
+
+  getwidth "$1"
+  ;;
+optimize)
+  shift
+
+  optimize "$@"
+  ;;
+makeshadow)
+  shift
+
+  makeshadow "$@"
+  ;;
+start)
+  shift
+
+  if [ "$1" = "import" ]; then
+    shift
+
+    import "$1"
+
+    shift
+  fi
+
+  if [ "$1" = "turbo" ]; then
+    shift
+
+    startturbo "$1" &
+  fi
+
+  echo ok
+  ;;
+batchoptimize)
+  shift
+
+  batchoptimize "$@" &
+
+  echo ok
+  ;;
+--version)
+  version
+  ;;
+--help)
+  usage
+esac


Property changes on: trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi.1.md
===================================================================
--- trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi.1.md	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi.1.md	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,87 @@
+pagelayoutapi(1) -- API for the pagelayout LaTeX class
+====
+
+## SYNOPSIS
+
+`pagelayoutapi getwidth` % FILE
+
+`pagelayoutapi optimize` % FILE % FILENAME % EXTENSION % ORIGINALWIDTH % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+
+`pagelayoutapi makeshadow` % FILENAME % STANDARDDEVIATION % OPACITY % COLOR % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+
+`pagelayoutapi start` [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+
+`pagelayoutapi batchoptimize` % BATCHLIST
+
+## DESCRIPTION
+
+This script provides an API for the pagelayout LaTeX class.
+
+* `pagelayoutapi getwidth`:
+    Returns the width in pixels for the given image file.
+
+* `pagelayoutapi optimize`:
+    Creates a cropped, rezised, sharpend and compressed image and stores it in the cache directory.
+
+* `pagelayoutapi makeshadow`:
+    Creates a shadow image and stores it in the cache directory.
+
+* `pagelayoutapi start`:
+    The import parameter triggers the image import (see pagelayout-manual.pdf chapter "Image Optimization").
+    Running the command with the parameter turbo, where the jobname is the filename of the document, processes the document in a special batch mode, that creates a batch list and calls the command `pagelayoutapi batchoptimize`.
+
+* `pagelayoutapi batchoptimize`:
+    Optimizes multiple images in parallel.
+
+## OPTIONS
+
+* `--help`:
+    Prints a help message.
+* `--version`:
+    Prints version information.
+
+## PARAMETERS
+
+* FILE:
+     filename with extension (eg. IMG1234.JPEG)
+* FILENAME:
+     filename without extension (eg. IMG1234)
+* EXTENSION:
+     optimized file extension (.jpg|.png)
+* DENSITY:
+     density in ppi (eg. 72)
+* DOWNSAMPLETHRESHOLD:
+     downsample threshold (integer >= 100)
+* UNSHARP:
+     unsharp filter (eg. 2x1)
+* QUALITY:
+     quality (integer > 0, <= 100)
+* STANDARDDEVIATION:
+     standard deviation (decimal > 0.0)
+* OPACITY:
+     opacity (decimal >= 0.0, <= 1.0)
+* COLOR:
+     color string (eg. pink)
+* GRAPHICSPATH:
+     list of directories (eg. {images/}{tmp/})
+* JOBNAME:
+     LaTeX filename without extension (eg. my-document)
+* BATCHLIST:
+     a flat list of batch items where each batch item is a flat list of the 15 parameters required by the command \`pagelayoutapi optimize\`
+
+All other parameters are length dimensions. The command `pagelayoutapi optimize` expects integer values in the LaTeX unit sp (eg. 65536). The command `pagelayoutapi makeshadow` expects decimal values in a SVG compatible unit (eg. 420.0pt).
+
+## ENVIRONMENT
+
+`pagelayoutapi` requires ImageMagick 7.0 or later and Inkscape 1.0 or later.
+
+* `PAGELAYOUT_IMPORT_DIRECTORY`:
+    Defines a system wide import directory.
+
+## AUTHOR
+
+`pagelayoutapi` was written by Friedemann Bartels. <https://github.com/friedemannbartels>
+
+## LICENSE
+
+Copyright (c) 2022-2023 Friedemann Bartels. Free use of this software is granted under the terms of the LaTeX Project Public License version 1.3c or later.


Property changes on: trunk/Master/texmf-dist/scripts/pagelayout/pagelayoutapi.1.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/scripts/pagelayout/textestvis
===================================================================
--- trunk/Master/texmf-dist/scripts/pagelayout/textestvis	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/pagelayout/textestvis	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,506 @@
+#!/bin/sh
+#
+# Copyright (c) 2022-2023 by Friedemann Bartels
+#
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c 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.
+#
+
+version=1.0.3
+
+OK="$( tput setaf 2 )•$( tput sgr0 )"
+FAILED="$( tput setaf 1 )$( tput bold )x$( tput sgr0 )"
+NEW="$( tput setaf 3 )$( tput bold )+$( tput sgr0 )"
+REMOVED="$( tput setaf 5 )$( tput bold )-$( tput sgr0 )"
+ERROR="$( tput setaf 1 )$( tput bold )!$( tput sgr0 )"
+
+_playok() {
+  if [ -f /System/Library/Sounds/Glass.aiff ]; then
+    afplay /System/Library/Sounds/Glass.aiff >/dev/null 2>&1
+  fi
+}
+
+_playhm() {
+  if [ -f /System/Library/Sounds/Basso.aiff ]; then
+    afplay /System/Library/Sounds/Basso.aiff >/dev/null 2>&1
+  fi
+}
+
+_playerror() {
+  if [ -f /System/Library/Sounds/Sosumi.aiff ]; then
+    afplay /System/Library/Sounds/Sosumi.aiff >/dev/null 2>&1
+  fi
+}
+
+_gettime() {
+  if command -v gdate &> /dev/null; then
+    echo $( gdate +%s%3N )
+  else
+    if command -v date &> /dev/null; then
+      milliseconds=$( date +%3N )
+      if [ $milliseconds = 3N ]; then
+        echo $(( SECONDS * 1000 ))
+      else
+        echo $( date +%s%3N )
+      fi
+    else
+      echo $(( SECONDS * 1000 ))
+    fi
+  fi
+}
+
+_starttimer() {
+  starttime=$( _gettime )
+}
+
+_stoptimer() {
+  endtime=$( _gettime )
+
+  elapsedtime=$(( endtime - starttime ))
+  elapsedseconds=$(( elapsedtime / 1000 ))
+  elapsedmilliseconds=$(( elapsedtime % 1000 ))
+  elapsed=$elapsedseconds.$( printf "%03d" "$elapsedmilliseconds" )
+}
+
+test() {
+  _starttimer
+  tmpdir=$( mktemp -d 2>/dev/null )/textest$( date "+%Y%m%d%H%M%S" )$RANDOM
+  mkdir $tmpdir
+
+  if [ $3 = true ] && [ -d cache ]; then
+    rm -rf cache
+  fi
+
+  okcount=0
+  failedcount=0
+  newcount=0
+  removedcount=0
+  fileokcount=0
+  filefailedcount=0
+  defaultfiller=23
+
+  echo ""
+  for entry in *$5*.tex
+  do
+    if [ $entry != "*$5*.tex" ]; then
+      name=$( echo $entry | sed -e 's/\.tex$//g' )
+      if [ ${name:0:1} != _ ]; then
+        printf "$( tput sgr0 )$name"
+
+        runtwice=0
+        if [ "${name:$(( ${#name} - 2 )):2}" = "@2" ]; then
+          runtwice=1
+        fi
+
+        if [ "$4" != "xelatex" ]; then
+          name="$name.$4"
+        fi
+
+        passed=1
+        rm -f $name.failed.*
+
+        cp $entry $tmpdir/$name.tex
+        shell=""
+        if [ $1 = true ]; then
+          shell="--shell-escape"
+        fi
+        $4 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$name.tex > /dev/null
+        if [ $? -eq 1 ]; then
+          passed=0
+        fi
+        if [ $runtwice -eq 1 ]; then
+          $4 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$name.tex > /dev/null
+          if [ $? -eq 1 ]; then
+            passed=0
+          fi
+        fi
+
+        magick convert -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png
+        if [ -f "$tmpdir/$name.png" ]; then
+          mv $tmpdir/$name.png $tmpdir/$name-0.png
+        fi
+
+        if [ -f "$name.approved.pdf" ]; then
+          magick convert -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png
+          if [ -f "$tmpdir/$name.approved.png" ]; then
+            mv $tmpdir/$name.approved.png $tmpdir/$name.approved-0.png
+          fi
+        fi
+
+        if [ $passed -eq 0 ]; then
+          filler=$(( defaultfiller - ${#name} - 2 ))
+        else
+          filler=$(( defaultfiller - ${#name} ))
+        fi
+        while [ 0 -le $filler ]; do
+          printf " "
+          filler=$(( filler - 1 ))
+        done
+        if [ $passed -eq 0 ]; then
+          printf " $ERROR"
+        fi
+
+        index=0
+        while [ -f "$tmpdir/$name-$index.png" ]; do
+          if [ -f "$tmpdir/$name.approved-$index.png" ]; then
+            changedpixels=$( magick compare -quiet -metric AE $tmpdir/$name-$index.png $tmpdir/$name.approved-$index.png null: 2>&1 )
+            if [ $changedpixels -eq 0 ]; then
+              okcount=$(( okcount + 1 ))
+              printf " $OK"
+            else
+              failedcount=$(( failedcount + 1 ))
+              passed=0
+              printf " $FAILED"
+              magick compare -quiet $tmpdir/$name-$index.png $tmpdir/$name.approved-$index.png $name.failed.$(( index + 1 )).png
+              if [ -f "$tmpdir/$name.pdf" ]; then
+                mv $tmpdir/$name.pdf $name.failed.pdf
+              fi
+            fi
+          else
+            newcount=$(( newcount + 1 ))
+            passed=0
+            printf " $NEW"
+            mv $tmpdir/$name-$index.png $name.failed.$(( index + 1 )).png
+            if [ -f "$tmpdir/$name.pdf" ]; then
+              mv $tmpdir/$name.pdf $name.failed.pdf
+            fi
+          fi
+          index=$(( index + 1 ))
+          if [ `expr $index % 20` -eq 0 ] && [ -f "$tmpdir/$name-$index.png" ]; then
+            echo ""
+            filler=$defaultfiller
+            while [ 0 -le $filler ]; do
+              printf " "
+              filler=$(( filler - 1 ))
+            done
+          fi
+        done
+        while [ -f "$tmpdir/$name.approved-$index.png" ]; do
+          removedcount=$(( removedcount + 1 ))
+          passed=0
+          printf " $REMOVED"
+          mv $tmpdir/$name.approved-$index.png $name.failed.$(( index + 1 )).png
+          if [ -f "$tmpdir/$name.pdf" ]; then
+            mv $tmpdir/$name.pdf $name.failed.pdf
+          fi
+          index=$(( index + 1 ))
+          if [ `expr $index % 20` -eq 0 ] && [ -f "$tmpdir/$name.approved-$index.png" ]; then
+            echo ""
+            filler=$defaultfiller
+            while [ 0 -le $filler ]; do
+              printf " "
+              filler=$(( filler - 1 ))
+            done
+          fi
+        done
+
+        if [ $passed -eq 1 ]; then
+          fileokcount=$(( fileokcount + 1 ))
+        else
+          filefailedcount=$(( filefailedcount + 1 ))
+        fi
+
+        echo ""
+      fi
+    fi
+  done
+
+  rm -rf $tmpdir
+  _stoptimer
+  seconds=$( printf "%.1f" "$elapsed" )
+
+  filecount=$(( fileokcount + filefailedcount ))
+
+  if [ $filecount -gt 0 ]; then
+    echo ""
+  fi
+  if [ $filecount -eq $fileokcount ]; then
+    if [ $filecount -eq 0 ]; then
+      _playhm &
+      echo "$( tput sgr0 )Tested 0 files 🧐."
+    else
+      _playok &
+      echo "$( tput sgr0 )Successfully tested $filecount files in $seconds seconds 🎉."
+    fi
+    echo ""
+  else
+    _playerror &
+    echo "$( tput sgr0 )Tested $filecount files in $seconds seconds."
+    echo ""
+
+    if [ $fileokcount -gt 0 ]; then
+      filler=$(( 6 + ${#filecount} - ${#fileokcount} ))
+      while [ 0 -le $filler ]; do
+        printf " "
+        filler=$(( filler - 1 ))
+      done
+      printf "$( tput setaf 2 )$fileokcount OK$( tput sgr0 )"
+      echo ""
+    fi
+    if [ $filefailedcount -gt 0 ]; then
+      filler=$(( 6 + ${#filecount} - ${#filefailedcount} ))
+      while [ 0 -le $filler ]; do
+        printf " "
+        filler=$(( filler - 1 ))
+      done
+      printf "$( tput setaf 1 )$filefailedcount Failed$( tput sgr0 )"
+      echo ""
+    fi
+    echo ""
+    exit 1
+  fi
+}
+
+approve() {
+  filecount=0
+
+  suffix=""
+  if [ "$1" != "xelatex" ]; then
+    suffix=".$1"
+  fi
+
+  echo ""
+  for entry in *$2*$suffix.failed.pdf
+  do
+    if [ $entry != "*$2*$suffix.failed.pdf" ]; then
+      filecount=$(( filecount + 1 ))
+      name=$( echo $entry | sed -e "s/$suffix.failed.pdf//" )
+      echo $name
+      rm -f $name$suffix.approved.pdf
+      if [ -f "$name.aux" ]; then
+        cp $name$suffix.failed.pdf $name$suffix.approved.pdf
+      else
+        mv $name$suffix.failed.pdf $name$suffix.approved.pdf
+      fi
+
+      rm -f $name$suffix.failed.*
+    fi
+  done
+
+  if [ $filecount -gt 0 ]; then
+    echo ""
+  fi
+  if [ $filecount -eq 1 ]; then
+    echo "Approved 1 file."
+  else
+    echo "Approved $filecount files."
+  fi
+  echo ""
+}
+
+compare() {
+  filea=$2
+  fileb=$3
+  tmpdir=$( mktemp -d 2>/dev/null)/textest$( date "+%Y%m%d%H%M%S" )$RANDOM
+  mkdir $tmpdir
+
+  namea=$( echo $filea | sed -e 's/\.\///g' | sed -e 's/\.pdf$//g' )
+  nameb=$( echo $fileb | sed -e 's/\.\///g' | sed -e 's/\.pdf$//g' )
+  basenamea=$(basename $namea)
+  basenameb=$(basename $nameb)
+
+  rm -f $namea.diff.*.png
+
+  spacer=""
+  if [ -f "$filea" ]; then
+    if [ -f "$fileb" ]; then
+      magick convert -density $1 -quiet $filea $tmpdir/$basenamea.png
+      if [ -f "$tmpdir/$basenamea.png" ]; then
+        mv $tmpdir/$basenamea.png $tmpdir/$basenamea-0.png
+      fi
+      magick convert -density $1 -quiet $fileb $tmpdir/$basenameb.png
+      if [ -f "$tmpdir/$basenameb.png" ]; then
+        mv $tmpdir/$basenameb.png $tmpdir/$basenameb-0.png
+      fi
+
+      index=0
+      while [ -f "$tmpdir/$basenamea-$index.png" ]; do
+        if [ -f "$tmpdir/$basenameb-$index.png" ]; then
+          changedpixels=$( magick compare -quiet -metric AE $tmpdir/$basenamea-$index.png $tmpdir/$basenameb-$index.png null: 2>&1 )
+          if [ $changedpixels -eq 0 ]; then
+            printf "$spacer$OK"
+            spacer=" "
+          else
+            printf "$spacer$FAILED"
+            spacer=" "
+            magick compare -quiet $tmpdir/$basenamea-$index.png $tmpdir/$basenameb-$index.png $namea.diff.$(( index + 1 )).png
+          fi
+        else
+          printf "$spacer$NEW"
+          spacer=" "
+        fi
+        index=$(( index + 1 ))
+      done
+      while [ -f "$tmpdir/$basenameb-$index.png" ]; do
+        printf "$spacer$REMOVED"
+        spacer=" "
+        index=$(( index + 1 ))
+      done
+      echo ""
+    else
+      echo "File $fileb not found."
+    fi
+  else
+    echo "File $filea not found."
+  fi
+
+  rm -rf $tmpdir
+}
+
+perf() {
+  if [ -f $4 ]; then
+    tmpdir=$( mktemp -d 2>/dev/null )/textestperf$( date "+%Y%m%d%H%M%S" )$RANDOM
+    mkdir $tmpdir
+    basename=$(basename $4)
+
+    if [ $1 = true ] && [ -d cache ]; then
+      rm -rf cache
+    fi
+
+    cp $4 $tmpdir
+    shell=""
+    if [ $2 = true ]; then
+      shell="--shell-escape"
+    fi
+    _starttimer
+    $3 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$basename > /dev/null
+    _stoptimer
+    echo "$elapsed"
+
+    rm -rf $tmpdir
+  else
+    echo "File $4 not found."
+  fi
+}
+
+usage() {
+  cat <<HELP_USAGE
+usage: textest [-cs] [-e ENGINE] [-d DENSITY] [PATTERN]
+       textest approve [-e ENGINE] [PATTERN]
+       textest compare [-d DENSITY] FILE FILE
+       textest perf [-cs] [-e ENGINE] FILE
+
+   -c          Clears cache.
+   -s          Enables shell escape.
+   -d DENSITY  Sets density in ppi (default 72).
+   -e ENGINE   Sets latex engine (default xelatex).
+   --help      Prints a help message.
+   --version   Prints version information.
+HELP_USAGE
+}
+
+version() {
+  echo textest $version
+}
+
+case "$1" in
+approve)
+  shift
+  engine=xelatex
+
+  while getopts ":e:" arg; do
+    case "${arg}" in
+      e)
+        engine="${OPTARG}"
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  approve $engine $1
+  ;;
+compare)
+  shift
+
+  density=72
+
+  while getopts ":d:" arg; do
+    case "${arg}" in
+      d)
+        density="${OPTARG}"
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  compare $density $1 $2
+  ;;
+perf)
+  shift
+
+  shell=false
+  clear=false
+  engine=xelatex
+
+  while getopts ":e:sc" arg; do
+    case "${arg}" in
+      c)
+        clear=true
+        ;;
+      e)
+        engine="${OPTARG}"
+        ;;
+      s)
+        shell=true
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  perf $clear $shell $engine $1
+  ;;
+--version)
+  version
+  ;;
+--help)
+  usage
+  ;;
+*)
+  density=72
+  shell=false
+  clear=false
+  engine=xelatex
+
+  while getopts ":e:d:sc" arg; do
+    case "${arg}" in
+      c)
+        clear=true
+        ;;
+      d)
+        density="${OPTARG}"
+        ;;
+      e)
+        engine="${OPTARG}"
+        ;;
+      s)
+        shell=true
+        ;;
+      ?)
+        echo "Invalid option: -${OPTARG}."
+        ;;
+    esac
+  done
+
+  shift "$(( OPTIND - 1 ))"
+
+  test $shell $density $clear $engine $1
+esac


Property changes on: trunk/Master/texmf-dist/scripts/pagelayout/textestvis
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/scripts/pagelayout/textestvis.1.md
===================================================================
--- trunk/Master/texmf-dist/scripts/pagelayout/textestvis.1.md	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/pagelayout/textestvis.1.md	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,55 @@
+textestvis(1) -- visual regression tests for LaTeX
+====
+
+## SYNOPSIS
+
+`textestvis` [-cs] [-e ENGINE] [-d DENSITY] [PATTERN]
+
+`textestvis approve` [-e ENGINE] [PATTERN]
+
+`textestvis compare` [-d DENSITY] FILE FILE
+
+`textestvis perf` [-cs] [-e ENGINE] FILE
+
+## DESCRIPTION
+
+Perform visual regression tests for LaTeX documents.
+
+* `textestvis`:
+    Creates PDF files for all tex files matching the pattern and performs a visual regression test. If no pattern is specified, all files in the current directory are tested except for files whose names begin with an underscore.
+
+* `textestvis approve`:
+    Replaces the reference files with the test files.
+
+* `textestvis compare`:
+    Creates a visual diff for two pdf files.
+
+* `textestvis perf`:
+    Measures the time for creating a pdf file from the given tex file.
+
+## OPTIONS
+
+* `-c`:
+    Clears cache.
+* `-s`:
+    Enables shell escape.
+* `-d` <DENSITY>:
+    Sets density in ppi (default 72).
+* `-e` <ENGINE>:
+    Sets latex engine (default xelatex).
+* `--help`:
+    Prints a help message.
+* `--version`:
+    Prints version information.
+
+## ENVIRONMENT
+
+`textestvis` requires ImageMagick 7.0 or later.
+
+## AUTHOR
+
+`textestvis` was written by Friedemann Bartels. <https://github.com/friedemannbartels>
+
+## LICENSE
+
+Copyright (c) 2022-2023 Friedemann Bartels. Free use of this software is granted under the terms of the LaTeX Project Public License version 1.3c or later.


Property changes on: trunk/Master/texmf-dist/scripts/pagelayout/textestvis.1.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/pagelayout/pagelayout.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/pagelayout/pagelayout.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/pagelayout/pagelayout.cls	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,3747 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c 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.
+%%
+
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\ProvidesClass{pagelayout}[2023/01/23 Layout graphic rich documents]
+\def\pagelayoutversion{1.0.3}
+
+% packages
+\RequirePackage{pgfopts}
+\RequirePackage{tikz}
+\RequirePackage{tcolorbox}
+\tcbuselibrary{magazine}
+
+% helper
+\def\pal at emptystring{}
+\def\pal at striplastexclamationmark#1{\pal at striplastexclamationmarka{#1}#1\end !\end\eend}
+\def\pal at striplastexclamationmarka#1#2!\end#3\eend{\ifx\end#3\end#1\else#2\fi}
+\def\pal at instring#1#2{TT\fi\begingroup\edef\pal at x{\endgroup\noexpand\in@{#1}{#2}}\pal at x\ifin@}
+\def\pal at dimentonumber#1{\strip at pt\dimexpr #1*65536/\number\dimexpr 1\unitlength}
+
+% ifs
+\newif\ifpal at leftpage
+\newif\ifpal at rightpage
+
+\newif\ifpal at twoside
+\newif\ifpal at fanfold
+\newif\ifpal at cover
+\newif\ifpal at beginleft
+\newif\ifpal at beginright
+\newif\ifpal at grid
+\newif\ifpal at preflight
+\newif\ifpal at graphpaper
+\newif\ifpal at placeholder
+\newif\ifpal at safezone
+\newif\ifpal at cuttingmarks
+\newif\ifpal at fillpages
+\newif\ifpal at frontcover
+\newif\ifpal at backcover
+
+\newif\ifpal at hascover
+\newif\ifpal at haspages
+\newif\ifpal at isdoublepage
+\newif\ifpal at ispage
+\newif\ifpal at isemptypage
+\newif\ifpal at haslastemptypage
+\newif\ifpal at hasoddnumberofpages
+\newif\ifpal at cuttingmarksvisible
+\newif\ifpal at isfanfoldopen
+\newif\ifpal at isinitgrid
+\newif\ifpal at haspagegraphic
+\newif\ifpal at isperformancemode
+\newif\ifpal at isturbomode
+\newif\ifpal at isbatchmode
+\newif\ifpal at ismaskrequired
+\newif\ifpal at optimize
+\newif\ifpal at import
+\newif\ifpal at isluatex
+
+% dimensions
+\newdimen\pal at null\pal at null=0pt
+\newdimen\pal at undefdim\pal at undefdim=-1sp
+
+\ifdefined\pagewidth\pal at isluatextrue\else\newdimen\pagewidth\newdimen\pageheight\fi
+\newdimen\bleed\newdimen\outerbleed\newdimen\innerbleed\newdimen\topbleed\newdimen\bottombleed
+\newdimen\safetymargin\newdimen\topsafetymargin\newdimen\bottomsafetymargin\newdimen\innersafetymargin\newdimen\outersafetymargin
+\newdimen\innermargin\newdimen\bottommargin\newdimen\outermargin\newdimen\margin
+\newdimen\gutter\newdimen\spinewidth\newdimen\bindingoffset
+\newdimen\coverwidth\newdimen\coverheight
+\newdimen\coverbleed\newdimen\coverouterbleed\newdimen\coverinnerbleed\newdimen\covertopbleed\newdimen\coverbottombleed
+\newdimen\coversafetymargin\newdimen\covertopsafetymargin\newdimen\coverbottomsafetymargin\newdimen\coverinnersafetymargin\newdimen\coveroutersafetymargin
+
+\newdimen\pal at pagewidth\newdimen\pal at pageheight
+\newdimen\pal at outerbleed\newdimen\pal at innerbleed\newdimen\pal at topbleed\newdimen\pal at bottombleed
+\newdimen\pal at topsafetymargin\newdimen\pal at bottomsafetymargin\newdimen\pal at innersafetymargin\newdimen\pal at outersafetymargin
+\newdimen\pal at topmargin\newdimen\pal at topmargintmp\newdimen\pal at innermargin\newdimen\pal at bottommargin\newdimen\pal at outermargin
+\newdimen\pal at gutter
+\newdimen\pal at x\newdimen\pal at y\newdimen\pal at xx\newdimen\pal at yy\newdimen\width\newdimen\height\newdimen\x\newdimen\y
+\newdimen\pal at gridoffsethorizontal\newdimen\pal at gridoffsetvertical\newdimen\pal at gridoffsethorizontaln\newdimen\pal at gridoffsetverticaln
+\newdimen\pal at graphpaperx\newdimen\pal at graphpapery\newdimen\pal at graphpaperoffset\newdimen\pal at graphpapersnap
+
+% interface
+\newcommand\ifleftpage[1]{\ifpal at leftpage#1\fi}
+\newcommand\ifrightpage[1]{\ifpal at rightpage#1\fi}
+\newcommand\ifspine[1]{\ifpal at cover#1\fi}
+\def\twoside{\pal at twosidetrue}
+\def\fanfold{\pal at fanfoldtrue}
+\def\cover{\pal at covertrue}
+\def\beginleft{\pal at beginlefttrue}
+\def\beginright{\pal at beginrighttrue}
+\def\grid{\pal at gridtrue}\def\nogrid{\pal at gridfalse}
+\def\preflight{\pal at preflighttrue}\def\nopreflight{\pal at preflightfalse}
+\def\graphpaper{\pal at graphpapertrue}\def\nographpaper{\pal at graphpaperfalse}
+\def\placeholders{\pal at placeholdertrue}\def\noplaceholders{\pal at placeholderfalse}
+\def\safezone{\pal at safezonetrue}\def\nosafezone{\pal at safezonefalse}
+\def\cuttingmarks{\pal at cuttingmarkstrue}\def\nocuttingmarks{\pal at cuttingmarksfalse}
+\def\fillpages{\pal at fillpagestrue}\def\nofillpages{\pal at fillpagesfalse}
+\newcommand\optimize[1][]{\pal at optimizetrue\pgfkeys{optimize,#1}}
+\def\density#1{\def\pal at density{#1}}
+\def\quality#1{\def\pal at quality{#1}}
+\def\import{\pal at importtrue}
+
+\def\setgraphpaper#1{
+  \def\pal at graphpaperconfig{#1}
+  \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+    \global\pal at graphpapersnap=\pal at graphpaperconfigitem
+  }
+}
+\setgraphpaper{1mm,5mm}
+
+\def\pal at pagecolormodel{}
+\def\pal at pagecolor{}
+\renewcommand\pagecolor[2][]{
+  \ifpal at ispage
+    \def\pal at pagecolormodel{#1}
+    \def\pal at pagecolor{#2}
+  \else
+    \global\def\pal at pagecolormodel{#1}
+    \global\def\pal at pagecolor{#2}
+  \fi
+}
+\newcommand\setpagecolor[2][]{\pagecolor[#1]{#2}}
+\def\nopagecolor{\pagecolor{}}
+
+\def\pal at current@color{black}
+\let\pal at originalcolor\color
+\def\color#1{\ifpal at ispage\ifx\pal at current@color#1\else\def\pal at current@color{#1}\pal at originalcolor{#1}\fi\else\def\paloptions at color{#1}\fi}
+\def\setcolor#1{\color{#1}}
+
+\let\pal at originalpagenumbering\pagenumbering
+\newif\ifpal at pagenumberinghaschanged
+\renewcommand\pagenumbering[1]{\pal at pagenumberinghaschangedtrue\pal at originalpagenumbering{#1}}
+
+% options
+\def\pal at density{300}
+\def\pal at downsamplethreshold{120}
+\def\pal at quality{}
+\def\pal at unsharp{2x1}
+\pgfkeysdef{/optimize/downsample threshold}{
+  \pgfmathqparse{#1pt*100pt}
+  \pgfmathround{\pgfmathresult}
+  \pgfmathint{\pgfmathresult}
+  \edef\pal at downsamplethreshold{\pgfmathresult}
+}
+\pgfkeys{
+  /optimize/.is family,
+  /optimize,
+  density/.store in=\pal at density,
+  quality/.store in=\pal at quality,
+  unsharp/.store in=\pal at unsharp,
+}
+\pgfkeys{
+  /pal/.cd,
+  % page dimensions
+  pagewidth/.code={\setlength{\pagewidth}{#1}},pagewidth=210mm,
+  pageheight/.code={\setlength{\pageheight}{#1}},pageheight=297mm,
+  bleed/.code={\setlength{\bleed}{#1}},bleed=0pt,
+  outerbleed/.code={\setlength{\outerbleed}{#1}},outerbleed=\pal at undefdim,
+  innerbleed/.code={\setlength{\innerbleed}{#1}},innerbleed=\pal at undefdim,
+  topbleed/.code={\setlength{\topbleed}{#1}},topbleed=\pal at undefdim,
+  bottombleed/.code={\setlength{\bottombleed}{#1}},bottombleed=\pal at undefdim,
+  safetymargin/.code={\setlength{\safetymargin}{#1}},safetymargin=0pt,
+  outersafetymargin/.code={\setlength{\outersafetymargin}{#1}},outersafetymargin=\pal at undefdim,
+  innersafetymargin/.code={\setlength{\innersafetymargin}{#1}},innersafetymargin=\pal at undefdim,
+  topsafetymargin/.code={\setlength{\topsafetymargin}{#1}},topsafetymargin=\pal at undefdim,
+  bottomsafetymargin/.code={\setlength{\bottomsafetymargin}{#1}},bottomsafetymargin=\pal at undefdim,
+  % cover dimensions
+  coverwidth/.code={\setlength{\coverwidth}{#1}},coverwidth=\pal at undefdim,
+  coverheight/.code={\setlength{\coverheight}{#1}},coverheight=\pal at undefdim,
+  coverbleed/.code={\setlength{\coverbleed}{#1}},coverbleed=\pal at undefdim,
+  coverouterbleed/.code={\setlength{\coverouterbleed}{#1}},coverouterbleed=\pal at undefdim,
+  coverinnerbleed/.code={\setlength{\coverinnerbleed}{#1}},coverinnerbleed=\pal at undefdim,
+  covertopbleed/.code={\setlength{\covertopbleed}{#1}},covertopbleed=\pal at undefdim,
+  coverbottombleed/.code={\setlength{\coverbottombleed}{#1}},coverbottombleed=\pal at undefdim,
+  coversafetymargin/.code={\setlength{\coversafetymargin}{#1}},coversafetymargin=\pal at undefdim,
+  coveroutersafetymargin/.code={\setlength{\coveroutersafetymargin}{#1}},coveroutersafetymargin=\pal at undefdim,
+  coverinnersafetymargin/.code={\setlength{\coverinnersafetymargin}{#1}},coverinnersafetymargin=\pal at undefdim,
+  covertopsafetymargin/.code={\setlength{\covertopsafetymargin}{#1}},covertopsafetymargin=\pal at undefdim,
+  coverbottomsafetymargin/.code={\setlength{\coverbottomsafetymargin}{#1}},coverbottomsafetymargin=\pal at undefdim,
+  spinewidth/.code={\setlength{\spinewidth}{#1}},spinewidth=3mm,
+  bindingoffset/.code={\setlength{\bindingoffset}{#1}},bindingoffset=0pt,
+  % grid dimensions
+  margin/.code={\setlength{\margin}{#1}},margin=20mm,
+  outermargin/.code={\setlength{\outermargin}{#1}},outermargin=\pal at undefdim,
+  innermargin/.code={\setlength{\innermargin}{#1}},innermargin=\pal at undefdim,
+  topmargin/.store in=\paloptions at topmargin,topmargin=-1sp,
+  bottommargin/.code={\setlength{\bottommargin}{#1}},bottommargin=\pal at undefdim,
+  gutter/.code={\setlength{\gutter}{#1}},gutter=0pt,
+  pagecolor/.store in=\pal at pagecolor,
+  pagegraphic/.store in=\paloptions at pagegraphic,pagegraphic=,
+  color/.store in=\paloptions at color,color=black,
+  grid/.is if=pal at grid,
+  safezone/.is if=pal at safezone,
+  cuttingmarks/.is if=pal at cuttingmarks,
+  graphpaper/.is if=pal at graphpaper,
+  placeholder/.is if=pal at placeholder,
+  fillpages/.is if=pal at fillpages,
+  draft/.code={\pal at placeholdertrue\pal at fillpagestrue\pal at cuttingmarkstrue\pal at isperformancemodetrue},
+  preflight/.is if=pal at preflight,
+  twoside/.is if=pal at twoside,
+  fanfold/.code={\pal at fanfoldtrue\pal at covertrue\pal at twosidetrue\pal at beginlefttrue},
+  cover/.is if=pal at cover,
+  beginleft/.is if=pal at beginleft,
+  beginright/.is if=pal at beginright,
+  optimize/.code={\pal at optimizetrue\pgfkeys{optimize,#1}},
+  density/.store in=\pal at density,
+  quality/.store in=\pal at quality,
+  turbo/.is if=pal at isturbomode,turbo=\ifpal at isluatex false\else true\fi,
+  import/.is if=pal at import
+}
+\ProcessPgfOptions{/pal}
+
+\pal at originalcolor{\paloptions at color}
+
+\Gin at draftfalse
+
+\LoadClass[multi=picture]{standalone}
+\setlength{\topmargin}{\paloptions at topmargin}
+
+% grid
+\newdimen\pal at gridoffsetx
+\newdimen\pal at gridwidth\newdimen\pal at gridheight\newdimen\pal at maxgridheight\newdimen\pal at maxgridwidth
+\newcount\pal at gridtmp\newcount\pal at gridtmpRowH
+\newcount\pal at rowscount\newcount\pal at flexrowscount\newcount\pal at fixrowscount\newcount\pal at cellscount
+\newcount\rowsH\newcount\rowsF\newcount\rowsFlex
+\newif\ifpal at gridisflexrow
+\def\pal at set#1#2{
+  \ifcsname pal at data#1\endcsname
+  \else
+    \expandafter\newcount\csname pal at data#1\endcsname
+  \fi
+  \csname pal at data#1\endcsname#2\relax
+}
+\def\pal at get#1{
+  \ifcsname pal at data#1\endcsname
+    \csname pal at data#1\endcsname%
+  \else
+    0
+  \fi
+}
+\def\pal at advance#1#2{
+  \advance\csname pal at data#1\endcsname by \csname pal at data#2\endcsname
+}
+\newif\ifpal at flexmode
+\newif\ifpal at forcerow
+\newif\ifpal at forcecell
+\def\pal at leftsafetymargin{
+  \ifpal at backcover%
+    \pal at outersafetymargin%
+  \else%
+    \ifpal at frontcover%
+      \pal at innersafetymargin%
+    \else%
+      \ifpal at leftpage%
+        \pal at outersafetymargin%
+      \else%
+        \pal at innersafetymargin%
+      \fi%
+    \fi%
+  \fi%
+}
+\def\pal at rightsafetymargin{
+  \ifpal at backcover%
+    \pal at innersafetymargin%
+  \else%
+    \ifpal at frontcover%
+      \pal at outersafetymargin%
+    \else%
+      \ifpal at leftpage%
+        \pal at innersafetymargin%
+      \else%
+        \pal at outersafetymargin%
+      \fi%
+    \fi%
+  \fi%
+}
+\def\pal at leftbleed{
+  \ifpal at backcover%
+    \pal at outerbleed%
+  \else%
+    \ifpal at frontcover%
+      \pal at innerbleed%
+    \else%
+      \ifpal at leftpage%
+        \pal at outerbleed%
+      \else%
+        \pal at innerbleed%
+      \fi%
+    \fi%
+  \fi%
+}
+\def\pal at rightbleed{
+  \ifpal at backcover%
+    \pal at innerbleed%
+  \else%
+    \ifpal at frontcover%
+      \pal at outerbleed%
+    \else%
+      \ifpal at leftpage%
+        \pal at innerbleed%
+      \else%
+        \pal at outerbleed%
+      \fi%
+    \fi%
+  \fi%
+}
+\def\pal at leftmargin{
+  \ifpal at backcover%
+    \pal at outermargin%
+  \else%
+    \ifpal at frontcover%
+      \pal at innermargin%
+    \else%
+      \ifpal at leftpage%
+        \pal at outermargin%
+      \else%
+        \pal at innermargin%
+      \fi%
+    \fi%
+  \fi%
+}
+\newcommand\pal at addrow[1]{
+  \advance\pal at rowscount by 1
+  \pal at cells#1
+}
+\newdimen\pal at gridheightdiff
+\newdimen\pal at gridwidthdiff
+\newdimen\pal at gridstartxdim
+\newdimen\pal at gridstartydim
+\newcount\looprows
+\newcount\loopcells
+\newcommand\pal at processrows{
+  \advance\looprows 1
+  \ifnum\pal at get{if\the\looprows F}=1
+    \pal at set{\the\looprows HR}{\numexpr(\pal at gridheight-\pal at gutter*\pal at rowscount)*\pal at get{\the\looprows H}/\rowsH+\pal at gutter}
+  \else
+    \ifnum\pal at get{if\the\looprows Fix}=0
+      \pal at set{\the\looprows HR}{\numexpr(\pal at maxgridheight-\pal at gridheight)*\pal at get{\the\looprows H}/\rowsFlex+\pal at gutter}
+    \else
+      \pal at set{\the\looprows HR}{\numexpr(\pal at gridwidth-\pal at gutter*\pal at get{\the\looprows C})*\pal at get{\the\looprows H}/\pal at get{\the\looprows W}+\pal at gutter}
+    \fi
+  \fi
+  \loopcells=0
+  \loop
+    \advance\loopcells 1
+    \ifnum\pal at get{if\the\looprows-\the\loopcells F}=1
+      \pal at set{\the\looprows-\the\loopcells WR}{\numexpr(\pal at get{\the\looprows HR}-\pal at gutter)*\pal at get{\the\looprows-\the\loopcells W}/\pal at get{\the\looprows H}+\pal at gutter}
+    \else
+      \pal at set{\the\looprows-\the\loopcells WR}{\numexpr((\pal at gridwidth-\pal at gutter*\pal at get{\the\looprows C})\ifnum\pal at get{\the\looprows H}>0 -(\pal at get{\the\looprows HR}-\pal at gutter)*\pal at get{\the\looprows F}/\pal at get{\the\looprows H}\fi)*\pal at get{\the\looprows-\the\loopcells W}/(\pal at get{\the\looprows W}-\pal at get{\the\looprows F})+\pal at gutter}
+    \fi
+  \ifnum \loopcells<\pal at get{\the\looprows C}
+  \repeat
+
+  \ifnum \looprows<\pal at rowscount
+    \pal at processrows
+  \fi
+}
+\newcommand\pal at closerows{
+  \pal at topmargin=\ifdim\pal at gridtopmargin=\pal at undefdim\pal at gridmargin\else\pal at gridtopmargin\fi
+  \pal at bottommargin=\ifdim\pal at gridbottommargin=\pal at undefdim\pal at gridmargin\else\pal at gridbottommargin\fi
+  \pal at innermargin=\ifdim\pal at gridinnermargin=\pal at undefdim\pal at gridmargin\else\pal at gridinnermargin\fi
+  \pal at outermargin=\ifdim\pal at gridoutermargin=\pal at undefdim\pal at gridmargin\else\pal at gridoutermargin\fi
+
+  \height=\dimexpr\pal at pageheight - \pal at topmargin - \pal at bottommargin\relax
+  \width=\dimexpr\pal at pagewidth - \pal at innermargin - \pal at outermargin\relax
+  \ifdim\dimexpr\pal at gridoptionheight\relax=\pal at undefdim
+  \else
+    \pal at gridheightdiff=\dimexpr0.5\height - 0.5\dimexpr\pal at gridoptionheight\relax\relax
+    \pal at bottommargin=\dimexpr\pal at bottommargin+\pal at gridheightdiff\relax
+    \pal at topmargin=\dimexpr\pal at topmargin+\pal at gridheightdiff\relax
+  \fi
+  \ifdim\dimexpr\pal at gridoptionwidth\relax=\pal at undefdim
+  \else
+    \pal at gridwidthdiff=\dimexpr\pal at calculaterealgridwidth/2 - 0.5\dimexpr\pal at gridoptionwidth\relax\relax
+    \pal at innermargin=\dimexpr\pal at innermargin+\pal at gridwidthdiff\relax
+    \pal at outermargin=\dimexpr\pal at outermargin+\pal at gridwidthdiff\relax
+  \fi
+
+  \pal at gutter=\pal at gridgutter
+
+  \x=\dimexpr\pal at gridstartx{\pal at undefdim}-\pal at leftbleed\relax
+  \y=\dimexpr\pal at gridstarty{\pal at undefdim}-\pal at bottombleed\relax
+
+  \pal at gridstartxdim=\dimexpr\pal at gridstartx{\pal at gridoptionx}\relax
+  \pal at gridstartydim=\dimexpr\pal at gridstarty{\pal at gridoptiony}\relax
+
+  \pal at gridwidth=\dimexpr\pal at calculatefullgridwidth\relax
+  \ifnum\rowsH>0
+    \pal at calculategridheight
+  \else
+    \pal at gridheight=\dimexpr\pal at gutter*\pal at rowscount\relax
+  \fi
+  \pal at gridoffsetvertical=\pal at null
+  \pal at gridoffsethorizontal=\pal at null
+  \pal at gridoffsetverticaln=\pal at null
+  \pal at gridoffsethorizontaln=\pal at null
+
+  \pal at maxgridheight=\dimexpr\pal at calculatefullgridheight\relax
+  \ifdim\pal at gridheight>\pal at maxgridheight
+    \pal at gridheight=\pal at maxgridheight
+    \pal at calculategridwidth
+    \pal at gridoffsethorizontal=\dimexpr\pal at gridoptionhpos\pal at gridwidth-\pal at gridoptionhpos\pal at maxgridwidth\relax
+    \pal at gridoffsethorizontaln=\dimexpr\pal at gridwidth-\pal at maxgridwidth-\pal at gridoffsethorizontal\relax
+    \pal at gridwidth=\pal at maxgridwidth
+  \else
+    \ifpal at flexmode
+    \else
+      \ifdim\pal at gridheight<\pal at maxgridheight
+        \pal at gridoffsetvertical=\dimexpr\pal at gridoptionvpos\pal at maxgridheight-\pal at gridoptionvpos\pal at gridheight\relax
+        \pal at gridoffsetverticaln=\dimexpr\pal at maxgridheight-\pal at gridheight-\pal at gridoffsetvertical\relax
+      \fi
+    \fi
+  \fi
+
+  \looprows=0
+  \pal at processrows
+}
+\newcommand\pal at addcell[1]{
+  \advance\pal at cellscount by 1
+  \if\pal at instring{!}{#1}
+    \pal at gridtmp \pal at striplastexclamationmark{#1}\relax
+    \pal at forcecelltrue
+  \else
+    \pal at gridisflexrowtrue
+    \ifnum\numexpr0#1\relax=0
+      \pal at gridtmp 1\relax
+    \else
+      \pal at gridtmp #1\relax
+    \fi
+    \pal at forcecellfalse
+  \fi
+  \pal at set{\the\pal at rowscount-\the\pal at cellscount W}{\pal at gridtmp}
+  \ifpal at forcecell
+    \pal at set{if\the\pal at rowscount-\the\pal at cellscount F}{1}
+    \pal at advance{\the\pal at rowscount F}{\the\pal at rowscount-\the\pal at cellscount W}
+  \else
+    \pal at set{if\the\pal at rowscount-\the\pal at cellscount F}{0}
+  \fi
+  \pal at advance{\the\pal at rowscount W}{\the\pal at rowscount-\the\pal at cellscount W}
+}
+\newif\ifpal at gridtop
+\newif\ifpal at gridbottom
+\newif\ifpal at gridleft
+\newif\ifpal at gridright
+\newif\ifpal at gridfull
+\pgfkeys{
+  /grid/.is family,
+  /grid,
+  gutter/.store in=\pal at gridgutter,
+  margin/.store in=\pal at gridmargin,
+  top margin/.store in=\pal at gridtopmargin,
+  bottom margin/.store in=\pal at gridbottommargin,
+  inner margin/.store in=\pal at gridinnermargin,
+  outer margin/.store in=\pal at gridoutermargin,
+  width/.store in=\pal at gridoptionwidth,
+  height/.store in=\pal at gridoptionheight,
+  x/.store in=\pal at gridoptionx,
+  y/.store in=\pal at gridoptiony,
+  vpos/.store in=\pal at gridoptionvpos,
+  hpos/.store in=\pal at gridoptionhpos,
+}
+\def\pal at resetautogrid{
+  \global\pal at gridfullfalse
+  \def\pal at framey{0}\def\pal at framex{0}\def\pal at frameyy{1}\def\pal at framexx{1}
+  \def\pal at frameyymax{0}\def\pal at framexxmax{0}
+}
+\newcommand\setgrid[2][]{
+  \ifpal at haspages
+  \else
+    \def\pal at tmpgrid{\setgrid{#2}}
+  \fi
+  \pal at resetautogrid
+  \pgfkeys{
+    /grid,
+    gutter=\gutter,
+    margin=\margin,
+    top margin=\topmargin,
+    bottom margin=\bottommargin,
+    inner margin=\innermargin,
+    outer margin=\outermargin,
+    width=\pal at undefdim,
+    height=\pal at undefdim,
+    x=\pal at undefdim,
+    y=\pal at undefdim,
+    vpos=\pal at verticalpagealign,
+    hpos=\pal at horizontalpagealign,%
+    #1
+  }
+  \rowsH 0\relax
+  \rowsFlex 0\relax
+  \pal at flexrowscount 0\relax
+  \pal at fixrowscount 0\relax
+  \rowsF 0\relax
+  \pal at rowscount 0\relax
+  \pal at flexmodefalse
+  \def\pal at grid@input{#2}
+  \ifx\pal at grid@input\pal at emptystring
+    \pal at gobblenextrow{{1}}
+  \else
+    \pal at gobblenextrow#2
+  \fi
+}
+\newcommand\pal at gobblenextrow[1]{
+  \pal at addrow{#1}
+  \@ifnextchar\bgroup{
+    \pal at gobblenextrow
+  }{
+    \ifpal at isinitgrid
+    \else
+      \pal at closerows
+    \fi
+  }
+}
+\newcommand\pal at cells[2][1]{
+  \if\pal at instring{!}{#1}
+    \pal at gridtmpRowH \pal at striplastexclamationmark{#1}\relax
+    \pal at forcerowtrue
+    \advance\rowsF by \pal at gridtmpRowH
+    \advance\rowsH by \pal at gridtmpRowH
+    \pal at set{\the\pal at rowscount H}{\pal at gridtmpRowH}
+    \advance \pal at fixrowscount by 1
+  \else
+    \pal at forcerowfalse
+    \pal at gridtmpRowH #1\relax
+  \fi
+
+  \pal at cellscount 0\relax
+  \pal at set{\the\pal at rowscount W}{0}
+  \pal at set{\the\pal at rowscount F}{0}
+  \ifpal at forcerow\pal at set{if\the\pal at rowscount F}{1}\else\pal at set{if\the\pal at rowscount F}{0}\fi
+  \pal at gridisflexrowfalse
+
+  \pal at gobblenextcell{#2}
+}
+\newcommand\pal at gobblenextcell[1]{
+  \pal at addcell{#1}
+  \@ifnextchar\bgroup{
+    \pal at gobblenextcell
+  }{
+    \ifpal at forcerow
+    \else
+      \ifpal at gridisflexrow
+        \pal at flexmodetrue
+        \advance \pal at flexrowscount by 1
+        \advance\rowsFlex by \pal at gridtmpRowH
+        \pal at set{\the\pal at rowscount H}{\pal at gridtmpRowH}
+        \pal at set{if\the\pal at rowscount Fix}{0}
+      \else
+        \advance \pal at fixrowscount by 1
+        \advance\rowsH by \pal at gridtmpRowH
+        \pal at set{\the\pal at rowscount H}{\pal at gridtmpRowH}
+        \pal at set{if\the\pal at rowscount Fix}{1}
+      \fi
+    \fi
+    \pal at set{\the\pal at rowscount C}{\pal at cellscount}
+  }
+}
+
+% grid shortcut
+\def\pal at flexkey{f}
+\def\pal at portraitkey{p}
+\def\pal at squarekey{s}
+\def\pal at landscapekey{l}
+\def\pal at goldenkey{g}
+\def\pal at goldenuprightkey{o}
+\def\pal at widekey{w}
+\def\pal at rowbreakkey{-}
+\newcount\pal at rowcountsc
+\newcount\pal at cellcountsc
+\newcommand\pal at breakrow{
+  \edef\pal at result{\pal at result{[30]\pal at rowindex}}
+}
+\newif\ifpal at isgridvalid
+\newcommand\pal at transformgridconfig[1]{
+  \ifx\pal at rowbreakkey#1
+    \pal at breakrow
+    \def\pal at rowindex{}
+  \else
+    \ifx\pal at flexkey#1
+      \edef\pal at rowindex{\pal at rowindex{1}}
+    \else
+      \ifx\pal at portraitkey#1
+        \edef\pal at rowindex{\pal at rowindex{20!}}
+      \else
+        \ifx\pal at squarekey#1
+          \edef\pal at rowindex{\pal at rowindex{30!}}
+        \else
+          \ifx\pal at landscapekey#1
+            \edef\pal at rowindex{\pal at rowindex{45!}}
+          \else
+            \ifx\pal at widekey#1
+              \edef\pal at rowindex{\pal at rowindex{60!}}
+            \else
+              \ifx\pal at goldenkey#1
+                \edef\pal at rowindex{\pal at rowindex{50!}}
+              \else
+                \ifx\pal at goldenuprightkey#1
+                  \edef\pal at rowindex{\pal at rowindex{18!}}
+                \else
+                  \pal at isgridvalidfalse
+                \fi
+              \fi
+            \fi
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newcommand\pal at setplaceholder[1]{
+  \ifx\pal at rowbreakkey#1
+    \advance\pal at rowcountsc by 1
+    \pal at cellcountsc 0\relax
+  \else
+    \placeholder{{\pal at rowcountsc} {\pal at cellcountsc} {\numexpr\pal at rowcountsc+1\relax} {\numexpr\pal at cellcountsc+1\relax}}
+    \advance\pal at cellcountsc by 1
+  \fi
+}
+\newcommand\pal at gridsc[1]{
+  \edef\pal at gridsc@input{#1}
+  \def\pal at rowindex{}
+  \def\pal at result{}
+  \pal at isgridvalidtrue
+  \@tfor\next:=#1\do{\pal at transformgridconfig{\next}}%
+  \ifpal at isgridvalid
+    \pal at breakrow
+    \edef\pal at result{{\pal at result}}
+    \expandafter\setgrid\pal at result
+    \pal at rowcountsc 0\relax
+    \pal at cellcountsc 0\relax
+    \@tfor\next:=#1\do{\pal at setplaceholder{\next}}%
+  \else
+    \pal at errmsg@undefined{template}{\pal at gridsc@input}
+  \fi
+}
+
+% grid dimensions
+\newif\ifpal at flexgrid
+\newcommand\pal at calculategridheight{
+  \pal at flexgridtrue
+  \pal at gridheight=\pal at null
+  \looprows=0
+  \loop
+    \advance\looprows 1
+    \ifnum\pal at get{if\the\looprows F}=1
+      \pal at gridheight=\dimexpr\pal at gridheight+\pal at gutter\relax%
+    \else
+      \ifnum\pal at get{if\the\looprows Fix}=0
+        \pal at gridheight=\dimexpr\pal at gridheight+\pal at gutter\relax%
+      \else
+        \pal at flexgridfalse
+        \pal at gridheight=\dimexpr\pal at gridheight+(\pal at gridwidth-\pal at gutter*\pal at get{\the\looprows C})*\pal at get{\the\looprows H}/(\pal at get{\the\looprows W}*(\rowsH-\rowsF))*\rowsH+\pal at gutter\relax
+      \fi
+    \fi
+  \ifnum \looprows<\pal at rowscount
+  \repeat
+  \ifpal at flexgrid
+    \pal at gridheight=\dimexpr\pal at calculatefullgridheight\relax
+  \fi
+}
+\newcommand\pal at calculatefullgridheight{
+  \pal at pageheight - \pal at topmargin - \pal at bottommargin + \pal at gutter
+}
+\newcommand\pal at calculategridwidth{
+  \def\pal at calculategridwidthcalc{(\pal at gridheight*(\rowsH-\rowsF)/\rowsH-\pal at gutter*(\rowsH-\rowsF)*\pal at rowscount/\rowsH}
+  \looprows=0
+  \loop
+    \advance\looprows 1
+    \ifnum\pal at get{if\the\looprows F}=1
+    \else
+      \ifnum\pal at get{if\the\looprows Fix}=0
+      \else
+        \edef\pal at calculategridwidthcalc{\pal at calculategridwidthcalc+\pal at gutter*\pal at get{\the\looprows C}*\pal at get{\the\looprows H}/\pal at get{\the\looprows W}}
+      \fi
+    \fi
+  \ifnum \looprows<\pal at rowscount
+  \repeat
+
+  \edef\pal at calculategridwidthcalc{\pal at calculategridwidthcalc) * 10000 / (\pal at null}
+  \looprows=0
+  \loop
+    \advance\looprows 1
+    \ifnum\pal at get{if\the\looprows F}=1
+    \else
+      \ifnum\pal at get{if\the\looprows Fix}=0
+      \else
+        \edef\pal at calculategridwidthcalc{\pal at calculategridwidthcalc+10000*\pal at get{\the\looprows H}/\pal at get{\the\looprows W}}
+      \fi
+    \fi
+  \ifnum \looprows<\pal at rowscount
+  \repeat
+
+  \edef\pal at calculategridwidthcalc{\pal at calculategridwidthcalc)}
+  \pal at maxgridwidth=\dimexpr\pal at calculategridwidthcalc\relax
+}
+\newcommand\pal at calculatefullgridwidth{
+  \ifpal at isdoublepage
+    \pal at pagewidth * 2 - \pal at outermargin * 2
+    \ifpal at frontcover
+    \else
+      \ifpal at fanfold
+      \else
+        - \bindingoffset * 2
+      \fi
+    \fi
+  \else
+    \pal at pagewidth - \pal at innermargin - \pal at outermargin
+  \fi
+  + \pal at gutter
+}
+\newcommand\pal at calculaterealgridwidth{
+  \ifpal at isdoublepage
+    (\pal at pagewidth * 2 - \pal at outermargin * 2)
+  \else
+    (\pal at pagewidth - \pal at innermargin - \pal at outermargin)
+  \fi
+}
+\newcommand\pal at gridstartx[1]{
+  \ifdim\dimexpr#1\relax=\pal at undefdim
+    \ifpal at isdoublepage
+      (\pal at outermargin + \pal at leftbleed - \pal at gutter / 2
+      \ifpal at frontcover
+      \else
+        \ifpal at fanfold
+        \else
+          \ifpal at rightpage
+            + \bindingoffset * 2
+          \fi
+        \fi
+      \fi
+      )
+    \else
+      (\pal at leftmargin + \pal at leftbleed - \pal at gutter / 2)
+    \fi
+  \else%
+    \ifpal at isdoublepage
+      (#1 + \pal at leftbleed - \pal at gutter / 2
+      \ifpal at frontcover
+      \else
+        \ifpal at fanfold
+        \else
+          \ifpal at rightpage
+            + \bindingoffset * 2
+          \fi
+        \fi
+      \fi
+      )
+    \else
+      (#1 + \pal at leftbleed - \pal at gutter / 2)
+    \fi
+  \fi%
+}
+\newcommand\pal at gridstarty[1]{
+  \ifdim\dimexpr#1\relax=\pal at undefdim
+    (\pal at bottommargin + \pal at bottombleed - \pal at gutter / 2)%
+  \else%
+    (#1 + \pal at bottombleed - \pal at gutter / 2)
+  \fi%
+}
+\newcommand\pal at setdimensions{
+  \global\pal at gridfullfalse
+  \global\def\pal at framey{0}\global\def\pal at framex{0}\global\def\pal at frameyy{1}\global\def\pal at framexx{1}
+  \global\def\pal at frameyymax{0}\global\def\pal at framexxmax{0}
+  \paperheight=\dimexpr(\pal at pageheight + \pal at topbleed + \pal at bottombleed)\relax
+  \pal at gridoffsetx=\pal at null
+
+  \ifpal at isdoublepage
+    % doublepage
+    \ifpal at fanfold
+      \paperwidth=\dimexpr((\pal at pagewidth + \pal at outerbleed) * 2)\relax
+    \else
+      \paperwidth=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed)\relax
+      \ifpal at rightpage
+        \pal at gridoffsetx=\dimexpr(-\pal at pagewidth)\relax
+      \fi
+    \fi
+  \else
+    \ifpal at frontcover
+      % frontcover
+      \paperwidth=\dimexpr((\pal at pagewidth + \pal at outerbleed) * 2 + \spinewidth)\relax
+    \else
+      % page
+      \ifpal at fanfold
+        \paperwidth=\dimexpr((\pal at pagewidth + \pal at outerbleed) * 2)\relax
+        \ifpal at rightpage
+          \pal at gridoffsetx=\dimexpr(\pal at pagewidth + \pal at outerbleed - \pal at innerbleed)\relax
+        \fi
+      \else
+        \paperwidth=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed)\relax
+      \fi
+    \fi
+  \fi
+}
+
+% grid coordinates
+\newcommand\pal at coordxrow[3]{\ifdim\dimexpr#2\dimexpr1pt\relax\relax<\dimexpr(#3\dimexpr1pt\relax-#1sp)\relax\the\numexpr#3\relax\else\pal at coordxrow{#1}{#2}{\numexpr#3+1\relax}\fi}
+\newcommand\pal at coordxcell[2]{\ifnum\numexpr(10000*#1)\relax<\numexpr(#2*10000+1)\relax\the\numexpr#2\relax\else\pal at coordxcell{#1}{\numexpr#2+1\relax}\fi}
+\newcommand\pal at coordx[3]{
+  \pal at get{%
+    \pal at coordxrow{#1}{#2}{1}-%
+    \pal at coordxcell{#3}{1}%
+    WR%
+  }
+}
+\newcommand\posxcell[3]{
+  \ifnum#3>0
+    + \pal at coordx{#1}{#2}{#3}sp%
+  \fi%
+  \ifnum#3>1
+    \posxcell{#1}{#2}{\numexpr#3-1\relax}%
+  \fi%
+}
+\newcommand\posxrow[4]{
+  \ifdim#4\dimexpr1pt\relax<\dimexpr#3\dimexpr1pt\relax+1sp\relax
+    \pal at gridstartxdim + #4\dimexpr\pal at coordx{#1}{#2}{#3}sp\relax - \pal at coordx{#1}{#2}{#3}sp * \numexpr#3 - 1\relax\posxcell{#1}{#2}{\numexpr#3-1\relax}%
+  \else%
+    \posxrow{#1}{#2}{\numexpr#3+1\relax}{#4}%
+  \fi%
+}
+\newcommand\posx[4]{
+  \dimexpr(%
+    \posxrow{#1}{#2}{1}{#4}
+    + #3\pal at gutter / 2 + \pal at gridoffsetx + \pal at gridoffsethorizontal%
+  )\relax%
+}
+\newcommand\posycell[1]{
+  \ifnum#1>0
+    - \pal at get{#1HR} sp
+  \fi%
+  \ifnum#1>1
+    \posycell{\the\numexpr#1-1\relax}%
+  \fi%
+}
+\newcommand\posyrow[2]{
+  \ifdim#1\dimexpr1pt\relax<\dimexpr#2\dimexpr1pt\relax+1sp\relax
+      \pal at gridstartydim + \pal at maxgridheight - #1\dimexpr\pal at get{#2HR} sp\relax + \pal at get{#2HR} sp * \numexpr#2 - 1\relax\posycell{\the\numexpr#2-1\relax}%
+  \else
+    \posyrow{#1}{\the\numexpr#2+1\relax}%
+  \fi
+}
+\newcommand\posy[2]{
+  \dimexpr(%
+    \posyrow{#2}{1}
+    - #1\pal at gutter / 2 - \pal at gridoffsetvertical%
+  )\relax%
+}
+\newcommand\pal at gridhalign[1]{
+  \def\pal at horizontalpagealign{#1}
+}
+\newcommand\pal at gridvalign[1]{
+  \def\pal at verticalpagealign{#1}
+}
+\pal at gridhalign{0.5}
+\pal at gridvalign{0.5}
+\pal at isinitgridtrue
+\setgrid{{{1}}}
+
+% graphic
+\newif\ifpal at isvisible
+\newif\ifpal at calculatecrop
+\newdimen\pal at originalgraphicwidth\newdimen\pal at originalgraphicheight
+\newdimen\pal at cropx\newdimen\pal at cropy
+\newdimen\pal at cropleft\newdimen\pal at cropright
+\newdimen\pal at cropbottom\newdimen\pal at croptop
+\newdimen\pal at cropstart\newdimen\pal at cropend
+\newdimen\pal at snapleft\newdimen\pal at snapright
+\newdimen\pal at snapbottom\newdimen\pal at snaptop
+\newdimen\pal at viewportwidth\newdimen\pal at viewportheight
+\newdimen\pal at frameborderwidth
+\newdimen\pal at frameborderradius
+\newdimen\pal at frameshadowradius
+\newdimen\pal at snapcroptmp
+\newdimen\pal at overprint
+\pal at overprint=0pt
+\def\pal at cropleftside{
+  \ifdim\pal at x>\pal at cropstart
+    \ifdim\pal at x<\pal at cropend
+      \pal at snapleft=\dimexpr(\pal at x - \pal at cropstart)\relax
+      \pal at x=\dimexpr(\pal at cropstart)\relax
+    \fi
+  \fi
+}
+\def\pal at croprightside{
+  \ifdim\pal at xx>\pal at cropstart
+    \ifdim\pal at xx<\pal at cropend
+      \pal at snapright=\dimexpr(\pal at cropend - \pal at xx)\relax
+      \pal at xx=\dimexpr(\pal at cropend)\relax
+    \fi
+  \fi
+}
+\def\pal at snapsafezonevertical{
+  \pal at snapbottom=\pal at null
+  \pal at snaptop=\pal at null
+  \pal at cropstart=-\pal at overprint
+  \pal at cropend=\dimexpr(\pal at null + \pal at bottombleed + 1pt)\relax
+  \ifdim\pal at y>\pal at cropstart
+    \ifdim\pal at y<\pal at cropend
+      \pal at snapbottom=\dimexpr(\pal at y - \pal at cropstart)\relax
+      \pal at y=\dimexpr(\pal at cropstart)\relax
+    \fi
+  \fi
+  \pal at cropstart=\dimexpr(\pal at pageheight + \pal at bottombleed - 1pt)\relax
+  \pal at cropend=\dimexpr(\pal at pageheight + \pal at bottombleed  + \pal at topbleed + \pal at overprint)\relax
+  \ifdim\pal at yy>\pal at cropstart
+    \ifdim\pal at yy<\pal at cropend
+      \pal at snaptop=\dimexpr(\pal at cropend - \pal at yy)\relax
+      \pal at yy=\dimexpr(\pal at cropend)\relax
+    \fi
+  \fi
+}
+\def\pal at snapsafezonehorizontal{
+  \pal at snapleft=\pal at null
+  \pal at snapright=\pal at null
+  \ifpal at isdoublepage
+    % doublepage
+    \ifpal at fanfold
+      \pal at cropstart=-\pal at overprint
+      \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + 1pt)\relax
+      \pal at cropleftside
+      \pal at cropstart=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed - 1pt)\relax
+      \pal at cropend=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed * 2 + \pal at overprint)\relax
+      \pal at croprightside
+    \else
+      \pal at cropstart=-\pal at overprint
+      \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + 1pt)\relax
+      \pal at cropleftside
+      \pal at cropstart=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed - \pal at rightbleed - 1pt)\relax
+      \pal at cropend=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed + \pal at overprint)\relax
+      \pal at croprightside
+      \ifpal at leftpage
+        \pal at cropstart=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed - \bindingoffset * 2 - 1pt)\relax
+        \pal at cropend=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed + \pal at outerbleed - \bindingoffset * 2 + \pal at overprint)\relax
+        \pal at croprightside
+      \else
+        \pal at cropstart=\dimexpr(\pal at innerbleed -\pal at pagewidth - \pal at outerbleed + \bindingoffset * 2 - \pal at overprint)\relax
+        \pal at cropend=\dimexpr(-\pal at pagewidth + \pal at innerbleed + \bindingoffset * 2 + 1pt)\relax
+        \pal at cropleftside
+      \fi
+    \fi
+  \else
+    % frontcover
+    \ifpal at frontcover
+      \ifpal at cover
+        \ifpal at backcover
+          \pal at cropstart=-\pal at overprint
+          \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + 1pt)\relax
+        \else
+          \pal at cropstart=\dimexpr(\pal at pagewidth + \pal at outerbleed)\relax
+          \pal at cropend=\dimexpr(\pal at pagewidth + \pal at outerbleed + \spinewidth + 1pt)\relax
+        \fi
+        \pal at cropleftside
+        \ifpal at backcover
+          \pal at cropstart=\dimexpr(\pal at pagewidth + \pal at outerbleed - 1pt)\relax
+          \pal at cropend=\dimexpr(\pal at pagewidth + \pal at outerbleed)\relax
+        \else
+          \pal at cropstart=\dimexpr(\pal at pagewidth * 2 + \spinewidth + \pal at outerbleed - 1pt)\relax
+          \pal at cropend=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed * 2 + \spinewidth + \pal at overprint)\relax
+        \fi
+        \pal at croprightside
+      \else
+        \pal at cropstart=-\pal at overprint
+        \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + 1pt)\relax
+        \pal at cropleftside
+        \pal at cropstart=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed - \pal at rightbleed - 1pt)\relax
+        \pal at cropend=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed + \pal at overprint)\relax
+        \pal at croprightside
+      \fi
+    \else
+      % page
+      \ifpal at fanfold
+        \pal at cropstart=-\pal at overprint
+        \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + 1pt)\relax
+        \pal at cropleftside
+        \pal at cropstart=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed - 1pt)\relax
+        \pal at cropend=\dimexpr(\pal at pagewidth * 2 + \pal at outerbleed * 2 + \pal at overprint)\relax
+        \pal at croprightside
+      \else
+        \pal at cropstart=-\pal at overprint
+        \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + 1pt)\relax
+        \pal at cropleftside
+        \pal at cropstart=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed - \pal at rightbleed - 1pt)\relax
+        \pal at cropend=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed + \pal at overprint)\relax
+        \pal at croprightside
+      \fi
+    \fi
+  \fi
+}
+\pgfkeys{
+  /graphic/.is family,
+  /graphic,
+  file/.store in=\pal at graphicoptionfile,
+  scale/.store in=\pal at graphicoptionscale,
+  vpos/.store in=\pal at graphicoptionvpos,
+  hpos/.store in=\pal at graphicoptionhpos,
+  unsharp/.store in=\pal at graphicoptionunsharp,
+  border/.forward to=/defaultborder/name,
+  border radius/.forward to=/defaultborder/radius,
+  border width/.forward to=/defaultborder/width,
+  border color/.forward to=/defaultborder/color,
+  border opacity/.forward to=/defaultborder/opacity,
+  shadow/.forward to=/defaultshadow/name,
+  shadow size/.forward to=/defaultshadow/size,
+  shadow color/.forward to=/defaultshadow/color,
+  shadow opacity/.forward to=/defaultshadow/opacity,
+  shadow xshift/.forward to=/defaultshadow/xshift,
+  shadow yshift/.forward to=/defaultshadow/yshift,
+}
+\def\pal at checkvisibility{
+  \pal at isvisibletrue
+
+  \ifpal at frontcover
+  \else
+    \ifpal at fanfold
+    \else
+      \ifpal at isdoublepage
+        \ifpal at leftpage
+          \pal at cropstart=\dimexpr(\pal at pagewidth + \pal at outerbleed - \bindingoffset - 1pt)\relax
+          \pal at cropend=\dimexpr(\pal at pagewidth + \pal at outerbleed + \pal at innerbleed)\relax
+          \ifdim\pal at x>\pal at cropstart
+            \pal at isvisiblefalse
+          \fi
+        \else
+          \pal at cropstart=\dimexpr(\pal at null)\relax
+          \pal at cropend=\dimexpr(\pal at null + \pal at leftbleed + \bindingoffset + 1pt)\relax
+          \ifdim\pal at xx<\pal at cropend
+            \pal at isvisiblefalse
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\def\pal at snapoptimizedgraphic{
+  \ifdim\pal at snapleft>\pal at null
+    \width=\dimexpr\width+\pal at snapleft\relax
+  \fi
+  \ifdim\pal at snapright>\pal at null
+    \width=\dimexpr\width+\pal at snapright\relax
+  \fi
+  \ifdim\pal at snaptop>\pal at null
+    \height=\dimexpr\height+\pal at snaptop\relax
+  \fi
+  \ifdim\pal at snapbottom>\pal at null
+    \height=\dimexpr\height+\pal at snapbottom\relax
+  \fi
+}
+\def\pal at snapgraphic{
+  \pgfmathqparse{(\pal at originalgraphicheight-\pal at croptop-\pal at cropbottom)/\height}
+  \edef\pal at scale{\pgfmathresult}
+  \pgfmathqparse{\height/(\pal at originalgraphicheight-\pal at croptop-\pal at cropbottom)}
+  \edef\pal at scalerez{\pgfmathresult}
+
+  % snap
+  \ifdim\pal at snapleft>\pal at null
+    \ifdim\pal at cropleft>\pal at null
+      \ifdim\pal at scale\pal at snapleft>\pal at cropleft
+        \pal at snapbleedleft=\pal at cropleft
+        \pal at snapleft=\dimexpr\pal at snapleft-\pal at scalerez\pal at cropleft\relax
+        \width=\dimexpr\width+\pal at scalerez\pal at cropleft\relax
+        \pal at cropleft=\pal at null
+      \else
+        \pal at snapbleedleft=\dimexpr\pal at scale\pal at snapleft\relax
+        \pal at cropleft=\dimexpr\pal at cropleft-\pal at scale\pal at snapleft\relax
+        \width=\dimexpr\width+\pal at snapleft\relax
+        \pal at snapleft=\pal at null
+      \fi
+    \fi
+  \fi
+  \ifdim\pal at snapright>\pal at null
+    \ifdim\pal at cropright>\pal at null
+      \ifdim\pal at scale\pal at snapright>\pal at cropright
+        \pal at snapbleedright=\pal at cropright
+        \pal at snapright=\dimexpr\pal at snapright-\pal at scalerez\pal at cropright\relax
+        \width=\dimexpr\width+\pal at scalerez\pal at cropright\relax
+        \pal at cropright=\pal at null
+      \else
+        \pal at snapbleedright=\dimexpr\pal at scale\pal at snapright\relax
+        \pal at cropright=\dimexpr\pal at cropright-\pal at scale\pal at snapright\relax
+        \width=\dimexpr\width+\pal at snapright\relax
+        \pal at snapright=\pal at null
+      \fi
+    \fi
+  \fi
+  \ifdim\pal at snaptop>\pal at null
+    \ifdim\pal at croptop>\pal at null
+      \ifdim\pal at scale\pal at snaptop>\pal at croptop
+        \pal at snapbleedtop=\pal at croptop
+        \pal at snaptop=\dimexpr\pal at snaptop-\pal at scalerez\pal at croptop\relax
+        \height=\dimexpr\height+\pal at scalerez\pal at croptop\relax
+        \pal at croptop=\pal at null
+      \else
+        \pal at snapbleedtop=\dimexpr\pal at scale\pal at snaptop\relax
+        \pal at croptop=\dimexpr\pal at croptop-\pal at scale\pal at snaptop\relax
+        \height=\dimexpr\height+\pal at snaptop\relax
+        \pal at snaptop=\pal at null
+      \fi
+    \fi
+  \fi
+  \ifdim\pal at snapbottom>\pal at null
+    \ifdim\pal at cropbottom>\pal at null
+      \ifdim\pal at scale\pal at snapbottom>\pal at cropbottom
+        \pal at snapbleedbottom=\pal at cropbottom
+        \pal at snapbottom=\dimexpr\pal at snapbottom-\pal at scalerez\pal at cropbottom\relax
+        \height=\dimexpr\height+\pal at scalerez\pal at cropbottom\relax
+        \pal at cropbottom=\pal at null
+      \else
+        \pal at snapbleedbottom=\dimexpr\pal at scale\pal at snapbottom\relax
+        \pal at cropbottom=\dimexpr\pal at cropbottom-\pal at scale\pal at snapbottom\relax
+        \height=\dimexpr\height+\pal at snapbottom\relax
+        \pal at snapbottom=\pal at null
+      \fi
+    \fi
+  \fi
+
+  % move
+  \ifdim\pal at snapbottom=\pal at null
+    \ifdim\pal at snaptop=\pal at null
+      \ifdim\pal at snapright>\pal at null
+        \ifdim\pal at cropleft>\pal at null
+          \ifdim\pal at scale\pal at snapright>\pal at cropleft
+            \pal at snapright=\dimexpr\pal at snapright-\pal at scalerez\pal at cropleft\relax
+            \width=\dimexpr\width+\pal at scalerez\pal at cropleft\relax
+            \pal at cropleft=\pal at null
+          \else
+            \pal at cropleft=\dimexpr\pal at cropleft-\pal at scale\pal at snapright\relax
+            \width=\dimexpr\width+\pal at snapright\relax
+            \pal at snapright=\pal at null
+          \fi
+        \fi
+      \fi
+      \ifdim\pal at snapleft>\pal at null
+        \ifdim\pal at cropright>\pal at null
+          \ifdim\pal at scale\pal at snapleft>\pal at cropright
+            \pal at snapleft=\dimexpr\pal at snapleft-\pal at scalerez\pal at cropright\relax
+            \width=\dimexpr\width+\pal at scalerez\pal at cropright\relax
+            \pal at cropright=\pal at null
+          \else
+            \pal at cropright=\dimexpr\pal at cropright-\pal at scale\pal at snapleft\relax
+            \width=\dimexpr\width+\pal at snapleft\relax
+            \pal at snapleft=\pal at null
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+  \ifdim\pal at snapleft=\pal at null
+    \ifdim\pal at snapright=\pal at null
+      \ifdim\pal at snaptop>\pal at null
+        \ifdim\pal at cropbottom>\pal at null
+          \ifdim\pal at scale\pal at snaptop>\pal at cropbottom
+            \pal at snaptop=\dimexpr\pal at snaptop-\pal at scalerez\pal at cropbottom\relax
+            \height=\dimexpr\height+\pal at scalerez\pal at cropbottom\relax
+            \pal at cropbottom=\pal at null
+          \else
+            \pal at cropbottom=\dimexpr\pal at cropbottom-\pal at scale\pal at snaptop\relax
+            \height=\dimexpr\height+\pal at snaptop\relax
+            \pal at snaptop=\pal at null
+          \fi
+        \fi
+      \fi
+      \ifdim\pal at snapbottom>\pal at null
+        \ifdim\pal at croptop>\pal at null
+          \ifdim\pal at scale\pal at snapbottom>\pal at croptop
+            \pal at snapbottom=\dimexpr\pal at snapbottom-\pal at scalerez\pal at croptop\relax
+            \height=\dimexpr\height+\pal at scalerez\pal at croptop\relax
+            \pal at croptop=\pal at null
+          \else
+            \pal at croptop=\dimexpr\pal at croptop-\pal at scale\pal at snapbottom\relax
+            \height=\dimexpr\height+\pal at snapbottom\relax
+            \pal at snapbottom=\pal at null
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newdimen\pal at snapcropoffset
+\newdimen\pal at snapbleedleft\newdimen\pal at snapbleedright
+\newdimen\pal at snapbleedtop\newdimen\pal at snapbleedbottom
+\def\pal at hscalegraphic{
+  \pgfmathqparse{\width/(\width+\pal at snapleft+\pal at snapright)}
+  \edef\pal at snapscale{\pgfmathresult}
+  \pal at snapcroptmp=\dimexpr\pal at originalgraphicheight-\pal at cropbottom-\pal at croptop-\pal at snapscale\pal at originalgraphicheight+\pal at snapscale\pal at cropbottom+\pal at snapscale\pal at croptop\relax
+  \pal at snapcropoffset=\dimexpr\pal at snapbleedbottom-\pal at snapscale\pal at snapbleedbottom-\pal at snapbleedtop+\pal at snapscale\pal at snapbleedtop\relax
+  \pal at cropbottom=\dimexpr\pal at cropbottom+0.5\pal at snapcroptmp+0.5\pal at snapcropoffset\relax
+  \pal at croptop=\dimexpr\pal at croptop+0.5\pal at snapcroptmp-0.5\pal at snapcropoffset\relax
+
+  \width=\dimexpr\width+\pal at snapleft+\pal at snapright\relax
+  \pal at snapright=\pal at null
+  \pal at snapleft=\pal at null
+}
+\def\pal at vscalegraphic{
+  \pgfmathqparse{\height/(\height+\pal at snaptop+\pal at snapbottom)}
+  \edef\pal at snapscale{\pgfmathresult}
+  \pal at snapcroptmp=\dimexpr\pal at originalgraphicwidth-\pal at cropleft-\pal at cropright-\pal at snapscale\pal at originalgraphicwidth+\pal at snapscale\pal at cropleft+\pal at snapscale\pal at cropright\relax
+  \pal at snapcropoffset=\dimexpr\pal at snapbleedleft-\pal at snapscale\pal at snapbleedleft-\pal at snapbleedright+\pal at snapscale\pal at snapbleedright\relax
+  \pal at cropleft=\dimexpr\pal at cropleft+0.5\pal at snapcroptmp+0.5\pal at snapcropoffset\relax
+  \pal at cropright=\dimexpr\pal at cropright+0.5\pal at snapcroptmp-0.5\pal at snapcropoffset\relax
+
+  \height=\dimexpr\height+\pal at snaptop+\pal at snapbottom\relax
+  \pal at snaptop=\pal at null
+  \pal at snapbottom=\pal at null
+}
+\def\pal at getbase#1{\edef\Gin at base{\filename at area\filename at base}\edef\Gin at ext{#1}}
+\let\pal at getbaseorginal\Gin at getbase
+\def\pal at disablegraphicsfilecheck{
+  \let\Gin at getbase\pal at getbase
+}
+\def\pal at enablegraphicsfilecheck{
+  \let\Gin at getbase\pal at getbaseorginal
+}
+\let\pal at setfileorginal\Gin at setfile
+\def\pal at setfile#1#2#3{
+  \global\edef\pal at currfilebase{\Gin at base}
+  \global\edef\pal at currfileext{\Gin at ext}
+  \global\@onelevel at sanitize\pal at currfileext
+}
+\edef\pal at extjpeg{.jpeg}\@onelevel at sanitize\pal at extjpeg
+\edef\pal at extJPEG{.JPEG}\@onelevel at sanitize\pal at extJPEG
+\edef\pal at extjpg{.jpg}\@onelevel at sanitize\pal at extjpg
+\edef\pal at extJPG{.JPG}\@onelevel at sanitize\pal at extJPG
+\edef\pal at extpng{.png}\@onelevel at sanitize\pal at extpng
+\edef\pal at extPNG{.PNG}\@onelevel at sanitize\pal at extPNG
+\def\isoptimizable#1#2{
+  \ifx#1\pal at extjpg
+    \def\pal at optimizedext{.jpg}#2
+  \else
+    \ifx#1\pal at extJPG
+      \def\pal at optimizedext{.jpg}#2
+    \else
+      \ifx#1\pal at extjpeg
+        \def\pal at optimizedext{.jpg}#2
+      \else
+        \ifx#1\pal at extJPEG
+          \def\pal at optimizedext{.jpg}#2
+        \else
+          \ifx#1\pal at extpng
+            \def\pal at optimizedext{.png}#2
+          \else
+            \ifx#1\pal at extPNG
+              \def\pal at optimizedext{.png}#2
+            \fi
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\def\newgraphic#1#2{
+  \expandafter\newcommand\csname pal at graphic@#1\endcsname[2][0]{%
+    \ifnum##1=0
+      \pgfkeys{pagegraphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal at unsharp,#2,##2}
+    \else
+      \ifnum##1=1
+        \pgfkeys{backcoverpagegraphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal at unsharp,#2}
+      \else
+        \pgfkeys{graphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal at unsharp,#2,##2}
+      \fi
+    \fi
+  }%
+}
+\newcommand\pal at putgraphic[6][]{
+  \pal at x=\posx{1}{#2}{1}{#3}
+  \pal at yy=\posy{1}{#2}
+  \pal at xx=\posx{-1}{#4}{-1}{#5}
+  \pal at y=\posy{-1}{#4}
+
+  \pal at checkvisibility
+
+  \ifpal at isvisible
+    \pal at cropleft=\pal at null
+    \pal at cropbottom=\pal at null
+    \pal at cropright=\pal at null
+    \pal at croptop=\pal at null
+
+    \width=\dimexpr(\pal at xx - \pal at x)\relax
+    \height=\dimexpr(\pal at yy - \pal at y)\relax
+
+    % safezone horizontal
+    \pal at snapsafezonehorizontal
+
+    % safezone vertical
+    \pal at snapsafezonevertical
+
+    \pal at snapbleedleft=\pal at null
+    \pal at snapbleedright=\pal at null
+    \pal at snapbleedtop=\pal at null
+    \pal at snapbleedbottom=\pal at null
+
+    \begingroup
+    \xdef\pal at filename{#6-\pal at density-\pal at graphicoptionscale-\pal at graphicoptionhpos-\pal at graphicoptionvpos-\the\numexpr\pal at snaptop\relax-\the\numexpr\pal at snapright\relax-\the\numexpr\pal at snapbottom\relax-\the\numexpr\pal at snapleft\relax-\the\numexpr\width\relax-\the\numexpr\height\relax-\pal at downsamplethreshold-\pal at graphicoptionunsharp-\pal at quality}
+    \ifpal at optimize
+      \IfFileExists{./cache/\pal at filename/g.jpg}{
+        \def\pal at nextincludegraphic{\includegraphics[width=\width]{cache/\pal at filename/g.jpg}}
+      }{
+        \IfFileExists{./cache/\pal at filename/g.png}{
+          \def\pal at nextincludegraphic{\includegraphics[width=\width]{cache/\pal at filename/g.png}}
+        }{
+          \pal at calculatecroptrue
+        }
+      }
+
+      \ifpal at preflight
+        \pal at calculatecroptrue
+      \fi
+    \else
+      \pal at calculatecroptrue
+    \fi
+
+    \ifpal at calculatecrop
+      \global\edef\pal at currfilebase{}
+      \global\edef\pal at currfileext{}
+      \let\Gin at setfile\pal at setfile
+      \Ginclude at graphics#6
+      \let\Gin at setfile\pal at setfileorginal
+      \ifx\pal at currfileext\pal at emptystring
+        \pal at calculatecropfalse
+        \def\pal at nextincludegraphic{}
+      \fi
+    \fi
+
+    \pal at disablegraphicsfilecheck
+    \ifpal at calculatecrop
+      % graphic crop
+      \settowidth{\pal at originalgraphicwidth}{\includegraphics{\pal at currfilebase\pal at currfileext}}
+      \settoheight{\pal at originalgraphicheight}{\includegraphics{\pal at currfilebase\pal at currfileext}}
+      \pgfmathqparse{1pt-\pal at graphicoptionvpos pt}
+      \edef\pal at graphicoptionvpos{\pgfmathresult}
+      \pgfmathqparse{\pal at originalgraphicwidth/\pal at originalgraphicheight}
+      \edef\pal at graphicratio{\pgfmathresult}
+      \pgfmathqparse{\width/\height}
+      \edef\pal at vpratio{\pgfmathresult}
+      \pgfmathqparse{\pal at graphicratio pt>\pal at vpratio pt}
+      \ifnum\pgfmathresult=1
+        \pal at cropx=\dimexpr(\numexpr(\pal at originalgraphicwidth - \width * \pal at originalgraphicheight / \height)\relax sp)\relax
+        \pal at cropy=\pal at null
+      \else
+        \pal at cropy=\dimexpr(\numexpr(\pal at originalgraphicheight - \height * \pal at originalgraphicwidth / \width)\relax sp)\relax
+        \pal at cropx=\pal at null
+      \fi
+      \pal at viewportwidth=\dimexpr\pal at originalgraphicwidth-\pal at cropx\relax
+      \pal at viewportheight=\dimexpr\pal at originalgraphicheight-\pal at cropy\relax
+      \pgfmathqparse{1pt/\pal at graphicoptionscale pt}
+      \edef\pal at reciprocalscale{\pgfmathresult}
+      \pal at cropx=\dimexpr\pal at cropx + \pal at viewportwidth - \pal at reciprocalscale\pal at viewportwidth\relax
+      \pal at cropy=\dimexpr\pal at cropy + \pal at viewportheight - \pal at reciprocalscale\pal at viewportheight\relax
+      \ifdim\pal at cropx>\pal at null
+        \pal at cropleft=\dimexpr(\pal at graphicoptionhpos\pal at cropx)\relax
+        \ifdim\pal at cropleft<\pal at null
+          \pal at cropleft=\pal at null
+        \fi
+        \ifdim\pal at cropleft>\pal at cropx
+          \pal at cropleft=\pal at cropx
+        \fi
+        \pal at cropright=\dimexpr(\pal at cropx - \pal at cropleft)\relax
+      \fi
+      \ifdim\pal at cropy>\pal at null
+        \pal at cropbottom=\dimexpr(\pal at graphicoptionvpos\pal at cropy)\relax
+        \ifdim\pal at cropbottom<\pal at null
+          \pal at cropbottom=\pal at null
+        \fi
+        \ifdim\pal at cropbottom>\pal at cropy
+          \pal at cropbottom=\pal at cropy
+        \fi
+        \pal at croptop=\dimexpr(\pal at cropy - \pal at cropbottom)\relax
+      \fi
+
+      \pal at snapgraphic
+      \ifdim\dimexpr\pal at snapleft+\pal at snapright\relax=\pal at null
+        \ifdim\dimexpr\pal at snaptop+\pal at snapbottom\relax>\pal at null
+          \pal at vscalegraphic
+        \fi
+      \else
+        \ifdim\dimexpr\pal at snaptop+\pal at snapbottom\relax=\pal at null
+          \ifdim\dimexpr\pal at snapleft+\pal at snapright\relax>\pal at null
+            \pal at hscalegraphic
+          \fi
+        \else
+          \ifdim\dimexpr\width/(\pal at snapleft + \pal at snapright)\relax<\dimexpr\height/(\pal at snaptop + \pal at snapbottom)\relax
+            \pal at hscalegraphic
+
+            \pal at snapgraphic
+          \else
+            \pal at vscalegraphic
+
+            \pal at snapgraphic
+          \fi
+        \fi
+      \fi
+
+      \ifdim\pal at snapleft>\pal at null
+        \pal at x=\dimexpr\pal at x+\pal at snapleft\relax
+      \fi
+      \ifdim\pal at snapbottom>\pal at null
+        \pal at y=\dimexpr\pal at y+\pal at snapbottom\relax
+      \fi
+    \else
+      \pal at snapoptimizedgraphic
+    \fi
+
+    \ifdefined\pal at nextincludegraphic
+    \else
+      \ifpal at optimize
+        \ifpal at isbatchmode
+          \isoptimizable{\pal at currfileext}{\pal at addtobatchlist{\pal at currfilebase}{\pal at currfileext}}
+          \def\pal at nextincludegraphic{}
+        \else
+          \isoptimizable{\pal at currfileext}{\pal at optimizegraphic{\pal at currfilebase}{\pal at currfileext}}
+          \ifdefined\pal at optimizedext
+            \IfFileExists{./cache/\pal at filename/g\pal at optimizedext}{
+              \def\pal at nextincludegraphic{\includegraphics[width=\width]{cache/\pal at filename/g\pal at optimizedext}}
+            }{
+              \ifx\pal at processresult\pal at ok
+                \ClassError{pagelayout}{Unexpected error. File not optimized}{File `cache/#6/g\pal at optimizedext' not found.\MessageBreak Try to delete the `cache' directory.\MessageBreak\MessageBreak\@ehc}
+              \fi
+              \def\pal at nextincludegraphic{\includegraphics[trim={\pal at cropleft} {\pal at cropbottom} {\pal at cropright} {\pal at croptop},\pal at clip,width=\width]{\pal at currfilebase\pal at currfileext}}
+            }
+          \else
+            \def\pal at nextincludegraphic{\includegraphics[trim={\pal at cropleft} {\pal at cropbottom} {\pal at cropright} {\pal at croptop},\pal at clip,width=\width]{\pal at currfilebase\pal at currfileext}}
+          \fi
+        \fi
+      \else
+        \def\pal at nextincludegraphic{\includegraphics[trim={\pal at cropleft} {\pal at cropbottom} {\pal at cropright} {\pal at croptop},\pal at clip,width=\width]{\pal at currfilebase\pal at currfileext}}
+      \fi
+    \fi
+
+    \ifdim\pal at defaultborderradius>0.5\height
+      \def\pal at defaultborderradius{0.5\height}
+    \fi
+    \ifdim\pal at defaultborderradius>0.5\width
+      \def\pal at defaultborderradius{0.5\width}
+    \fi
+
+    \pal at frameborderwidth=\dimexpr\pal at defaultborderwidth\relax
+    \ifdim\pal at defaultborderradius=0pt
+      \pal at frameborderradius=0pt
+      \pal at frameshadowradius=0pt
+    \else
+      \pal at frameborderradius=\dimexpr\pal at defaultborderradius+0.5\pal at frameborderwidth\relax
+      \pal at frameshadowradius=\dimexpr\pal at defaultborderradius+\pal at frameborderwidth\relax
+    \fi
+
+    % draw shadow
+    \ifpal at isbatchmode
+    \else
+      \def\pal at frameshadowoffsetx{\pal at frameborderwidth}
+      \def\pal at frameshadowoffsety{\pal at frameborderwidth}
+      \def\pal at frameshadowwidth{\dimexpr\width+10cm+2\pal at frameborderwidth\relax}
+      \def\pal at frameshadowheight{\dimexpr\height+10cm+2\pal at frameborderwidth\relax}
+      \def\pal at frameshadowframewidth{\dimexpr\width+2\pal at frameborderwidth\relax}
+      \def\pal at frameshadowframeheight{\dimexpr\height+2\pal at frameborderwidth\relax}
+      \def\pal at frameshadowborder{\dimexpr5cm\relax}
+      \pal at drawshadow
+    \fi
+
+    % draw graphic and border
+    \ifpal at isbatchmode
+      \pal at ismaskrequiredfalse
+      \def\pal at nextincludegraphic{}
+    \else
+      \ifpal at isperformancemode
+        \ifdim\pal at defaultborderwidth>0pt
+          \pal at ismaskrequiredtrue
+        \else
+          \ifdim\pal at defaultborderradius>0pt
+            \pal at ismaskrequiredtrue
+          \else
+            \pal at ismaskrequiredfalse
+          \fi
+        \fi
+      \else
+        \pal at ismaskrequiredtrue
+      \fi
+    \fi
+
+    \ifpal at ismaskrequired
+      \def\pal at clip{}%
+    \else
+      \def\pal at clip{clip}%
+    \fi
+
+    \put(\pal at dimentonumber{\pal at x},\pal at dimentonumber{\pal at y}){%
+      \ifpal at ismaskrequired%
+        \begin{tikzpicture}%
+          \pgflowlevelsynccm%
+          \ifdim\pal at defaultborderwidth>0pt
+            \draw[draw=\pal at defaultbordercolor,draw opacity=\pal at defaultborderopacity,line width=\pal at frameborderwidth,rounded corners=\pal at frameborderradius] (-0.5\pal at frameborderwidth,-0.5\pal at frameborderwidth) rectangle ++(\width+\pal at frameborderwidth,\height+\pal at frameborderwidth);%
+          \fi
+
+          \draw[draw opacity=0,rounded corners=\pal at defaultborderradius,path picture={
+            \node at (0.5\width,0.5\height){
+              \pal at nextincludegraphic
+            };
+          }] (0,0) rectangle ++(\width,\height);%
+        \end{tikzpicture}%
+      \else%
+        \pal at nextincludegraphic
+      \fi%
+    }
+
+    \pal at enablegraphicsfilecheck
+
+    % draw ppi
+    \ifpal at preflight
+      \ifx\pal at nextincludegraphic\pal at emptystring
+      \else
+        \isoptimizable{\pal at currfileext}{\pal at getppi{\pal at currfilebase\pal at currfileext}}
+        \ifdefined\pal at graphicdensity
+          \pal at drawppi{#2}{#3}{#4}{#5}{#6}{\pal at graphicdensity}
+        \fi
+      \fi
+    \fi
+    \endgroup
+  \fi
+}
+\newcommand\pal at drawppi[6]{
+  \pal at x=\posx{1}{#1}{1}{#2}
+  \pal at yy=\posy{1}{#1}
+  \pal at xx=\posx{-1}{#3}{-1}{#4}
+  \pal at y=\posy{-1}{#3}
+  \width=\dimexpr(\pal at xx - \pal at x)\relax
+  \height=\dimexpr(\pal at yy - \pal at y)\relax
+  \pal at x=\dimexpr(\pal at x + \width)\relax
+  \pal at y=\dimexpr(\pal at y + \height)\relax
+  \ifdim\pal at x>\dimexpr\pal at pagewidth+\pal at innerbleed+\pal at outerbleed\relax
+    \pal at x=\dimexpr\pal at pagewidth+\pal at innerbleed+\pal at outerbleed\relax
+  \fi
+  \ifdim\pal at y>\dimexpr\pal at pageheight+\pal at topbleed+\pal at bottombleed\relax
+    \pal at y=\dimexpr\pal at pageheight+\pal at topbleed+\pal at bottombleed\relax
+  \fi
+  \def\pal at ppicolor{green!50!black}
+  \def\pal at ppicolortext{white}
+  \ifnum#6<300
+    \def\pal at ppicolor{yellow}
+    \def\pal at ppicolortext{black}
+    \ifnum#6<200
+      \def\pal at ppicolor{red}
+      \def\pal at ppicolortext{white}
+      \pal at errmsg@lowdensity{1}{#5}{#6}
+    \else
+      \pal at errmsg@lowdensity{0}{#5}{#6}
+    \fi
+  \fi
+  \put(\pal at dimentonumber{\pal at x},\pal at dimentonumber{\pal at y}){%
+    \begin{tikzpicture}%
+      \pgflowlevelsynccm%
+      \node[fill=\pal at ppicolor,fill opacity=0.9,line width=0pt,anchor=north east] at (0,0){
+        \color{\pal at ppicolortext}\textbf{#6ppi}
+      };
+    \end{tikzpicture}%
+  }
+}
+
+% pagegraphic
+\def\pal at pagegraphic{}
+\pgfkeys{
+  /pagegraphic/.is family,
+  /pagegraphic,
+  file/.store in=\pal at pagegraphic,
+  scale/.store in=\pal at pagegraphicoptionscale,
+  vpos/.store in=\pal at pagegraphicoptionvpos,
+  hpos/.store in=\pal at pagegraphicoptionhpos,
+  unsharp/.store in=\pal at pagegraphicoptionunsharp,
+}
+\pgfkeys{
+  /backcoverpagegraphic/.is family,
+  /backcoverpagegraphic,
+  file/.store in=\pal at backcoveroptionpagegraphicfile,
+  scale/.store in=\pal at backcoveroptionpagegraphicscale,
+  vpos/.store in=\pal at backcoveroptionpagegraphicvpos,
+  hpos/.store in=\pal at backcoveroptionpagegraphichpos,
+  unsharp/.store in=\pal at backcoveroptionpagegraphicunsharp,
+}
+\def\pal at putpagegraphic{
+  \begingroup
+    \margin=\pal at null
+    \topmargin=\pal at null
+    \bottommargin=\pal at null
+    \innermargin=\pal at null
+    \outermargin=\pal at null
+    \setgrid{{{1}}}
+    \pgfkeys{graphic,scale=\pal at pagegraphicoptionscale,hpos=\pal at pagegraphicoptionhpos,vpos=\pal at pagegraphicoptionvpos,unsharp=\pal at pagegraphicoptionunsharp,border width=0pt,border radius=0pt,shadow size=0,shadow xshift=0pt,shadow yshift=0pt}
+    \pal at putgraphic{0}{0}{1}{1}{\pal at pagegraphic}
+  \endgroup
+}
+\newcommand\setpagegraphic[2][]{
+  \ifcsname pal at graphic@#2\endcsname%
+    \csname pal at graphic@#2\endcsname{#1}
+  \else%
+    \pgfkeys{pagegraphic,file={#2},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal at unsharp,#1}
+  \fi
+}
+\def\nopagegraphic{\setpagegraphic{}}
+
+% text
+\newdimen\pal at textboxheight
+\newdimen\pal at textboxwidth
+\newdimen\pal at leftwidth
+\newdimen\pal at rightwidth
+\newcommand\pal at checkside[1]{
+  \ifpal at fanfold
+    \ifpal at isdoublepage
+      \pal at leftwidth=\dimexpr(\pal at pagewidth + \pal at outerbleed - \pal at x)\relax
+      \pal at rightwidth=\dimexpr(\pal at xx - \pal at pagewidth - \pal at outerbleed)\relax
+      \ifdim\pal at rightwidth>\pal at leftwidth
+        \ifnum#1=1
+          \pal at leftpagefalse
+          \pal at rightpagetrue
+        \else
+          \pal at leftpagetrue
+          \pal at rightpagefalse
+        \fi
+        \addtocounter{page}{#1}
+      \fi
+    \fi
+  \fi
+}
+\def\pal at textoptionbottom{bottom}
+\def\pal at textoptioncenter{center}
+\newif\ifpal at text@option at top
+\newif\ifpal at text@option at center
+\newif\ifpal at text@option at bottom
+\newif\ifpal at text@option at parbox
+\newif\ifpal at text@option at breakable
+\let\originaltcbset\tcbset
+\pgfkeys{
+  /inittext/.is family,
+  /inittext,
+  color/.code={\color{#1}},
+  coltext/.forward to=/inittext/color,
+  boxrule/.code={\def\pal at defaultborderwidth{#1}\def\pal at text@option at leftrule{#1}\def\pal at text@option at rightrule{#1}\def\pal at text@option at toprule{#1}\def\pal at text@option at bottomrule{#1}},
+  toprule/.code={\def\pal at text@option at toprule{#1}},
+  rightrule/.code={\def\pal at text@option at rightrule{#1}},
+  bottomrule/.code={\def\pal at text@option at bottomrule{#1}},
+  leftrule/.code={\def\pal at text@option at leftrule{#1}},
+  height/.code={\def\pal at text@option at height{#1}},
+  arc/.code={\ifdim\pal at null=\dimexpr#1\relax\originaltcbset{outer arc=#1}\else\originaltcbset{auto outer arc}\fi\def\pal at defaultborderradius{#1}},
+  colframe/.store in=\pal at defaultbordercolor,
+  opacityframe/.store in=\pal at defaultborderopacity,
+  breakable/.is if=pal at text@option at breakable,
+  .unknown/.code=,
+  library/.unknown/.code=,
+}
+\renewcommand\tcbset[1]{\originaltcbset{#1}\pgfkeys{inittext,#1}}
+\tcbset{
+  boxrule=0pt,
+  boxsep=0pt,left=0pt,right=0pt,top=0pt,bottom=0pt,
+  opacityframe=1,
+  colframe=black,
+  opacityback=0,
+  arc=0pt,
+}
+\pgfkeysdef{/text/border}{
+  \ifcsname pal at border@#1\endcsname
+    \csname pal at border@#1\endcsname[1]{}
+  \else
+    \pgfkeys{textborder,opacity=1,width=0pt,color=black,radius=0pt}
+    \pal at errmsg@undefined{border}{#1}
+  \fi
+}
+\pgfkeys{
+  /text/.is family,
+  /text,
+  name/.store in=\pal at text@option at name,
+  color/.code={\originaltcbset{coltext=#1}\def\pal at text@option at color{#1}},
+  opacity/.code={\originaltcbset{opacitytext=#1}},
+  top/.code={\originaltcbset{valign=top}\pal at text@option at toptrue},
+  center/.code={\originaltcbset{valign=center}\pal at text@option at centertrue},
+  bottom/.code={\originaltcbset{valign=bottom}\pal at text@option at bottomtrue},
+  boxrule/.code={\originaltcbset{boxrule=#1}\def\pal at defaultborderwidth{#1}\def\pal at text@option at leftrule{#1}\def\pal at text@option at rightrule{#1}\def\pal at text@option at toprule{#1}\def\pal at text@option at bottomrule{#1}},
+  toprule/.code={\originaltcbset{toprule=#1}\def\pal at text@option at toprule{#1}},
+  rightrule/.code={\originaltcbset{rightrule=#1}\def\pal at text@option at rightrule{#1}},
+  bottomrule/.code={\originaltcbset{bottomrule=#1}\def\pal at text@option at bottomrule{#1}},
+  leftrule/.code={\originaltcbset{leftrule=#1}\def\pal at text@option at leftrule{#1}},
+  height/.code={\originaltcbset{height=#1}\def\pal at text@option at height{#1}},
+  parbox/.is if=pal at text@option at parbox,
+  breakable/.is if=pal at text@option at breakable,
+  border radius/.code={\originaltcbset{arc=#1}\ifdim\pal at null=\dimexpr#1\relax\originaltcbset{outer arc=#1}\else\originaltcbset{auto outer arc}\fi\def\pal at defaultborderradius{#1}},
+  arc/.forward to=/text/border radius,
+  border width/.forward to=/text/boxrule,
+  border color/.code={\originaltcbset{colframe=#1}\def\pal at defaultbordercolor{#1}},
+  border opacity/.code={\originaltcbset{opacityframe=#1}\def\pal at defaultborderopacity{#1}},
+  shadow/.forward to=/defaultshadow/name,
+  shadow size/.forward to=/defaultshadow/size,
+  shadow color/.forward to=/defaultshadow/color,
+  shadow opacity/.forward to=/defaultshadow/opacity,
+  shadow xshift/.forward to=/defaultshadow/xshift,
+  shadow yshift/.forward to=/defaultshadow/yshift,
+  .unknown/.code={\originaltcbset{\pgfkeyscurrentname=#1}}
+}
+\newdimen\pal at tcbheight
+\newcommand\pal at puttext[5]{
+  \ifpal at isbatchmode
+  \else
+    \pal at x=\posx{1}{#1}{1}{#2}
+    \pal at xx=\posx{-1}{#3}{-1}{#4}
+    \pal at y=\posy{-1}{#3}
+    \pal at yy=\posy{1}{#1}
+
+    \pal at xx=\dimexpr\pal at xx+\pal at text@option at rightrule\relax
+    \pal at x=\dimexpr\pal at x-\pal at text@option at leftrule\relax
+    \pal at yy=\dimexpr\pal at yy+\pal at text@option at toprule\relax
+    \pal at y=\dimexpr\pal at y-\pal at text@option at bottomrule\relax
+
+    \width=\dimexpr(\pal at xx - \pal at x)\relax
+    \height=\dimexpr(\pal at yy - \pal at y)\relax
+    \pal at textboxwidth=\dimexpr(\pal at xx - \pal at x)\relax
+    \pal at textboxheight=\dimexpr(\pal at yy - \pal at y)\relax
+
+    \ifdefined\pal at text@option at height
+      \ifdim\pal at text@option at height=\height
+      \else
+        \pal at tcbheight=\dimexpr\pal at text@option at height\ifdefined\pal at text@option at toprule+\pal at text@option at toprule\else\ifdefined\pal at defaultborderwidth+\pal at defaultborderwidth\fi\fi\ifdefined\pal at text@option at bottomrule+\pal at text@option at bottomrule\else\ifdefined\pal at defaultborderwidth+\pal at defaultborderwidth\fi\fi\relax
+        \originaltcbset{height=\pal at tcbheight}
+      \fi
+    \else
+    \fi
+
+    \pal at checkvisibility
+    \ifpal at isvisible
+      \pal at checkside{1}
+      \ifpal at text@option at parbox
+        \ifdim\pal at textboxheight<\pal at null
+          \pal at yy=\dimexpr\pal at yy-\pal at textboxheight\relax
+          \pal at textboxheight=\dimexpr-1\pal at textboxheight\relax
+        \fi
+        \put(\pal at dimentonumber{\pal at x},\pal at dimentonumber{\pal at yy}){%
+          \parbox[t][\pal at textboxheight][\ifpal at text@option at center c\else\ifpal at text@option at bottom b\else t\fi\fi]{\pal at textboxwidth}{\vskip \pal at null
+            \color{\pal at text@option at color}%
+            #5%
+          }
+        }
+      \else
+        \ifdim\pal at text@option at bottomrule<\pal at text@option at toprule
+          \def\pal at text@minvborderwidth{\pal at text@option at bottomrule}
+          \def\pal at text@maxvborderwidth{\pal at text@option at toprule}
+        \else
+          \def\pal at text@minvborderwidth{\pal at text@option at toprule}
+          \def\pal at text@maxvborderwidth{\pal at text@option at bottomrule}
+        \fi
+        \ifdim\pal at text@option at leftrule<\pal at text@option at rightrule
+          \def\pal at text@minhborderwidth{\pal at text@option at leftrule}
+          \def\pal at text@maxhborderwidth{\pal at text@option at rightrule}
+        \else
+          \def\pal at text@minhborderwidth{\pal at text@option at rightrule}
+          \def\pal at text@maxhborderwidth{\pal at text@option at leftrule}
+        \fi
+        \ifdim\pal at text@minvborderwidth<\pal at text@minhborderwidth
+          \def\pal at text@minborderwidth{\pal at text@minvborderwidth}
+          \def\pal at text@maxborderwidth{\pal at text@maxhborderwidth}
+        \else
+          \def\pal at text@minborderwidth{\pal at text@minhborderwidth}
+          \def\pal at text@maxborderwidth{\pal at text@maxvborderwidth}
+        \fi
+        \ifdim\pal at text@maxborderwidth=\pal at null
+          \originaltcbset{opacityframe=0}
+        \fi
+
+        \ifpal at text@option at breakable
+          \expandafter\xdef\csname pal at textarray@\pal at text@option at name @offsetx\endcsname{\pal at text@option at leftrule}
+          \expandafter\xdef\csname pal at textarray@\pal at text@option at name @offsety\endcsname{\pal at text@option at bottomrule}
+        \else
+          \def\pal at text@option at name{pal at unbreakable}
+        \fi
+        \ifcsname pal at textarray@\pal at text@option at name @index\endcsname
+          \global\expandafter\csname pal at textarray@\pal at text@option at name @index\endcsname 0 \relax%
+          \boxarrayclear[\pal at text@option at name]
+        \else
+          \global\expandafter\newcount\csname pal at textarray@\pal at text@option at name @index\endcsname%
+          \newboxarray{\pal at text@option at name}
+        \fi
+        \put(0,0){
+          \ifpal at text@option at breakable%
+            \begin{tcolorbox}[
+              standard jigsaw,
+              width=\width,
+              enforce breakable,
+              break at=\height,
+              height fixed for=all,
+              reset box array=\pal at text@option at name,
+              store to box array=\pal at text@option at name,
+            ]%
+              #5
+            \end{tcolorbox}%
+          \else%
+            \begin{tcolorbox}[
+              standard jigsaw,
+              width=\width,
+              reset box array=\pal at text@option at name,
+              store to box array=\pal at text@option at name,
+            ]%
+              #5
+            \end{tcolorbox}%
+          \fi%
+        }
+        \global\expandafter\advance\csname pal at textarray@\pal at text@option at name @index\endcsname by 1%
+
+        \boxarraygetheight[\pal at text@option at name]{\pal at text@height}{1}
+        \ifpal at text@option at bottom
+          \pal at yy=\dimexpr\pal at yy-(\pal at textboxheight-\pal at text@height)\relax
+        \else
+          \ifpal at text@option at center
+            \pal at yy=\dimexpr\pal at yy-(\pal at textboxheight-\pal at text@height)/2\relax
+          \fi
+        \fi
+        \pal at textboxheight=\pal at text@height
+        \pal at y=\dimexpr\pal at yy-\pal at textboxheight\relax
+
+        % draw shadow
+        \pal at ifshadow{
+          \ifdefined\pal at defaultborderradius
+            \ifdim\pal at defaultborderradius=0pt
+              \pal at frameshadowradius=0pt
+            \else
+              \pal at frameshadowradius=\dimexpr\pal at defaultborderradius+\pal at text@minborderwidth\relax
+            \fi
+          \else
+            \pal at frameshadowradius=0pt
+          \fi
+
+          \def\pal at frameshadowoffsetx{0pt}
+          \def\pal at frameshadowoffsety{0pt}
+
+          \def\pal at frameshadowwidth{\dimexpr\width+10cm\relax}
+          \def\pal at frameshadowheight{\dimexpr\pal at textboxheight+10cm\relax}
+          \def\pal at frameshadowframewidth{\width}
+          \def\pal at frameshadowframeheight{\pal at textboxheight}
+          \def\pal at frameshadowborder{\dimexpr5cm\relax}
+          \ifpal at text@option at breakable
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @shadowsize\endcsname{\pal at defaultshadowsize}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @shadowcolor\endcsname{\pal at defaultshadowcolor}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @shadowopacity\endcsname{\pal at defaultshadowopacity}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @shadowxshift\endcsname{\pal at defaultshadowxshift}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @shadowyshift\endcsname{\pal at defaultshadowyshift}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @frameshadowwidth\endcsname{\the\pal at frameshadowwidth}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @frameshadowheight\endcsname{\the\pal at frameshadowheight}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @frameshadowframewidth\endcsname{\the\pal at frameshadowframewidth}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @frameshadowframeheight\endcsname{\the\pal at frameshadowframeheight}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @frameshadowborder\endcsname{\the\pal at frameshadowborder}
+            \expandafter\xdef\csname pal at textarray@\pal at text@option at name @frameshadowradius\endcsname{\the\pal at frameshadowradius}
+          \fi
+          \pal at drawshadow
+        }
+
+        \put(\pal at dimentonumber{\pal at x},\pal at dimentonumber{\pal at y}){%
+          \consumeboxarray[\pal at text@option at name]{\the\csname pal at textarray@\pal at text@option at name @index\endcsname}%
+        }
+      \fi
+      \pal at checkside{-1}
+    \fi
+  \fi
+}
+\newcommand\pal at putusetext[5][default]{
+  \ifpal at isbatchmode
+  \else
+    \pal at x=\posx{1}{#2}{1}{#3}
+    \pal at xx=\posx{-1}{#4}{-1}{#5}
+    \pal at y=\posy{-1}{#4}
+    \pal at yy=\posy{1}{#2}
+    \width=\dimexpr(\pal at xx - \pal at x)\relax
+    \height=\dimexpr(\pal at yy - \pal at y)\relax
+    \pal at textboxwidth=\dimexpr(\pal at xx - \pal at x)\relax
+    \pal at textboxheight=\dimexpr(\pal at yy - \pal at y)\relax
+
+    \pal at checkvisibility
+    \ifpal at isvisible
+      \ifcsname pal at textarray@#1 at index\endcsname
+        \global\expandafter\advance\csname pal at textarray@#1 at index\endcsname by 1%
+
+        \pal at y=\dimexpr\pal at yy-\pal at textboxheight\relax
+
+        \ifcsname pal at textarray@#1 at shadowsize\endcsname
+          \def\pal at frameshadowoffsetx{\expandafter\csname pal at textarray@#1 at offsetx\endcsname}
+          \def\pal at frameshadowoffsety{\expandafter\csname pal at textarray@#1 at offsety\endcsname}
+
+          \def\pal at frameshadowwidth{\dimexpr\expandafter\csname pal at textarray@#1 at frameshadowwidth\endcsname\relax}
+          \def\pal at frameshadowheight{\dimexpr\expandafter\csname pal at textarray@#1 at frameshadowheight\endcsname\relax}
+          \def\pal at frameshadowframewidth{\dimexpr\expandafter\csname pal at textarray@#1 at frameshadowframewidth\endcsname\relax}
+          \def\pal at frameshadowframeheight{\dimexpr\expandafter\csname pal at textarray@#1 at frameshadowframeheight\endcsname\relax}
+          \def\pal at frameshadowborder{\dimexpr\expandafter\csname pal at textarray@#1 at frameshadowborder\endcsname\relax}
+          \def\pal at frameshadowradius{\dimexpr\expandafter\csname pal at textarray@#1 at frameshadowradius\endcsname\relax}
+
+          \def\pal at defaultshadowsize{\expandafter\csname pal at textarray@#1 at shadowsize\endcsname}
+          \def\pal at defaultshadowcolor{\expandafter\csname pal at textarray@#1 at shadowcolor\endcsname}
+          \def\pal at defaultshadowopacity{\expandafter\csname pal at textarray@#1 at shadowopacity\endcsname}
+          \def\pal at defaultshadowxshift{\dimexpr\expandafter\csname pal at textarray@#1 at shadowxshift\endcsname\relax}
+          \def\pal at defaultshadowyshift{\dimexpr\expandafter\csname pal at textarray@#1 at shadowyshift\endcsname\relax}
+
+          \pal at drawshadow
+        \fi
+
+        \pal at checkside{1}
+        \put(\pal at dimentonumber{\pal at x-\expandafter\csname pal at textarray@#1 at offsetx\endcsname},\pal at dimentonumber{\pal at y-\expandafter\csname pal at textarray@#1 at offsety\endcsname}){%
+          \consumeboxarray[#1]{\the\csname pal at textarray@#1 at index\endcsname}%
+        }
+        \pal at checkside{-1}
+      \else
+        \pal at errmsg@undefined{breakable text}{#1}
+      \fi
+    \fi
+  \fi
+}
+
+% xput
+\newcommand\pal at putxput[6][0]{
+  \pal at x=\posx{1}{#2}{1}{#3}
+  \pal at xx=\posx{-1}{#4}{-1}{#5}
+  \pal at y=\posy{-1}{#4}
+  \pal at yy=\posy{1}{#2}
+
+  \pal at checkvisibility
+  \ifpal at isvisible
+    \ifnum#1=1
+      \pal at snapsafezonehorizontal
+      \pal at snapsafezonevertical
+    \fi
+
+    \width=\dimexpr(\pal at xx - \pal at x)\relax
+    \height=\dimexpr(\pal at yy - \pal at y)\relax
+
+    \put(\pal at dimentonumber{\pal at x},\pal at dimentonumber{\pal at y}){%
+      \ifx\pal at pageoptioncolor\pal at emptystring
+        \color{\paloptions at color}%
+      \else
+        \color{\pal at pageoptioncolor}%
+      \fi
+      #6
+    }
+  \fi
+}
+
+% tikzgraphic
+\newcommand\pal at puttikz[6][0]{
+  \ifpal at isbatchmode
+  \else
+    \pal at putxput[#1]{#2}{#3}{#4}{#5}{%
+      \begin{tikzpicture}
+        \pgflowlevelsynccm
+        #6
+      \end{tikzpicture}
+    }
+  \fi
+}
+
+% border
+\def\pal at defaultborderwidth{0pt}
+\def\pal at defaultborderradius{0pt}
+\def\pal at defaultbordercolor{black}
+\def\pal at defaultborderopacity{1}
+\pgfkeysdef{/defaultborder/name}{
+  \ifcsname pal at border@#1\endcsname
+    \csname pal at border@#1\endcsname{}
+  \else
+    \pgfkeys{defaultborder,opacity=1,width=0pt,color=black,radius=0pt}
+    \pal at errmsg@undefined{border}{#1}
+  \fi
+}
+\newcommand\newborder[2]{
+  \expandafter\newcommand\csname pal at border@#1\endcsname[2][0]{%
+    \ifnum##1=1
+      \pgfkeys{textborder,opacity=1,width=0pt,color=black,radius=0pt,#2}
+    \else
+      \pgfkeys{defaultborder,opacity=1,width=0pt,color=black,radius=0pt,#2,##2}
+    \fi
+  }%
+}
+\pgfkeys{
+  /textborder/.is family,
+  /textborder,
+  radius/.forward to=/text/border radius,
+  width/.forward to=/text/border width,
+  color/.forward to=/text/border color,
+  opacity/.forward to=/text/border opacity,
+}
+\pgfkeys{
+  /defaultborder/.is family,
+  /defaultborder,
+  radius/.store in=\pal at defaultborderradius,
+  width/.store in=\pal at defaultborderwidth,
+  color/.store in=\pal at defaultbordercolor,
+  opacity/.store in=\pal at defaultborderopacity,
+}
+\newcommand\setborder[2][]{
+  \ifpal at placeholdermode
+    \ifnum\pal at contentcounter<\pal at placeholdercounter
+      \pal at border{#1}{#2}
+    \fi
+  \else
+    \pal at border{#1}{#2}
+  \fi
+}
+\def\noborder{\setborder{}}
+\newcommand\pal at border[2]{
+  \pgfkeys{defaultborder,width=0pt,color=black,opacity=1,radius=0pt,#1}
+  \ifcsname pal at border@#2\endcsname
+    \csname pal at border@#2\endcsname{#1}
+  \fi
+}
+
+% shadow
+\def\pal at defaultshadowsize{0}
+\def\pal at defaultshadowopacity{0.4}
+\def\pal at defaultshadowcolor{black}
+\def\pal at defaultshadowxshift{0pt}
+\def\pal at defaultshadowyshift{0pt}
+\pgfkeysdef{/defaultshadow/name}{
+  \ifcsname pal at shadow@#1\endcsname
+    \csname pal at shadow@#1\endcsname{}
+  \else
+    \pgfkeys{defaultshadow,size=0,color=black,opacity=0.4,xshift=0pt,yshift=0pt}
+    \pal at errmsg@undefined{shadow}{#1}
+  \fi
+}
+\newcommand\newshadow[2]{
+  \expandafter\newcommand\csname pal at shadow@#1\endcsname[1]{%
+    \pgfkeys{defaultshadow,size=0,color=black,opacity=0.4,xshift=0pt,yshift=0pt,#2,##1}
+  }%
+}
+\pgfkeys{
+  /defaultshadow/.is family,
+  /defaultshadow,
+  size/.store in=\pal at defaultshadowsize,
+  color/.store in=\pal at defaultshadowcolor,
+  opacity/.store in=\pal at defaultshadowopacity,
+  xshift/.store in=\pal at defaultshadowxshift,
+  yshift/.store in=\pal at defaultshadowyshift,
+}
+\newcommand\setshadow[2][]{
+  \ifpal at placeholdermode
+    \ifnum\pal at contentcounter<\pal at placeholdercounter
+      \pal at shadow{#1}{#2}
+    \fi
+  \else
+    \pal at shadow{#1}{#2}
+  \fi
+}
+\def\noshadow{\setshadow{}}
+\newcommand\pal at shadow[2]{
+  \pgfkeys{defaultshadow,size=0,color=black,opacity=0.4,xshift=0pt,yshift=0pt,#1}
+  \ifcsname pal at shadow@#2\endcsname
+    \csname pal at shadow@#2\endcsname{#1}
+  \fi
+}
+\newcommand\pal at ifshadow[1]{
+  \ifdim\dimexpr\pal at defaultshadowsize pt\relax>\pal at null
+    #1
+  \else
+    \ifdim\pal at defaultshadowxshift>\pal at null
+      #1
+    \else
+      \ifdim\pal at defaultshadowyshift>\pal at null
+        #1
+      \fi
+    \fi
+  \fi
+}
+\def\pal at drawshadow{
+  \pal at ifshadow{
+    \xdef\pal at shadowid{shadow-\pal at defaultshadowsize-\pal at defaultshadowcolor-\pal at defaultshadowopacity-\the\numexpr\pal at frameshadowwidth\relax-\the\numexpr\pal at frameshadowheight\relax-\the\numexpr\pal at frameshadowradius\relax-\the\numexpr\pal at frameshadowborder\relax}
+    \IfFileExists{./cache/\pal at shadowid/s.pdf}{
+    \put(\pal at dimentonumber{\dimexpr\pal at x-5cm-\pal at frameshadowoffsetx+\pal at defaultshadowxshift\relax},\pal at dimentonumber{\dimexpr\pal at y-5cm-\pal at frameshadowoffsety-\pal at defaultshadowyshift\relax}){%
+      \includegraphics[width=\pal at frameshadowwidth]{cache/\pal at shadowid/s.pdf}
+    }
+    }{
+      \pal at makeshadow{\pal at shadowid}
+      \IfFileExists{./cache/\pal at shadowid/s.pdf}{
+      \put(\pal at dimentonumber{\dimexpr\pal at x-5cm-\pal at frameshadowoffsetx+\pal at defaultshadowxshift\relax},\pal at dimentonumber{\dimexpr\pal at y-5cm-\pal at frameshadowoffsety-\pal at defaultshadowyshift\relax}){%
+        \includegraphics[width=\pal at frameshadowwidth]{cache/\pal at shadowid/s.pdf}
+      }
+      }{
+        \ifx\pal at processresult\pal at ok
+          \ClassError{pagelayout}{Unexpected error. Shadow not created}{File `cache/\pal at shadowid/s.pdf' not\MessageBreak found.\MessageBreak\MessageBreak\@ehc}
+        \fi
+      }
+    }
+  }
+}
+
+% layout helper
+\def\pal at gridcolor{green!90!black}
+\def\pal at gridopacity{0.8}
+\def\pal at gutteropacity{0.2}
+\newdimen\pal at gridx
+\newdimen\pal at gridxx
+\newdimen\pal at gridy
+\newdimen\pal at gridyy
+\newcommand\pal at putgrid{
+  \ifpal at isemptypage
+  \else
+    \ifpal at grid
+      \pal at gridx=\posx{1}{1}{1}{0}
+      \pal at gridxx=\posx{-1}{1}{-1}{\pal at get{1C}}
+      \pal at gridy=\posy{1}{0}
+      \pal at gridyy=\posy{-1}{\pal at rowscount}
+      \put(0,0){%
+        \begin{tikzpicture}%
+          \pgflowlevelsynccm%
+          \foreach \rowI in {1,...,\pal at rowscount} {
+            \ifnum\rowI<\pal at rowscount
+              \ifdim\pal at gutter=\pal at null
+                \draw[line cap=rect,line width=0.2mm,draw=\pal at gridcolor,opacity=\pal at gridopacity] ({\pal at gridx+0.05mm},{\posy{0}{\rowI}}) -- ({\pal at gridxx-0.05mm},{\posy{0}{\rowI}});%
+              \else
+                \draw[line cap=rect,line width=\pal at gutter,draw=\pal at gridcolor,opacity=\pal at gutteropacity] ({\pal at gridx+\pal at gutter/2},{\posy{0}{\rowI}}) -- ({\pal at gridxx-\pal at gutter/2},{\posy{0}{\rowI}});%
+              \fi
+            \fi
+            \ifnum\numexpr\pal at get{\rowI C} - 1\relax>0
+              \foreach \cellI in {1,...,\numexpr\pal at get{\rowI C} - 1\relax} {
+                \ifdim\pal at gutter=\pal at null
+                  \draw[line width=0.2mm,draw=\pal at gridcolor,opacity=\pal at gridopacity] ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{1}{\numexpr\rowI - 1\relax}}) -- ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{-1}{\rowI}});%
+                \else
+                  \draw[line width=\pal at gutter,draw=\pal at gridcolor,opacity=\pal at gutteropacity] ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{1}{\numexpr\rowI - 1\relax}}) -- ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{-1}{\rowI}});%
+                \fi
+              }
+            \fi
+          }
+          \draw[line width=0.2mm,draw=\pal at gridcolor,opacity=\pal at gridopacity] ({\pal at gridx},{\pal at gridy}) rectangle ({\pal at gridxx},{\pal at gridyy});%
+          \ifdim\pal at gridoffsethorizontal>0.001pt
+            \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal at gridcolor,opacity=\pal at gridopacity] (\pal at gridx,\pal at gridy) -- (\pal at gridx-\pal at gridoffsethorizontal,\pal at gridy) -- (\pal at gridx-\pal at gridoffsethorizontal,\pal at gridyy) -- (\pal at gridx,\pal at gridyy);%
+          \fi
+          \ifdim\pal at gridoffsethorizontaln>0.001pt
+            \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal at gridcolor,opacity=\pal at gridopacity] (\pal at gridxx,\pal at gridy) -- (\pal at gridxx+\pal at gridoffsethorizontaln,\pal at gridy) -- (\pal at gridxx+\pal at gridoffsethorizontaln,\pal at gridyy) -- (\pal at gridxx,\pal at gridyy);%
+          \fi
+          \ifdim\pal at gridoffsetvertical>0.001pt
+            \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal at gridcolor,opacity=\pal at gridopacity]  (\pal at gridx,\pal at gridy) -- (\pal at gridx,\pal at gridy+\pal at gridoffsetvertical)-- (\pal at gridxx,\pal at gridy+\pal at gridoffsetvertical) -- (\pal at gridxx,\pal at gridy);%
+          \fi
+          \ifdim\pal at gridoffsetverticaln>0.001pt
+            \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal at gridcolor,opacity=\pal at gridopacity] ({\pal at gridx},{\pal at gridyy}) --({\pal at gridx},{\pal at gridyy-\pal at gridoffsetverticaln}) -- ({\pal at gridxx},{\pal at gridyy-\pal at gridoffsetverticaln}) -- ({\pal at gridxx},{\pal at gridyy});%
+          \fi
+        \end{tikzpicture}%
+      }
+    \fi
+  \fi
+}
+\def\pal at bleedcolor{red}
+\def\pal at bleedopacity{0.5}
+\newif\ifpal at putbleed
+\newcommand\pal at checkbleed{
+  \ifdim\pal at topbleed>\pal at null
+    \pal at putbleedtrue
+  \else
+    \ifdim\pal at bottombleed>\pal at null
+      \pal at putbleedtrue
+    \else
+      \ifdim\pal at innerbleed>\pal at null
+        \pal at putbleedtrue
+      \else
+        \ifdim\pal at outerbleed>\pal at null
+          \pal at putbleedtrue
+        \else
+          \pal at putbleedfalse
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newcommand\pal at putbleed{
+  \ifpal at isemptypage
+  \else
+    \ifpal at safezone
+      \pal at checkbleed
+      \ifpal at putbleed
+        \put(0,0){%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+
+            \ifpal at frontcover
+              \ifpal at backcover
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at pageheight + \pal at bottombleed) rectangle ++(\pal at pagewidth + \pal at outerbleed,\pal at topbleed);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, 0) rectangle ++(\pal at pagewidth + \pal at outerbleed,\pal at bottombleed);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at bottombleed) rectangle ++(\pal at outerbleed,\pal at pageheight);%
+              \else
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth + \pal at outerbleed, \pal at pageheight + \pal at bottombleed) rectangle ++(\pal at pagewidth + \pal at outerbleed + \spinewidth,\pal at topbleed);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth + \pal at outerbleed, 0) rectangle ++(\pal at pagewidth + \pal at outerbleed + \spinewidth,\pal at bottombleed);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth * 2 + \pal at outerbleed + \spinewidth, \pal at bottombleed) rectangle ++(\pal at outerbleed,\pal at pageheight);%
+              \fi
+            \else
+              \ifpal at fanfold
+                \ifpal at isdoublepage
+                  \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at pageheight + \pal at bottombleed) rectangle ++(\pal at pagewidth * 2 + \pal at outerbleed * 2,\pal at topbleed);%
+                  \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, 0) rectangle ++(\pal at pagewidth * 2 + \pal at outerbleed * 2,\pal at bottombleed);%
+                  \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at bottombleed) rectangle ++(\pal at outerbleed,\pal at pageheight);%
+                  \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth * 2 + \pal at outerbleed, \pal at bottombleed) rectangle ++(\pal at outerbleed,\pal at pageheight);%
+                \else
+                  \ifpal at leftpage
+                    \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at pageheight + \pal at bottombleed) rectangle ++(\pal at pagewidth + \pal at outerbleed,\pal at topbleed);%
+                    \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, 0) rectangle ++(\pal at pagewidth + \pal at outerbleed,\pal at bottombleed);%
+                    \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at bottombleed) rectangle ++(\pal at outerbleed,\pal at pageheight);%
+                  \else
+                    \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth + \pal at outerbleed, \pal at pageheight + \pal at bottombleed) rectangle ++(\pal at pagewidth + \pal at outerbleed,\pal at topbleed);%
+                    \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth + \pal at outerbleed, 0) rectangle ++(\pal at pagewidth + \pal at outerbleed,\pal at bottombleed);%
+                    \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth * 2 + \pal at outerbleed, \pal at bottombleed) rectangle ++(\pal at outerbleed,\pal at pageheight);%
+                  \fi
+                \fi
+              \else
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at pageheight + \pal at bottombleed) rectangle ++(\pal at pagewidth + \pal at leftbleed + \pal at rightbleed,\pal at topbleed);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, 0) rectangle ++(\pal at pagewidth + \pal at leftbleed + \pal at rightbleed,\pal at bottombleed);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (0, \pal at bottombleed) rectangle ++(\pal at leftbleed,\pal at pageheight);%
+                \fill[\pal at bleedcolor,opacity=\pal at bleedopacity] (\pal at pagewidth + \pal at leftbleed, \pal at bottombleed) rectangle ++(\pal at rightbleed,\pal at pageheight);%
+              \fi
+            \fi
+          \end{tikzpicture}%
+        }
+      \fi
+    \fi
+  \fi
+}
+\newdimen\pal at cuttingmarka
+\newdimen\pal at cuttingmarkb
+\pal at cuttingmarka=-3mm
+\pal at cuttingmarkb=-1mm
+\newcommand\pal at putcuttingmarks{
+  \ifpal at isemptypage
+    \ifpal at fanfold
+      \pal at cuttingmarksvisibletrue
+    \fi
+  \else
+    \pal at cuttingmarksvisibletrue
+  \fi
+  \ifpal at cuttingmarksvisible
+    \ifpal at cuttingmarks
+      \ifpal at safezone
+      \else
+        \pal at checkbleed
+        \ifpal at putbleed
+          \put(0,0){%
+            \begin{tikzpicture}%
+              \pgflowlevelsynccm%
+
+              \ifpal at frontcover
+                \ifpal at backcover
+                  \draw[\pal at pageoptioncolor,line width=0.15mm](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed);%
+                  \draw[\pal at pageoptioncolor,line width=0.15mm](\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                  \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed + \pal at pageheight);%
+                  \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed + \pal at pageheight - \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed + \pal at pageheight - \pal at cuttingmarkb);%
+                \else
+                  \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed + \spinewidth - \pal at cuttingmarka, \pal at bottombleed) -- (2\pal at pagewidth + \pal at outerbleed + \spinewidth - \pal at cuttingmarkb, \pal at bottombleed);%
+                  \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed + \spinewidth, \pal at bottombleed + \pal at cuttingmarka) -- (2\pal at pagewidth + \pal at outerbleed + \spinewidth, \pal at bottombleed + \pal at cuttingmarkb);%
+                  \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed + \spinewidth - \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (2\pal at pagewidth + \pal at outerbleed + \spinewidth - \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                  \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed + \spinewidth, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (2\pal at pagewidth + \pal at outerbleed + \spinewidth, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+                \fi
+              \else
+                \ifpal at fanfold
+                  \ifpal at isdoublepage
+                    \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed);%
+                    \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                    \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                    \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+
+                    \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarka, \pal at bottombleed) -- (2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarkb, \pal at bottombleed);%
+                    \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                    \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                    \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+                  \else
+                    \ifpal at leftpage
+                      \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed);%
+                      \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                      \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                      \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+                    \else
+                      \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarka, \pal at bottombleed) -- (2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarkb, \pal at bottombleed);%
+                      \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                      \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (2\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                      \draw[\pal at pageoptioncolor](2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (2\pal at pagewidth + \pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+                    \fi
+                  \fi
+                \else
+                  \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed);%
+                  \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                  \draw[\pal at pageoptioncolor](\pal at outerbleed + \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (\pal at outerbleed + \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                  \draw[\pal at pageoptioncolor](\pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (\pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+                  \draw[\pal at pageoptioncolor](\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarka, \pal at bottombleed) -- (\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarkb, \pal at bottombleed);%
+                  \draw[\pal at pageoptioncolor](\pal at pagewidth + \pal at outerbleed, \pal at bottombleed + \pal at cuttingmarka) -- (\pal at pagewidth + \pal at outerbleed, \pal at bottombleed + \pal at cuttingmarkb);%
+                  \draw[\pal at pageoptioncolor](\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarka, \pal at bottombleed+\pal at pageheight) -- (\pal at pagewidth + \pal at outerbleed - \pal at cuttingmarkb, \pal at bottombleed+\pal at pageheight);%
+                  \draw[\pal at pageoptioncolor](\pal at pagewidth + \pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarka) -- (\pal at pagewidth + \pal at outerbleed, \pal at bottombleed+\pal at pageheight - \pal at cuttingmarkb);%
+                \fi
+              \fi
+            \end{tikzpicture}%
+          }
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\def\pal at safetymargincolor{pink}
+\def\pal at safetymarginopacity{0.8}
+\newif\ifpal at putsafezone
+\newcommand\pal at checksafezone{
+  \ifdim\pal at topsafetymargin>\pal at null
+    \pal at putsafezonetrue
+  \else
+    \ifdim\pal at bottomsafetymargin>\pal at null
+      \pal at putsafezonetrue
+    \else
+      \ifdim\pal at innersafetymargin>\pal at null
+        \pal at putsafezonetrue
+      \else
+        \ifdim\pal at outersafetymargin>\pal at null
+          \pal at putsafezonetrue
+        \else
+          \pal at putsafezonefalse
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newcommand\pal at putsafezone{
+  \ifpal at isemptypage
+  \else
+    \ifpal at safezone
+      \pal at checksafezone
+      \ifpal at putsafezone
+        \put(0,0){%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+
+            \ifpal at frontcover
+              \ifpal at backcover
+              \else
+                \draw[line cap=rect,line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at pagewidth + \pal at outerbleed,0.05mm) -- (\pal at pagewidth + \pal at outerbleed,\paperheight-0.05mm);%
+                \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at outersafetymargin + \pal at outerbleed,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\pal at pagewidth + \pal at outerbleed - \pal at innersafetymargin,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+                \draw[line cap=rect,line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at pagewidth + \pal at outerbleed + \spinewidth,0.05mm) -- (\pal at pagewidth + \pal at outerbleed + \spinewidth,\paperheight-0.05mm);%
+                \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at pagewidth + \pal at outerbleed + \spinewidth + \pal at innersafetymargin,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\paperwidth - \pal at outerbleed - \pal at outersafetymargin,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+              \fi
+            \else
+              \ifpal at fanfold
+                \ifpal at isdoublepage
+                  \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at outersafetymargin + \pal at outerbleed,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\paperwidth / 2 - \pal at innersafetymargin,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+                  \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\paperwidth / 2 + \pal at innersafetymargin,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\paperwidth - \pal at outerbleed - \pal at outersafetymargin,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+                \else
+                  \ifpal at leftpage
+                    \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at outersafetymargin + \pal at outerbleed,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\paperwidth / 2 - \pal at innersafetymargin,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+                  \else
+                    \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\paperwidth / 2 + \pal at innersafetymargin,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\paperwidth - \pal at outerbleed - \pal at outersafetymargin,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+                  \fi
+                \fi
+                \draw[line cap=rect,line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\paperwidth / 2,0.05mm) -- (\paperwidth / 2,\paperheight-0.05mm);%
+              \else
+                \draw[line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at leftsafetymargin + \pal at leftbleed,\pal at bottomsafetymargin + \pal at bottombleed) rectangle (\paperwidth - \pal at rightsafetymargin - \pal at rightbleed,\paperheight - \pal at topsafetymargin - \pal at topbleed);%
+              \fi
+            \fi
+          \end{tikzpicture}%
+        }
+      \else
+        \ifpal at frontcover
+          \ifpal at backcover
+          \else
+            \put(0,0){%
+              \begin{tikzpicture}%
+                \pgflowlevelsynccm%
+                \draw[line cap=rect,line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at pagewidth + \pal at outerbleed,0.05mm) -- (\pal at pagewidth + \pal at outerbleed,\paperheight-0.05mm);%
+                \draw[line cap=rect,line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\pal at pagewidth + \pal at outerbleed + \spinewidth,0.05mm) -- (\pal at pagewidth + \pal at outerbleed + \spinewidth,\paperheight-0.05mm);%
+              \end{tikzpicture}%
+            }
+          \fi
+        \else
+          \ifpal at fanfold
+            \put(0,0){%
+              \begin{tikzpicture}%
+                \pgflowlevelsynccm%
+                \draw[line cap=rect,line width=0.1mm,draw=\pal at safetymargincolor,opacity=\pal at safetymarginopacity] (\paperwidth / 2,0.05mm) -- (\paperwidth / 2,\paperheight-0.05mm);%
+              \end{tikzpicture}%
+            }
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\def\pal at graphpapercolor{gray!70}
+\def\pal at graphpaperopacity{0.2}
+\newcommand\pal at calcgraphpaperx{
+  \ifdim\pal at graphpaperx>\pal at null
+    \pal at graphpaperx=\dimexpr\pal at graphpaperx-\pal at graphpapersnap\relax
+    \pal at calcgraphpaperx
+  \fi
+}
+\newcommand\pal at calcgraphpapery{
+  \ifdim\pal at graphpapery>\pal at null
+    \pal at graphpapery=\dimexpr\pal at graphpapery-\pal at graphpapersnap\relax
+    \pal at calcgraphpapery
+  \fi
+}
+\newcommand\pal at calcgraphpaperoffset{
+  \pal at graphpaperoffset=\pal at null
+
+  \pal at graphpaperoffsetsnap \numexpr\number\pal at pagewidth/\pal at graphpapersnap\relax
+  \pal at graphpaperoffset=\dimexpr\pal at pagewidth-\pal at graphpapersnap*\pal at graphpaperoffsetsnap\relax
+  \ifdim\pal at graphpaperoffset<\pal at null
+    \pal at graphpaperoffset=\dimexpr\pal at graphpaperoffset+\pal at graphpapersnap\relax
+  \fi
+  \pal at graphpaperx=\dimexpr\pal at graphpaperx-\pal at graphpaperoffset\relax
+}
+\newcount\pal at graphpaperoffsetsnap
+\newcommand\pal at putgraphpaper{
+  \ifpal at graphpaper
+    \pal at graphpapery=\pal at bottombleed
+    \pal at calcgraphpapery
+    \pal at graphpaperx=\pal at leftbleed
+    \pal at calcgraphpaperx
+
+    \ifpal at frontcover
+      \ifpal at backcover
+        \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+
+            \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+              \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\pal at pagewidth-\pal at graphpaperx+\pal at outerbleed,\paperheight-\pal at graphpapery);%
+            }
+          \end{tikzpicture}%
+        }
+      \else
+        \pal at graphpaperx=\dimexpr\pal at pagewidth+\pal at outerbleed\relax
+        \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+
+            \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+              \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\spinewidth,\paperheight-\pal at graphpapery);%
+            }
+          \end{tikzpicture}%
+        }
+        \pal at graphpaperx=\dimexpr\pal at pagewidth+\pal at outerbleed+\spinewidth\relax
+        \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+
+            \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+              \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\pal at pagewidth+\pal at outerbleed,\paperheight-\pal at graphpapery);%
+            }
+          \end{tikzpicture}%
+        }
+      \fi
+    \else
+      \ifpal at fanfold
+        \ifpal at isdoublepage
+          \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+            \begin{tikzpicture}%
+              \pgflowlevelsynccm%
+
+              \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+                \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\paperwidth-\pal at graphpaperx,\paperheight-\pal at graphpapery);%
+              }
+            \end{tikzpicture}%
+          }
+        \else
+          \ifpal at leftpage
+            \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+              \begin{tikzpicture}%
+                \pgflowlevelsynccm%
+
+                \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+                  \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\pal at pagewidth-\pal at graphpaperx+\pal at outerbleed,\paperheight-\pal at graphpapery);%
+                }
+              \end{tikzpicture}%
+            }
+          \else
+            \pal at graphpaperx=\dimexpr\pal at pagewidth+\pal at outerbleed\relax
+            \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+              \begin{tikzpicture}%
+                \pgflowlevelsynccm%
+
+                \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+                  \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\pal at pagewidth+\pal at outerbleed,\paperheight-\pal at graphpapery);%
+                }
+              \end{tikzpicture}%
+            }
+          \fi
+        \fi
+      \else
+        \ifpal at isdoublepage
+          \ifpal at rightpage
+            \pal at calcgraphpaperoffset
+          \fi
+        \fi
+
+        \put(\pal at dimentonumber{\pal at graphpaperx},\pal at dimentonumber{\pal at graphpapery}){%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+
+            \foreach \pal at graphpaperconfigitem in \pal at graphpaperconfig {
+              \draw[line cap=rect,line width=0.05mm,step=\pal at graphpaperconfigitem,\pal at graphpapercolor,opacity=\pal at graphpaperopacity] (0pt,0pt) grid ++(\paperwidth-\pal at graphpaperx,\paperheight-\pal at graphpapery);%
+            }
+          \end{tikzpicture}%
+        }
+      \fi
+    \fi
+  \fi
+}
+
+% pages
+\newif\ifpal at isbeforepage
+\def\pal at currentbeforepage{}
+\newcommand\setbeforepage[1]{
+  \ifpal at ispage
+    \def\pal at currentbeforepage{#1}
+  \else
+    \global\def\pal at currentbeforepage{#1}
+  \fi
+}
+\def\nobeforepage{\setbeforepage{}}
+\newcommand\newbeforepage[2]{
+  \expandafter\newcommand\csname pal at before@#1\endcsname{%
+    \begingroup%
+      #2
+    \endgroup%
+  }%
+}
+\newcommand\pal at putbeforepage{
+  \ifx\pal at pagegraphic\pal at emptystring
+  \else
+    \pal at putpagegraphic
+  \fi
+  \ifx\pal at currentbeforepage\pal at emptystring
+  \else
+    \ifcsname pal at before@\pal at currentbeforepage\endcsname%
+      \pal at isbeforepagetrue
+      \csname pal at before@\pal at currentbeforepage\endcsname
+      \pal at isbeforepagefalse
+    \else
+      \pal at errmsg@undefined{before page}{\pal at currentbeforepage}
+    \fi
+  \fi
+  \pal at resetautogrid
+}
+\newcommand\pal at beforepage{
+  \pal at closerows
+  \ifx\pal at pagecolor\pal at emptystring
+  \else
+    \begingroup
+      \margin=\pal at null
+      \topmargin=\pal at null
+      \bottommargin=\pal at null
+      \innermargin=\pal at null
+      \outermargin=\pal at null
+      \setgrid{{{1}}}
+      \ifx\pal at pagecolormodel\pal at emptystring
+      \else
+        \definecolor{tmpcolor}{\pal at pagecolormodel}{\pal at pagecolor}
+        \setpagecolor{tmpcolor}
+      \fi
+      \pal at putxput[1]{0}{0}{1}{1}{%
+        \begin{tikzpicture}%
+          \pgflowlevelsynccm%
+          \fill[\pal at pagecolor] (0,0) rectangle ++(\width,\height);
+        \end{tikzpicture}%
+      }
+    \endgroup
+  \fi
+
+  \ifpal at isemptypage
+  \else
+    \pal at putgraphpaper
+  \fi
+}
+\newcommand\pal at setuppage{
+  \global\gutter=\gutter
+  \global\margin=\margin
+  \global\innermargin=\innermargin
+  \global\outermargin=\outermargin
+  \global\bottommargin=\bottommargin
+  \global\topmargin=\topmargin
+  \ifpal at grid\global\pal at gridtrue\else\global\pal at gridfalse\fi
+  \ifpal at graphpaper\global\pal at graphpapertrue\else\global\pal at graphpaperfalse\fi
+  \ifpal at safezone\global\pal at safezonetrue\else\global\pal at safezonefalse\fi
+  \ifpal at placeholder\global\pal at placeholdertrue\else\global\pal at placeholderfalse\fi
+  \global\let\pal at defaultborderwidth\pal at defaultborderwidth
+  \global\let\pal at defaultborderradius\pal at defaultborderradius
+  \global\let\pal at defaultborderopacity\pal at defaultborderopacity
+  \global\let\pal at defaultbordercolor\pal at defaultbordercolor
+  \global\let\pal at defaultshadowsize\pal at defaultshadowsize
+  \global\let\pal at defaultshadowopacity\pal at defaultshadowopacity
+  \global\let\pal at defaultshadowcolor\pal at defaultshadowcolor
+  \global\let\pal at defaultshadowxshift\pal at defaultshadowxshift
+  \global\let\pal at defaultshadowyshift\pal at defaultshadowyshift
+  \global\let\pal at pagegraphicoptionscale\pal at pagegraphicoptionscale
+  \global\let\pal at pagegraphicoptionvpos\pal at pagegraphicoptionvpos
+  \global\let\pal at pagegraphicoptionhpos\pal at pagegraphicoptionhpos
+  \global\let\pal at pagegraphicoptionunsharp\pal at pagegraphicoptionunsharp
+
+  \pal at pagewidth=\pagewidth
+  \pal at pageheight=\pageheight
+  \pal at outerbleed=\ifdim\outerbleed=\pal at undefdim\bleed\else\outerbleed\fi
+  \pal at innerbleed=\ifdim\innerbleed=\pal at undefdim\bleed\else\innerbleed\fi
+  \pal at topbleed=\ifdim\topbleed=\pal at undefdim\bleed\else\topbleed\fi
+  \pal at bottombleed=\ifdim\bottombleed=\pal at undefdim\bleed\else\bottombleed\fi
+  \pal at outersafetymargin=\ifdim\outersafetymargin=\pal at undefdim\safetymargin\else\outersafetymargin\fi
+  \pal at innersafetymargin=\ifdim\innersafetymargin=\pal at undefdim\safetymargin\else\innersafetymargin\fi
+  \pal at topsafetymargin=\ifdim\topsafetymargin=\pal at undefdim\safetymargin\else\topsafetymargin\fi
+  \pal at bottomsafetymargin=\ifdim\bottomsafetymargin=\pal at undefdim\safetymargin\else\bottomsafetymargin\fi
+
+  \ifpal at haspages
+    \ifpal at twoside
+      \ifpal at leftpage
+        \global\pal at rightpagetrue
+        \global\pal at leftpagefalse
+      \else
+        \global\pal at rightpagefalse
+        \global\pal at leftpagetrue
+      \fi
+    \fi
+  \else
+    \pal at isinitgridfalse
+    \ifpal at beginleft
+      \global\pal at leftpagetrue
+    \fi
+    \ifpal at beginright
+      \global\pal at beginleftfalse
+      \global\pal at beginrightfalse
+      \global\pal at leftpagefalse
+    \fi
+    \ifpal at leftpage
+      \pal at haspagestrue
+      \global\pal at leftpagetrue
+      \global\pal at rightpagefalse
+    \else
+      \ifpal at fanfold
+        \global\pal at rightpagefalse
+        \global\pal at leftpagetrue
+        \setcounter{page}{0}
+        \pal at emptypage
+        \global\pal at rightpagetrue
+        \global\pal at leftpagefalse
+        \global\pal at haslastemptypagetrue
+      \else
+        \ifpal at hascover
+          \ifpal at fillpages
+            \ifpal at twoside
+              \global\pal at rightpagefalse
+              \global\pal at leftpagetrue
+              \setcounter{page}{0}
+              \pal at emptypage
+              \global\pal at rightpagetrue
+              \global\pal at leftpagefalse
+              \global\pal at haslastemptypagetrue
+            \else
+              \pal at haspagestrue
+              \global\pal at rightpagetrue
+            \fi
+          \else
+            \pal at haspagestrue
+            \global\pal at rightpagetrue
+          \fi
+        \else
+          \pal at haspagestrue
+          \global\pal at rightpagetrue
+        \fi
+      \fi
+    \fi
+  \fi
+}
+\newcommand\pal at setupcover{
+  \pal at isinitgridfalse
+  \pal at pagewidth=\ifdim\coverwidth=\pal at undefdim\pagewidth\else\coverwidth\fi
+  \pal at pageheight=\ifdim\coverheight=\pal at undefdim\pageheight\else\coverheight\fi
+  \pal at outerbleed=\ifdim\coverouterbleed=\pal at undefdim\ifdim\coverbleed=\pal at undefdim\ifdim\outerbleed=\pal at undefdim\bleed\else\outerbleed\fi\else\coverbleed\fi\else\coverouterbleed\fi
+  \pal at innerbleed=\ifdim\coverinnerbleed=\pal at undefdim\ifdim\coverbleed=\pal at undefdim\ifdim\innerbleed=\pal at undefdim\bleed\else\innerbleed\fi\else\coverbleed\fi\else\coverinnerbleed\fi
+  \pal at topbleed=\ifdim\covertopbleed=\pal at undefdim\ifdim\coverbleed=\pal at undefdim\ifdim\topbleed=\pal at undefdim\bleed\else\topbleed\fi\else\coverbleed\fi\else\covertopbleed\fi
+  \pal at bottombleed=\ifdim\coverbottombleed=\pal at undefdim\ifdim\coverbleed=\pal at undefdim\ifdim\bottombleed=\pal at undefdim\bleed\else\bottombleed\fi\else\coverbleed\fi\else\coverbottombleed\fi
+  \pal at outersafetymargin=\ifdim\coveroutersafetymargin=\pal at undefdim\ifdim\coversafetymargin=\pal at undefdim\ifdim\outersafetymargin=\pal at undefdim\safetymargin\else\outersafetymargin\fi\else\coversafetymargin\fi\else\coveroutersafetymargin\fi
+  \pal at innersafetymargin=\ifdim\coverinnersafetymargin=\pal at undefdim\ifdim\coversafetymargin=\pal at undefdim\ifdim\innersafetymargin=\pal at undefdim\safetymargin\else\innersafetymargin\fi\else\coversafetymargin\fi\else\coverinnersafetymargin\fi
+  \pal at topsafetymargin=\ifdim\covertopsafetymargin=\pal at undefdim\ifdim\coversafetymargin=\pal at undefdim\ifdim\topsafetymargin=\pal at undefdim\safetymargin\else\topsafetymargin\fi\else\coversafetymargin\fi\else\covertopsafetymargin\fi
+  \pal at bottomsafetymargin=\ifdim\coverbottomsafetymargin=\pal at undefdim\ifdim\coversafetymargin=\pal at undefdim\ifdim\bottomsafetymargin=\pal at undefdim\safetymargin\else\bottomsafetymargin\fi\else\coversafetymargin\fi\else\coverbottomsafetymargin\fi
+}
+\newif\ifpal at pageoptiondouble
+\newif\ifpal at pageoptionfrontcover
+\newif\ifpal at pageoptionbackcover
+\newdimen\pal at backcovergutter
+\newdimen\pal at backcovermargin
+\newdimen\pal at backcovertopmargin
+\newdimen\pal at backcoverbottommargin
+\newdimen\pal at backcoverinnermargin
+\newdimen\pal at backcoveroutermargin
+\pgfkeys{
+  /pagetype/.is family,
+  /pagetype,
+  double/.is if=pal at pageoptiondouble,
+  front cover/.is if=pal at pageoptionfrontcover,
+  back cover/.is if=pal at pageoptionbackcover,
+  .unknown/.code=
+}
+\pgfkeys{
+  /page/.is family,
+  /page,
+  gutter/.store in=\pal at pageoptiongutter,
+  gutter=\gutter,
+  margin/.store in=\pal at pageoptionmargin,
+  margin=\margin,
+  top margin/.store in=\pal at pageoptiontopmargin,
+  top margin=\topmargin,
+  bottom margin/.store in=\pal at pageoptionbottommargin,
+  bottom margin=\bottommargin,
+  inner margin/.store in=\pal at pageoptioninnermargin,
+  inner margin=\innermargin,
+  outer margin/.store in=\pal at pageoptionoutermargin,
+  outer margin=\outermargin,
+  vpos/.code={\pal at gridvalign{#1}},
+  hpos/.code={\pal at gridhalign{#1}},
+  color/.store in=\pal at pageoptioncolor,
+  color=,
+  page color/.code={\setpagecolor{#1}},
+  page graphic/.code={\setpagegraphic{#1}},
+  before page/.code={\setbeforepage{#1}},
+  double/.code={},
+  front cover/.code={},
+  back cover/.code={},
+}
+\pgfkeys{
+  /backcover/.is family,
+  /backcover,
+  gutter/.store in=\pal at backcoveroptiongutter,
+  gutter=\gutter,
+  margin/.store in=\pal at backcoveroptionmargin,
+  margin=\margin,
+  top margin/.store in=\pal at backcoveroptiontopmargin,
+  top margin=\topmargin,
+  bottom margin/.store in=\pal at backcoveroptionbottommargin,
+  bottom margin=\bottommargin,
+  inner margin/.store in=\pal at backcoveroptioninnermargin,
+  inner margin=\innermargin,
+  outer margin/.store in=\pal at backcoveroptionoutermargin,
+  outer margin=\outermargin,
+  vpos/.store in=\pal at backcoveroptionvpos,
+  vpos=0.5,
+  hpos/.store in=\pal at backcoveroptionhpos,
+  hpos=0.5,
+  color/.store in=\pal at backcoveroptioncolor,
+  color=,
+  page color/.store in=\pal at backcoveroptionpagecolor,
+  page color=,
+  page graphic/.store in=\pal at backcoveroptionpagegraphic,
+  page graphic=,
+  before page/.code={},
+  double/.code={},
+  front cover/.code={},
+  back cover/.code={},
+}
+\newcommand\pal at applypageoptions[1]{
+  \pgfkeys{/page,#1}
+  \gutter=\pal at pageoptiongutter
+  \margin=\pal at pageoptionmargin
+  \topmargin=\pal at pageoptiontopmargin
+  \bottommargin=\pal at pageoptionbottommargin
+  \innermargin=\pal at pageoptioninnermargin
+  \outermargin=\pal at pageoptionoutermargin
+
+  \pal at beforepage
+}
+\newcommand\pal at applybackcoveroptions{
+  \pal at gridvalign{\pal at backcoveroptionvpos}
+  \pal at gridhalign{\pal at backcoveroptionhpos}
+
+  \ifx\pal at backcoveroptionpagecolor\pal at emptystring
+    \def\pal at pagecolor{}
+  \else
+    \setpagecolor{\pal at backcoveroptionpagecolor}
+  \fi
+  \ifx\pal at backcoveroptionpagegraphic\pal at emptystring
+    \def\pal at pagegraphic{}
+  \else
+    \def\pal at pagegraphic{\pal at backcoveroptionpagegraphicfile}
+    \def\pal at pagegraphicoptionscale{\pal at backcoveroptionpagegraphicscale}
+    \def\pal at pagegraphicoptionvpos{\pal at backcoveroptionpagegraphicvpos}
+    \def\pal at pagegraphicoptionhpos{\pal at backcoveroptionpagegraphichpos}
+    \def\pal at pagegraphicoptionunsharp{\pal at backcoveroptionpagegraphicunsharp}
+  \fi
+  \ifx\pal at backcoveroptioncolor\pal at emptystring
+    \def\pal at pageoptioncolor{\pal at backcovercolor}
+  \else
+    \def\pal at pageoptioncolor{\pal at backcoveroptioncolor}
+  \fi
+  \setborder[radius=\pal at backcoveroptionborderradius,width=\pal at backcoveroptionborderwidth,opacity=\pal at backcoveroptionborderopacity,color=\pal at backcoveroptionbordercolor]{}
+  \setshadow[size=\pal at backcoveroptionshadowsize,opacity=\pal at backcoveroptionshadowopacity,color=\pal at backcoveroptionshadowcolor,xshift=\pal at backcoveroptionshadowxshift,yshift=\pal at backcoveroptionshadowyshift]{}
+  \gutter=\pal at backcovergutter
+  \margin=\pal at backcovermargin
+  \topmargin=\pal at backcovertopmargin
+  \bottommargin=\pal at backcoverbottommargin
+  \innermargin=\pal at backcoverinnermargin
+  \outermargin=\pal at backcoveroutermargin
+
+  \ifdefined\pal at backcovergrid
+    \pal at backcovergrid
+  \fi
+
+  \pal at beforepage
+}
+\newcommand\page[2][]{
+  \pal at pageoptiondoublefalse
+  \pal at pageoptionfrontcoverfalse
+  \pal at pageoptionbackcoverfalse
+  \pgfkeys{/pagetype,#1}
+  \ifpal at pageoptiondouble
+    \pal at doublepage[#1]{#2}
+  \else
+    \ifpal at pageoptionfrontcover
+      \pal at frontcover[#1]{#2}
+    \else
+      \ifpal at pageoptionbackcover
+        \pal at backcover[#1]{#2}
+      \else
+        \pal at standardpage[#1]{#2}
+      \fi
+    \fi
+  \fi
+}
+\newcommand\pal at standardpage[2][]{
+  \global\pal at placeholdercounter=0\relax
+  \ifpal at backcover
+    \pal at setupcover
+  \else
+    \pal at setuppage
+  \fi
+  \pal at ispagetrue
+  \global\pal at topmargintmp=\topmargin\global\topmargin=\pal at undefdim
+  \pal at setdimensions
+  \ifpal at fanfold
+    \ifpal at leftpage
+      \global\pal at isfanfoldopentrue
+      \begin{picture}(\pal at dimentonumber\paperwidth,\pal at dimentonumber\paperheight)
+    \fi
+  \else
+    \begin{picture}(\pal at dimentonumber\paperwidth,\pal at dimentonumber\paperheight)
+  \fi
+  \topmargin=\pal at topmargintmp
+  \begingroup
+    \ifpal at fanfold
+      \ifpal at pagenumberinghaschanged
+        \global\pal at pagenumberinghaschangedfalse
+      \else
+        \ifpal at rightpage
+          \global\addtocounter{page}{1}
+        \fi
+      \fi
+    \fi
+    \ifpal at backcover
+      \pal at applybackcoveroptions
+    \else
+      \pal at applypageoptions{#1}
+    \fi
+    \pal at putbeforepage
+    #2
+    \pal at putbleed
+    \pal at putgrid
+    \pal at putcuttingmarks
+    \pal at putsafezone
+  \endgroup
+  \ifpal at fanfold
+    \ifpal at rightpage
+      \ifnum\pal at tocfixpageoffset=-1
+        \addtocounter{page}{-1}
+      \fi
+      \global\pal at isfanfoldopenfalse
+      \end{picture}
+      \ifnum\pal at tocfixpageoffset=-1
+        \addtocounter{page}{1}
+        \global\def\pal at tocfixpageoffset{0}
+      \fi
+    \fi
+  \else
+    \end{picture}
+  \fi
+  \global\topmargin=\pal at topmargintmp
+  \pal at ispagefalse
+}
+\newcommand\pal at doublepage[2][]{
+  \global\pal at placeholdercounter=0\relax
+  \ifpal at twoside
+    \ifpal at haspages
+      \ifpal at leftpage\page{}\fi
+    \else
+      \ifpal at beginleft
+        \ifpal at beginright
+          \page{}
+        \fi
+      \else
+        \page{}
+      \fi
+    \fi
+    \pal at ispagetrue
+    \global\pal at isdoublepagetrue
+    \pal at setuppage
+    \global\pal at topmargintmp=\topmargin\global\topmargin=\pal at undefdim
+    \pal at setdimensions
+    \begin{picture}(\pal at dimentonumber\paperwidth,\pal at dimentonumber\paperheight)
+      \topmargin=\pal at topmargintmp
+      \pal at applypageoptions{#1}
+      \pal at putbeforepage
+      #2
+      \pal at putbleed
+      \pal at putgrid
+      \pal at putcuttingmarks
+      \pal at putsafezone
+      \ifnum\pal at tocfixpageoffset=1
+        \addtocounter{page}{1}
+      \fi
+    \end{picture}
+
+    \pal at setuppage
+    \ifpal at fanfold
+      \ifnum\pal at tocfixpageoffset=1
+        \global\def\pal at tocfixpageoffset{0}
+      \else
+        \addtocounter{page}{1}
+      \fi
+    \else
+      \pal at setdimensions
+      \begin{picture}(\pal at dimentonumber\paperwidth,\pal at dimentonumber\paperheight)
+        \topmargin=\pal at topmargintmp
+        \pal at applypageoptions{#1}
+        \global\pal at placeholdercounter=0\relax
+        \pal at putbeforepage
+        #2
+        \pal at putbleed
+        \pal at putgrid
+        \pal at putcuttingmarks
+        \pal at putsafezone
+      \end{picture}
+    \fi
+    \global\pal at isdoublepagefalse
+    \global\topmargin=\pal at topmargintmp
+    \pal at ispagefalse
+  \else
+    \pal at standardpage[#1]{#2}
+  \fi
+}
+\newcommand\pal at backcover[2][]{
+  \ifpal at hascover
+    \pal at errmsg@backcoverdefinedafterfrontcover
+  \else
+    \ifdefined\pal at tmpgrid
+      \let\pal at backcovergrid\pal at tmpgrid
+    \fi
+    \edef\pal at backcovercolor{\paloptions at color}
+    \pgfkeys{/backcover,#1}
+    \pal at backcovergutter=\pal at backcoveroptiongutter
+    \pal at backcovermargin=\pal at backcoveroptionmargin
+    \pal at backcovertopmargin=\pal at backcoveroptiontopmargin
+    \pal at backcoverbottommargin=\pal at backcoveroptionbottommargin
+    \pal at backcoverinnermargin=\pal at backcoveroptioninnermargin
+    \pal at backcoveroutermargin=\pal at backcoveroptionoutermargin
+    \ifx\pal at backcoveroptionpagecolor\pal at emptystring
+      \let\pal at backcoveroptionpagecolor\pal at pagecolor
+    \fi
+    \ifx\pal at backcoveroptionpagegraphic\pal at emptystring
+      \let\pal at backcoveroptionpagegraphic\pal at pagegraphic
+      \let\pal at backcoveroptionpagegraphicfile\pal at pagegraphic
+      \ifdefined\pal at pagegraphicoptionscale
+        \let\pal at backcoveroptionpagegraphicscale\pal at pagegraphicoptionscale
+      \fi
+      \ifdefined\pal at pagegraphicoptionhpos
+        \let\pal at backcoveroptionpagegraphichpos\pal at pagegraphicoptionhpos
+      \fi
+      \ifdefined\pal at pagegraphicoptionvpos
+        \let\pal at backcoveroptionpagegraphicvpos\pal at pagegraphicoptionvpos
+      \fi
+      \ifdefined\pal at pagegraphicoptionunsharp
+        \let\pal at backcoveroptionpagegraphicunsharp\pal at pagegraphicoptionunsharp
+      \fi
+    \else
+      \ifcsname pal at graphic@\pal at backcoveroptionpagegraphic\endcsname
+        \csname pal at graphic@\pal at backcoveroptionpagegraphic\endcsname[1]{}
+      \else
+        \def\pal at backcoveroptionpagegraphicfile{\pal at backcoveroptionpagegraphic}
+        \def\pal at backcoveroptionpagegraphicscale{1}
+        \def\pal at backcoveroptionpagegraphichpos{0.5}
+        \def\pal at backcoveroptionpagegraphicvpos{0.5}
+        \def\pal at backcoveroptionpagegraphicunsharp{\pal at unsharp}
+      \fi
+    \fi
+    \let\pal at backcoveroptionborderradius\pal at defaultborderradius
+    \let\pal at backcoveroptionborderopacity\pal at defaultborderopacity
+    \let\pal at backcoveroptionborderwidth\pal at defaultborderwidth
+    \let\pal at backcoveroptionbordercolor\pal at defaultbordercolor
+    \let\pal at backcoveroptionshadowopacity\pal at defaultshadowopacity
+    \let\pal at backcoveroptionshadowsize\pal at defaultshadowsize
+    \let\pal at backcoveroptionshadowcolor\pal at defaultshadowcolor
+    \let\pal at backcoveroptionshadowxshift\pal at defaultshadowxshift
+    \let\pal at backcoveroptionshadowyshift\pal at defaultshadowyshift
+
+    \ifdefined\pal at currentcontents
+      \let\pal at backcovercontent\pal at currentcontents
+      \def\pal at backcovertemplate{#2}
+    \else
+      \def\pal at backcovercontent{#2}
+    \fi
+  \fi
+}
+\newcommand\pal at frontcover[2][]{
+  \pal at ispagetrue
+  \pal at hascovertrue
+  \pal at setupcover
+  \setcounter{page}{0}
+  \global\pal at topmargintmp=\topmargin\global\topmargin=\pal at undefdim
+  \ifpal at cover
+    \global\pal at frontcovertrue
+    \pal at setdimensions
+    \begin{picture}(\pal at dimentonumber\paperwidth,\pal at dimentonumber\paperheight)
+      \topmargin=\pal at topmargintmp
+      \global\pal at backcovertrue
+      \def\pal at currentbeforepage{}
+      \begingroup
+        \ifdefined\pal at backcovercontent
+          \pal at applybackcoveroptions
+          \pal at putbeforepage
+          \ifdefined\pal at backcovertemplate
+            \pal at placeholdercounter 0\relax%
+            \let\pal at currentcontents\pal at backcovercontent%
+            \pal at backcovertemplate%
+          \else
+            \pal at backcovercontent
+          \fi
+        \fi
+        \pal at putbleed
+        \pal at putgrid
+        \pal at putcuttingmarks
+        \pal at putsafezone
+      \endgroup
+      \global\pal at backcoverfalse
+      \pal at resetautogrid
+      \pal at gridoffsetx=\dimexpr(\pal at pagewidth + \pal at outerbleed - \pal at innerbleed + \spinewidth)\relax
+      \pal at applypageoptions{#1}
+      \global\pal at placeholdercounter=0\relax
+      \pal at putbeforepage
+      #2
+      \pal at putbleed
+      \pal at putgrid
+      \pal at putcuttingmarks
+      \pal at putsafezone
+    \end{picture}
+    \global\pal at frontcoverfalse
+    \let\pal at backcovercontent\undefined
+  \else
+    \pal at setdimensions
+    \begin{picture}(\pal at dimentonumber\paperwidth,\pal at dimentonumber\paperheight)
+      \topmargin=\pal at topmargintmp
+      \pal at applypageoptions{#1}
+      \def\pal at currentbeforepage{}
+      \pal at putbeforepage
+      #2
+      \pal at putbleed
+      \pal at putgrid
+      \pal at putcuttingmarks
+      \pal at putsafezone
+    \end{picture}
+  \fi
+  \global\topmargin=\pal at topmargintmp
+  \pal at ispagefalse
+}
+\newcommand\leftpage[1]{
+  \ifpal at leftpage
+    \pal at renderleftpage{#1}
+  \else
+    \ifpal at fanfold
+      \ifpal at isdoublepage
+        \pal at renderleftpage{#1}
+      \fi
+    \else
+      \ifpal at isdoublepage
+        \pal at renderleftpage[1]{#1}
+      \fi
+    \fi
+  \fi
+}
+\newcommand\rightpage[1]{
+  \ifpal at rightpage
+    \pal at renderrightpage{#1}
+  \else
+    \ifpal at fanfold
+      \ifpal at isdoublepage
+        \pal at renderrightpage{#1}
+      \fi
+    \else
+      \ifpal at isdoublepage
+        \pal at renderrightpage[1]{#1}
+      \fi
+    \fi
+  \fi
+}
+\newcommand\pal at renderleftpage[2][0]{
+  \begingroup
+    \pal at isdoublepagefalse
+    \pal at setdimensions
+    \pal at closerows
+    \ifnum#1=1
+      \pal at drymodetrue
+    \fi
+      #2
+    \ifnum#1=1
+      \pal at drymodefalse
+    \else
+      \ifpal at isbeforepage
+      \else
+        \pal at putgrid
+      \fi
+    \fi
+  \endgroup
+}
+\newif\ifpal at wasdoublepage
+\newif\ifpal at renderrightpage
+\newcommand\pal at renderrightpage[2][0]{
+  \pal at renderrightpagetrue
+  \begingroup
+    \ifpal at fanfold
+      \ifpal at isdoublepage
+        \pal at wasdoublepagetrue
+        \addtocounter{page}{1}
+      \fi
+    \fi
+    \pal at isdoublepagefalse
+    \pal at rightpagetrue
+    \pal at leftpagefalse
+    \pal at setdimensions
+    \pal at closerows
+    \ifnum#1=1
+      \pal at drymodetrue
+    \fi
+      #2
+    \ifnum#1=1
+      \pal at drymodefalse
+    \else
+      \ifpal at isbeforepage
+      \else
+        \pal at putgrid
+      \fi
+    \fi
+    \ifpal at fanfold
+      \ifpal at wasdoublepage
+        \pal at wasdoublepagefalse
+        \addtocounter{page}{-1}
+      \fi
+    \fi
+  \endgroup
+  \pal at renderrightpagefalse
+}
+
+% templates
+\newif\ifpal at drymode
+\newif\ifpal at placeholderoptions
+\newif\ifpal at placeholdermode
+\newif\ifpal at isplace
+\pal at placeholderoptionstrue
+\newcount\pal at placeholdercounter
+\newcount\pal at contentcounter
+\newdimen\pal at placeholderfontsize
+\def\pal at frameyymax{0}
+\def\pal at framexxmax{0}
+\def\pal at setgridframe#1 #2 #3 #4 \\{
+  \def\pal at framey{#1}
+  \def\pal at framex{#2}
+  \def\pal at frameyy{#3}
+  \def\pal at framexx{#4}
+}
+\def\pal at setdefaultgridframe#1 #2 #3 #4 \\{
+  \def\pal at defaultframey{#1}
+  \def\pal at defaultframex{#2}
+  \def\pal at defaultframeyy{#3}
+  \def\pal at defaultframexx{#4}
+  \pal at setgridframe #1 #2 #3 #4 \\
+}
+\def\pal at resetgridframe{
+  \global\pal at isplacefalse
+  \pgfmathceil{\pal at frameyy}
+  \pgfmathint{\pgfmathresult}
+  \global\edef\pal at currentrow{\pgfmathresult}
+  \ifnum\pal at currentrow>\pal at frameyymax
+    \global\edef\pal at frameyymax{\pal at currentrow}
+    \global\def\pal at framexxmax{0}
+  \fi
+  \pgfmathceil{\pal at framexx}
+  \pgfmathint{\pgfmathresult}
+  \global\edef\pal at currentcell{\pgfmathresult}
+  \ifnum\pal at currentcell>\pal at framexxmax
+    \global\edef\pal at framexxmax{\pal at currentcell}
+  \fi
+
+  \pgfmathqparse{\pal at get{\pal at frameyymax C}pt>\pal at framexxmax pt}
+  \ifnum\pgfmathresult=1
+    \global\edef\pal at framey{\the\numexpr\pal at frameyymax-1\relax}
+    \global\edef\pal at framex{\pal at framexxmax}
+    \global\edef\pal at frameyy{\pal at frameyymax}
+    \global\edef\pal at framexx{\the\numexpr\pal at framexxmax+1\relax}
+  \else
+    \ifnum\pal at frameyymax=\pal at rowscount
+      \global\pal at gridfulltrue
+    \else
+      \global\edef\pal at framey{\pal at frameyymax}
+      \global\edef\pal at framex{0}
+      \global\edef\pal at frameyy{\the\numexpr\pal at frameyymax+1\relax}
+      \global\edef\pal at framexx{1}
+    \fi
+  \fi
+}
+\newcommand\placeholder[2][0]{
+  \begingroup
+  \ifx#2\pal at emptystring
+  \else
+    \global\pal at isplacetrue
+  \fi
+  \def\pal at currentplaceholder{}
+  \ifnum#1=0
+    \global\advance \pal at placeholdercounter by 1
+  \else
+    \global\pal at placeholdercounter=#1
+  \fi
+  \pal at contentcounter 0\relax
+  \def\pal at tmp{\pal at currentcontents}
+  \pal at placeholdermode{1}
+  \pal at tmp
+  \pal at placeholdermode{0}
+  \pal at putcontent{
+    \ifx\pal at emptystring\pal at currentplaceholder
+      \ifpal at placeholder
+        \ifx#2\pal at emptystring
+        \else
+          \pal at setgridframe #2 \\
+        \fi
+        \pal at textboxheight=\dimexpr(\posy{1}{\pal at framey} - \posy{-1}{\pal at frameyy})\relax
+        \pal at textboxwidth=\dimexpr(\posx{-1}{\pal at frameyy}{-1}{\pal at framexx} - \posx{1}{\pal at framey}{1}{\pal at framex})\relax
+        \ifdim\pal at textboxwidth>\pal at textboxheight
+          \pal at placeholderfontsize=0.5\pal at textboxheight
+        \else
+          \pal at placeholderfontsize=0.5\pal at textboxwidth
+        \fi
+        \ifdim\pal at placeholderfontsize>1000pt
+          \pal at placeholderfontsize=1000pt
+        \fi
+        \pal at putxput{\pal at framey}{\pal at framex}{\pal at frameyy}{\pal at framexx}{%
+          \begin{tikzpicture}%
+            \pgflowlevelsynccm%
+            \filldraw[line width=0.1mm,draw=cyan!60,fill=cyan!30,opacity=0.3] (0,0) rectangle ++(\width,\height);
+            \ifdim\pal at placeholderfontsize>5mm
+              \node[opacity=0.3] at (0.5\width,0.5\height){
+                \fontsize{\pal at placeholderfontsize}{0pt}\selectfont\textcolor{cyan!60}{\textbf{\the\pal at placeholdercounter}}
+              };
+            \fi
+          \end{tikzpicture}%
+        }
+        \pal at resetgridframe
+      \else
+        \ifx\pal at currentplaceholdertype\pal at placeholdertypeusetext
+          \ifx#2\pal at emptystring
+          \else
+            \pal at setgridframe #2 \\
+          \fi
+          \ifx\pal at currentplaceholderoptions\pal at emptystring
+            \pal at placeholderoptionsfalse
+            \csname \pal at currentplaceholdertype\endcsname
+            \pal at placeholderoptionstrue
+          \else
+            \csname \pal at currentplaceholdertype\endcsname[\pal at currentplaceholderoptions]
+          \fi
+        \fi
+      \fi
+    \else
+      \ifx#2\pal at emptystring
+      \else
+        \pal at setgridframe #2 \\
+      \fi
+      \ifx\pal at currentplaceholderoptions\pal at emptystring
+        \pal at placeholderoptionsfalse
+        \csname \pal at currentplaceholdertype\endcsname{\pal at currentplaceholder}
+        \pal at placeholderoptionstrue
+      \else
+        \csname \pal at currentplaceholdertype\endcsname[\pal at currentplaceholderoptions]{\pal at currentplaceholder}
+      \fi
+    \fi
+  }
+  \endgroup
+}
+\newcommand\pal at graphic[2][]{
+  \advance \pal at contentcounter by 1
+  \ifnum\pal at contentcounter=\pal at placeholdercounter
+    \def\pal at currentplaceholdertype{graphic}
+    \def\pal at currentplaceholderoptions{}
+    \pgfkeys{graphic,file={#2},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal at unsharp,#1}
+    \ifcsname pal at graphic@#2\endcsname%
+      \csname pal at graphic@#2\endcsname[2]{#1}%
+    \fi
+
+    \edef\pal at currentplaceholder{\pal at graphicoptionfile}
+  \fi
+}
+\newcommand\pal at xput[1]{
+  \advance \pal at contentcounter by 1
+  \ifnum\pal at contentcounter=\pal at placeholdercounter
+    \def\pal at currentplaceholdertype{xput}
+    \def\pal at currentplaceholderoptions{}
+    \def\pal at currentplaceholder{#1}
+  \fi
+}
+\newcommand\pal at tikz[1]{
+  \advance \pal at contentcounter by 1
+  \ifnum\pal at contentcounter=\pal at placeholdercounter
+    \def\pal at currentplaceholdertype{tikzgraphic}
+    \def\pal at currentplaceholderoptions{}
+    \def\pal at currentplaceholder{#1}
+  \fi
+}
+\newcommand\pal at text[2][]{
+  \advance \pal at contentcounter by 1
+  \ifnum\pal at contentcounter=\pal at placeholdercounter
+    \def\pal at currentplaceholdertype{text}
+    \def\pal at currentplaceholderoptions{}
+    \edef\pal at currentborderradius{\pal at defaultborderradius}
+    \edef\pal at currentborderwidth{\pal at defaultborderwidth}
+    \edef\pal at currentbordercolor{\pal at defaultbordercolor}
+    \edef\pal at currentborderopacity{\pal at defaultborderopacity}
+    \pgfkeys{text,name=default,color=\ifx\pal at pageoptioncolor\pal at emptystring\paloptions at color\else\pal at pageoptioncolor\fi,border radius=\pal at currentborderradius,border width=\pal at currentborderwidth,border color=\pal at currentbordercolor,border opacity=\pal at currentborderopacity,#1}
+    \def\pal at currentplaceholder{#2}
+  \fi
+}
+\def\pal at placeholdertypeusetext{usetext}
+\newcommand\pal at usetext[1][default]{
+  \advance \pal at contentcounter by 1
+  \ifnum\pal at contentcounter=\pal at placeholdercounter
+    \edef\pal at currentplaceholdertype{\pal at placeholdertypeusetext}
+    \def\pal at currentplaceholderoptions{#1}
+    \def\pal at currentplaceholder{}
+  \fi
+}
+\newcommand\pal at rendertemplate[3]{
+  \pal at placeholdercounter 0\relax%
+  \global\def\pal at currentcontents{#2}%
+  \page[#1]{%
+    #3
+  }%
+}
+\newcommand{\newtemplate}[3][]{
+  \expandafter\newcommand\csname pal at template@#2\endcsname[2][]{%
+    \pal at rendertemplate{#1,##1}{##2}{#3}
+  }%
+}
+\newcommand\template[3][]{
+  \ifcsname pal at template@#2\endcsname%
+  \else%
+    \newtemplate[]{#2}{
+      \pal at gridsc{#2}
+    }
+  \fi
+  \csname pal at template@#2\endcsname[#1]{
+    #3
+  }
+}
+\newcommand\graphic{}
+\newcommand\xput{}
+\newcommand\tikzgraphic{}
+\newcommand\usetext{}
+\newcommand\text{}
+\newcommand\pal at putcontent[1]{
+  \ifpal at drymode
+  \else
+    \begingroup
+    \ifpal at gridfull
+      \ifpal at isplace#1\fi
+    \else
+      #1
+    \fi
+    \endgroup
+  \fi
+}
+\newcommand\pal at placeholdermode[1]{
+  \pal at placeholdermodefalse
+  \ifnum#1=0%
+    \renewcommand\graphic[2][]{%
+      \pal at putcontent{%
+        \def\pal at graphicoptionfile{##2}
+        \ifpal at placeholderoptions
+          \ifcsname pal at graphic@##2\endcsname%
+            \csname pal at graphic@##2\endcsname[2]{##1}
+          \else
+            \pgfkeys{graphic,file={##2},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal at unsharp,##1}
+          \fi
+        \fi
+        \pal at putgraphic{\pal at framey}{\pal at framex}{\pal at frameyy}{\pal at framexx}{\pal at graphicoptionfile}%
+        \pal at resetgridframe
+      }
+    }%
+    \renewcommand\xput[1]{%
+      \pal at putcontent{%
+        \pal at putxput{\pal at framey}{\pal at framex}{\pal at frameyy}{\pal at framexx}{##1}%
+        \pal at resetgridframe
+      }
+    }%
+    \renewcommand\tikzgraphic[1]{%
+      \pal at putcontent{%
+        \pal at puttikz{\pal at framey}{\pal at framex}{\pal at frameyy}{\pal at framexx}{##1}%
+        \pal at resetgridframe
+      }
+    }%
+    \renewcommand\usetext[1][default]{%
+      \pal at putcontent{%
+        \pal at putusetext[##1]{\pal at framey}{\pal at framex}{\pal at frameyy}{\pal at framexx}%
+        \pal at resetgridframe
+      }
+    }%
+    \renewcommand\text[2][]{%
+      \pal at putcontent{%
+        \edef\pal at currentborderradius{\pal at defaultborderradius}
+        \edef\pal at currentborderwidth{\pal at defaultborderwidth}
+        \edef\pal at currentbordercolor{\pal at defaultbordercolor}
+        \edef\pal at currentborderopacity{\pal at defaultborderopacity}
+        \pgfkeys{text,name=default,color=\ifx\pal at pageoptioncolor\pal at emptystring\paloptions at color\else\pal at pageoptioncolor\fi,border radius=\pal at currentborderradius,border width=\pal at currentborderwidth,border color=\pal at currentbordercolor,border opacity=\pal at currentborderopacity,##1}
+        \pal at puttext{\pal at framey}{\pal at framex}{\pal at frameyy}{\pal at framexx}{##2}%
+        \pal at resetgridframe
+      }
+    }%
+  \else%
+    \pal at placeholdermodetrue
+    \renewcommand\graphic[2][]{%
+      \pal at graphic[##1]{##2}%
+    }%
+    \renewcommand\xput[1]{%
+      \pal at xput{##1}%
+    }%
+    \renewcommand\tikzgraphic[1]{%
+      \pal at tikz{##1}%
+    }%
+    \renewcommand\usetext[1][default]{%
+      \pal at usetext[##1]%
+    }
+    \renewcommand\text[2][]{%
+      \pal at text[##1]{##2}%
+    }
+  \fi%
+}
+\pal at placeholdermode{0}
+\newcommand\place[1]{
+  \pal at isplacetrue
+  \pal at setgridframe #1 \\
+}
+\pal at setdefaultgridframe 0 0 1 1 \\
+
+\newcommand\pal at emptypage{
+  \global\pal at isemptypagetrue
+  \page[before page=,page graphic=,page color=]{}
+  \global\pal at isemptypagefalse
+}
+
+\def\pal at tocfixpageoffset{0}
+\def\sectioncalled{
+  \ifpal at fanfold
+    \ifpal at isdoublepage
+      \ifpal at rightpage
+        \global\def\pal at tocfixpageoffset{1}
+      \fi
+    \else
+      \ifpal at renderrightpage
+        \global\def\pal at tocfixpageoffset{1}
+      \else
+        \ifpal at leftpage
+          \global\def\pal at tocfixpageoffset{-1}
+        \fi
+      \fi
+    \fi
+  \fi
+}
+
+\def\pal at turbojobname{pagelayoutturbobatchoptimizexyz}
+\edef\pal at turbojobname{\meaning\pal at turbojobname}
+\edef\pal at jobname{\jobname}
+\edef\pal at jobname{\meaning\pal at jobname}
+\AtBeginDocument{
+  % fanfold toc partial fix
+  \let\pal at originalsection\section
+  \def\pal at nextsection#1{
+    \sectioncalled
+    \@ifnextchar\bgroup{\pal at originalsection*}{\pal at originalsection{#1}}}
+  \let\section\pal at nextsection
+  \let\pal at originalsubsection\subsection
+  \def\pal at nextsubsection#1{
+    \sectioncalled
+    \@ifnextchar\bgroup{\pal at originalsubsection*}{\pal at originalsubsection{#1}}}
+  \let\subsection\pal at nextsubsection
+
+  \ifpal at optimize
+  \else
+    \pal at isturbomodefalse
+  \fi
+
+  \ifpal at isturbomode
+    \ifx\pal at jobname\pal at turbojobname
+      \pal at placeholderfalse
+      \pal at gridfalse
+      \pal at safezonefalse
+      \pal at cuttingmarksfalse
+      \pal at fillpagesfalse
+      \pal at graphpaperfalse
+      \pal at preflightfalse
+
+      \pal at isbatchmodetrue
+    \else
+      \pal at start
+    \fi
+  \else
+    \ifpal at import
+      \pal at start
+    \fi
+  \fi
+
+  \ifx\pal at pagegraphic\pal at emptystring
+    \ifx\paloptions at pagegraphic\pal at emptystring
+    \else
+      \setpagegraphic{\paloptions at pagegraphic}
+    \fi
+  \fi
+
+  \ifpal at fanfold
+    \pal at covertrue
+  \fi
+}
+\AtEndDocument{
+  \ifpal at beginleft
+    \ifpal at leftpage
+      \pal at hasoddnumberofpagestrue
+    \fi
+  \else
+    \ifpal at rightpage
+      \pal at hasoddnumberofpagestrue
+    \fi
+  \fi
+  \ifdefined\pal at backcovercontent
+    \pal at haspagestrue
+    \ifpal at haslastemptypage
+      \ifpal at hasoddnumberofpages
+        \pal at standardpage[before page=]{}
+        \pal at emptypage
+      \else
+        \pal at emptypage
+      \fi
+    \else
+      \ifpal at twoside
+        \ifpal at hasoddnumberofpages\page[before page=]{}\fi
+      \fi
+    \fi
+    \pal at leftpagetrue
+    \pal at rightpagefalse
+    \pal at backcovertrue
+    \ifdefined\pal at backcovertemplate
+      \pal at placeholdercounter 0\relax%
+      \let\pal at currentcontents\pal at backcovercontent%
+      \def\pal at currentbeforepage{}
+      \pal at standardpage{%
+        \pal at backcovertemplate%
+      }%
+    \else
+      \def\pal at currentbeforepage{}
+      \pal at standardpage{
+        \pal at backcovercontent
+      }
+    \fi
+  \else
+    \ifpal at haspages
+      \ifpal at fanfold
+        \ifpal at isfanfoldopen
+          \ifpal at beginleft
+            \pal at standardpage[before page=]{}
+          \else
+            \pal at emptypage
+          \fi
+        \else
+          \ifpal at beginleft
+          \else
+            \pal at standardpage[before page=]{}
+            \pal at emptypage
+          \fi
+        \fi
+      \else
+        \ifpal at haslastemptypage
+          \ifpal at hasoddnumberofpages
+            \pal at standardpage[before page=]{}
+            \pal at emptypage
+          \else
+            \pal at emptypage
+          \fi
+        \else
+          \ifpal at twoside
+            \ifpal at hasoddnumberofpages\pal at standardpage[before page=]{}\fi
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+  \ifpal at isbatchmode
+    \pal at batchoptimize
+  \fi
+}
+
+% scripts
+\newread\pal at scriptresult
+\def\pal at batchlist{}
+\def\pal at ok{ok}
+\def\pal at err@shellaccessforbidden{errorshellaccessforbidden}
+\def\pal at err@importdirnotfound{errorimportdirnotfound}
+\def\pal at err@noimportdir{errornoimportdir}
+\def\pal at err@magicknotinstalled{errormagicknotinstalled}
+\def\pal at err@inkscapenotinstalled{errorinkscapenotinstalled}
+\newcommand\pal at getppi[1]{
+  \immediate\openin\pal at scriptresult={|pagelayoutapi getwidth\% "#1"}
+  \ifeof\pal at scriptresult
+    \pal at errmsg@shellaccessforbidden{Ppi not calculated}
+  \else
+    \endlinechar=-1
+    \read\pal at scriptresult to \pal at graphicwidth
+    \endlinechar=13
+    \ifx\pal at graphicwidth\pal at emptystring
+      \pal at errmsg@shellaccessfailed{Ppi not calculated}
+    \else
+      \ifx\pal at graphicwidth\pal at err@magicknotinstalled
+        \pal at errmsg@magicknotinstalled{Ppi not calculated}
+      \else
+        \pgfmathqparse{(\pal at originalgraphicwidth - \pal at cropleft - \pal at cropright) / \pal at originalgraphicwidth * \pal at graphicwidth pt / \the\width * 72.27pt}
+
+        \pgfmathint{\pgfmathresult}
+        \edef\pal at graphicdensity{\pgfmathresult}
+      \fi
+    \fi
+  \fi
+  \immediate\closein\pal at scriptresult
+}
+\newcommand\pal at optimizegraphic[2]{
+  \immediate\openin\pal at scriptresult={|pagelayoutapi optimize\% "#1#2" \% "\pal at filename" \%\pal at optimizedext\%\the\numexpr\pal at originalgraphicwidth\%\the\numexpr\pal at originalgraphicheight\%\the\numexpr\pal at cropleft\%\the\numexpr\pal at cropright\%\the\numexpr\pal at croptop\%\the\numexpr\pal at cropbottom\%\the\numexpr\pal at density\%\the\numexpr\width\%\the\numexpr\height\%\pal at downsamplethreshold\%\pal at graphicoptionunsharp\%\pal at quality}
+  \ifeof\pal at scriptresult
+    \pal at errmsg@shellaccessforbidden{File not optimized}
+  \else
+    \endlinechar=-1
+    \read\pal at scriptresult to \pal at processresult
+    \endlinechar=13
+    \ifx\pal at processresult\pal at emptystring
+      \pal at errmsg@shellaccessfailed{File not optimized}
+    \else
+      \ifx\pal at processresult\pal at err@magicknotinstalled
+        \pal at errmsg@magicknotinstalled{File not optimized}
+      \fi
+    \fi
+  \fi
+  \immediate\closein\pal at scriptresult
+}
+\newcommand\pal at makeshadow[1]{
+  \immediate\openin\pal at scriptresult={|pagelayoutapi makeshadow\%#1\%\pal at defaultshadowsize\%\pal at defaultshadowopacity\%\pal at defaultshadowcolor\%\the\pal at frameshadowwidth\%\the\pal at frameshadowheight\%\the\pal at frameshadowframewidth\%\the\pal at frameshadowframeheight\%\the\pal at frameshadowborder\%\the\pal at frameshadowradius}
+  \ifeof\pal at scriptresult
+    \edef\pal at processresult{\pal at err@shellaccessforbidden}
+    \pal at errmsg@shellaccessforbidden{Shadow not created}
+  \else
+    \endlinechar=-1
+    \read\pal at scriptresult to \pal at processresult
+    \endlinechar=13
+    \ifx\pal at processresult\pal at emptystring
+      \pal at errmsg@shellaccessfailed{Shadow not created}
+    \else
+      \ifx\pal at processresult\pal at err@inkscapenotinstalled
+        \pal at errmsg@inkscapenotinstalled{Shadow not created}
+      \else
+      \fi
+    \fi
+  \fi
+  \immediate\closein\pal at scriptresult
+}
+\def\pal at start{
+  \immediate\openin\pal at scriptresult={|pagelayoutapi start\ifpal at import\%import\% "\ifdefined\Ginput at path\Ginput at path\fi" \fi\ifpal at isturbomode\%turbo\% "\jobname" \fi}
+  \ifeof\pal at scriptresult
+    \ifpal at import
+      \pal at errmsg@shellaccessforbidden{Import not working}
+    \fi
+  \else
+    \endlinechar=-1
+    \read\pal at scriptresult to \pal at processresult
+    \endlinechar=13
+    \ifx\pal at processresult\pal at emptystring
+      \ifpal at import
+        \pal at errmsg@shellaccessfailed{Import not working}
+      \fi
+    \else
+      \ifx\pal at processresult\pal at ok
+      \else
+        \ifx\pal at processresult\pal at err@noimportdir
+          \pal at errmsg@noimportdir
+        \else
+          \pal at errmsg@importdirnotfound{\pal at processresult}
+        \fi
+      \fi
+    \fi
+  \fi
+  \immediate\closein\pal at scriptresult
+}
+\newcommand\pal at addtobatchlist[2]{
+  \global\edef\pal at batchlist{\pal at batchlist\% "#1#2" \% "\pal at filename" \%\pal at optimizedext\%\the\numexpr\pal at originalgraphicwidth\%\the\numexpr\pal at originalgraphicheight\%\the\numexpr\pal at cropleft\%\the\numexpr\pal at cropright\%\the\numexpr\pal at croptop\%\the\numexpr\pal at cropbottom\%\the\numexpr\pal at density\%\the\numexpr\width\%\the\numexpr\height\%\pal at downsamplethreshold\%\pal at graphicoptionunsharp\%\pal at quality}
+}
+\newcommand\pal at batchoptimize{
+  \immediate\openin\pal at scriptresult={|pagelayoutapi batchoptimize\pal at batchlist}
+  \ifeof\pal at scriptresult
+  \else
+    \endlinechar=-1
+    \read\pal at scriptresult to \pal at processresult
+    \endlinechar=13
+  \fi
+  \immediate\closein\pal at scriptresult
+}
+
+% errors
+\def\pal at errmsg@undefined#1#2{
+  \ifx#2\pal at emptystring
+  \else
+    \ClassError{pagelayout}{Undefined #1 `#2'}{Check the name `#2'.\MessageBreak\MessageBreak\@ehc}
+  \fi
+}
+\def\pal at errmsg@backcoverdefinedafterfrontcover{
+  \ClassError{pagelayout}{Back cover needs to be defined before front cover}{Define the back cover before the front cover.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal at errmsg@shellaccessforbidden#1{
+  \ClassError{pagelayout}{Shell access forbidden. #1}{Make sure `pagelayoutapi' is added to the list of shell escape commands\MessageBreak(shell_escape_commands = pagelayoutapi) in your `texmf.cnf'.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal at errmsg@shellaccessfailed#1{
+  \ifdefined\XeTeXversion
+    \ClassError{pagelayout}{Shell access failed. #1}{Make sure the `scripts' folder is added to your path.\MessageBreak\MessageBreak\@ehc}
+  \else
+    \ClassError{pagelayout}{Shell access failed. #1}{Make sure the `scripts' folder is added to your path.\MessageBreak Shell access does not work in unrestricted mode (--shell-escape).\MessageBreak Make sure `pagelayoutapi' is added to the list of shell escape commands\MessageBreak(shell_escape_commands = pagelayoutapi) in your `texmf.cnf'.\MessageBreak\MessageBreak\@ehc}
+  \fi
+}
+\def\pal at errmsg@inkscapenotinstalled#1{
+  \ClassError{pagelayout}{Inkscape not installed. #1}{Make sure Inkscape is installed.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal at errmsg@magicknotinstalled#1{
+  \ClassError{pagelayout}{ImageMagick not installed. #1}{Make sure ImageMagick is installed.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal at errmsg@importdirnotfound#1{
+  \ClassError{pagelayout}{Import directory `#1' not found}{Create the directory `#1'.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal at errmsg@noimportdir{
+  \ClassError{pagelayout}{Import directory not found}{Create the directory `import' in your working directory\MessageBreak or define the shell variable `PAGELAYOUT_IMPORT_DIRECTORY'.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal at errmsg@lowdensity#1#2#3{
+  \ifnum#1=0
+    \ClassWarning{pagelayout}{The file `#2' has a low pixel density of #3 ppi}
+  \else
+    \ClassError{pagelayout}{The file `#2' has a very low a pixel density of #3 ppi}{Replace the image with one of higher resolution or reduce the display size.\MessageBreak\MessageBreak\@ehc}
+  \fi
+}


Property changes on: trunk/Master/texmf-dist/tex/latex/pagelayout/pagelayout.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2023-01-24 21:10:39 UTC (rev 65625)
@@ -607,7 +607,8 @@
     outerhbox outline outliner outlines outlining
     overarrows overlays overlock overpic
   pacioli padauk padcount
-    pagecolor pagecont pagegrid pagella-otf pagenote pagerange pagesel pageslts
+    pagecolor pagecont pagegrid pagelayout
+    pagella-otf pagenote pagerange pagesel pageslts
     palatino palette pangram paper papercdcase papermas papertex
     paracol parades paralist parallel paratype
     paresse parnotes parrun parsa parselines parskip

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2023-01-24 21:10:39 UTC (rev 65625)
@@ -1745,6 +1745,7 @@
  'numericplots'         => '&POSTnumericplots',
  'nwejm'		=> '&POSTnwejm',
  'optex'		=> '&POSToptex',
+ 'pagelayout'           => '&POSTpagelayout',
  'pas-cv'               => '&POSTpas_vc',
  'pbibtex-base'		=> '&POSTpbibtex_base',
  'pdfextra'		=> '&POSTpdfextra',
@@ -3635,6 +3636,7 @@
  'mkpic'	        => '^mkpic$',
  'musixtex'             => '\.lua$',
  'optexcount'           => 'optexcount$',
+ 'pagelayout',		=> '(pagelayoutapi|textestvis)$',
  'pax'			=> 'pdfannotextractor.pl$',
  'pdfbook2'             => 'pdfbook2$',
  'pdfcrop'              => '\.pl$',             # doscripts() does r*
@@ -3686,7 +3688,6 @@
  'wordcount'		=> '\.sh$',
  'wheretotrim'          => '\.pl$',
  'xindex'		=> 'xindex\.lua$',
- 'xput'			=> 'xput(server)?$',
  'yplan'                => 'yplan$',
 );
 
@@ -3707,7 +3708,8 @@
  'texdraw'                      => '.*\.texi',
 );
 
-# packages which have man pages to install.
+# packages which have man pages to install - except for packages with
+#   .tds.zip, then we have to call POST_do_man.
 # autosp has rebar, but we don't install that executable.
 # changebar has chbar, but ditto.
 %specialmans = (
@@ -4576,7 +4578,7 @@
         next if $s =~ /dtx(file)?gen/;
         next if $s =~ /(git-latexdiff|latexfileversion|ltxfileinfo)$/;
         next if $s =~ /pdf(book2|xup)/;
-        next if $package eq "xput";
+        next if $package eq "pagelayout";
         next if $package eq "pdfjam";
         next if $package eq "pdftex-quiet";
         next if $package eq "tikztosvg";
@@ -7245,6 +7247,11 @@
   &mv_with_mkdir ("README", "doc/*", "$DEST/doc/$package/base");
 }
 
+sub POSTpagelayout {
+  print "POST$package - man pages\n";
+  &POST_do_man ("scripts/$package");
+}
+
 sub POSTpas_vc {
   print "POST$package - mv latex subdir, doc files\n";
   &SYSTEM ("$MV latex $DEST/tex/latex/$package");

Modified: trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc	2023-01-24 20:59:27 UTC (rev 65624)
+++ trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc	2023-01-24 21:10:39 UTC (rev 65625)
@@ -1003,6 +1003,7 @@
 depend patchcmd
 depend pauldoc
 depend pawpict
+depend pagelayout
 depend pax
 depend pbalance
 depend pbox

Added: trunk/Master/tlpkg/tlpsrc/pagelayout.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/pagelayout.tlpsrc	                        (rev 0)
+++ trunk/Master/tlpkg/tlpsrc/pagelayout.tlpsrc	2023-01-24 21:10:39 UTC (rev 65625)
@@ -0,0 +1,5 @@
+binpattern f bin/${ARCH}/pagelayoutapi
+binpattern f bin/${ARCH}/textestvis
+#
+docpattern +f texmf-dist/doc/man/man1/pagelayoutapi.*
+docpattern +f texmf-dist/doc/man/man1/textestvis.*



More information about the tex-live-commits mailing list.