diff options
Diffstat (limited to 'Master')
30 files changed, 1 insertions, 6151 deletions
diff --git a/Master/texmf-dist/doc/latex/xput/1x1.pdf b/Master/texmf-dist/doc/latex/xput/1x1.pdf Binary files differdeleted file mode 100644 index 5c1a747af1d..00000000000 --- a/Master/texmf-dist/doc/latex/xput/1x1.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/2x1.pdf b/Master/texmf-dist/doc/latex/xput/2x1.pdf Binary files differdeleted file mode 100644 index ebbd75abe9f..00000000000 --- a/Master/texmf-dist/doc/latex/xput/2x1.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/3x2.pdf b/Master/texmf-dist/doc/latex/xput/3x2.pdf Binary files differdeleted file mode 100644 index a68c0354325..00000000000 --- a/Master/texmf-dist/doc/latex/xput/3x2.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/LICENSE.txt b/Master/texmf-dist/doc/latex/xput/LICENSE.txt deleted file mode 100644 index 22443139013..00000000000 --- a/Master/texmf-dist/doc/latex/xput/LICENSE.txt +++ /dev/null @@ -1,416 +0,0 @@ -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. - diff --git a/Master/texmf-dist/doc/latex/xput/README.md b/Master/texmf-dist/doc/latex/xput/README.md deleted file mode 100644 index 6471ea45566..00000000000 --- a/Master/texmf-dist/doc/latex/xput/README.md +++ /dev/null @@ -1,99 +0,0 @@ -## What is Xput - -Xput is a LaTeX class to create graphic rich, layouted, perfectly typeset, and print ready PDFs just from a text file. It provides simple macros to put content on a page declaratively. Generic templates, automatic grid layout, and a simple and consistent user interface help you to create layouts with ease. - -The integration of Inkscape allows your to create beautiful box shadows. Text shadows and SVG filters are ideas for future releases. - -The integration of ImageMagick allows you to configure the PDF export to create 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. - -Xput also integrates the TikZ and 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{sg}{ - \text{Hello Xput} - \graphic{IMG1234} -} -``` - -### Custom Templates and the Grid - -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}{ - \grid{ - {[2]{2!}{3!}} - {[2]{1}} - } - \placeholder{0 0 1 1} -} -``` - -You can set margin and gutter for a single grid or on document or page level. - -### Graphics - -Adding a graphic to a page is simple. You can scale, position and sharpen a graphic. - -```latex -\page{ - \graphic[ - scale=1.2, - hpos=0.3, - unsharp=3x1 - ]{filename} -} -``` - -### Borders and Shadows - -You can add borders and box shadows to graphics and text frames. - -```latex -\newborder{my border}{ - width=2mm, - color=magenta, - radius=5mm -} -\newshadow{my shadow}{ - size=5, - color=magenta, - opacity=1 -} - -\page{ - \graphic[ - shadow=my shadow, - border=my border, - border radius=10mm - ]{filename} -} -``` - -Have a look at the [examples](https://github.com/friedemannbartels/xput/tree/main/doc) and start playing with these. - -For a complete reference have a look at the [manual](https://github.com/friedemannbartels/xput/raw/main/doc/xputmanual.pdf). - -## Installation - -In general, you should use the package manager shipped with your TeX distribution to install Xput. Alternatively you can copy the contents of [xput.tds.zip](https://github.com/friedemannbartels/xput/releases/download/v1.0.2/xput.tds.zip) to your local TeX directory tree. - -### Command Line Tools - -For image optimization, shadow creation and preflight perform these installation steps: - -- Add the directory _tex/latex/xput/scripts_ in your local TeX file tree to your `$PATH`. - -- Add `xputserver` to the list of `shell_escape_commands` in your top level _texmf.cnf_. Find your _texmf.cnf_ with the command `kpsewhich texmf.cnf`. - -- Install ImageMagick 7.0 or newer and Inkscape 1.0 or newer. - -## Development - -Run visual regression tests inside the _tests_ directory with the command `xput test` diff --git a/Master/texmf-dist/doc/latex/xput/example-book.pdf b/Master/texmf-dist/doc/latex/xput/example-book.pdf Binary files differdeleted file mode 100644 index 26a78856c10..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-book.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/example-book.tex b/Master/texmf-dist/doc/latex/xput/example-book.tex deleted file mode 100644 index d318eba5822..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-book.tex +++ /dev/null @@ -1,111 +0,0 @@ -%% -%% Copyright (C) 2022 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=144} -]{xput} - -\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=koepi, inner margin=\margin]{ - \setgrid[width=100mm]{{{1}}} - - \text[bottom]{ - \fontsize{41.3mm}{46mm}\selectfont - \hskip -3mm - Berlin - \fontsize{7.5mm}{13mm}\selectfont% - \mbox{Photos by Friedemann Bartels} - } - - \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 - Xput\ \ - }; - } - } - } - - \page{ - \text{ - \strut - \tableofcontents - } - } - - \pagenumbering{arabic} - - \setcounter{page}{0} - \page[before page=]{} - - \page{ - \text{ - \strut - \section{Introduction} - \lipsum[1][1-7] - } - } - - \newgraphic{koepi wide}{vpos=0.43, file=koepi} - \page[double, page graphic=koepi wide, before page=, color=white]{ - \rightpage{ - \text[bottom]{ - \lipsum[1][8-10] - } - } - } - -\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/xput/example-borders-and-shadows.pdf b/Master/texmf-dist/doc/latex/xput/example-borders-and-shadows.pdf Binary files differdeleted file mode 100644 index 41096e77a30..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-borders-and-shadows.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/example-borders-and-shadows.tex b/Master/texmf-dist/doc/latex/xput/example-borders-and-shadows.tex deleted file mode 100644 index 7c555a65075..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-borders-and-shadows.tex +++ /dev/null @@ -1,52 +0,0 @@ -%% -%% Copyright (C) 2022 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]{xput} -\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} diff --git a/Master/texmf-dist/doc/latex/xput/example-graphic.pdf b/Master/texmf-dist/doc/latex/xput/example-graphic.pdf Binary files differdeleted file mode 100644 index 8c662249001..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-graphic.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/example-graphic.tex b/Master/texmf-dist/doc/latex/xput/example-graphic.tex deleted file mode 100644 index dcfa7b3a65f..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-graphic.tex +++ /dev/null @@ -1,35 +0,0 @@ -%% -%% Copyright (C) 2022 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{xput} - -\pagewidth=20cm -\pageheight=20cm -\bleed=3mm - -\optimize[quality=50, density=144] -\preflight -\safezone - -\newgraphic{koepi scaled}{scale=1.02, hpos=0.2, vpos=1, file=koepi} - -\begin{document} - - \page{ - \graphic[hpos=0, scale=1.2]{3x2} - } - - \page[page graphic=koepi scaled]{} - -\end{document} diff --git a/Master/texmf-dist/doc/latex/xput/example-grid.pdf b/Master/texmf-dist/doc/latex/xput/example-grid.pdf Binary files differdeleted file mode 100644 index 1263d4883fd..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-grid.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/example-grid.tex b/Master/texmf-dist/doc/latex/xput/example-grid.tex deleted file mode 100644 index a1c341cd668..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-grid.tex +++ /dev/null @@ -1,150 +0,0 @@ -%% -%% Copyright (C) 2022 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{xput} -\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} diff --git a/Master/texmf-dist/doc/latex/xput/example-template.pdf b/Master/texmf-dist/doc/latex/xput/example-template.pdf Binary files differdeleted file mode 100644 index def352592fb..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-template.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/example-template.tex b/Master/texmf-dist/doc/latex/xput/example-template.tex deleted file mode 100644 index eb0b7736014..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-template.tex +++ /dev/null @@ -1,46 +0,0 @@ -%% -%% Copyright (C) 2022 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]{xput} -\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} diff --git a/Master/texmf-dist/doc/latex/xput/example-text.pdf b/Master/texmf-dist/doc/latex/xput/example-text.pdf Binary files differdeleted file mode 100644 index 34212cb021e..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-text.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/example-text.tex b/Master/texmf-dist/doc/latex/xput/example-text.tex deleted file mode 100644 index 9be397a0421..00000000000 --- a/Master/texmf-dist/doc/latex/xput/example-text.tex +++ /dev/null @@ -1,53 +0,0 @@ -%% -%% Copyright (C) 2022 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{xput} -\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} diff --git a/Master/texmf-dist/doc/latex/xput/koepi.jpg b/Master/texmf-dist/doc/latex/xput/koepi.jpg Binary files differdeleted file mode 100644 index 148819751d6..00000000000 --- a/Master/texmf-dist/doc/latex/xput/koepi.jpg +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/tests.zip b/Master/texmf-dist/doc/latex/xput/tests.zip Binary files differdeleted file mode 100644 index cf12d90fcd4..00000000000 --- a/Master/texmf-dist/doc/latex/xput/tests.zip +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/xputmanual-layout-guides.pdf b/Master/texmf-dist/doc/latex/xput/xputmanual-layout-guides.pdf Binary files differdeleted file mode 100644 index 0ec732a859d..00000000000 --- a/Master/texmf-dist/doc/latex/xput/xputmanual-layout-guides.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/xputmanual-layout-guides.tex b/Master/texmf-dist/doc/latex/xput/xputmanual-layout-guides.tex deleted file mode 100644 index 023858736af..00000000000 --- a/Master/texmf-dist/doc/latex/xput/xputmanual-layout-guides.tex +++ /dev/null @@ -1,41 +0,0 @@ -%% -%% Copyright (C) 2022 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 -]{xput} - -\begin{document} - - \newtemplate{layoutguidesexample}{ - \setgrid{ - {{6}{1}} - } - \placeholder{0 1 1 2} - \placeholder{0 0 1 1} - } - \template{layoutguidesexample}{ - - } - -\end{document} diff --git a/Master/texmf-dist/doc/latex/xput/xputmanual.pdf b/Master/texmf-dist/doc/latex/xput/xputmanual.pdf Binary files differdeleted file mode 100644 index ccb1e39f442..00000000000 --- a/Master/texmf-dist/doc/latex/xput/xputmanual.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/xput/xputmanual.tex b/Master/texmf-dist/doc/latex/xput/xputmanual.tex deleted file mode 100644 index ff75b4eecf6..00000000000 --- a/Master/texmf-dist/doc/latex/xput/xputmanual.tex +++ /dev/null @@ -1,473 +0,0 @@ -%% -%% Copyright (C) 2022 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\Xputversion{1.0.2} - -\begin{document} - -\title{ - \Huge The \textsf{Xput} class\\ - \Large\url{https://github.com/friedemannbartels/xput}\\ - \Large Manual for Version \Xputversion -} - -\author{\href{mailto:mail@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 Xput class, a declarative desktop publishing approach. -\par -With Xput 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 Xput uses the TikZ and tcolorbox packages, ImageMagick and Inkscape. - -\section{Document}\label{sec:document} - -The document options described in the following can be either set as a document option (|\documentclass[twoside]{xput}|) or with a macro (|\twoside|) in the preamble. - -\DescribeMacro {\documentclass} -Use the class and define your options with the |\documentclass|\oarg{options}|{xput}| 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]{xput}|) 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]{xput}|) 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]{xputmanual-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 macros |\newborder|\marg{name}\marg{options} or |\newshadow|\marg{name}\marg{options}. -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 |XPUT_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} diff --git a/Master/texmf-dist/scripts/xput/xput b/Master/texmf-dist/scripts/xput/xput deleted file mode 100755 index 57203c7a5da..00000000000 --- a/Master/texmf-dist/scripts/xput/xput +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2022 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.2 - -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: xput test [-cs] [-e ENGINE] [-d DENSITY] [PATTERN] - xput approve [-e ENGINE] [PATTERN] - xput compare [-d DENSITY] FILE FILE - xput perf [-cs] [-e ENGINE] FILE - xput --help - xput --version - - -c clear cache - -s enable shell escape - -d DENSITY density in ppi (default 72) - -e ENGINE latex engine (default xelatex) - - Running \`xput test\` 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. - - Running \`xput approve\` replaces the reference files with the test files. - - Running \`xput compare\` creates a visual diff for two pdf files. - - Running \`xput perf\` measures the time for creating a pdf file from the - given tex file. - - Running \`xput --help\` returns this man page. - - Running \`xput --version\` returns the Xput version. -HELP_USAGE -} - -case "$1" in -test) - shift - - 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 - ;; -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) - echo Xput $version - ;; -*) - usage -esac diff --git a/Master/texmf-dist/scripts/xput/xputserver b/Master/texmf-dist/scripts/xput/xputserver deleted file mode 100755 index 8e2baac919a..00000000000 --- a/Master/texmf-dist/scripts/xput/xputserver +++ /dev/null @@ -1,411 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2022 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.2 - -_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 [ "$XPUT_IMPORT_DIRECTORY" != "" ]; then - if [ -d "$XPUT_IMPORT_DIRECTORY" ]; then - importdir="$XPUT_IMPORT_DIRECTORY" - else - echo $XPUT_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 )/xputturbo$( date "+%Y%m%d%H%M%S" )$RANDOM - mkdir $tmpdir - - cp $file.tex $tmpdir/xputturbobatchoptimizexyz.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/xputturbobatchoptimizexyz.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 -This script is intended for internal use of the Xput LaTeX class. - -usage: xputserver getwidth % FILE - xputserver optimize % FILE % FILENAME % EXTENSION % ORIGINALWIDTH % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY - xputserver makeshadow % FILENAME % STANDARDDEVIATION % OPACITY % COLOR % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS - xputserver start [% import % [GRAPHICSPATH]] [% turbo % JOBNAME] - xputserver batchoptimize % BATCHLIST - xputserver --help - xputserver --version - - 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 \`xputserver optimize\` - - All other parameters are length dimensions. - The command \`xputserver optimize\` expects integer values in the LaTeX - unit sp (eg. 65536). - The command \`xputserver makeshadow\` expects decimal values in a SVG - compatible unit (eg. 420.0pt). - - Running \`xputserver getwidth\` returns the width in pixels for the given - image file. - - Running \`xputserver optimize\` creates a cropped, rezised, sharpend and - compressed image and stores it in the cache directory. - - Running \`xputserver makeshadow\` creates a shadow image and stores it in - the cache directory. - - Running \`xputserver start\` with the import parameter triggers the image - import (see xputmanual.pdf chapter "Image Optimization"). - Running the command with the parameter turbo, where the jobname is the - filename of the Xput document, processes the document in a special batch - mode, that creates a batch list and calls the command - \`xputserver batchoptimize\`. - - Running \`xputserver batchoptimize\` optimizes multiple images in parallel. - - Running \`xputserver --help\` returns this man page. - - Running \`xputserver --version\` returns the Xput version. -HELP_USAGE -} - -if [ "$1" = --version ]; then - echo Xput Server $version - exit -fi - -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 - ;; -*) - usage -esac diff --git a/Master/texmf-dist/tex/latex/xput/xput.cls b/Master/texmf-dist/tex/latex/xput/xput.cls deleted file mode 100644 index a7fdd1c2bf7..00000000000 --- a/Master/texmf-dist/tex/latex/xput/xput.cls +++ /dev/null @@ -1,3739 +0,0 @@ -%% -%% Copyright (C) 2022 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{xput}[2023/01/02 declarative desktop publishing] -\def\Xputversion{1.0.2} - -% packages -\RequirePackage{pgfopts} -\RequirePackage{tikz} -\RequirePackage{tcolorbox} -\tcbuselibrary{magazine} - -% helper -\def\xput@emptystring{} -\def\xput@striplastexclamationmark#1{\xput@striplastexclamationmarka{#1}#1\end !\end\eend} -\def\xput@striplastexclamationmarka#1#2!\end#3\eend{\ifx\end#3\end#1\else#2\fi} -\def\xput@instring#1#2{TT\fi\begingroup\edef\xput@x{\endgroup\noexpand\in@{#1}{#2}}\xput@x\ifin@} -\def\xput@dimentonumber#1{\strip@pt\dimexpr #1*65536/\number\dimexpr 1\unitlength} - -% ifs -\newif\ifxput@leftpage -\newif\ifxput@rightpage - -\newif\ifxput@twoside -\newif\ifxput@fanfold -\newif\ifxput@cover -\newif\ifxput@beginleft -\newif\ifxput@beginright -\newif\ifxput@grid -\newif\ifxput@preflight -\newif\ifxput@graphpaper -\newif\ifxput@placeholder -\newif\ifxput@safezone -\newif\ifxput@cuttingmarks -\newif\ifxput@fillpages -\newif\ifxput@frontcover -\newif\ifxput@backcover - -\newif\ifxput@hascover -\newif\ifxput@haspages -\newif\ifxput@isdoublepage -\newif\ifxput@ispage -\newif\ifxput@isemptypage -\newif\ifxput@haslastemptypage -\newif\ifxput@hasoddnumberofpages -\newif\ifxput@cuttingmarksvisible -\newif\ifxput@isfanfoldopen -\newif\ifxput@isinitgrid -\newif\ifxput@haspagegraphic -\newif\ifxput@isperformancemode -\newif\ifxput@isturbomode -\newif\ifxput@isbatchmode -\newif\ifxput@ismaskrequired -\newif\ifxput@optimize -\newif\ifxput@import -\newif\ifxput@isluatex - -% dimensions -\newdimen\xput@null\xput@null=0pt -\newdimen\xput@undefdim\xput@undefdim=-1sp - -\ifdefined\pagewidth\xput@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\xput@pagewidth\newdimen\xput@pageheight -\newdimen\xput@outerbleed\newdimen\xput@innerbleed\newdimen\xput@topbleed\newdimen\xput@bottombleed -\newdimen\xput@topsafetymargin\newdimen\xput@bottomsafetymargin\newdimen\xput@innersafetymargin\newdimen\xput@outersafetymargin -\newdimen\xput@topmargin\newdimen\xput@topmargintmp\newdimen\xput@innermargin\newdimen\xput@bottommargin\newdimen\xput@outermargin -\newdimen\xput@gutter -\newdimen\xput@x\newdimen\xput@y\newdimen\xput@xx\newdimen\xput@yy\newdimen\width\newdimen\height\newdimen\x\newdimen\y -\newdimen\xput@gridoffsethorizontal\newdimen\xput@gridoffsetvertical\newdimen\xput@gridoffsethorizontaln\newdimen\xput@gridoffsetverticaln -\newdimen\xput@graphpaperx\newdimen\xput@graphpapery\newdimen\xput@graphpaperoffset\newdimen\xput@graphpapersnap - -% interface -\newcommand\ifleftpage[1]{\ifxput@leftpage#1\fi} -\newcommand\ifrightpage[1]{\ifxput@rightpage#1\fi} -\newcommand\ifspine[1]{\ifxput@cover#1\fi} -\def\twoside{\xput@twosidetrue} -\def\fanfold{\xput@fanfoldtrue} -\def\cover{\xput@covertrue} -\def\beginleft{\xput@beginlefttrue} -\def\beginright{\xput@beginrighttrue} -\def\grid{\xput@gridtrue}\def\nogrid{\xput@gridfalse} -\def\preflight{\xput@preflighttrue}\def\nopreflight{\xput@preflightfalse} -\def\graphpaper{\xput@graphpapertrue}\def\nographpaper{\xput@graphpaperfalse} -\def\placeholders{\xput@placeholdertrue}\def\noplaceholders{\xput@placeholderfalse} -\def\safezone{\xput@safezonetrue}\def\nosafezone{\xput@safezonefalse} -\def\cuttingmarks{\xput@cuttingmarkstrue}\def\nocuttingmarks{\xput@cuttingmarksfalse} -\def\fillpages{\xput@fillpagestrue}\def\nofillpages{\xput@fillpagesfalse} -\newcommand\optimize[1][]{\xput@optimizetrue\pgfkeys{optimize,#1}} -\def\density#1{\def\xput@density{#1}} -\def\quality#1{\def\xput@quality{#1}} -\def\import{\xput@importtrue} - -\def\setgraphpaper#1{ - \def\xput@graphpaperconfig{#1} - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \global\xput@graphpapersnap=\xput@graphpaperconfigitem - } -} -\setgraphpaper{1mm,5mm} - -\def\xput@pagecolormodel{} -\def\xput@pagecolor{} -\renewcommand\pagecolor[2][]{ - \ifxput@ispage - \def\xput@pagecolormodel{#1} - \def\xput@pagecolor{#2} - \else - \global\def\xput@pagecolormodel{#1} - \global\def\xput@pagecolor{#2} - \fi -} -\newcommand\setpagecolor[2][]{\pagecolor[#1]{#2}} -\def\nopagecolor{\pagecolor{}} - -\def\xput@current@color{black} -\let\xput@originalcolor\color -\def\color#1{\ifxput@ispage\ifx\xput@current@color#1\else\def\xput@current@color{#1}\xput@originalcolor{#1}\fi\else\def\xputoptions@color{#1}\fi} -\def\setcolor#1{\color{#1}} - -\let\xput@originalpagenumbering\pagenumbering -\newif\ifxput@pagenumberinghaschanged -\renewcommand\pagenumbering[1]{\xput@pagenumberinghaschangedtrue\xput@originalpagenumbering{#1}} - -% options -\def\xput@density{300} -\def\xput@downsamplethreshold{120} -\def\xput@quality{} -\def\xput@unsharp{2x1} -\pgfkeysdef{/optimize/downsample threshold}{ - \pgfmathqparse{#1pt*100pt} - \pgfmathround{\pgfmathresult} - \pgfmathint{\pgfmathresult} - \edef\xput@downsamplethreshold{\pgfmathresult} -} -\pgfkeys{ - /optimize/.is family, - /optimize, - density/.store in=\xput@density, - quality/.store in=\xput@quality, - unsharp/.store in=\xput@unsharp, -} -\pgfkeys{ - /xput/.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=\xput@undefdim, - innerbleed/.code={\setlength{\innerbleed}{#1}},innerbleed=\xput@undefdim, - topbleed/.code={\setlength{\topbleed}{#1}},topbleed=\xput@undefdim, - bottombleed/.code={\setlength{\bottombleed}{#1}},bottombleed=\xput@undefdim, - safetymargin/.code={\setlength{\safetymargin}{#1}},safetymargin=0pt, - outersafetymargin/.code={\setlength{\outersafetymargin}{#1}},outersafetymargin=\xput@undefdim, - innersafetymargin/.code={\setlength{\innersafetymargin}{#1}},innersafetymargin=\xput@undefdim, - topsafetymargin/.code={\setlength{\topsafetymargin}{#1}},topsafetymargin=\xput@undefdim, - bottomsafetymargin/.code={\setlength{\bottomsafetymargin}{#1}},bottomsafetymargin=\xput@undefdim, - % cover dimensions - coverwidth/.code={\setlength{\coverwidth}{#1}},coverwidth=\xput@undefdim, - coverheight/.code={\setlength{\coverheight}{#1}},coverheight=\xput@undefdim, - coverbleed/.code={\setlength{\coverbleed}{#1}},coverbleed=\xput@undefdim, - coverouterbleed/.code={\setlength{\coverouterbleed}{#1}},coverouterbleed=\xput@undefdim, - coverinnerbleed/.code={\setlength{\coverinnerbleed}{#1}},coverinnerbleed=\xput@undefdim, - covertopbleed/.code={\setlength{\covertopbleed}{#1}},covertopbleed=\xput@undefdim, - coverbottombleed/.code={\setlength{\coverbottombleed}{#1}},coverbottombleed=\xput@undefdim, - coversafetymargin/.code={\setlength{\coversafetymargin}{#1}},coversafetymargin=\xput@undefdim, - coveroutersafetymargin/.code={\setlength{\coveroutersafetymargin}{#1}},coveroutersafetymargin=\xput@undefdim, - coverinnersafetymargin/.code={\setlength{\coverinnersafetymargin}{#1}},coverinnersafetymargin=\xput@undefdim, - covertopsafetymargin/.code={\setlength{\covertopsafetymargin}{#1}},covertopsafetymargin=\xput@undefdim, - coverbottomsafetymargin/.code={\setlength{\coverbottomsafetymargin}{#1}},coverbottomsafetymargin=\xput@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=\xput@undefdim, - innermargin/.code={\setlength{\innermargin}{#1}},innermargin=\xput@undefdim, - topmargin/.store in=\xputoptions@topmargin,topmargin=-1sp, - bottommargin/.code={\setlength{\bottommargin}{#1}},bottommargin=\xput@undefdim, - gutter/.code={\setlength{\gutter}{#1}},gutter=0pt, - pagecolor/.store in=\xput@pagecolor, - pagegraphic/.store in=\xputoptions@pagegraphic,pagegraphic=, - color/.store in=\xputoptions@color,color=black, - grid/.is if=xput@grid, - safezone/.is if=xput@safezone, - cuttingmarks/.is if=xput@cuttingmarks, - graphpaper/.is if=xput@graphpaper, - placeholder/.is if=xput@placeholder, - fillpages/.is if=xput@fillpages, - draft/.code={\xput@placeholdertrue\xput@fillpagestrue\xput@cuttingmarkstrue\xput@isperformancemodetrue}, - preflight/.is if=xput@preflight, - twoside/.is if=xput@twoside, - fanfold/.code={\xput@fanfoldtrue\xput@covertrue\xput@twosidetrue\xput@beginlefttrue}, - cover/.is if=xput@cover, - beginleft/.is if=xput@beginleft, - beginright/.is if=xput@beginright, - optimize/.code={\xput@optimizetrue\pgfkeys{optimize,#1}}, - density/.store in=\xput@density, - quality/.store in=\xput@quality, - turbo/.is if=xput@isturbomode,turbo=\ifxput@isluatex false\else true\fi, - import/.is if=xput@import -} -\ProcessPgfOptions{/xput} - -\xput@originalcolor{\xputoptions@color} - -\Gin@draftfalse - -\LoadClass[multi=picture]{standalone} -\setlength{\topmargin}{\xputoptions@topmargin} - -% grid -\newdimen\xput@gridoffsetx -\newdimen\xput@gridwidth\newdimen\xput@gridheight\newdimen\xput@maxgridheight\newdimen\xput@maxgridwidth -\newcount\xput@gridtmp\newcount\xput@gridtmpRowH -\newcount\xput@rowscount\newcount\xput@flexrowscount\newcount\xput@fixrowscount\newcount\xput@cellscount -\newcount\rowsH\newcount\rowsF\newcount\rowsFlex -\newif\ifxput@gridisflexrow -\def\xput@set#1#2{ - \ifcsname xput@data#1\endcsname - \else - \expandafter\newcount\csname xput@data#1\endcsname - \fi - \csname xput@data#1\endcsname#2\relax -} -\def\xput@get#1{ - \ifcsname xput@data#1\endcsname - \csname xput@data#1\endcsname% - \else - 0 - \fi -} -\def\xput@advance#1#2{ - \advance\csname xput@data#1\endcsname by \csname xput@data#2\endcsname -} -\newif\ifxput@flexmode -\newif\ifxput@forcerow -\newif\ifxput@forcecell -\def\xput@leftsafetymargin{ - \ifxput@backcover% - \xput@outersafetymargin% - \else% - \ifxput@frontcover% - \xput@innersafetymargin% - \else% - \ifxput@leftpage% - \xput@outersafetymargin% - \else% - \xput@innersafetymargin% - \fi% - \fi% - \fi% -} -\def\xput@rightsafetymargin{ - \ifxput@backcover% - \xput@innersafetymargin% - \else% - \ifxput@frontcover% - \xput@outersafetymargin% - \else% - \ifxput@leftpage% - \xput@innersafetymargin% - \else% - \xput@outersafetymargin% - \fi% - \fi% - \fi% -} -\def\xput@leftbleed{ - \ifxput@backcover% - \xput@outerbleed% - \else% - \ifxput@frontcover% - \xput@innerbleed% - \else% - \ifxput@leftpage% - \xput@outerbleed% - \else% - \xput@innerbleed% - \fi% - \fi% - \fi% -} -\def\xput@rightbleed{ - \ifxput@backcover% - \xput@innerbleed% - \else% - \ifxput@frontcover% - \xput@outerbleed% - \else% - \ifxput@leftpage% - \xput@innerbleed% - \else% - \xput@outerbleed% - \fi% - \fi% - \fi% -} -\def\xput@leftmargin{ - \ifxput@backcover% - \xput@outermargin% - \else% - \ifxput@frontcover% - \xput@innermargin% - \else% - \ifxput@leftpage% - \xput@outermargin% - \else% - \xput@innermargin% - \fi% - \fi% - \fi% -} -\newcommand\xput@addrow[1]{ - \advance\xput@rowscount by 1 - \xput@cells#1 -} -\newdimen\xput@gridheightdiff -\newdimen\xput@gridwidthdiff -\newdimen\xput@gridstartxdim -\newdimen\xput@gridstartydim -\newcount\looprows -\newcount\loopcells -\newcommand\xput@processrows{ - \advance\looprows 1 - \ifnum\xput@get{if\the\looprows F}=1 - \xput@set{\the\looprows HR}{\numexpr(\xput@gridheight-\xput@gutter*\xput@rowscount)*\xput@get{\the\looprows H}/\rowsH+\xput@gutter} - \else - \ifnum\xput@get{if\the\looprows Fix}=0 - \xput@set{\the\looprows HR}{\numexpr(\xput@maxgridheight-\xput@gridheight)*\xput@get{\the\looprows H}/\rowsFlex+\xput@gutter} - \else - \xput@set{\the\looprows HR}{\numexpr(\xput@gridwidth-\xput@gutter*\xput@get{\the\looprows C})*\xput@get{\the\looprows H}/\xput@get{\the\looprows W}+\xput@gutter} - \fi - \fi - \loopcells=0 - \loop - \advance\loopcells 1 - \ifnum\xput@get{if\the\looprows-\the\loopcells F}=1 - \xput@set{\the\looprows-\the\loopcells WR}{\numexpr(\xput@get{\the\looprows HR}-\xput@gutter)*\xput@get{\the\looprows-\the\loopcells W}/\xput@get{\the\looprows H}+\xput@gutter} - \else - \xput@set{\the\looprows-\the\loopcells WR}{\numexpr((\xput@gridwidth-\xput@gutter*\xput@get{\the\looprows C})\ifnum\xput@get{\the\looprows H}>0 -(\xput@get{\the\looprows HR}-\xput@gutter)*\xput@get{\the\looprows F}/\xput@get{\the\looprows H}\fi)*\xput@get{\the\looprows-\the\loopcells W}/(\xput@get{\the\looprows W}-\xput@get{\the\looprows F})+\xput@gutter} - \fi - \ifnum \loopcells<\xput@get{\the\looprows C} - \repeat - - \ifnum \looprows<\xput@rowscount - \xput@processrows - \fi -} -\newcommand\xput@closerows{ - \xput@topmargin=\ifdim\xput@gridtopmargin=\xput@undefdim\xput@gridmargin\else\xput@gridtopmargin\fi - \xput@bottommargin=\ifdim\xput@gridbottommargin=\xput@undefdim\xput@gridmargin\else\xput@gridbottommargin\fi - \xput@innermargin=\ifdim\xput@gridinnermargin=\xput@undefdim\xput@gridmargin\else\xput@gridinnermargin\fi - \xput@outermargin=\ifdim\xput@gridoutermargin=\xput@undefdim\xput@gridmargin\else\xput@gridoutermargin\fi - - \height=\dimexpr\xput@pageheight - \xput@topmargin - \xput@bottommargin\relax - \width=\dimexpr\xput@pagewidth - \xput@innermargin - \xput@outermargin\relax - \ifdim\dimexpr\xput@gridoptionheight\relax=\xput@undefdim - \else - \xput@gridheightdiff=\dimexpr0.5\height - 0.5\dimexpr\xput@gridoptionheight\relax\relax - \xput@bottommargin=\dimexpr\xput@bottommargin+\xput@gridheightdiff\relax - \xput@topmargin=\dimexpr\xput@topmargin+\xput@gridheightdiff\relax - \fi - \ifdim\dimexpr\xput@gridoptionwidth\relax=\xput@undefdim - \else - \xput@gridwidthdiff=\dimexpr\xput@calculaterealgridwidth/2 - 0.5\dimexpr\xput@gridoptionwidth\relax\relax - \xput@innermargin=\dimexpr\xput@innermargin+\xput@gridwidthdiff\relax - \xput@outermargin=\dimexpr\xput@outermargin+\xput@gridwidthdiff\relax - \fi - - \xput@gutter=\xput@gridgutter - - \x=\dimexpr\xput@gridstartx{\xput@undefdim}-\xput@leftbleed\relax - \y=\dimexpr\xput@gridstarty{\xput@undefdim}-\xput@bottombleed\relax - - \xput@gridstartxdim=\dimexpr\xput@gridstartx{\xput@gridoptionx}\relax - \xput@gridstartydim=\dimexpr\xput@gridstarty{\xput@gridoptiony}\relax - - \xput@gridwidth=\dimexpr\xput@calculatefullgridwidth\relax - \ifnum\rowsH>0 - \xput@calculategridheight - \else - \xput@gridheight=\dimexpr\xput@gutter*\xput@rowscount\relax - \fi - \xput@gridoffsetvertical=\xput@null - \xput@gridoffsethorizontal=\xput@null - \xput@gridoffsetverticaln=\xput@null - \xput@gridoffsethorizontaln=\xput@null - - \xput@maxgridheight=\dimexpr\xput@calculatefullgridheight\relax - \ifdim\xput@gridheight>\xput@maxgridheight - \xput@gridheight=\xput@maxgridheight - \xput@calculategridwidth - \xput@gridoffsethorizontal=\dimexpr\xput@gridoptionhpos\xput@gridwidth-\xput@gridoptionhpos\xput@maxgridwidth\relax - \xput@gridoffsethorizontaln=\dimexpr\xput@gridwidth-\xput@maxgridwidth-\xput@gridoffsethorizontal\relax - \xput@gridwidth=\xput@maxgridwidth - \else - \ifxput@flexmode - \else - \ifdim\xput@gridheight<\xput@maxgridheight - \xput@gridoffsetvertical=\dimexpr\xput@gridoptionvpos\xput@maxgridheight-\xput@gridoptionvpos\xput@gridheight\relax - \xput@gridoffsetverticaln=\dimexpr\xput@maxgridheight-\xput@gridheight-\xput@gridoffsetvertical\relax - \fi - \fi - \fi - - \looprows=0 - \xput@processrows -} -\newcommand\xput@addcell[1]{ - \advance\xput@cellscount by 1 - \if\xput@instring{!}{#1} - \xput@gridtmp \xput@striplastexclamationmark{#1}\relax - \xput@forcecelltrue - \else - \xput@gridisflexrowtrue - \ifnum\numexpr0#1\relax=0 - \xput@gridtmp 1\relax - \else - \xput@gridtmp #1\relax - \fi - \xput@forcecellfalse - \fi - \xput@set{\the\xput@rowscount-\the\xput@cellscount W}{\xput@gridtmp} - \ifxput@forcecell - \xput@set{if\the\xput@rowscount-\the\xput@cellscount F}{1} - \xput@advance{\the\xput@rowscount F}{\the\xput@rowscount-\the\xput@cellscount W} - \else - \xput@set{if\the\xput@rowscount-\the\xput@cellscount F}{0} - \fi - \xput@advance{\the\xput@rowscount W}{\the\xput@rowscount-\the\xput@cellscount W} -} -\newif\ifxput@gridtop -\newif\ifxput@gridbottom -\newif\ifxput@gridleft -\newif\ifxput@gridright -\newif\ifxput@gridfull -\pgfkeys{ - /grid/.is family, - /grid, - gutter/.store in=\xput@gridgutter, - margin/.store in=\xput@gridmargin, - top margin/.store in=\xput@gridtopmargin, - bottom margin/.store in=\xput@gridbottommargin, - inner margin/.store in=\xput@gridinnermargin, - outer margin/.store in=\xput@gridoutermargin, - width/.store in=\xput@gridoptionwidth, - height/.store in=\xput@gridoptionheight, - x/.store in=\xput@gridoptionx, - y/.store in=\xput@gridoptiony, - vpos/.store in=\xput@gridoptionvpos, - hpos/.store in=\xput@gridoptionhpos, -} -\def\xput@resetautogrid{ - \global\xput@gridfullfalse - \def\xput@framey{0}\def\xput@framex{0}\def\xput@frameyy{1}\def\xput@framexx{1} - \def\xput@frameyymax{0}\def\xput@framexxmax{0} -} -\newcommand\setgrid[2][]{ - \ifxput@haspages - \else - \def\xput@tmpgrid{\setgrid{#2}} - \fi - \xput@resetautogrid - \pgfkeys{ - /grid, - gutter=\gutter, - margin=\margin, - top margin=\topmargin, - bottom margin=\bottommargin, - inner margin=\innermargin, - outer margin=\outermargin, - width=\xput@undefdim, - height=\xput@undefdim, - x=\xput@undefdim, - y=\xput@undefdim, - vpos=\xput@verticalpagealign, - hpos=\xput@horizontalpagealign,% - #1 - } - \rowsH 0\relax - \rowsFlex 0\relax - \xput@flexrowscount 0\relax - \xput@fixrowscount 0\relax - \rowsF 0\relax - \xput@rowscount 0\relax - \xput@flexmodefalse - \def\xput@grid@input{#2} - \ifx\xput@grid@input\xput@emptystring - \xput@gobblenextrow{{1}} - \else - \xput@gobblenextrow#2 - \fi -} -\newcommand\xput@gobblenextrow[1]{ - \xput@addrow{#1} - \@ifnextchar\bgroup{ - \xput@gobblenextrow - }{ - \ifxput@isinitgrid - \else - \xput@closerows - \fi - } -} -\newcommand\xput@cells[2][1]{ - \if\xput@instring{!}{#1} - \xput@gridtmpRowH \xput@striplastexclamationmark{#1}\relax - \xput@forcerowtrue - \advance\rowsF by \xput@gridtmpRowH - \advance\rowsH by \xput@gridtmpRowH - \xput@set{\the\xput@rowscount H}{\xput@gridtmpRowH} - \advance \xput@fixrowscount by 1 - \else - \xput@forcerowfalse - \xput@gridtmpRowH #1\relax - \fi - - \xput@cellscount 0\relax - \xput@set{\the\xput@rowscount W}{0} - \xput@set{\the\xput@rowscount F}{0} - \ifxput@forcerow\xput@set{if\the\xput@rowscount F}{1}\else\xput@set{if\the\xput@rowscount F}{0}\fi - \xput@gridisflexrowfalse - - \xput@gobblenextcell{#2} -} -\newcommand\xput@gobblenextcell[1]{ - \xput@addcell{#1} - \@ifnextchar\bgroup{ - \xput@gobblenextcell - }{ - \ifxput@forcerow - \else - \ifxput@gridisflexrow - \xput@flexmodetrue - \advance \xput@flexrowscount by 1 - \advance\rowsFlex by \xput@gridtmpRowH - \xput@set{\the\xput@rowscount H}{\xput@gridtmpRowH} - \xput@set{if\the\xput@rowscount Fix}{0} - \else - \advance \xput@fixrowscount by 1 - \advance\rowsH by \xput@gridtmpRowH - \xput@set{\the\xput@rowscount H}{\xput@gridtmpRowH} - \xput@set{if\the\xput@rowscount Fix}{1} - \fi - \fi - \xput@set{\the\xput@rowscount C}{\xput@cellscount} - } -} - -% grid shortcut -\def\xput@flexkey{f} -\def\xput@portraitkey{p} -\def\xput@squarekey{s} -\def\xput@landscapekey{l} -\def\xput@goldenkey{g} -\def\xput@goldenuprightkey{o} -\def\xput@widekey{w} -\def\xput@rowbreakkey{-} -\newcount\xput@rowcountsc -\newcount\xput@cellcountsc -\newcommand\xput@breakrow{ - \edef\xput@result{\xput@result{[30]\xput@rowindex}} -} -\newif\ifxput@isgridvalid -\newcommand\xput@transformgridconfig[1]{ - \ifx\xput@rowbreakkey#1 - \xput@breakrow - \def\xput@rowindex{} - \else - \ifx\xput@flexkey#1 - \edef\xput@rowindex{\xput@rowindex{1}} - \else - \ifx\xput@portraitkey#1 - \edef\xput@rowindex{\xput@rowindex{20!}} - \else - \ifx\xput@squarekey#1 - \edef\xput@rowindex{\xput@rowindex{30!}} - \else - \ifx\xput@landscapekey#1 - \edef\xput@rowindex{\xput@rowindex{45!}} - \else - \ifx\xput@widekey#1 - \edef\xput@rowindex{\xput@rowindex{60!}} - \else - \ifx\xput@goldenkey#1 - \edef\xput@rowindex{\xput@rowindex{50!}} - \else - \ifx\xput@goldenuprightkey#1 - \edef\xput@rowindex{\xput@rowindex{18!}} - \else - \xput@isgridvalidfalse - \fi - \fi - \fi - \fi - \fi - \fi - \fi - \fi -} -\newcommand\xput@setplaceholder[1]{ - \ifx\xput@rowbreakkey#1 - \advance\xput@rowcountsc by 1 - \xput@cellcountsc 0\relax - \else - \placeholder{{\xput@rowcountsc} {\xput@cellcountsc} {\numexpr\xput@rowcountsc+1\relax} {\numexpr\xput@cellcountsc+1\relax}} - \advance\xput@cellcountsc by 1 - \fi -} -\newcommand\xput@gridsc[1]{ - \edef\xput@gridsc@input{#1} - \def\xput@rowindex{} - \def\xput@result{} - \xput@isgridvalidtrue - \@tfor\next:=#1\do{\xput@transformgridconfig{\next}}% - \ifxput@isgridvalid - \xput@breakrow - \edef\xput@result{{\xput@result}} - \expandafter\setgrid\xput@result - \xput@rowcountsc 0\relax - \xput@cellcountsc 0\relax - \@tfor\next:=#1\do{\xput@setplaceholder{\next}}% - \else - \xput@errmsg@undefined{template}{\xput@gridsc@input} - \fi -} - -% grid dimensions -\newif\ifxput@flexgrid -\newcommand\xput@calculategridheight{ - \xput@flexgridtrue - \xput@gridheight=\xput@null - \looprows=0 - \loop - \advance\looprows 1 - \ifnum\xput@get{if\the\looprows F}=1 - \xput@gridheight=\dimexpr\xput@gridheight+\xput@gutter\relax% - \else - \ifnum\xput@get{if\the\looprows Fix}=0 - \xput@gridheight=\dimexpr\xput@gridheight+\xput@gutter\relax% - \else - \xput@flexgridfalse - \xput@gridheight=\dimexpr\xput@gridheight+(\xput@gridwidth-\xput@gutter*\xput@get{\the\looprows C})*\xput@get{\the\looprows H}/(\xput@get{\the\looprows W}*(\rowsH-\rowsF))*\rowsH+\xput@gutter\relax - \fi - \fi - \ifnum \looprows<\xput@rowscount - \repeat - \ifxput@flexgrid - \xput@gridheight=\dimexpr\xput@calculatefullgridheight\relax - \fi -} -\newcommand\xput@calculatefullgridheight{ - \xput@pageheight - \xput@topmargin - \xput@bottommargin + \xput@gutter -} -\newcommand\xput@calculategridwidth{ - \def\xput@calculategridwidthcalc{(\xput@gridheight*(\rowsH-\rowsF)/\rowsH-\xput@gutter*(\rowsH-\rowsF)*\xput@rowscount/\rowsH} - \looprows=0 - \loop - \advance\looprows 1 - \ifnum\xput@get{if\the\looprows F}=1 - \else - \ifnum\xput@get{if\the\looprows Fix}=0 - \else - \edef\xput@calculategridwidthcalc{\xput@calculategridwidthcalc+\xput@gutter*\xput@get{\the\looprows C}*\xput@get{\the\looprows H}/\xput@get{\the\looprows W}} - \fi - \fi - \ifnum \looprows<\xput@rowscount - \repeat - - \edef\xput@calculategridwidthcalc{\xput@calculategridwidthcalc) * 10000 / (\xput@null} - \looprows=0 - \loop - \advance\looprows 1 - \ifnum\xput@get{if\the\looprows F}=1 - \else - \ifnum\xput@get{if\the\looprows Fix}=0 - \else - \edef\xput@calculategridwidthcalc{\xput@calculategridwidthcalc+10000*\xput@get{\the\looprows H}/\xput@get{\the\looprows W}} - \fi - \fi - \ifnum \looprows<\xput@rowscount - \repeat - - \edef\xput@calculategridwidthcalc{\xput@calculategridwidthcalc)} - \xput@maxgridwidth=\dimexpr\xput@calculategridwidthcalc\relax -} -\newcommand\xput@calculatefullgridwidth{ - \ifxput@isdoublepage - \xput@pagewidth * 2 - \xput@outermargin * 2 - \ifxput@frontcover - \else - \ifxput@fanfold - \else - - \bindingoffset * 2 - \fi - \fi - \else - \xput@pagewidth - \xput@innermargin - \xput@outermargin - \fi - + \xput@gutter -} -\newcommand\xput@calculaterealgridwidth{ - \ifxput@isdoublepage - (\xput@pagewidth * 2 - \xput@outermargin * 2) - \else - (\xput@pagewidth - \xput@innermargin - \xput@outermargin) - \fi -} -\newcommand\xput@gridstartx[1]{ - \ifdim\dimexpr#1\relax=\xput@undefdim - \ifxput@isdoublepage - (\xput@outermargin + \xput@leftbleed - \xput@gutter / 2 - \ifxput@frontcover - \else - \ifxput@fanfold - \else - \ifxput@rightpage - + \bindingoffset * 2 - \fi - \fi - \fi - ) - \else - (\xput@leftmargin + \xput@leftbleed - \xput@gutter / 2) - \fi - \else% - \ifxput@isdoublepage - (#1 + \xput@leftbleed - \xput@gutter / 2 - \ifxput@frontcover - \else - \ifxput@fanfold - \else - \ifxput@rightpage - + \bindingoffset * 2 - \fi - \fi - \fi - ) - \else - (#1 + \xput@leftbleed - \xput@gutter / 2) - \fi - \fi% -} -\newcommand\xput@gridstarty[1]{ - \ifdim\dimexpr#1\relax=\xput@undefdim - (\xput@bottommargin + \xput@bottombleed - \xput@gutter / 2)% - \else% - (#1 + \xput@bottombleed - \xput@gutter / 2) - \fi% -} -\newcommand\xput@setdimensions{ - \global\xput@gridfullfalse - \global\def\xput@framey{0}\global\def\xput@framex{0}\global\def\xput@frameyy{1}\global\def\xput@framexx{1} - \global\def\xput@frameyymax{0}\global\def\xput@framexxmax{0} - \paperheight=\dimexpr(\xput@pageheight + \xput@topbleed + \xput@bottombleed)\relax - \xput@gridoffsetx=\xput@null - - \ifxput@isdoublepage - % doublepage - \ifxput@fanfold - \paperwidth=\dimexpr((\xput@pagewidth + \xput@outerbleed) * 2)\relax - \else - \paperwidth=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed)\relax - \ifxput@rightpage - \xput@gridoffsetx=\dimexpr(-\xput@pagewidth)\relax - \fi - \fi - \else - \ifxput@frontcover - % frontcover - \paperwidth=\dimexpr((\xput@pagewidth + \xput@outerbleed) * 2 + \spinewidth)\relax - \else - % page - \ifxput@fanfold - \paperwidth=\dimexpr((\xput@pagewidth + \xput@outerbleed) * 2)\relax - \ifxput@rightpage - \xput@gridoffsetx=\dimexpr(\xput@pagewidth + \xput@outerbleed - \xput@innerbleed)\relax - \fi - \else - \paperwidth=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed)\relax - \fi - \fi - \fi -} - -% grid coordinates -\newcommand\xput@coordxrow[3]{\ifdim\dimexpr#2\dimexpr1pt\relax\relax<\dimexpr(#3\dimexpr1pt\relax-#1sp)\relax\the\numexpr#3\relax\else\xput@coordxrow{#1}{#2}{\numexpr#3+1\relax}\fi} -\newcommand\xput@coordxcell[2]{\ifnum\numexpr(10000*#1)\relax<\numexpr(#2*10000+1)\relax\the\numexpr#2\relax\else\xput@coordxcell{#1}{\numexpr#2+1\relax}\fi} -\newcommand\xput@coordx[3]{ - \xput@get{% - \xput@coordxrow{#1}{#2}{1}-% - \xput@coordxcell{#3}{1}% - WR% - } -} -\newcommand\posxcell[3]{ - \ifnum#3>0 - + \xput@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 - \xput@gridstartxdim + #4\dimexpr\xput@coordx{#1}{#2}{#3}sp\relax - \xput@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\xput@gutter / 2 + \xput@gridoffsetx + \xput@gridoffsethorizontal% - )\relax% -} -\newcommand\posycell[1]{ - \ifnum#1>0 - - \xput@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 - \xput@gridstartydim + \xput@maxgridheight - #1\dimexpr\xput@get{#2HR} sp\relax + \xput@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\xput@gutter / 2 - \xput@gridoffsetvertical% - )\relax% -} -\newcommand\xput@gridhalign[1]{ - \def\xput@horizontalpagealign{#1} -} -\newcommand\xput@gridvalign[1]{ - \def\xput@verticalpagealign{#1} -} -\xput@gridhalign{0.5} -\xput@gridvalign{0.5} -\xput@isinitgridtrue -\setgrid{{{1}}} - -% graphic -\newif\ifxput@isvisible -\newif\ifxput@calculatecrop -\newdimen\xput@originalgraphicwidth\newdimen\xput@originalgraphicheight -\newdimen\xput@cropx\newdimen\xput@cropy -\newdimen\xput@cropleft\newdimen\xput@cropright -\newdimen\xput@cropbottom\newdimen\xput@croptop -\newdimen\xput@cropstart\newdimen\xput@cropend -\newdimen\xput@snapleft\newdimen\xput@snapright -\newdimen\xput@snapbottom\newdimen\xput@snaptop -\newdimen\xput@viewportwidth\newdimen\xput@viewportheight -\newdimen\xput@frameborderwidth -\newdimen\xput@frameborderradius -\newdimen\xput@frameshadowradius -\newdimen\xput@snapcroptmp -\newdimen\xput@overprint -\xput@overprint=0pt -\def\xput@cropleftside{ - \ifdim\xput@x>\xput@cropstart - \ifdim\xput@x<\xput@cropend - \xput@snapleft=\dimexpr(\xput@x - \xput@cropstart)\relax - \xput@x=\dimexpr(\xput@cropstart)\relax - \fi - \fi -} -\def\xput@croprightside{ - \ifdim\xput@xx>\xput@cropstart - \ifdim\xput@xx<\xput@cropend - \xput@snapright=\dimexpr(\xput@cropend - \xput@xx)\relax - \xput@xx=\dimexpr(\xput@cropend)\relax - \fi - \fi -} -\def\xput@snapsafezonevertical{ - \xput@snapbottom=\xput@null - \xput@snaptop=\xput@null - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@bottombleed + 1pt)\relax - \ifdim\xput@y>\xput@cropstart - \ifdim\xput@y<\xput@cropend - \xput@snapbottom=\dimexpr(\xput@y - \xput@cropstart)\relax - \xput@y=\dimexpr(\xput@cropstart)\relax - \fi - \fi - \xput@cropstart=\dimexpr(\xput@pageheight + \xput@bottombleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pageheight + \xput@bottombleed + \xput@topbleed + \xput@overprint)\relax - \ifdim\xput@yy>\xput@cropstart - \ifdim\xput@yy<\xput@cropend - \xput@snaptop=\dimexpr(\xput@cropend - \xput@yy)\relax - \xput@yy=\dimexpr(\xput@cropend)\relax - \fi - \fi -} -\def\xput@snapsafezonehorizontal{ - \xput@snapleft=\xput@null - \xput@snapright=\xput@null - \ifxput@isdoublepage - % doublepage - \ifxput@fanfold - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + 1pt)\relax - \xput@cropleftside - \xput@cropstart=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed * 2 + \xput@overprint)\relax - \xput@croprightside - \else - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + 1pt)\relax - \xput@cropleftside - \xput@cropstart=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed - \xput@rightbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed + \xput@overprint)\relax - \xput@croprightside - \ifxput@leftpage - \xput@cropstart=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed - \bindingoffset * 2 - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed + \xput@outerbleed - \bindingoffset * 2 + \xput@overprint)\relax - \xput@croprightside - \else - \xput@cropstart=\dimexpr(\xput@innerbleed -\xput@pagewidth - \xput@outerbleed + \bindingoffset * 2 - \xput@overprint)\relax - \xput@cropend=\dimexpr(-\xput@pagewidth + \xput@innerbleed + \bindingoffset * 2 + 1pt)\relax - \xput@cropleftside - \fi - \fi - \else - % frontcover - \ifxput@frontcover - \ifxput@cover - \ifxput@backcover - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + 1pt)\relax - \else - \xput@cropstart=\dimexpr(\xput@pagewidth + \xput@outerbleed)\relax - \xput@cropend=\dimexpr(\xput@pagewidth + \xput@outerbleed + \spinewidth + 1pt)\relax - \fi - \xput@cropleftside - \ifxput@backcover - \xput@cropstart=\dimexpr(\xput@pagewidth + \xput@outerbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth + \xput@outerbleed)\relax - \else - \xput@cropstart=\dimexpr(\xput@pagewidth * 2 + \spinewidth + \xput@outerbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed * 2 + \spinewidth + \xput@overprint)\relax - \fi - \xput@croprightside - \else - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + 1pt)\relax - \xput@cropleftside - \xput@cropstart=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed - \xput@rightbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed + \xput@overprint)\relax - \xput@croprightside - \fi - \else - % page - \ifxput@fanfold - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + 1pt)\relax - \xput@cropleftside - \xput@cropstart=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth * 2 + \xput@outerbleed * 2 + \xput@overprint)\relax - \xput@croprightside - \else - \xput@cropstart=-\xput@overprint - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + 1pt)\relax - \xput@cropleftside - \xput@cropstart=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed - \xput@rightbleed - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed + \xput@overprint)\relax - \xput@croprightside - \fi - \fi - \fi -} -\pgfkeys{ - /graphic/.is family, - /graphic, - file/.store in=\xput@graphicoptionfile, - scale/.store in=\xput@graphicoptionscale, - vpos/.store in=\xput@graphicoptionvpos, - hpos/.store in=\xput@graphicoptionhpos, - unsharp/.store in=\xput@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\xput@checkvisibility{ - \xput@isvisibletrue - - \ifxput@frontcover - \else - \ifxput@fanfold - \else - \ifxput@isdoublepage - \ifxput@leftpage - \xput@cropstart=\dimexpr(\xput@pagewidth + \xput@outerbleed - \bindingoffset - 1pt)\relax - \xput@cropend=\dimexpr(\xput@pagewidth + \xput@outerbleed + \xput@innerbleed)\relax - \ifdim\xput@x>\xput@cropstart - \xput@isvisiblefalse - \fi - \else - \xput@cropstart=\dimexpr(\xput@null)\relax - \xput@cropend=\dimexpr(\xput@null + \xput@leftbleed + \bindingoffset + 1pt)\relax - \ifdim\xput@xx<\xput@cropend - \xput@isvisiblefalse - \fi - \fi - \fi - \fi - \fi -} -\def\xput@snapoptimizedgraphic{ - \ifdim\xput@snapleft>\xput@null - \width=\dimexpr\width+\xput@snapleft\relax - \fi - \ifdim\xput@snapright>\xput@null - \width=\dimexpr\width+\xput@snapright\relax - \fi - \ifdim\xput@snaptop>\xput@null - \height=\dimexpr\height+\xput@snaptop\relax - \fi - \ifdim\xput@snapbottom>\xput@null - \height=\dimexpr\height+\xput@snapbottom\relax - \fi -} -\def\xput@snapgraphic{ - \pgfmathqparse{(\xput@originalgraphicheight-\xput@croptop-\xput@cropbottom)/\height} - \edef\xput@scale{\pgfmathresult} - \pgfmathqparse{\height/(\xput@originalgraphicheight-\xput@croptop-\xput@cropbottom)} - \edef\xput@scalerez{\pgfmathresult} - - % snap - \ifdim\xput@snapleft>\xput@null - \ifdim\xput@cropleft>\xput@null - \ifdim\xput@scale\xput@snapleft>\xput@cropleft - \xput@snapbleedleft=\xput@cropleft - \xput@snapleft=\dimexpr\xput@snapleft-\xput@scalerez\xput@cropleft\relax - \width=\dimexpr\width+\xput@scalerez\xput@cropleft\relax - \xput@cropleft=\xput@null - \else - \xput@snapbleedleft=\dimexpr\xput@scale\xput@snapleft\relax - \xput@cropleft=\dimexpr\xput@cropleft-\xput@scale\xput@snapleft\relax - \width=\dimexpr\width+\xput@snapleft\relax - \xput@snapleft=\xput@null - \fi - \fi - \fi - \ifdim\xput@snapright>\xput@null - \ifdim\xput@cropright>\xput@null - \ifdim\xput@scale\xput@snapright>\xput@cropright - \xput@snapbleedright=\xput@cropright - \xput@snapright=\dimexpr\xput@snapright-\xput@scalerez\xput@cropright\relax - \width=\dimexpr\width+\xput@scalerez\xput@cropright\relax - \xput@cropright=\xput@null - \else - \xput@snapbleedright=\dimexpr\xput@scale\xput@snapright\relax - \xput@cropright=\dimexpr\xput@cropright-\xput@scale\xput@snapright\relax - \width=\dimexpr\width+\xput@snapright\relax - \xput@snapright=\xput@null - \fi - \fi - \fi - \ifdim\xput@snaptop>\xput@null - \ifdim\xput@croptop>\xput@null - \ifdim\xput@scale\xput@snaptop>\xput@croptop - \xput@snapbleedtop=\xput@croptop - \xput@snaptop=\dimexpr\xput@snaptop-\xput@scalerez\xput@croptop\relax - \height=\dimexpr\height+\xput@scalerez\xput@croptop\relax - \xput@croptop=\xput@null - \else - \xput@snapbleedtop=\dimexpr\xput@scale\xput@snaptop\relax - \xput@croptop=\dimexpr\xput@croptop-\xput@scale\xput@snaptop\relax - \height=\dimexpr\height+\xput@snaptop\relax - \xput@snaptop=\xput@null - \fi - \fi - \fi - \ifdim\xput@snapbottom>\xput@null - \ifdim\xput@cropbottom>\xput@null - \ifdim\xput@scale\xput@snapbottom>\xput@cropbottom - \xput@snapbleedbottom=\xput@cropbottom - \xput@snapbottom=\dimexpr\xput@snapbottom-\xput@scalerez\xput@cropbottom\relax - \height=\dimexpr\height+\xput@scalerez\xput@cropbottom\relax - \xput@cropbottom=\xput@null - \else - \xput@snapbleedbottom=\dimexpr\xput@scale\xput@snapbottom\relax - \xput@cropbottom=\dimexpr\xput@cropbottom-\xput@scale\xput@snapbottom\relax - \height=\dimexpr\height+\xput@snapbottom\relax - \xput@snapbottom=\xput@null - \fi - \fi - \fi - - % move - \ifdim\xput@snapbottom=\xput@null - \ifdim\xput@snaptop=\xput@null - \ifdim\xput@snapright>\xput@null - \ifdim\xput@cropleft>\xput@null - \ifdim\xput@scale\xput@snapright>\xput@cropleft - \xput@snapright=\dimexpr\xput@snapright-\xput@scalerez\xput@cropleft\relax - \width=\dimexpr\width+\xput@scalerez\xput@cropleft\relax - \xput@cropleft=\xput@null - \else - \xput@cropleft=\dimexpr\xput@cropleft-\xput@scale\xput@snapright\relax - \width=\dimexpr\width+\xput@snapright\relax - \xput@snapright=\xput@null - \fi - \fi - \fi - \ifdim\xput@snapleft>\xput@null - \ifdim\xput@cropright>\xput@null - \ifdim\xput@scale\xput@snapleft>\xput@cropright - \xput@snapleft=\dimexpr\xput@snapleft-\xput@scalerez\xput@cropright\relax - \width=\dimexpr\width+\xput@scalerez\xput@cropright\relax - \xput@cropright=\xput@null - \else - \xput@cropright=\dimexpr\xput@cropright-\xput@scale\xput@snapleft\relax - \width=\dimexpr\width+\xput@snapleft\relax - \xput@snapleft=\xput@null - \fi - \fi - \fi - \fi - \fi - \ifdim\xput@snapleft=\xput@null - \ifdim\xput@snapright=\xput@null - \ifdim\xput@snaptop>\xput@null - \ifdim\xput@cropbottom>\xput@null - \ifdim\xput@scale\xput@snaptop>\xput@cropbottom - \xput@snaptop=\dimexpr\xput@snaptop-\xput@scalerez\xput@cropbottom\relax - \height=\dimexpr\height+\xput@scalerez\xput@cropbottom\relax - \xput@cropbottom=\xput@null - \else - \xput@cropbottom=\dimexpr\xput@cropbottom-\xput@scale\xput@snaptop\relax - \height=\dimexpr\height+\xput@snaptop\relax - \xput@snaptop=\xput@null - \fi - \fi - \fi - \ifdim\xput@snapbottom>\xput@null - \ifdim\xput@croptop>\xput@null - \ifdim\xput@scale\xput@snapbottom>\xput@croptop - \xput@snapbottom=\dimexpr\xput@snapbottom-\xput@scalerez\xput@croptop\relax - \height=\dimexpr\height+\xput@scalerez\xput@croptop\relax - \xput@croptop=\xput@null - \else - \xput@croptop=\dimexpr\xput@croptop-\xput@scale\xput@snapbottom\relax - \height=\dimexpr\height+\xput@snapbottom\relax - \xput@snapbottom=\xput@null - \fi - \fi - \fi - \fi - \fi -} -\newdimen\xput@snapcropoffset -\newdimen\xput@snapbleedleft\newdimen\xput@snapbleedright -\newdimen\xput@snapbleedtop\newdimen\xput@snapbleedbottom -\def\xput@hscalegraphic{ - \pgfmathqparse{\width/(\width+\xput@snapleft+\xput@snapright)} - \edef\xput@snapscale{\pgfmathresult} - \xput@snapcroptmp=\dimexpr\xput@originalgraphicheight-\xput@cropbottom-\xput@croptop-\xput@snapscale\xput@originalgraphicheight+\xput@snapscale\xput@cropbottom+\xput@snapscale\xput@croptop\relax - \xput@snapcropoffset=\dimexpr\xput@snapbleedbottom-\xput@snapscale\xput@snapbleedbottom-\xput@snapbleedtop+\xput@snapscale\xput@snapbleedtop\relax - \xput@cropbottom=\dimexpr\xput@cropbottom+0.5\xput@snapcroptmp+0.5\xput@snapcropoffset\relax - \xput@croptop=\dimexpr\xput@croptop+0.5\xput@snapcroptmp-0.5\xput@snapcropoffset\relax - - \width=\dimexpr\width+\xput@snapleft+\xput@snapright\relax - \xput@snapright=\xput@null - \xput@snapleft=\xput@null -} -\def\xput@vscalegraphic{ - \pgfmathqparse{\height/(\height+\xput@snaptop+\xput@snapbottom)} - \edef\xput@snapscale{\pgfmathresult} - \xput@snapcroptmp=\dimexpr\xput@originalgraphicwidth-\xput@cropleft-\xput@cropright-\xput@snapscale\xput@originalgraphicwidth+\xput@snapscale\xput@cropleft+\xput@snapscale\xput@cropright\relax - \xput@snapcropoffset=\dimexpr\xput@snapbleedleft-\xput@snapscale\xput@snapbleedleft-\xput@snapbleedright+\xput@snapscale\xput@snapbleedright\relax - \xput@cropleft=\dimexpr\xput@cropleft+0.5\xput@snapcroptmp+0.5\xput@snapcropoffset\relax - \xput@cropright=\dimexpr\xput@cropright+0.5\xput@snapcroptmp-0.5\xput@snapcropoffset\relax - - \height=\dimexpr\height+\xput@snaptop+\xput@snapbottom\relax - \xput@snaptop=\xput@null - \xput@snapbottom=\xput@null -} -\def\xput@getbase#1{\edef\Gin@base{\filename@area\filename@base}\edef\Gin@ext{#1}} -\let\xput@getbaseorginal\Gin@getbase -\def\xput@disablegraphicsfilecheck{ - \let\Gin@getbase\xput@getbase -} -\def\xput@enablegraphicsfilecheck{ - \let\Gin@getbase\xput@getbaseorginal -} -\let\xput@setfileorginal\Gin@setfile -\def\xput@setfile#1#2#3{ - \global\edef\xput@currfilebase{\Gin@base} - \global\edef\xput@currfileext{\Gin@ext} - \global\@onelevel@sanitize\xput@currfileext -} -\edef\xput@extjpeg{.jpeg}\@onelevel@sanitize\xput@extjpeg -\edef\xput@extJPEG{.JPEG}\@onelevel@sanitize\xput@extJPEG -\edef\xput@extjpg{.jpg}\@onelevel@sanitize\xput@extjpg -\edef\xput@extJPG{.JPG}\@onelevel@sanitize\xput@extJPG -\edef\xput@extpng{.png}\@onelevel@sanitize\xput@extpng -\edef\xput@extPNG{.PNG}\@onelevel@sanitize\xput@extPNG -\def\isoptimizable#1#2{ - \ifx#1\xput@extjpg - \def\xput@optimizedext{.jpg}#2 - \else - \ifx#1\xput@extJPG - \def\xput@optimizedext{.jpg}#2 - \else - \ifx#1\xput@extjpeg - \def\xput@optimizedext{.jpg}#2 - \else - \ifx#1\xput@extJPEG - \def\xput@optimizedext{.jpg}#2 - \else - \ifx#1\xput@extpng - \def\xput@optimizedext{.png}#2 - \else - \ifx#1\xput@extPNG - \def\xput@optimizedext{.png}#2 - \fi - \fi - \fi - \fi - \fi - \fi -} -\def\newgraphic#1#2{ - \expandafter\newcommand\csname xput@graphic@#1\endcsname[2][0]{% - \ifnum##1=0 - \pgfkeys{pagegraphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\xput@unsharp,#2,##2} - \else - \ifnum##1=1 - \pgfkeys{backcoverpagegraphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\xput@unsharp,#2} - \else - \pgfkeys{graphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\xput@unsharp,#2,##2} - \fi - \fi - }% -} -\newcommand\xput@putgraphic[6][]{ - \xput@x=\posx{1}{#2}{1}{#3} - \xput@yy=\posy{1}{#2} - \xput@xx=\posx{-1}{#4}{-1}{#5} - \xput@y=\posy{-1}{#4} - - \xput@checkvisibility - - \ifxput@isvisible - \xput@cropleft=\xput@null - \xput@cropbottom=\xput@null - \xput@cropright=\xput@null - \xput@croptop=\xput@null - - \width=\dimexpr(\xput@xx - \xput@x)\relax - \height=\dimexpr(\xput@yy - \xput@y)\relax - - % safezone horizontal - \xput@snapsafezonehorizontal - - % safezone vertical - \xput@snapsafezonevertical - - \xput@snapbleedleft=\xput@null - \xput@snapbleedright=\xput@null - \xput@snapbleedtop=\xput@null - \xput@snapbleedbottom=\xput@null - - \begingroup - \xdef\xput@filename{#6-\xput@density-\xput@graphicoptionscale-\xput@graphicoptionhpos-\xput@graphicoptionvpos-\the\numexpr\xput@snaptop\relax-\the\numexpr\xput@snapright\relax-\the\numexpr\xput@snapbottom\relax-\the\numexpr\xput@snapleft\relax-\the\numexpr\width\relax-\the\numexpr\height\relax-\xput@downsamplethreshold-\xput@graphicoptionunsharp-\xput@quality} - \ifxput@optimize - \IfFileExists{./cache/\xput@filename/g.jpg}{ - \def\xput@nextincludegraphic{\includegraphics[width=\width]{cache/\xput@filename/g.jpg}} - }{ - \IfFileExists{./cache/\xput@filename/g.png}{ - \def\xput@nextincludegraphic{\includegraphics[width=\width]{cache/\xput@filename/g.png}} - }{ - \xput@calculatecroptrue - } - } - - \ifxput@preflight - \xput@calculatecroptrue - \fi - \else - \xput@calculatecroptrue - \fi - - \ifxput@calculatecrop - \global\edef\xput@currfilebase{} - \global\edef\xput@currfileext{} - \let\Gin@setfile\xput@setfile - \Ginclude@graphics#6 - \let\Gin@setfile\xput@setfileorginal - \ifx\xput@currfileext\xput@emptystring - \xput@calculatecropfalse - \def\xput@nextincludegraphic{} - \fi - \fi - - \xput@disablegraphicsfilecheck - \ifxput@calculatecrop - % graphic crop - \settowidth{\xput@originalgraphicwidth}{\includegraphics{\xput@currfilebase\xput@currfileext}} - \settoheight{\xput@originalgraphicheight}{\includegraphics{\xput@currfilebase\xput@currfileext}} - \pgfmathqparse{1pt-\xput@graphicoptionvpos pt} - \edef\xput@graphicoptionvpos{\pgfmathresult} - \pgfmathqparse{\xput@originalgraphicwidth/\xput@originalgraphicheight} - \edef\xput@graphicratio{\pgfmathresult} - \pgfmathqparse{\width/\height} - \edef\xput@vpratio{\pgfmathresult} - \pgfmathqparse{\xput@graphicratio pt>\xput@vpratio pt} - \ifnum\pgfmathresult=1 - \xput@cropx=\dimexpr(\numexpr(\xput@originalgraphicwidth - \width * \xput@originalgraphicheight / \height)\relax sp)\relax - \xput@cropy=\xput@null - \else - \xput@cropy=\dimexpr(\numexpr(\xput@originalgraphicheight - \height * \xput@originalgraphicwidth / \width)\relax sp)\relax - \xput@cropx=\xput@null - \fi - \xput@viewportwidth=\dimexpr\xput@originalgraphicwidth-\xput@cropx\relax - \xput@viewportheight=\dimexpr\xput@originalgraphicheight-\xput@cropy\relax - \pgfmathqparse{1pt/\xput@graphicoptionscale pt} - \edef\xput@reciprocalscale{\pgfmathresult} - \xput@cropx=\dimexpr\xput@cropx + \xput@viewportwidth - \xput@reciprocalscale\xput@viewportwidth\relax - \xput@cropy=\dimexpr\xput@cropy + \xput@viewportheight - \xput@reciprocalscale\xput@viewportheight\relax - \ifdim\xput@cropx>\xput@null - \xput@cropleft=\dimexpr(\xput@graphicoptionhpos\xput@cropx)\relax - \ifdim\xput@cropleft<\xput@null - \xput@cropleft=\xput@null - \fi - \ifdim\xput@cropleft>\xput@cropx - \xput@cropleft=\xput@cropx - \fi - \xput@cropright=\dimexpr(\xput@cropx - \xput@cropleft)\relax - \fi - \ifdim\xput@cropy>\xput@null - \xput@cropbottom=\dimexpr(\xput@graphicoptionvpos\xput@cropy)\relax - \ifdim\xput@cropbottom<\xput@null - \xput@cropbottom=\xput@null - \fi - \ifdim\xput@cropbottom>\xput@cropy - \xput@cropbottom=\xput@cropy - \fi - \xput@croptop=\dimexpr(\xput@cropy - \xput@cropbottom)\relax - \fi - - \xput@snapgraphic - \ifdim\dimexpr\xput@snapleft+\xput@snapright\relax=\xput@null - \ifdim\dimexpr\xput@snaptop+\xput@snapbottom\relax>\xput@null - \xput@vscalegraphic - \fi - \else - \ifdim\dimexpr\xput@snaptop+\xput@snapbottom\relax=\xput@null - \ifdim\dimexpr\xput@snapleft+\xput@snapright\relax>\xput@null - \xput@hscalegraphic - \fi - \else - \ifdim\dimexpr\width/(\xput@snapleft + \xput@snapright)\relax<\dimexpr\height/(\xput@snaptop + \xput@snapbottom)\relax - \xput@hscalegraphic - - \xput@snapgraphic - \else - \xput@vscalegraphic - - \xput@snapgraphic - \fi - \fi - \fi - - \ifdim\xput@snapleft>\xput@null - \xput@x=\dimexpr\xput@x+\xput@snapleft\relax - \fi - \ifdim\xput@snapbottom>\xput@null - \xput@y=\dimexpr\xput@y+\xput@snapbottom\relax - \fi - \else - \xput@snapoptimizedgraphic - \fi - - \ifdefined\xput@nextincludegraphic - \else - \ifxput@optimize - \ifxput@isbatchmode - \isoptimizable{\xput@currfileext}{\xput@addtobatchlist{\xput@currfilebase}{\xput@currfileext}} - \def\xput@nextincludegraphic{} - \else - \isoptimizable{\xput@currfileext}{\xput@optimizegraphic{\xput@currfilebase}{\xput@currfileext}} - \ifdefined\xput@optimizedext - \IfFileExists{./cache/\xput@filename/g\xput@optimizedext}{ - \def\xput@nextincludegraphic{\includegraphics[width=\width]{cache/\xput@filename/g\xput@optimizedext}} - }{ - \ifx\xput@processresult\xput@ok - \ClassError{Xput}{Unexpected error. File not optimized}{File `cache/#6/g\xput@optimizedext' not found.\MessageBreak Try to delete the `cache' directory.\MessageBreak\MessageBreak\@ehc} - \fi - \def\xput@nextincludegraphic{\includegraphics[trim={\xput@cropleft} {\xput@cropbottom} {\xput@cropright} {\xput@croptop},\xput@clip,width=\width]{\xput@currfilebase\xput@currfileext}} - } - \else - \def\xput@nextincludegraphic{\includegraphics[trim={\xput@cropleft} {\xput@cropbottom} {\xput@cropright} {\xput@croptop},\xput@clip,width=\width]{\xput@currfilebase\xput@currfileext}} - \fi - \fi - \else - \def\xput@nextincludegraphic{\includegraphics[trim={\xput@cropleft} {\xput@cropbottom} {\xput@cropright} {\xput@croptop},\xput@clip,width=\width]{\xput@currfilebase\xput@currfileext}} - \fi - \fi - - \ifdim\xput@defaultborderradius>0.5\height - \def\xput@defaultborderradius{0.5\height} - \fi - \ifdim\xput@defaultborderradius>0.5\width - \def\xput@defaultborderradius{0.5\width} - \fi - - \xput@frameborderwidth=\dimexpr\xput@defaultborderwidth\relax - \ifdim\xput@defaultborderradius=0pt - \xput@frameborderradius=0pt - \xput@frameshadowradius=0pt - \else - \xput@frameborderradius=\dimexpr\xput@defaultborderradius+0.5\xput@frameborderwidth\relax - \xput@frameshadowradius=\dimexpr\xput@defaultborderradius+\xput@frameborderwidth\relax - \fi - - % draw shadow - \ifxput@isbatchmode - \else - \def\xput@frameshadowoffsetx{\xput@frameborderwidth} - \def\xput@frameshadowoffsety{\xput@frameborderwidth} - \def\xput@frameshadowwidth{\dimexpr\width+10cm+2\xput@frameborderwidth\relax} - \def\xput@frameshadowheight{\dimexpr\height+10cm+2\xput@frameborderwidth\relax} - \def\xput@frameshadowframewidth{\dimexpr\width+2\xput@frameborderwidth\relax} - \def\xput@frameshadowframeheight{\dimexpr\height+2\xput@frameborderwidth\relax} - \def\xput@frameshadowborder{\dimexpr5cm\relax} - \xput@drawshadow - \fi - - % draw graphic and border - \ifxput@isbatchmode - \xput@ismaskrequiredfalse - \def\xput@nextincludegraphic{} - \else - \ifxput@isperformancemode - \ifdim\xput@defaultborderwidth>0pt - \xput@ismaskrequiredtrue - \else - \ifdim\xput@defaultborderradius>0pt - \xput@ismaskrequiredtrue - \else - \xput@ismaskrequiredfalse - \fi - \fi - \else - \xput@ismaskrequiredtrue - \fi - \fi - - \ifxput@ismaskrequired - \def\xput@clip{}% - \else - \def\xput@clip{clip}% - \fi - - \put(\xput@dimentonumber{\xput@x},\xput@dimentonumber{\xput@y}){% - \ifxput@ismaskrequired% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \ifdim\xput@defaultborderwidth>0pt - \draw[draw=\xput@defaultbordercolor,draw opacity=\xput@defaultborderopacity,line width=\xput@frameborderwidth,rounded corners=\xput@frameborderradius] (-0.5\xput@frameborderwidth,-0.5\xput@frameborderwidth) rectangle ++(\width+\xput@frameborderwidth,\height+\xput@frameborderwidth);% - \fi - - \draw[draw opacity=0,rounded corners=\xput@defaultborderradius,path picture={ - \node at (0.5\width,0.5\height){ - \xput@nextincludegraphic - }; - }] (0,0) rectangle ++(\width,\height);% - \end{tikzpicture}% - \else% - \xput@nextincludegraphic - \fi% - } - - \xput@enablegraphicsfilecheck - - % draw ppi - \ifxput@preflight - \ifx\xput@nextincludegraphic\xput@emptystring - \else - \isoptimizable{\xput@currfileext}{\xput@getppi{\xput@currfilebase\xput@currfileext}} - \ifdefined\xput@graphicdensity - \xput@drawppi{#2}{#3}{#4}{#5}{#6}{\xput@graphicdensity} - \fi - \fi - \fi - \endgroup - \fi -} -\newcommand\xput@drawppi[6]{ - \xput@x=\posx{1}{#1}{1}{#2} - \xput@yy=\posy{1}{#1} - \xput@xx=\posx{-1}{#3}{-1}{#4} - \xput@y=\posy{-1}{#3} - \width=\dimexpr(\xput@xx - \xput@x)\relax - \height=\dimexpr(\xput@yy - \xput@y)\relax - \def\xput@ppicolor{green!50!black} - \def\xput@ppicolortext{white} - \ifnum#6<300 - \def\xput@ppicolor{yellow} - \def\xput@ppicolortext{black} - \ifnum#6<200 - \def\xput@ppicolor{red} - \def\xput@ppicolortext{white} - \xput@errmsg@lowdensity{1}{#5}{#6} - \else - \xput@errmsg@lowdensity{0}{#5}{#6} - \fi - \fi - \put(\xput@dimentonumber{\xput@x},\xput@dimentonumber{\xput@y}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \node[fill=\xput@ppicolor,fill opacity=0.9,line width=0pt,anchor=north east] at (\width,\height){ - \color{\xput@ppicolortext}\textbf{#6ppi} - }; - \end{tikzpicture}% - } -} - -% pagegraphic -\def\xput@pagegraphic{} -\pgfkeys{ - /pagegraphic/.is family, - /pagegraphic, - file/.store in=\xput@pagegraphic, - scale/.store in=\xput@pagegraphicoptionscale, - vpos/.store in=\xput@pagegraphicoptionvpos, - hpos/.store in=\xput@pagegraphicoptionhpos, - unsharp/.store in=\xput@pagegraphicoptionunsharp, -} -\pgfkeys{ - /backcoverpagegraphic/.is family, - /backcoverpagegraphic, - file/.store in=\xput@backcoveroptionpagegraphicfile, - scale/.store in=\xput@backcoveroptionpagegraphicscale, - vpos/.store in=\xput@backcoveroptionpagegraphicvpos, - hpos/.store in=\xput@backcoveroptionpagegraphichpos, - unsharp/.store in=\xput@backcoveroptionpagegraphicunsharp, -} -\def\xput@putpagegraphic{ - \begingroup - \margin=\xput@null - \topmargin=\xput@null - \bottommargin=\xput@null - \innermargin=\xput@null - \outermargin=\xput@null - \setgrid{{{1}}} - \pgfkeys{graphic,scale=\xput@pagegraphicoptionscale,hpos=\xput@pagegraphicoptionhpos,vpos=\xput@pagegraphicoptionvpos,unsharp=\xput@pagegraphicoptionunsharp,border width=0pt,border radius=0pt,shadow size=0} - \xput@putgraphic{0}{0}{1}{1}{\xput@pagegraphic} - \endgroup -} -\newcommand\setpagegraphic[2][]{ - \ifcsname xput@graphic@#2\endcsname% - \csname xput@graphic@#2\endcsname{#1} - \else% - \pgfkeys{pagegraphic,file={#2},scale=1,vpos=0.5,hpos=0.5,unsharp=\xput@unsharp,#1} - \fi -} -\def\nopagegraphic{\setpagegraphic{}} - -% text -\newdimen\xput@textboxheight -\newdimen\xput@textboxwidth -\newdimen\xput@leftwidth -\newdimen\xput@rightwidth -\newcommand\xput@checkside[1]{ - \ifxput@fanfold - \ifxput@isdoublepage - \xput@leftwidth=\dimexpr(\xput@pagewidth + \xput@outerbleed - \xput@x)\relax - \xput@rightwidth=\dimexpr(\xput@xx - \xput@pagewidth - \xput@outerbleed)\relax - \ifdim\xput@rightwidth>\xput@leftwidth - \ifnum#1=1 - \xput@leftpagefalse - \xput@rightpagetrue - \else - \xput@leftpagetrue - \xput@rightpagefalse - \fi - \addtocounter{page}{#1} - \fi - \fi - \fi -} -\def\xput@textoptionbottom{bottom} -\def\xput@textoptioncenter{center} -\newif\ifxput@text@option@top -\newif\ifxput@text@option@center -\newif\ifxput@text@option@bottom -\newif\ifxput@text@option@parbox -\newif\ifxput@text@option@breakable -\let\originaltcbset\tcbset -\pgfkeys{ - /inittext/.is family, - /inittext, - color/.code={\color{#1}}, - coltext/.forward to=/inittext/color, - boxrule/.code={\def\xput@defaultborderwidth{#1}\def\xput@text@option@leftrule{#1}\def\xput@text@option@rightrule{#1}\def\xput@text@option@toprule{#1}\def\xput@text@option@bottomrule{#1}}, - toprule/.code={\def\xput@text@option@toprule{#1}}, - rightrule/.code={\def\xput@text@option@rightrule{#1}}, - bottomrule/.code={\def\xput@text@option@bottomrule{#1}}, - leftrule/.code={\def\xput@text@option@leftrule{#1}}, - height/.code={\def\xput@text@option@height{#1}}, - arc/.code={\ifdim\xput@null=\dimexpr#1\relax\originaltcbset{outer arc=#1}\else\originaltcbset{auto outer arc}\fi\def\xput@defaultborderradius{#1}}, - colframe/.store in=\xput@defaultbordercolor, - opacityframe/.store in=\xput@defaultborderopacity, - breakable/.is if=xput@text@option@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 xput@border@#1\endcsname - \csname xput@border@#1\endcsname[1]{} - \else - \pgfkeys{textborder,opacity=1,width=0pt,color=black,radius=0pt} - \xput@errmsg@undefined{border}{#1} - \fi -} -\pgfkeys{ - /text/.is family, - /text, - name/.store in=\xput@text@option@name, - color/.code={\originaltcbset{coltext=#1}\def\xput@text@option@color{#1}}, - opacity/.code={\originaltcbset{opacitytext=#1}}, - top/.code={\originaltcbset{valign=top}\xput@text@option@toptrue}, - center/.code={\originaltcbset{valign=center}\xput@text@option@centertrue}, - bottom/.code={\originaltcbset{valign=bottom}\xput@text@option@bottomtrue}, - boxrule/.code={\originaltcbset{boxrule=#1}\def\xput@defaultborderwidth{#1}\def\xput@text@option@leftrule{#1}\def\xput@text@option@rightrule{#1}\def\xput@text@option@toprule{#1}\def\xput@text@option@bottomrule{#1}}, - toprule/.code={\originaltcbset{toprule=#1}\def\xput@text@option@toprule{#1}}, - rightrule/.code={\originaltcbset{rightrule=#1}\def\xput@text@option@rightrule{#1}}, - bottomrule/.code={\originaltcbset{bottomrule=#1}\def\xput@text@option@bottomrule{#1}}, - leftrule/.code={\originaltcbset{leftrule=#1}\def\xput@text@option@leftrule{#1}}, - height/.code={\originaltcbset{height=#1}\def\xput@text@option@height{#1}}, - parbox/.is if=xput@text@option@parbox, - breakable/.is if=xput@text@option@breakable, - border radius/.code={\originaltcbset{arc=#1}\ifdim\xput@null=\dimexpr#1\relax\originaltcbset{outer arc=#1}\else\originaltcbset{auto outer arc}\fi\def\xput@defaultborderradius{#1}}, - arc/.forward to=/text/border radius, - border width/.forward to=/text/boxrule, - border color/.code={\originaltcbset{colframe=#1}\def\xput@defaultbordercolor{#1}}, - border opacity/.code={\originaltcbset{opacityframe=#1}\def\xput@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\xput@tcbheight -\newcommand\xput@puttext[5]{ - \ifxput@isbatchmode - \else - \xput@x=\posx{1}{#1}{1}{#2} - \xput@xx=\posx{-1}{#3}{-1}{#4} - \xput@y=\posy{-1}{#3} - \xput@yy=\posy{1}{#1} - - \xput@xx=\dimexpr\xput@xx+\xput@text@option@rightrule\relax - \xput@x=\dimexpr\xput@x-\xput@text@option@leftrule\relax - \xput@yy=\dimexpr\xput@yy+\xput@text@option@toprule\relax - \xput@y=\dimexpr\xput@y-\xput@text@option@bottomrule\relax - - \width=\dimexpr(\xput@xx - \xput@x)\relax - \height=\dimexpr(\xput@yy - \xput@y)\relax - \xput@textboxwidth=\dimexpr(\xput@xx - \xput@x)\relax - \xput@textboxheight=\dimexpr(\xput@yy - \xput@y)\relax - - \ifdefined\xput@text@option@height - \ifdim\xput@text@option@height=\height - \else - \xput@tcbheight=\dimexpr\xput@text@option@height\ifdefined\xput@text@option@toprule+\xput@text@option@toprule\else\ifdefined\xput@defaultborderwidth+\xput@defaultborderwidth\fi\fi\ifdefined\xput@text@option@bottomrule+\xput@text@option@bottomrule\else\ifdefined\xput@defaultborderwidth+\xput@defaultborderwidth\fi\fi\relax - \originaltcbset{height=\xput@tcbheight} - \fi - \else - \fi - - \xput@checkvisibility - \ifxput@isvisible - \xput@checkside{1} - \ifxput@text@option@parbox - \ifdim\xput@textboxheight<\xput@null - \xput@yy=\dimexpr\xput@yy-\xput@textboxheight\relax - \xput@textboxheight=\dimexpr-1\xput@textboxheight\relax - \fi - \put(\xput@dimentonumber{\xput@x},\xput@dimentonumber{\xput@yy}){% - \parbox[t][\xput@textboxheight][\ifxput@text@option@center c\else\ifxput@text@option@bottom b\else t\fi\fi]{\xput@textboxwidth}{\vskip \xput@null - \color{\xput@text@option@color}% - #5% - } - } - \else - \ifdim\xput@text@option@bottomrule<\xput@text@option@toprule - \def\xput@text@minvborderwidth{\xput@text@option@bottomrule} - \def\xput@text@maxvborderwidth{\xput@text@option@toprule} - \else - \def\xput@text@minvborderwidth{\xput@text@option@toprule} - \def\xput@text@maxvborderwidth{\xput@text@option@bottomrule} - \fi - \ifdim\xput@text@option@leftrule<\xput@text@option@rightrule - \def\xput@text@minhborderwidth{\xput@text@option@leftrule} - \def\xput@text@maxhborderwidth{\xput@text@option@rightrule} - \else - \def\xput@text@minhborderwidth{\xput@text@option@rightrule} - \def\xput@text@maxhborderwidth{\xput@text@option@leftrule} - \fi - \ifdim\xput@text@minvborderwidth<\xput@text@minhborderwidth - \def\xput@text@minborderwidth{\xput@text@minvborderwidth} - \def\xput@text@maxborderwidth{\xput@text@maxhborderwidth} - \else - \def\xput@text@minborderwidth{\xput@text@minhborderwidth} - \def\xput@text@maxborderwidth{\xput@text@maxvborderwidth} - \fi - \ifdim\xput@text@maxborderwidth=\xput@null - \originaltcbset{opacityframe=0} - \fi - - \ifxput@text@option@breakable - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @offsetx\endcsname{\xput@text@option@leftrule} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @offsety\endcsname{\xput@text@option@bottomrule} - \else - \def\xput@text@option@name{xput@unbreakable} - \fi - \ifcsname xput@textarray@\xput@text@option@name @index\endcsname - \global\expandafter\csname xput@textarray@\xput@text@option@name @index\endcsname 0 \relax% - \boxarrayclear[\xput@text@option@name] - \else - \global\expandafter\newcount\csname xput@textarray@\xput@text@option@name @index\endcsname% - \newboxarray{\xput@text@option@name} - \fi - \put(0,0){ - \ifxput@text@option@breakable% - \begin{tcolorbox}[ - standard jigsaw, - width=\width, - enforce breakable, - break at=\height, - height fixed for=all, - reset box array=\xput@text@option@name, - store to box array=\xput@text@option@name, - ]% - #5 - \end{tcolorbox}% - \else% - \begin{tcolorbox}[ - standard jigsaw, - width=\width, - reset box array=\xput@text@option@name, - store to box array=\xput@text@option@name, - ]% - #5 - \end{tcolorbox}% - \fi% - } - \global\expandafter\advance\csname xput@textarray@\xput@text@option@name @index\endcsname by 1% - - \boxarraygetheight[\xput@text@option@name]{\xput@text@height}{1} - \ifxput@text@option@bottom - \xput@yy=\dimexpr\xput@yy-(\xput@textboxheight-\xput@text@height)\relax - \else - \ifxput@text@option@center - \xput@yy=\dimexpr\xput@yy-(\xput@textboxheight-\xput@text@height)/2\relax - \fi - \fi - \xput@textboxheight=\xput@text@height - \xput@y=\dimexpr\xput@yy-\xput@textboxheight\relax - - % draw shadow - \xput@ifshadow{ - \ifdefined\xput@defaultborderradius - \ifdim\xput@defaultborderradius=0pt - \xput@frameshadowradius=0pt - \else - \xput@frameshadowradius=\dimexpr\xput@defaultborderradius+\xput@text@minborderwidth\relax - \fi - \else - \xput@frameshadowradius=0pt - \fi - - \def\xput@frameshadowoffsetx{0pt} - \def\xput@frameshadowoffsety{0pt} - - \def\xput@frameshadowwidth{\dimexpr\width+10cm\relax} - \def\xput@frameshadowheight{\dimexpr\xput@textboxheight+10cm\relax} - \def\xput@frameshadowframewidth{\width} - \def\xput@frameshadowframeheight{\xput@textboxheight} - \def\xput@frameshadowborder{\dimexpr5cm\relax} - \ifxput@text@option@breakable - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @shadowsize\endcsname{\xput@defaultshadowsize} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @shadowcolor\endcsname{\xput@defaultshadowcolor} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @shadowopacity\endcsname{\xput@defaultshadowopacity} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @shadowxshift\endcsname{\xput@defaultshadowxshift} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @shadowyshift\endcsname{\xput@defaultshadowyshift} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @frameshadowwidth\endcsname{\the\xput@frameshadowwidth} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @frameshadowheight\endcsname{\the\xput@frameshadowheight} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @frameshadowframewidth\endcsname{\the\xput@frameshadowframewidth} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @frameshadowframeheight\endcsname{\the\xput@frameshadowframeheight} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @frameshadowborder\endcsname{\the\xput@frameshadowborder} - \expandafter\xdef\csname xput@textarray@\xput@text@option@name @frameshadowradius\endcsname{\the\xput@frameshadowradius} - \fi - \xput@drawshadow - } - - \put(\xput@dimentonumber{\xput@x},\xput@dimentonumber{\xput@y}){% - \consumeboxarray[\xput@text@option@name]{\the\csname xput@textarray@\xput@text@option@name @index\endcsname}% - } - \fi - \xput@checkside{-1} - \fi - \fi -} -\newcommand\xput@putusetext[5][default]{ - \ifxput@isbatchmode - \else - \xput@x=\posx{1}{#2}{1}{#3} - \xput@xx=\posx{-1}{#4}{-1}{#5} - \xput@y=\posy{-1}{#4} - \xput@yy=\posy{1}{#2} - \width=\dimexpr(\xput@xx - \xput@x)\relax - \height=\dimexpr(\xput@yy - \xput@y)\relax - \xput@textboxwidth=\dimexpr(\xput@xx - \xput@x)\relax - \xput@textboxheight=\dimexpr(\xput@yy - \xput@y)\relax - - \xput@checkvisibility - \ifxput@isvisible - \ifcsname xput@textarray@#1@index\endcsname - \global\expandafter\advance\csname xput@textarray@#1@index\endcsname by 1% - - \xput@y=\dimexpr\xput@yy-\xput@textboxheight\relax - - \ifcsname xput@textarray@#1@shadowsize\endcsname - \def\xput@frameshadowoffsetx{\expandafter\csname xput@textarray@#1@offsetx\endcsname} - \def\xput@frameshadowoffsety{\expandafter\csname xput@textarray@#1@offsety\endcsname} - - \def\xput@frameshadowwidth{\dimexpr\expandafter\csname xput@textarray@#1@frameshadowwidth\endcsname\relax} - \def\xput@frameshadowheight{\dimexpr\expandafter\csname xput@textarray@#1@frameshadowheight\endcsname\relax} - \def\xput@frameshadowframewidth{\dimexpr\expandafter\csname xput@textarray@#1@frameshadowframewidth\endcsname\relax} - \def\xput@frameshadowframeheight{\dimexpr\expandafter\csname xput@textarray@#1@frameshadowframeheight\endcsname\relax} - \def\xput@frameshadowborder{\dimexpr\expandafter\csname xput@textarray@#1@frameshadowborder\endcsname\relax} - \def\xput@frameshadowradius{\dimexpr\expandafter\csname xput@textarray@#1@frameshadowradius\endcsname\relax} - - \def\xput@defaultshadowsize{\expandafter\csname xput@textarray@#1@shadowsize\endcsname} - \def\xput@defaultshadowcolor{\expandafter\csname xput@textarray@#1@shadowcolor\endcsname} - \def\xput@defaultshadowopacity{\expandafter\csname xput@textarray@#1@shadowopacity\endcsname} - \def\xput@defaultshadowxshift{\dimexpr\expandafter\csname xput@textarray@#1@shadowxshift\endcsname\relax} - \def\xput@defaultshadowyshift{\dimexpr\expandafter\csname xput@textarray@#1@shadowyshift\endcsname\relax} - - \xput@drawshadow - \fi - - \xput@checkside{1} - \put(\xput@dimentonumber{\xput@x-\expandafter\csname xput@textarray@#1@offsetx\endcsname},\xput@dimentonumber{\xput@y-\expandafter\csname xput@textarray@#1@offsety\endcsname}){% - \consumeboxarray[#1]{\the\csname xput@textarray@#1@index\endcsname}% - } - \xput@checkside{-1} - \else - \xput@errmsg@undefined{breakable text}{#1} - \fi - \fi - \fi -} - -% xput -\newcommand\xput@putxput[6][0]{ - \xput@x=\posx{1}{#2}{1}{#3} - \xput@xx=\posx{-1}{#4}{-1}{#5} - \xput@y=\posy{-1}{#4} - \xput@yy=\posy{1}{#2} - - \xput@checkvisibility - \ifxput@isvisible - \ifnum#1=1 - \xput@snapsafezonehorizontal - \xput@snapsafezonevertical - \fi - - \width=\dimexpr(\xput@xx - \xput@x)\relax - \height=\dimexpr(\xput@yy - \xput@y)\relax - - \put(\xput@dimentonumber{\xput@x},\xput@dimentonumber{\xput@y}){% - \ifx\xput@pageoptioncolor\xput@emptystring - \color{\xputoptions@color}% - \else - \color{\xput@pageoptioncolor}% - \fi - #6 - } - \fi -} - -% tikzgraphic -\newcommand\xput@puttikz[6][0]{ - \ifxput@isbatchmode - \else - \xput@putxput[#1]{#2}{#3}{#4}{#5}{% - \begin{tikzpicture} - \pgflowlevelsynccm - #6 - \end{tikzpicture} - } - \fi -} - -% border -\def\xput@defaultborderwidth{0pt} -\def\xput@defaultborderradius{0pt} -\def\xput@defaultbordercolor{black} -\def\xput@defaultborderopacity{1} -\pgfkeysdef{/defaultborder/name}{ - \ifcsname xput@border@#1\endcsname - \csname xput@border@#1\endcsname{} - \else - \pgfkeys{defaultborder,opacity=1,width=0pt,color=black,radius=0pt} - \xput@errmsg@undefined{border}{#1} - \fi -} -\newcommand\newborder[2]{ - \expandafter\newcommand\csname xput@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=\xput@defaultborderradius, - width/.store in=\xput@defaultborderwidth, - color/.store in=\xput@defaultbordercolor, - opacity/.store in=\xput@defaultborderopacity, -} -\newcommand\setborder[2][]{ - \ifxput@placeholdermode - \ifnum\xput@contentcounter<\xput@placeholdercounter - \xput@border{#1}{#2} - \fi - \else - \xput@border{#1}{#2} - \fi -} -\def\noborder{\setborder{}} -\newcommand\xput@border[2]{ - \pgfkeys{defaultborder,width=0pt,color=black,opacity=1,radius=0pt,#1} - \ifcsname xput@border@#2\endcsname - \csname xput@border@#2\endcsname{#1} - \fi -} - -% shadow -\def\xput@defaultshadowsize{0} -\def\xput@defaultshadowopacity{0.4} -\def\xput@defaultshadowcolor{black} -\def\xput@defaultshadowxshift{0pt} -\def\xput@defaultshadowyshift{0pt} -\pgfkeysdef{/defaultshadow/name}{ - \ifcsname xput@shadow@#1\endcsname - \csname xput@shadow@#1\endcsname{} - \else - \pgfkeys{defaultshadow,opacity=0.4,size=0,color=black,xshift=0pt,yshift=0pt} - \xput@errmsg@undefined{shadow}{#1} - \fi -} -\newcommand\newshadow[2]{ - \expandafter\newcommand\csname xput@shadow@#1\endcsname[1]{% - \pgfkeys{defaultshadow,opacity=0.4,size=0,color=black,xshift=0pt,yshift=0pt,#2,##1} - }% -} -\pgfkeys{ - /defaultshadow/.is family, - /defaultshadow, - size/.store in=\xput@defaultshadowsize, - color/.store in=\xput@defaultshadowcolor, - opacity/.store in=\xput@defaultshadowopacity, - xshift/.store in=\xput@defaultshadowxshift, - yshift/.store in=\xput@defaultshadowyshift, -} -\newcommand\setshadow[2][]{ - \ifxput@placeholdermode - \ifnum\xput@contentcounter<\xput@placeholdercounter - \xput@shadow{#1}{#2} - \fi - \else - \xput@shadow{#1}{#2} - \fi -} -\def\noshadow{\setshadow{}} -\newcommand\xput@shadow[2]{ - \pgfkeys{defaultshadow,size=0pt,color=black,opacity=1,xshift=0pt,yshift=0pt,#1} - \ifcsname xput@shadow@#2\endcsname - \csname xput@shadow@#2\endcsname{#1} - \fi -} -\newcommand\xput@ifshadow[1]{ - \ifdim\dimexpr\xput@defaultshadowsize pt\relax>\xput@null - #1 - \else - \ifdim\xput@defaultshadowxshift>\xput@null - #1 - \else - \ifdim\xput@defaultshadowyshift>\xput@null - #1 - \fi - \fi - \fi -} -\def\xput@drawshadow{ - \xput@ifshadow{ - \xdef\xput@shadowid{shadow-\xput@defaultshadowsize-\xput@defaultshadowcolor-\xput@defaultshadowopacity-\the\numexpr\xput@frameshadowwidth\relax-\the\numexpr\xput@frameshadowheight\relax-\the\numexpr\xput@frameshadowradius\relax-\the\numexpr\xput@frameshadowborder\relax} - \IfFileExists{./cache/\xput@shadowid/s.pdf}{ - \put(\xput@dimentonumber{\dimexpr\xput@x-5cm-\xput@frameshadowoffsetx+\xput@defaultshadowxshift\relax},\xput@dimentonumber{\dimexpr\xput@y-5cm-\xput@frameshadowoffsety-\xput@defaultshadowyshift\relax}){% - \includegraphics[width=\xput@frameshadowwidth]{cache/\xput@shadowid/s.pdf} - } - }{ - \xput@makeshadow{\xput@shadowid} - \IfFileExists{./cache/\xput@shadowid/s.pdf}{ - \put(\xput@dimentonumber{\dimexpr\xput@x-5cm-\xput@frameshadowoffsetx+\xput@defaultshadowxshift\relax},\xput@dimentonumber{\dimexpr\xput@y-5cm-\xput@frameshadowoffsety-\xput@defaultshadowyshift\relax}){% - \includegraphics[width=\xput@frameshadowwidth]{cache/\xput@shadowid/s.pdf} - } - }{ - \ifx\xput@processresult\xput@ok - \ClassError{Xput}{Unexpected error. Shadow not created}{File `cache/\xput@shadowid/s.pdf' not\MessageBreak found.\MessageBreak\MessageBreak\@ehc} - \fi - } - } - } -} - -% layout helper -\def\xput@gridcolor{green!90!black} -\def\xput@gridopacity{0.8} -\def\xput@gutteropacity{0.2} -\newdimen\xput@gridx -\newdimen\xput@gridxx -\newdimen\xput@gridy -\newdimen\xput@gridyy -\newcommand\xput@putgrid{ - \ifxput@isemptypage - \else - \ifxput@grid - \xput@gridx=\posx{1}{1}{1}{0} - \xput@gridxx=\posx{-1}{1}{-1}{\xput@get{1C}} - \xput@gridy=\posy{1}{0} - \xput@gridyy=\posy{-1}{\xput@rowscount} - \put(0,0){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \foreach \rowI in {1,...,\xput@rowscount} { - \ifnum\rowI<\xput@rowscount - \ifdim\xput@gutter=\xput@null - \draw[line cap=rect,line width=0.2mm,draw=\xput@gridcolor,opacity=\xput@gridopacity] ({\xput@gridx+0.05mm},{\posy{0}{\rowI}}) -- ({\xput@gridxx-0.05mm},{\posy{0}{\rowI}});% - \else - \draw[line cap=rect,line width=\xput@gutter,draw=\xput@gridcolor,opacity=\xput@gutteropacity] ({\xput@gridx+\xput@gutter/2},{\posy{0}{\rowI}}) -- ({\xput@gridxx-\xput@gutter/2},{\posy{0}{\rowI}});% - \fi - \fi - \ifnum\numexpr\xput@get{\rowI C} - 1\relax>0 - \foreach \cellI in {1,...,\numexpr\xput@get{\rowI C} - 1\relax} { - \ifdim\xput@gutter=\xput@null - \draw[line width=0.2mm,draw=\xput@gridcolor,opacity=\xput@gridopacity] ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{1}{\numexpr\rowI - 1\relax}}) -- ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{-1}{\rowI}});% - \else - \draw[line width=\xput@gutter,draw=\xput@gridcolor,opacity=\xput@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=\xput@gridcolor,opacity=\xput@gridopacity] ({\xput@gridx},{\xput@gridy}) rectangle ({\xput@gridxx},{\xput@gridyy});% - \ifdim\xput@gridoffsethorizontal>0.001pt - \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\xput@gridcolor,opacity=\xput@gridopacity] (\xput@gridx,\xput@gridy) -- (\xput@gridx-\xput@gridoffsethorizontal,\xput@gridy) -- (\xput@gridx-\xput@gridoffsethorizontal,\xput@gridyy) -- (\xput@gridx,\xput@gridyy);% - \fi - \ifdim\xput@gridoffsethorizontaln>0.001pt - \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\xput@gridcolor,opacity=\xput@gridopacity] (\xput@gridxx,\xput@gridy) -- (\xput@gridxx+\xput@gridoffsethorizontaln,\xput@gridy) -- (\xput@gridxx+\xput@gridoffsethorizontaln,\xput@gridyy) -- (\xput@gridxx,\xput@gridyy);% - \fi - \ifdim\xput@gridoffsetvertical>0.001pt - \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\xput@gridcolor,opacity=\xput@gridopacity] (\xput@gridx,\xput@gridy) -- (\xput@gridx,\xput@gridy+\xput@gridoffsetvertical)-- (\xput@gridxx,\xput@gridy+\xput@gridoffsetvertical) -- (\xput@gridxx,\xput@gridy);% - \fi - \ifdim\xput@gridoffsetverticaln>0.001pt - \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\xput@gridcolor,opacity=\xput@gridopacity] ({\xput@gridx},{\xput@gridyy}) --({\xput@gridx},{\xput@gridyy-\xput@gridoffsetverticaln}) -- ({\xput@gridxx},{\xput@gridyy-\xput@gridoffsetverticaln}) -- ({\xput@gridxx},{\xput@gridyy});% - \fi - \end{tikzpicture}% - } - \fi - \fi -} -\def\xput@bleedcolor{red} -\def\xput@bleedopacity{0.5} -\newif\ifxput@putbleed -\newcommand\xput@checkbleed{ - \ifdim\xput@topbleed>\xput@null - \xput@putbleedtrue - \else - \ifdim\xput@bottombleed>\xput@null - \xput@putbleedtrue - \else - \ifdim\xput@innerbleed>\xput@null - \xput@putbleedtrue - \else - \ifdim\xput@outerbleed>\xput@null - \xput@putbleedtrue - \else - \xput@putbleedfalse - \fi - \fi - \fi - \fi -} -\newcommand\xput@putbleed{ - \ifxput@isemptypage - \else - \ifxput@safezone - \xput@checkbleed - \ifxput@putbleed - \put(0,0){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \ifxput@frontcover - \ifxput@backcover - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@pageheight + \xput@bottombleed) rectangle ++(\xput@pagewidth + \xput@outerbleed,\xput@topbleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, 0) rectangle ++(\xput@pagewidth + \xput@outerbleed,\xput@bottombleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@bottombleed) rectangle ++(\xput@outerbleed,\xput@pageheight);% - \else - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth + \xput@outerbleed, \xput@pageheight + \xput@bottombleed) rectangle ++(\xput@pagewidth + \xput@outerbleed + \spinewidth,\xput@topbleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth + \xput@outerbleed, 0) rectangle ++(\xput@pagewidth + \xput@outerbleed + \spinewidth,\xput@bottombleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth * 2 + \xput@outerbleed + \spinewidth, \xput@bottombleed) rectangle ++(\xput@outerbleed,\xput@pageheight);% - \fi - \else - \ifxput@fanfold - \ifxput@isdoublepage - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@pageheight + \xput@bottombleed) rectangle ++(\xput@pagewidth * 2 + \xput@outerbleed * 2,\xput@topbleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, 0) rectangle ++(\xput@pagewidth * 2 + \xput@outerbleed * 2,\xput@bottombleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@bottombleed) rectangle ++(\xput@outerbleed,\xput@pageheight);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth * 2 + \xput@outerbleed, \xput@bottombleed) rectangle ++(\xput@outerbleed,\xput@pageheight);% - \else - \ifxput@leftpage - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@pageheight + \xput@bottombleed) rectangle ++(\xput@pagewidth + \xput@outerbleed,\xput@topbleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, 0) rectangle ++(\xput@pagewidth + \xput@outerbleed,\xput@bottombleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@bottombleed) rectangle ++(\xput@outerbleed,\xput@pageheight);% - \else - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth + \xput@outerbleed, \xput@pageheight + \xput@bottombleed) rectangle ++(\xput@pagewidth + \xput@outerbleed,\xput@topbleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth + \xput@outerbleed, 0) rectangle ++(\xput@pagewidth + \xput@outerbleed,\xput@bottombleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth * 2 + \xput@outerbleed, \xput@bottombleed) rectangle ++(\xput@outerbleed,\xput@pageheight);% - \fi - \fi - \else - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@pageheight + \xput@bottombleed) rectangle ++(\xput@pagewidth + \xput@leftbleed + \xput@rightbleed,\xput@topbleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, 0) rectangle ++(\xput@pagewidth + \xput@leftbleed + \xput@rightbleed,\xput@bottombleed);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (0, \xput@bottombleed) rectangle ++(\xput@leftbleed,\xput@pageheight);% - \fill[\xput@bleedcolor,opacity=\xput@bleedopacity] (\xput@pagewidth + \xput@leftbleed, \xput@bottombleed) rectangle ++(\xput@rightbleed,\xput@pageheight);% - \fi - \fi - \end{tikzpicture}% - } - \fi - \fi - \fi -} -\newdimen\xput@cuttingmarka -\newdimen\xput@cuttingmarkb -\xput@cuttingmarka=-3mm -\xput@cuttingmarkb=-1mm -\newcommand\xput@putcuttingmarks{ - \ifxput@isemptypage - \ifxput@fanfold - \xput@cuttingmarksvisibletrue - \fi - \else - \xput@cuttingmarksvisibletrue - \fi - \ifxput@cuttingmarksvisible - \ifxput@cuttingmarks - \ifxput@safezone - \else - \xput@checkbleed - \ifxput@putbleed - \put(0,0){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \ifxput@frontcover - \ifxput@backcover - \draw[\xput@pageoptioncolor,line width=0.15mm](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor,line width=0.15mm](\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed + \xput@pageheight);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed + \xput@pageheight - \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed + \xput@pageheight - \xput@cuttingmarkb);% - \else - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed + \spinewidth - \xput@cuttingmarka, \xput@bottombleed) -- (2\xput@pagewidth + \xput@outerbleed + \spinewidth - \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed + \spinewidth, \xput@bottombleed + \xput@cuttingmarka) -- (2\xput@pagewidth + \xput@outerbleed + \spinewidth, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed + \spinewidth - \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (2\xput@pagewidth + \xput@outerbleed + \spinewidth - \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed + \spinewidth, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (2\xput@pagewidth + \xput@outerbleed + \spinewidth, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - \fi - \else - \ifxput@fanfold - \ifxput@isdoublepage - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarka, \xput@bottombleed) -- (2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - \else - \ifxput@leftpage - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - \else - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarka, \xput@bottombleed) -- (2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (2\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (2\xput@pagewidth + \xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - \fi - \fi - \else - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](\xput@outerbleed + \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (\xput@outerbleed + \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](\xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (\xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarka, \xput@bottombleed) -- (\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarkb, \xput@bottombleed);% - \draw[\xput@pageoptioncolor](\xput@pagewidth + \xput@outerbleed, \xput@bottombleed + \xput@cuttingmarka) -- (\xput@pagewidth + \xput@outerbleed, \xput@bottombleed + \xput@cuttingmarkb);% - \draw[\xput@pageoptioncolor](\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarka, \xput@bottombleed+\xput@pageheight) -- (\xput@pagewidth + \xput@outerbleed - \xput@cuttingmarkb, \xput@bottombleed+\xput@pageheight);% - \draw[\xput@pageoptioncolor](\xput@pagewidth + \xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarka) -- (\xput@pagewidth + \xput@outerbleed, \xput@bottombleed+\xput@pageheight - \xput@cuttingmarkb);% - \fi - \fi - \end{tikzpicture}% - } - \fi - \fi - \fi - \fi -} -\def\xput@safetymargincolor{pink} -\def\xput@safetymarginopacity{0.8} -\newif\ifxput@putsafezone -\newcommand\xput@checksafezone{ - \ifdim\xput@topsafetymargin>\xput@null - \xput@putsafezonetrue - \else - \ifdim\xput@bottomsafetymargin>\xput@null - \xput@putsafezonetrue - \else - \ifdim\xput@innersafetymargin>\xput@null - \xput@putsafezonetrue - \else - \ifdim\xput@outersafetymargin>\xput@null - \xput@putsafezonetrue - \else - \xput@putsafezonefalse - \fi - \fi - \fi - \fi -} -\newcommand\xput@putsafezone{ - \ifxput@isemptypage - \else - \ifxput@safezone - \xput@checksafezone - \ifxput@putsafezone - \put(0,0){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \ifxput@frontcover - \ifxput@backcover - \else - \draw[line cap=rect,line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@pagewidth + \xput@outerbleed,0.05mm) -- (\xput@pagewidth + \xput@outerbleed,\paperheight-0.05mm);% - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@outersafetymargin + \xput@outerbleed,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\xput@pagewidth + \xput@outerbleed - \xput@innersafetymargin,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \draw[line cap=rect,line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@pagewidth + \xput@outerbleed + \spinewidth,0.05mm) -- (\xput@pagewidth + \xput@outerbleed + \spinewidth,\paperheight-0.05mm);% - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@pagewidth + \xput@outerbleed + \spinewidth + \xput@innersafetymargin,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\paperwidth - \xput@outerbleed - \xput@outersafetymargin,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \fi - \else - \ifxput@fanfold - \ifxput@isdoublepage - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@outersafetymargin + \xput@outerbleed,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\paperwidth / 2 - \xput@innersafetymargin,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\paperwidth / 2 + \xput@innersafetymargin,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\paperwidth - \xput@outerbleed - \xput@outersafetymargin,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \else - \ifxput@leftpage - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@outersafetymargin + \xput@outerbleed,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\paperwidth / 2 - \xput@innersafetymargin,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \else - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\paperwidth / 2 + \xput@innersafetymargin,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\paperwidth - \xput@outerbleed - \xput@outersafetymargin,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \fi - \fi - \draw[line cap=rect,line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\paperwidth / 2,0.05mm) -- (\paperwidth / 2,\paperheight-0.05mm);% - \else - \draw[line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@leftsafetymargin + \xput@leftbleed,\xput@bottomsafetymargin + \xput@bottombleed) rectangle (\paperwidth - \xput@rightsafetymargin - \xput@rightbleed,\paperheight - \xput@topsafetymargin - \xput@topbleed);% - \fi - \fi - \end{tikzpicture}% - } - \else - \ifxput@frontcover - \ifxput@backcover - \else - \put(0,0){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \draw[line cap=rect,line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@pagewidth + \xput@outerbleed,0.05mm) -- (\xput@pagewidth + \xput@outerbleed,\paperheight-0.05mm);% - \draw[line cap=rect,line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\xput@pagewidth + \xput@outerbleed + \spinewidth,0.05mm) -- (\xput@pagewidth + \xput@outerbleed + \spinewidth,\paperheight-0.05mm);% - \end{tikzpicture}% - } - \fi - \else - \ifxput@fanfold - \put(0,0){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \draw[line cap=rect,line width=0.1mm,draw=\xput@safetymargincolor,opacity=\xput@safetymarginopacity] (\paperwidth / 2,0.05mm) -- (\paperwidth / 2,\paperheight-0.05mm);% - \end{tikzpicture}% - } - \fi - \fi - \fi - \fi - \fi -} -\def\xput@graphpapercolor{gray!70} -\def\xput@graphpaperopacity{0.2} -\newcommand\xput@calcgraphpaperx{ - \ifdim\xput@graphpaperx>\xput@null - \xput@graphpaperx=\dimexpr\xput@graphpaperx-\xput@graphpapersnap\relax - \xput@calcgraphpaperx - \fi -} -\newcommand\xput@calcgraphpapery{ - \ifdim\xput@graphpapery>\xput@null - \xput@graphpapery=\dimexpr\xput@graphpapery-\xput@graphpapersnap\relax - \xput@calcgraphpapery - \fi -} -\newcommand\xput@calcgraphpaperoffset{ - \xput@graphpaperoffset=\xput@null - - \xput@graphpaperoffsetsnap \numexpr\number\xput@pagewidth/\xput@graphpapersnap\relax - \xput@graphpaperoffset=\dimexpr\xput@pagewidth-\xput@graphpapersnap*\xput@graphpaperoffsetsnap\relax - \ifdim\xput@graphpaperoffset<\xput@null - \xput@graphpaperoffset=\dimexpr\xput@graphpaperoffset+\xput@graphpapersnap\relax - \fi - \xput@graphpaperx=\dimexpr\xput@graphpaperx-\xput@graphpaperoffset\relax -} -\newcount\xput@graphpaperoffsetsnap -\newcommand\xput@putgraphpaper{ - \ifxput@graphpaper - \xput@graphpapery=\xput@bottombleed - \xput@calcgraphpapery - \xput@graphpaperx=\xput@leftbleed - \xput@calcgraphpaperx - - \ifxput@frontcover - \ifxput@backcover - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\xput@pagewidth-\xput@graphpaperx+\xput@outerbleed,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \else - \xput@graphpaperx=\dimexpr\xput@pagewidth+\xput@outerbleed\relax - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\spinewidth,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \xput@graphpaperx=\dimexpr\xput@pagewidth+\xput@outerbleed+\spinewidth\relax - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\xput@pagewidth+\xput@outerbleed,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \fi - \else - \ifxput@fanfold - \ifxput@isdoublepage - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\paperwidth-\xput@graphpaperx,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \else - \ifxput@leftpage - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\xput@pagewidth-\xput@graphpaperx+\xput@outerbleed,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \else - \xput@graphpaperx=\dimexpr\xput@pagewidth+\xput@outerbleed\relax - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\xput@pagewidth+\xput@outerbleed,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \fi - \fi - \else - \ifxput@isdoublepage - \ifxput@rightpage - \xput@calcgraphpaperoffset - \fi - \fi - - \put(\xput@dimentonumber{\xput@graphpaperx},\xput@dimentonumber{\xput@graphpapery}){% - \begin{tikzpicture}% - \pgflowlevelsynccm% - - \foreach \xput@graphpaperconfigitem in \xput@graphpaperconfig { - \draw[line cap=rect,line width=0.05mm,step=\xput@graphpaperconfigitem,\xput@graphpapercolor,opacity=\xput@graphpaperopacity] (0pt,0pt) grid ++(\paperwidth-\xput@graphpaperx,\paperheight-\xput@graphpapery);% - } - \end{tikzpicture}% - } - \fi - \fi - \fi -} - -% pages -\newif\ifxput@isbeforepage -\def\xput@currentbeforepage{} -\newcommand\setbeforepage[1]{ - \ifxput@ispage - \def\xput@currentbeforepage{#1} - \else - \global\def\xput@currentbeforepage{#1} - \fi -} -\def\nobeforepage{\setbeforepage{}} -\newcommand\newbeforepage[2]{ - \expandafter\newcommand\csname xput@before@#1\endcsname{% - \begingroup% - #2 - \endgroup% - }% -} -\newcommand\xput@putbeforepage{ - \ifx\xput@pagegraphic\xput@emptystring - \else - \xput@putpagegraphic - \fi - \ifx\xput@currentbeforepage\xput@emptystring - \else - \ifcsname xput@before@\xput@currentbeforepage\endcsname% - \xput@isbeforepagetrue - \csname xput@before@\xput@currentbeforepage\endcsname - \xput@isbeforepagefalse - \else - \xput@errmsg@undefined{before page}{\xput@currentbeforepage} - \fi - \fi - \xput@resetautogrid -} -\newcommand\xput@beforepage{ - \xput@closerows - \ifx\xput@pagecolor\xput@emptystring - \else - \begingroup - \margin=\xput@null - \topmargin=\xput@null - \bottommargin=\xput@null - \innermargin=\xput@null - \outermargin=\xput@null - \setgrid{{{1}}} - \ifx\xput@pagecolormodel\xput@emptystring - \else - \definecolor{tmpcolor}{\xput@pagecolormodel}{\xput@pagecolor} - \setpagecolor{tmpcolor} - \fi - \xput@putxput[1]{0}{0}{1}{1}{% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \fill[\xput@pagecolor] (0,0) rectangle ++(\width,\height); - \end{tikzpicture}% - } - \endgroup - \fi - - \ifxput@isemptypage - \else - \xput@putgraphpaper - \fi -} -\newcommand\xput@setuppage{ - \global\gutter=\gutter - \global\margin=\margin - \global\innermargin=\innermargin - \global\outermargin=\outermargin - \global\bottommargin=\bottommargin - \global\topmargin=\topmargin - \ifxput@grid\global\xput@gridtrue\else\global\xput@gridfalse\fi - \ifxput@graphpaper\global\xput@graphpapertrue\else\global\xput@graphpaperfalse\fi - \ifxput@safezone\global\xput@safezonetrue\else\global\xput@safezonefalse\fi - \ifxput@placeholder\global\xput@placeholdertrue\else\global\xput@placeholderfalse\fi - \global\let\xput@defaultborderwidth\xput@defaultborderwidth - \global\let\xput@defaultborderradius\xput@defaultborderradius - \global\let\xput@defaultborderopacity\xput@defaultborderopacity - \global\let\xput@defaultbordercolor\xput@defaultbordercolor - \global\let\xput@defaultshadowsize\xput@defaultshadowsize - \global\let\xput@defaultshadowopacity\xput@defaultshadowopacity - \global\let\xput@defaultshadowcolor\xput@defaultshadowcolor - \global\let\xput@defaultshadowxshift\xput@defaultshadowxshift - \global\let\xput@defaultshadowyshift\xput@defaultshadowyshift - \global\let\xput@pagegraphicoptionscale\xput@pagegraphicoptionscale - \global\let\xput@pagegraphicoptionvpos\xput@pagegraphicoptionvpos - \global\let\xput@pagegraphicoptionhpos\xput@pagegraphicoptionhpos - \global\let\xput@pagegraphicoptionunsharp\xput@pagegraphicoptionunsharp - - \xput@pagewidth=\pagewidth - \xput@pageheight=\pageheight - \xput@outerbleed=\ifdim\outerbleed=\xput@undefdim\bleed\else\outerbleed\fi - \xput@innerbleed=\ifdim\innerbleed=\xput@undefdim\bleed\else\innerbleed\fi - \xput@topbleed=\ifdim\topbleed=\xput@undefdim\bleed\else\topbleed\fi - \xput@bottombleed=\ifdim\bottombleed=\xput@undefdim\bleed\else\bottombleed\fi - \xput@outersafetymargin=\ifdim\outersafetymargin=\xput@undefdim\safetymargin\else\outersafetymargin\fi - \xput@innersafetymargin=\ifdim\innersafetymargin=\xput@undefdim\safetymargin\else\innersafetymargin\fi - \xput@topsafetymargin=\ifdim\topsafetymargin=\xput@undefdim\safetymargin\else\topsafetymargin\fi - \xput@bottomsafetymargin=\ifdim\bottomsafetymargin=\xput@undefdim\safetymargin\else\bottomsafetymargin\fi - - \ifxput@haspages - \ifxput@twoside - \ifxput@leftpage - \global\xput@rightpagetrue - \global\xput@leftpagefalse - \else - \global\xput@rightpagefalse - \global\xput@leftpagetrue - \fi - \fi - \else - \xput@isinitgridfalse - \ifxput@beginleft - \global\xput@leftpagetrue - \fi - \ifxput@beginright - \global\xput@beginleftfalse - \global\xput@beginrightfalse - \global\xput@leftpagefalse - \fi - \ifxput@leftpage - \xput@haspagestrue - \global\xput@leftpagetrue - \global\xput@rightpagefalse - \else - \ifxput@fanfold - \global\xput@rightpagefalse - \global\xput@leftpagetrue - \setcounter{page}{0} - \xput@emptypage - \global\xput@rightpagetrue - \global\xput@leftpagefalse - \global\xput@haslastemptypagetrue - \else - \ifxput@hascover - \ifxput@fillpages - \ifxput@twoside - \global\xput@rightpagefalse - \global\xput@leftpagetrue - \setcounter{page}{0} - \xput@emptypage - \global\xput@rightpagetrue - \global\xput@leftpagefalse - \global\xput@haslastemptypagetrue - \else - \xput@haspagestrue - \global\xput@rightpagetrue - \fi - \else - \xput@haspagestrue - \global\xput@rightpagetrue - \fi - \else - \xput@haspagestrue - \global\xput@rightpagetrue - \fi - \fi - \fi - \fi -} -\newcommand\xput@setupcover{ - \xput@isinitgridfalse - \xput@pagewidth=\ifdim\coverwidth=\xput@undefdim\pagewidth\else\coverwidth\fi - \xput@pageheight=\ifdim\coverheight=\xput@undefdim\pageheight\else\coverheight\fi - \xput@outerbleed=\ifdim\coverouterbleed=\xput@undefdim\ifdim\coverbleed=\xput@undefdim\ifdim\outerbleed=\xput@undefdim\bleed\else\outerbleed\fi\else\coverbleed\fi\else\coverouterbleed\fi - \xput@innerbleed=\ifdim\coverinnerbleed=\xput@undefdim\ifdim\coverbleed=\xput@undefdim\ifdim\innerbleed=\xput@undefdim\bleed\else\innerbleed\fi\else\coverbleed\fi\else\coverinnerbleed\fi - \xput@topbleed=\ifdim\covertopbleed=\xput@undefdim\ifdim\coverbleed=\xput@undefdim\ifdim\topbleed=\xput@undefdim\bleed\else\topbleed\fi\else\coverbleed\fi\else\covertopbleed\fi - \xput@bottombleed=\ifdim\coverbottombleed=\xput@undefdim\ifdim\coverbleed=\xput@undefdim\ifdim\bottombleed=\xput@undefdim\bleed\else\bottombleed\fi\else\coverbleed\fi\else\coverbottombleed\fi - \xput@outersafetymargin=\ifdim\coveroutersafetymargin=\xput@undefdim\ifdim\coversafetymargin=\xput@undefdim\ifdim\outersafetymargin=\xput@undefdim\safetymargin\else\outersafetymargin\fi\else\coversafetymargin\fi\else\coveroutersafetymargin\fi - \xput@innersafetymargin=\ifdim\coverinnersafetymargin=\xput@undefdim\ifdim\coversafetymargin=\xput@undefdim\ifdim\innersafetymargin=\xput@undefdim\safetymargin\else\innersafetymargin\fi\else\coversafetymargin\fi\else\coverinnersafetymargin\fi - \xput@topsafetymargin=\ifdim\covertopsafetymargin=\xput@undefdim\ifdim\coversafetymargin=\xput@undefdim\ifdim\topsafetymargin=\xput@undefdim\safetymargin\else\topsafetymargin\fi\else\coversafetymargin\fi\else\covertopsafetymargin\fi - \xput@bottomsafetymargin=\ifdim\coverbottomsafetymargin=\xput@undefdim\ifdim\coversafetymargin=\xput@undefdim\ifdim\bottomsafetymargin=\xput@undefdim\safetymargin\else\bottomsafetymargin\fi\else\coversafetymargin\fi\else\coverbottomsafetymargin\fi -} -\newif\ifxput@pageoptiondouble -\newif\ifxput@pageoptionfrontcover -\newif\ifxput@pageoptionbackcover -\newdimen\xput@backcovergutter -\newdimen\xput@backcovermargin -\newdimen\xput@backcovertopmargin -\newdimen\xput@backcoverbottommargin -\newdimen\xput@backcoverinnermargin -\newdimen\xput@backcoveroutermargin -\pgfkeys{ - /pagetype/.is family, - /pagetype, - double/.is if=xput@pageoptiondouble, - front cover/.is if=xput@pageoptionfrontcover, - back cover/.is if=xput@pageoptionbackcover, - .unknown/.code= -} -\pgfkeys{ - /page/.is family, - /page, - gutter/.store in=\xput@pageoptiongutter, - gutter=\gutter, - margin/.store in=\xput@pageoptionmargin, - margin=\margin, - top margin/.store in=\xput@pageoptiontopmargin, - top margin=\topmargin, - bottom margin/.store in=\xput@pageoptionbottommargin, - bottom margin=\bottommargin, - inner margin/.store in=\xput@pageoptioninnermargin, - inner margin=\innermargin, - outer margin/.store in=\xput@pageoptionoutermargin, - outer margin=\outermargin, - vpos/.code={\xput@gridvalign{#1}}, - hpos/.code={\xput@gridhalign{#1}}, - color/.store in=\xput@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=\xput@backcoveroptiongutter, - gutter=\gutter, - margin/.store in=\xput@backcoveroptionmargin, - margin=\margin, - top margin/.store in=\xput@backcoveroptiontopmargin, - top margin=\topmargin, - bottom margin/.store in=\xput@backcoveroptionbottommargin, - bottom margin=\bottommargin, - inner margin/.store in=\xput@backcoveroptioninnermargin, - inner margin=\innermargin, - outer margin/.store in=\xput@backcoveroptionoutermargin, - outer margin=\outermargin, - vpos/.store in=\xput@backcoveroptionvpos, - vpos=0.5, - hpos/.store in=\xput@backcoveroptionhpos, - hpos=0.5, - color/.store in=\xput@backcoveroptioncolor, - color=, - page color/.store in=\xput@backcoveroptionpagecolor, - page color=, - page graphic/.store in=\xput@backcoveroptionpagegraphic, - page graphic=, - before page/.code={}, - double/.code={}, - front cover/.code={}, - back cover/.code={}, -} -\newcommand\xput@applypageoptions[1]{ - \pgfkeys{/page,#1} - \gutter=\xput@pageoptiongutter - \margin=\xput@pageoptionmargin - \topmargin=\xput@pageoptiontopmargin - \bottommargin=\xput@pageoptionbottommargin - \innermargin=\xput@pageoptioninnermargin - \outermargin=\xput@pageoptionoutermargin - - \xput@beforepage -} -\newcommand\xput@applybackcoveroptions{ - \xput@gridvalign{\xput@backcoveroptionvpos} - \xput@gridhalign{\xput@backcoveroptionhpos} - - \ifx\xput@backcoveroptionpagecolor\xput@emptystring - \def\xput@pagecolor{} - \else - \setpagecolor{\xput@backcoveroptionpagecolor} - \fi - \ifx\xput@backcoveroptionpagegraphic\xput@emptystring - \def\xput@pagegraphic{} - \else - \def\xput@pagegraphic{\xput@backcoveroptionpagegraphicfile} - \def\xput@pagegraphicoptionscale{\xput@backcoveroptionpagegraphicscale} - \def\xput@pagegraphicoptionvpos{\xput@backcoveroptionpagegraphicvpos} - \def\xput@pagegraphicoptionhpos{\xput@backcoveroptionpagegraphichpos} - \def\xput@pagegraphicoptionunsharp{\xput@backcoveroptionpagegraphicunsharp} - \fi - \ifx\xput@backcoveroptioncolor\xput@emptystring - \def\xput@pageoptioncolor{\xput@backcovercolor} - \else - \def\xput@pageoptioncolor{\xput@backcoveroptioncolor} - \fi - \setborder[radius=\xput@backcoveroptionborderradius,width=\xput@backcoveroptionborderwidth,opacity=\xput@backcoveroptionborderopacity,color=\xput@backcoveroptionbordercolor]{} - \setshadow[size=\xput@backcoveroptionshadowsize,opacity=\xput@backcoveroptionshadowopacity,color=\xput@backcoveroptionshadowcolor,xshift=\xput@backcoveroptionshadowxshift,yshift=\xput@backcoveroptionshadowyshift]{} - \gutter=\xput@backcovergutter - \margin=\xput@backcovermargin - \topmargin=\xput@backcovertopmargin - \bottommargin=\xput@backcoverbottommargin - \innermargin=\xput@backcoverinnermargin - \outermargin=\xput@backcoveroutermargin - - \ifdefined\xput@backcovergrid - \xput@backcovergrid - \fi - - \xput@beforepage -} -\newcommand\page[2][]{ - \xput@pageoptiondoublefalse - \xput@pageoptionfrontcoverfalse - \xput@pageoptionbackcoverfalse - \pgfkeys{/pagetype,#1} - \ifxput@pageoptiondouble - \xput@doublepage[#1]{#2} - \else - \ifxput@pageoptionfrontcover - \xput@frontcover[#1]{#2} - \else - \ifxput@pageoptionbackcover - \xput@backcover[#1]{#2} - \else - \xput@standardpage[#1]{#2} - \fi - \fi - \fi -} -\newcommand\xput@standardpage[2][]{ - \global\xput@placeholdercounter=0\relax - \ifxput@backcover - \xput@setupcover - \else - \xput@setuppage - \fi - \xput@ispagetrue - \global\xput@topmargintmp=\topmargin\global\topmargin=\xput@undefdim - \xput@setdimensions - \ifxput@fanfold - \ifxput@leftpage - \global\xput@isfanfoldopentrue - \begin{picture}(\xput@dimentonumber\paperwidth,\xput@dimentonumber\paperheight) - \fi - \else - \begin{picture}(\xput@dimentonumber\paperwidth,\xput@dimentonumber\paperheight) - \fi - \topmargin=\xput@topmargintmp - \begingroup - \ifxput@fanfold - \ifxput@pagenumberinghaschanged - \global\xput@pagenumberinghaschangedfalse - \else - \ifxput@rightpage - \global\addtocounter{page}{1} - \fi - \fi - \fi - \ifxput@backcover - \xput@applybackcoveroptions - \else - \xput@applypageoptions{#1} - \fi - \xput@putbeforepage - #2 - \xput@putbleed - \xput@putgrid - \xput@putcuttingmarks - \xput@putsafezone - \endgroup - \ifxput@fanfold - \ifxput@rightpage - \ifnum\xput@tocfixpageoffset=-1 - \addtocounter{page}{-1} - \fi - \global\xput@isfanfoldopenfalse - \end{picture} - \ifnum\xput@tocfixpageoffset=-1 - \addtocounter{page}{1} - \global\def\xput@tocfixpageoffset{0} - \fi - \fi - \else - \end{picture} - \fi - \global\topmargin=\xput@topmargintmp - \xput@ispagefalse -} -\newcommand\xput@doublepage[2][]{ - \global\xput@placeholdercounter=0\relax - \ifxput@twoside - \ifxput@haspages - \ifxput@leftpage\page{}\fi - \else - \ifxput@beginleft - \ifxput@beginright - \page{} - \fi - \else - \page{} - \fi - \fi - \xput@ispagetrue - \global\xput@isdoublepagetrue - \xput@setuppage - \global\xput@topmargintmp=\topmargin\global\topmargin=\xput@undefdim - \xput@setdimensions - \begin{picture}(\xput@dimentonumber\paperwidth,\xput@dimentonumber\paperheight) - \topmargin=\xput@topmargintmp - \xput@applypageoptions{#1} - \xput@putbeforepage - #2 - \xput@putbleed - \xput@putgrid - \xput@putcuttingmarks - \xput@putsafezone - \ifnum\xput@tocfixpageoffset=1 - \addtocounter{page}{1} - \fi - \end{picture} - - \xput@setuppage - \ifxput@fanfold - \ifnum\xput@tocfixpageoffset=1 - \global\def\xput@tocfixpageoffset{0} - \else - \addtocounter{page}{1} - \fi - \else - \xput@setdimensions - \begin{picture}(\xput@dimentonumber\paperwidth,\xput@dimentonumber\paperheight) - \topmargin=\xput@topmargintmp - \xput@applypageoptions{#1} - \global\xput@placeholdercounter=0\relax - \xput@putbeforepage - #2 - \xput@putbleed - \xput@putgrid - \xput@putcuttingmarks - \xput@putsafezone - \end{picture} - \fi - \global\xput@isdoublepagefalse - \global\topmargin=\xput@topmargintmp - \xput@ispagefalse - \else - \xput@standardpage[#1]{#2} - \fi -} -\newcommand\xput@backcover[2][]{ - \ifxput@hascover - \xput@errmsg@backcoverdefinedafterfrontcover - \else - \ifdefined\xput@tmpgrid - \let\xput@backcovergrid\xput@tmpgrid - \fi - \edef\xput@backcovercolor{\xputoptions@color} - \pgfkeys{/backcover,#1} - \xput@backcovergutter=\xput@backcoveroptiongutter - \xput@backcovermargin=\xput@backcoveroptionmargin - \xput@backcovertopmargin=\xput@backcoveroptiontopmargin - \xput@backcoverbottommargin=\xput@backcoveroptionbottommargin - \xput@backcoverinnermargin=\xput@backcoveroptioninnermargin - \xput@backcoveroutermargin=\xput@backcoveroptionoutermargin - \ifx\xput@backcoveroptionpagecolor\xput@emptystring - \let\xput@backcoveroptionpagecolor\xput@pagecolor - \fi - \ifx\xput@backcoveroptionpagegraphic\xput@emptystring - \let\xput@backcoveroptionpagegraphic\xput@pagegraphic - \let\xput@backcoveroptionpagegraphicfile\xput@pagegraphic - \ifdefined\xput@pagegraphicoptionscale - \let\xput@backcoveroptionpagegraphicscale\xput@pagegraphicoptionscale - \fi - \ifdefined\xput@pagegraphicoptionhpos - \let\xput@backcoveroptionpagegraphichpos\xput@pagegraphicoptionhpos - \fi - \ifdefined\xput@pagegraphicoptionvpos - \let\xput@backcoveroptionpagegraphicvpos\xput@pagegraphicoptionvpos - \fi - \ifdefined\xput@pagegraphicoptionunsharp - \let\xput@backcoveroptionpagegraphicunsharp\xput@pagegraphicoptionunsharp - \fi - \else - \ifcsname xput@graphic@\xput@backcoveroptionpagegraphic\endcsname - \csname xput@graphic@\xput@backcoveroptionpagegraphic\endcsname[1]{} - \else - \def\xput@backcoveroptionpagegraphicfile{\xput@backcoveroptionpagegraphic} - \def\xput@backcoveroptionpagegraphicscale{1} - \def\xput@backcoveroptionpagegraphichpos{0.5} - \def\xput@backcoveroptionpagegraphicvpos{0.5} - \def\xput@backcoveroptionpagegraphicunsharp{\xput@unsharp} - \fi - \fi - \let\xput@backcoveroptionborderradius\xput@defaultborderradius - \let\xput@backcoveroptionborderopacity\xput@defaultborderopacity - \let\xput@backcoveroptionborderwidth\xput@defaultborderwidth - \let\xput@backcoveroptionbordercolor\xput@defaultbordercolor - \let\xput@backcoveroptionshadowopacity\xput@defaultshadowopacity - \let\xput@backcoveroptionshadowsize\xput@defaultshadowsize - \let\xput@backcoveroptionshadowcolor\xput@defaultshadowcolor - \let\xput@backcoveroptionshadowxshift\xput@defaultshadowxshift - \let\xput@backcoveroptionshadowyshift\xput@defaultshadowyshift - - \ifdefined\xput@currentcontents - \let\xput@backcovercontent\xput@currentcontents - \def\xput@backcovertemplate{#2} - \else - \def\xput@backcovercontent{#2} - \fi - \fi -} -\newcommand\xput@frontcover[2][]{ - \xput@ispagetrue - \xput@hascovertrue - \xput@setupcover - \setcounter{page}{0} - \global\xput@topmargintmp=\topmargin\global\topmargin=\xput@undefdim - \ifxput@cover - \global\xput@frontcovertrue - \xput@setdimensions - \begin{picture}(\xput@dimentonumber\paperwidth,\xput@dimentonumber\paperheight) - \topmargin=\xput@topmargintmp - \global\xput@backcovertrue - \def\xput@currentbeforepage{} - \begingroup - \ifdefined\xput@backcovercontent - \xput@applybackcoveroptions - \xput@putbeforepage - \ifdefined\xput@backcovertemplate - \xput@placeholdercounter 0\relax% - \let\xput@currentcontents\xput@backcovercontent% - \xput@backcovertemplate% - \else - \xput@backcovercontent - \fi - \fi - \xput@putbleed - \xput@putgrid - \xput@putcuttingmarks - \xput@putsafezone - \endgroup - \global\xput@backcoverfalse - \xput@resetautogrid - \xput@gridoffsetx=\dimexpr(\xput@pagewidth + \xput@outerbleed - \xput@innerbleed + \spinewidth)\relax - \xput@applypageoptions{#1} - \global\xput@placeholdercounter=0\relax - \xput@putbeforepage - #2 - \xput@putbleed - \xput@putgrid - \xput@putcuttingmarks - \xput@putsafezone - \end{picture} - \global\xput@frontcoverfalse - \let\xput@backcovercontent\undefined - \else - \xput@setdimensions - \begin{picture}(\xput@dimentonumber\paperwidth,\xput@dimentonumber\paperheight) - \topmargin=\xput@topmargintmp - \xput@applypageoptions{#1} - \def\xput@currentbeforepage{} - \xput@putbeforepage - #2 - \xput@putbleed - \xput@putgrid - \xput@putcuttingmarks - \xput@putsafezone - \end{picture} - \fi - \global\topmargin=\xput@topmargintmp - \xput@ispagefalse -} -\newcommand\leftpage[1]{ - \ifxput@leftpage - \xput@renderleftpage{#1} - \else - \ifxput@fanfold - \ifxput@isdoublepage - \xput@renderleftpage{#1} - \fi - \else - \ifxput@isdoublepage - \xput@renderleftpage[1]{#1} - \fi - \fi - \fi -} -\newcommand\rightpage[1]{ - \ifxput@rightpage - \xput@renderrightpage{#1} - \else - \ifxput@fanfold - \ifxput@isdoublepage - \xput@renderrightpage{#1} - \fi - \else - \ifxput@isdoublepage - \xput@renderrightpage[1]{#1} - \fi - \fi - \fi -} -\newcommand\xput@renderleftpage[2][0]{ - \begingroup - \xput@isdoublepagefalse - \xput@setdimensions - \xput@closerows - \ifnum#1=1 - \xput@drymodetrue - \fi - #2 - \ifnum#1=1 - \xput@drymodefalse - \else - \ifxput@isbeforepage - \else - \xput@putgrid - \fi - \fi - \endgroup -} -\newif\ifxput@wasdoublepage -\newif\ifxput@renderrightpage -\newcommand\xput@renderrightpage[2][0]{ - \xput@renderrightpagetrue - \begingroup - \ifxput@fanfold - \ifxput@isdoublepage - \xput@wasdoublepagetrue - \addtocounter{page}{1} - \fi - \fi - \xput@isdoublepagefalse - \xput@rightpagetrue - \xput@leftpagefalse - \xput@setdimensions - \xput@closerows - \ifnum#1=1 - \xput@drymodetrue - \fi - #2 - \ifnum#1=1 - \xput@drymodefalse - \else - \ifxput@isbeforepage - \else - \xput@putgrid - \fi - \fi - \ifxput@fanfold - \ifxput@wasdoublepage - \xput@wasdoublepagefalse - \addtocounter{page}{-1} - \fi - \fi - \endgroup - \xput@renderrightpagefalse -} - -% templates -\newif\ifxput@drymode -\newif\ifxput@placeholderoptions -\newif\ifxput@placeholdermode -\newif\ifxput@isplace -\xput@placeholderoptionstrue -\newcount\xput@placeholdercounter -\newcount\xput@contentcounter -\newdimen\xput@placeholderfontsize -\def\xput@frameyymax{0} -\def\xput@framexxmax{0} -\def\xput@setgridframe#1 #2 #3 #4 \\{ - \def\xput@framey{#1} - \def\xput@framex{#2} - \def\xput@frameyy{#3} - \def\xput@framexx{#4} -} -\def\xput@setdefaultgridframe#1 #2 #3 #4 \\{ - \def\xput@defaultframey{#1} - \def\xput@defaultframex{#2} - \def\xput@defaultframeyy{#3} - \def\xput@defaultframexx{#4} - \xput@setgridframe #1 #2 #3 #4 \\ -} -\def\xput@resetgridframe{ - \global\xput@isplacefalse - \pgfmathceil{\xput@frameyy} - \pgfmathint{\pgfmathresult} - \global\edef\xput@currentrow{\pgfmathresult} - \ifnum\xput@currentrow>\xput@frameyymax - \global\edef\xput@frameyymax{\xput@currentrow} - \global\def\xput@framexxmax{0} - \fi - \pgfmathceil{\xput@framexx} - \pgfmathint{\pgfmathresult} - \global\edef\xput@currentcell{\pgfmathresult} - \ifnum\xput@currentcell>\xput@framexxmax - \global\edef\xput@framexxmax{\xput@currentcell} - \fi - - \pgfmathqparse{\xput@get{\xput@frameyymax C}pt>\xput@framexxmax pt} - \ifnum\pgfmathresult=1 - \global\edef\xput@framey{\the\numexpr\xput@frameyymax-1\relax} - \global\edef\xput@framex{\xput@framexxmax} - \global\edef\xput@frameyy{\xput@frameyymax} - \global\edef\xput@framexx{\the\numexpr\xput@framexxmax+1\relax} - \else - \ifnum\xput@frameyymax=\xput@rowscount - \global\xput@gridfulltrue - \else - \global\edef\xput@framey{\xput@frameyymax} - \global\edef\xput@framex{0} - \global\edef\xput@frameyy{\the\numexpr\xput@frameyymax+1\relax} - \global\edef\xput@framexx{1} - \fi - \fi -} -\newcommand\placeholder[2][0]{ - \begingroup - \ifx#2\xput@emptystring - \else - \global\xput@isplacetrue - \fi - \def\xput@currentplaceholder{} - \ifnum#1=0 - \global\advance \xput@placeholdercounter by 1 - \else - \global\xput@placeholdercounter=#1 - \fi - \xput@contentcounter 0\relax - \def\xput@tmp{\xput@currentcontents} - \xput@placeholdermode{1} - \xput@tmp - \xput@placeholdermode{0} - \xput@putcontent{ - \ifx\xput@emptystring\xput@currentplaceholder - \ifxput@placeholder - \ifx#2\xput@emptystring - \else - \xput@setgridframe #2 \\ - \fi - \xput@textboxheight=\dimexpr(\posy{1}{\xput@framey} - \posy{-1}{\xput@frameyy})\relax - \xput@textboxwidth=\dimexpr(\posx{-1}{\xput@frameyy}{-1}{\xput@framexx} - \posx{1}{\xput@framey}{1}{\xput@framex})\relax - \ifdim\xput@textboxwidth>\xput@textboxheight - \xput@placeholderfontsize=0.5\xput@textboxheight - \else - \xput@placeholderfontsize=0.5\xput@textboxwidth - \fi - \ifdim\xput@placeholderfontsize>1000pt - \xput@placeholderfontsize=1000pt - \fi - \xput@putxput{\xput@framey}{\xput@framex}{\xput@frameyy}{\xput@framexx}{% - \begin{tikzpicture}% - \pgflowlevelsynccm% - \filldraw[line width=0.1mm,draw=cyan!60,fill=cyan!30,opacity=0.3] (0,0) rectangle ++(\width,\height); - \ifdim\xput@placeholderfontsize>5mm - \node[opacity=0.3] at (0.5\width,0.5\height){ - \fontsize{\xput@placeholderfontsize}{0pt}\selectfont\textcolor{cyan!60}{\textbf{\the\xput@placeholdercounter}} - }; - \fi - \end{tikzpicture}% - } - \xput@resetgridframe - \else - \ifx\xput@currentplaceholdertype\xput@placeholdertypeusetext - \ifx#2\xput@emptystring - \else - \xput@setgridframe #2 \\ - \fi - \ifx\xput@currentplaceholderoptions\xput@emptystring - \xput@placeholderoptionsfalse - \csname \xput@currentplaceholdertype\endcsname - \xput@placeholderoptionstrue - \else - \csname \xput@currentplaceholdertype\endcsname[\xput@currentplaceholderoptions] - \fi - \fi - \fi - \else - \ifx#2\xput@emptystring - \else - \xput@setgridframe #2 \\ - \fi - \ifx\xput@currentplaceholderoptions\xput@emptystring - \xput@placeholderoptionsfalse - \csname \xput@currentplaceholdertype\endcsname{\xput@currentplaceholder} - \xput@placeholderoptionstrue - \else - \csname \xput@currentplaceholdertype\endcsname[\xput@currentplaceholderoptions]{\xput@currentplaceholder} - \fi - \fi - } - \endgroup -} -\newcommand\xput@graphic[2][]{ - \advance \xput@contentcounter by 1 - \ifnum\xput@contentcounter=\xput@placeholdercounter - \def\xput@currentplaceholdertype{graphic} - \def\xput@currentplaceholderoptions{} - \pgfkeys{graphic,file={#2},scale=1,vpos=0.5,hpos=0.5,unsharp=\xput@unsharp,#1} - \ifcsname xput@graphic@#2\endcsname% - \csname xput@graphic@#2\endcsname[2]{#1}% - \fi - - \edef\xput@currentplaceholder{\xput@graphicoptionfile} - \fi -} -\newcommand\xput@xput[1]{ - \advance \xput@contentcounter by 1 - \ifnum\xput@contentcounter=\xput@placeholdercounter - \def\xput@currentplaceholdertype{xput} - \def\xput@currentplaceholderoptions{} - \def\xput@currentplaceholder{#1} - \fi -} -\newcommand\xput@tikz[1]{ - \advance \xput@contentcounter by 1 - \ifnum\xput@contentcounter=\xput@placeholdercounter - \def\xput@currentplaceholdertype{tikzgraphic} - \def\xput@currentplaceholderoptions{} - \def\xput@currentplaceholder{#1} - \fi -} -\newcommand\xput@text[2][]{ - \advance \xput@contentcounter by 1 - \ifnum\xput@contentcounter=\xput@placeholdercounter - \def\xput@currentplaceholdertype{text} - \def\xput@currentplaceholderoptions{} - \edef\xput@currentborderradius{\xput@defaultborderradius} - \edef\xput@currentborderwidth{\xput@defaultborderwidth} - \edef\xput@currentbordercolor{\xput@defaultbordercolor} - \edef\xput@currentborderopacity{\xput@defaultborderopacity} - \pgfkeys{text,name=default,color=\ifx\xput@pageoptioncolor\xput@emptystring\xputoptions@color\else\xput@pageoptioncolor\fi,border radius=\xput@currentborderradius,border width=\xput@currentborderwidth,border color=\xput@currentbordercolor,border opacity=\xput@currentborderopacity,#1} - \def\xput@currentplaceholder{#2} - \fi -} -\def\xput@placeholdertypeusetext{usetext} -\newcommand\xput@usetext[1][default]{ - \advance \xput@contentcounter by 1 - \ifnum\xput@contentcounter=\xput@placeholdercounter - \edef\xput@currentplaceholdertype{\xput@placeholdertypeusetext} - \def\xput@currentplaceholderoptions{#1} - \def\xput@currentplaceholder{} - \fi -} -\newcommand\xput@rendertemplate[3]{ - \xput@placeholdercounter 0\relax% - \global\def\xput@currentcontents{#2}% - \page[#1]{% - #3 - }% -} -\newcommand{\newtemplate}[3][]{ - \expandafter\newcommand\csname xput@template@#2\endcsname[2][]{% - \xput@rendertemplate{#1,##1}{##2}{#3} - }% -} -\newcommand\template[3][]{ - \ifcsname xput@template@#2\endcsname% - \else% - \newtemplate[]{#2}{ - \xput@gridsc{#2} - } - \fi - \csname xput@template@#2\endcsname[#1]{ - #3 - } -} -\newcommand\graphic{} -\newcommand\xput{} -\newcommand\tikzgraphic{} -\newcommand\usetext{} -\newcommand\text{} -\newcommand\xput@putcontent[1]{ - \ifxput@drymode - \else - \begingroup - \ifxput@gridfull - \ifxput@isplace#1\fi - \else - #1 - \fi - \endgroup - \fi -} -\newcommand\xput@placeholdermode[1]{ - \xput@placeholdermodefalse - \ifnum#1=0% - \renewcommand\graphic[2][]{% - \xput@putcontent{% - \def\xput@graphicoptionfile{##2} - \ifxput@placeholderoptions - \ifcsname xput@graphic@##2\endcsname% - \csname xput@graphic@##2\endcsname[2]{##1} - \else - \pgfkeys{graphic,file={##2},scale=1,vpos=0.5,hpos=0.5,unsharp=\xput@unsharp,##1} - \fi - \fi - \xput@putgraphic{\xput@framey}{\xput@framex}{\xput@frameyy}{\xput@framexx}{\xput@graphicoptionfile}% - \xput@resetgridframe - } - }% - \renewcommand\xput[1]{% - \xput@putcontent{% - \xput@putxput{\xput@framey}{\xput@framex}{\xput@frameyy}{\xput@framexx}{##1}% - \xput@resetgridframe - } - }% - \renewcommand\tikzgraphic[1]{% - \xput@putcontent{% - \xput@puttikz{\xput@framey}{\xput@framex}{\xput@frameyy}{\xput@framexx}{##1}% - \xput@resetgridframe - } - }% - \renewcommand\usetext[1][default]{% - \xput@putcontent{% - \xput@putusetext[##1]{\xput@framey}{\xput@framex}{\xput@frameyy}{\xput@framexx}% - \xput@resetgridframe - } - }% - \renewcommand\text[2][]{% - \xput@putcontent{% - \edef\xput@currentborderradius{\xput@defaultborderradius} - \edef\xput@currentborderwidth{\xput@defaultborderwidth} - \edef\xput@currentbordercolor{\xput@defaultbordercolor} - \edef\xput@currentborderopacity{\xput@defaultborderopacity} - \pgfkeys{text,name=default,color=\ifx\xput@pageoptioncolor\xput@emptystring\xputoptions@color\else\xput@pageoptioncolor\fi,border radius=\xput@currentborderradius,border width=\xput@currentborderwidth,border color=\xput@currentbordercolor,border opacity=\xput@currentborderopacity,##1} - \xput@puttext{\xput@framey}{\xput@framex}{\xput@frameyy}{\xput@framexx}{##2}% - \xput@resetgridframe - } - }% - \else% - \xput@placeholdermodetrue - \renewcommand\graphic[2][]{% - \xput@graphic[##1]{##2}% - }% - \renewcommand\xput[1]{% - \xput@xput{##1}% - }% - \renewcommand\tikzgraphic[1]{% - \xput@tikz{##1}% - }% - \renewcommand\usetext[1][default]{% - \xput@usetext[##1]% - } - \renewcommand\text[2][]{% - \xput@text[##1]{##2}% - } - \fi% -} -\xput@placeholdermode{0} -\newcommand\place[1]{ - \xput@isplacetrue - \xput@setgridframe #1 \\ -} -\xput@setdefaultgridframe 0 0 1 1 \\ - -\newcommand\xput@emptypage{ - \global\xput@isemptypagetrue - \page[before page=,page graphic=,page color=]{} - \global\xput@isemptypagefalse -} - -\def\xput@tocfixpageoffset{0} -\def\sectioncalled{ - \ifxput@fanfold - \ifxput@isdoublepage - \ifxput@rightpage - \global\def\xput@tocfixpageoffset{1} - \fi - \else - \ifxput@renderrightpage - \global\def\xput@tocfixpageoffset{1} - \else - \ifxput@leftpage - \global\def\xput@tocfixpageoffset{-1} - \fi - \fi - \fi - \fi -} - -\def\xput@turbojobname{xputturbobatchoptimizexyz} -\edef\xput@turbojobname{\meaning\xput@turbojobname} -\edef\xput@jobname{\jobname} -\edef\xput@jobname{\meaning\xput@jobname} -\AtBeginDocument{ - % fanfold toc partial fix - \let\xput@originalsection\section - \def\xput@nextsection#1{ - \sectioncalled - \@ifnextchar\bgroup{\xput@originalsection*}{\xput@originalsection{#1}}} - \let\section\xput@nextsection - \let\xput@originalsubsection\subsection - \def\xput@nextsubsection#1{ - \sectioncalled - \@ifnextchar\bgroup{\xput@originalsubsection*}{\xput@originalsubsection{#1}}} - \let\subsection\xput@nextsubsection - - \ifxput@optimize - \else - \xput@isturbomodefalse - \fi - - \ifxput@isturbomode - \ifx\xput@jobname\xput@turbojobname - \xput@placeholderfalse - \xput@gridfalse - \xput@safezonefalse - \xput@cuttingmarksfalse - \xput@fillpagesfalse - \xput@graphpaperfalse - \xput@preflightfalse - - \xput@isbatchmodetrue - \else - \xput@start - \fi - \else - \ifxput@import - \xput@start - \fi - \fi - - \ifx\xput@pagegraphic\xput@emptystring - \ifx\xputoptions@pagegraphic\xput@emptystring - \else - \setpagegraphic{\xputoptions@pagegraphic} - \fi - \fi - - \ifxput@fanfold - \xput@covertrue - \fi -} -\AtEndDocument{ - \ifxput@beginleft - \ifxput@leftpage - \xput@hasoddnumberofpagestrue - \fi - \else - \ifxput@rightpage - \xput@hasoddnumberofpagestrue - \fi - \fi - \ifdefined\xput@backcovercontent - \xput@haspagestrue - \ifxput@haslastemptypage - \ifxput@hasoddnumberofpages - \xput@standardpage[before page=]{} - \xput@emptypage - \else - \xput@emptypage - \fi - \else - \ifxput@twoside - \ifxput@hasoddnumberofpages\page[before page=]{}\fi - \fi - \fi - \xput@leftpagetrue - \xput@rightpagefalse - \xput@backcovertrue - \ifdefined\xput@backcovertemplate - \xput@placeholdercounter 0\relax% - \let\xput@currentcontents\xput@backcovercontent% - \def\xput@currentbeforepage{} - \xput@standardpage{% - \xput@backcovertemplate% - }% - \else - \def\xput@currentbeforepage{} - \xput@standardpage{ - \xput@backcovercontent - } - \fi - \else - \ifxput@haspages - \ifxput@fanfold - \ifxput@isfanfoldopen - \ifxput@beginleft - \xput@standardpage[before page=]{} - \else - \xput@emptypage - \fi - \else - \ifxput@beginleft - \else - \xput@standardpage[before page=]{} - \xput@emptypage - \fi - \fi - \else - \ifxput@haslastemptypage - \ifxput@hasoddnumberofpages - \xput@standardpage[before page=]{} - \xput@emptypage - \else - \xput@emptypage - \fi - \else - \ifxput@twoside - \ifxput@hasoddnumberofpages\xput@standardpage[before page=]{}\fi - \fi - \fi - \fi - \fi - \fi - \ifxput@isbatchmode - \xput@batchoptimize - \fi -} - -% scripts -\newread\xput@scriptresult -\def\xput@batchlist{} -\def\xput@ok{ok} -\def\xput@err@shellaccessforbidden{errorshellaccessforbidden} -\def\xput@err@importdirnotfound{errorimportdirnotfound} -\def\xput@err@noimportdir{errornoimportdir} -\def\xput@err@magicknotinstalled{errormagicknotinstalled} -\def\xput@err@inkscapenotinstalled{errorinkscapenotinstalled} -\newcommand\xput@getppi[1]{ - \immediate\openin\xput@scriptresult={|xputserver getwidth\% "#1"} - \ifeof\xput@scriptresult - \xput@errmsg@shellaccessforbidden{Ppi not calculated} - \else - \endlinechar=-1 - \read\xput@scriptresult to \xput@graphicwidth - \endlinechar=13 - \ifx\xput@graphicwidth\xput@emptystring - \xput@errmsg@shellaccessfailed{Ppi not calculated} - \else - \ifx\xput@graphicwidth\xput@err@magicknotinstalled - \xput@errmsg@magicknotinstalled{Ppi not calculated} - \else - \pgfmathqparse{(\xput@originalgraphicwidth - \xput@cropleft - \xput@cropright) / \xput@originalgraphicwidth * \xput@graphicwidth pt / \the\width * 72.27pt} - - \pgfmathint{\pgfmathresult} - \edef\xput@graphicdensity{\pgfmathresult} - \fi - \fi - \fi - \immediate\closein\xput@scriptresult -} -\newcommand\xput@optimizegraphic[2]{ - \immediate\openin\xput@scriptresult={|xputserver optimize\% "#1#2" \% "\xput@filename" \%\xput@optimizedext\%\the\numexpr\xput@originalgraphicwidth\%\the\numexpr\xput@originalgraphicheight\%\the\numexpr\xput@cropleft\%\the\numexpr\xput@cropright\%\the\numexpr\xput@croptop\%\the\numexpr\xput@cropbottom\%\the\numexpr\xput@density\%\the\numexpr\width\%\the\numexpr\height\%\xput@downsamplethreshold\%\xput@graphicoptionunsharp\%\xput@quality} - \ifeof\xput@scriptresult - \xput@errmsg@shellaccessforbidden{File not optimized} - \else - \endlinechar=-1 - \read\xput@scriptresult to \xput@processresult - \endlinechar=13 - \ifx\xput@processresult\xput@emptystring - \xput@errmsg@shellaccessfailed{File not optimized} - \else - \ifx\xput@processresult\xput@err@magicknotinstalled - \xput@errmsg@magicknotinstalled{File not optimized} - \fi - \fi - \fi - \immediate\closein\xput@scriptresult -} -\newcommand\xput@makeshadow[1]{ - \immediate\openin\xput@scriptresult={|xputserver makeshadow\%#1\%\xput@defaultshadowsize\%\xput@defaultshadowopacity\%\xput@defaultshadowcolor\%\the\xput@frameshadowwidth\%\the\xput@frameshadowheight\%\the\xput@frameshadowframewidth\%\the\xput@frameshadowframeheight\%\the\xput@frameshadowborder\%\the\xput@frameshadowradius} - \ifeof\xput@scriptresult - \edef\xput@processresult{\xput@err@shellaccessforbidden} - \xput@errmsg@shellaccessforbidden{Shadow not created} - \else - \endlinechar=-1 - \read\xput@scriptresult to \xput@processresult - \endlinechar=13 - \ifx\xput@processresult\xput@emptystring - \xput@errmsg@shellaccessfailed{Shadow not created} - \else - \ifx\xput@processresult\xput@err@inkscapenotinstalled - \xput@errmsg@inkscapenotinstalled{Shadow not created} - \else - \fi - \fi - \fi - \immediate\closein\xput@scriptresult -} -\def\xput@start{ - \immediate\openin\xput@scriptresult={|xputserver start\ifxput@import\%import\% "\ifdefined\Ginput@path\Ginput@path\fi" \fi\ifxput@isturbomode\%turbo\% "\jobname" \fi} - \ifeof\xput@scriptresult - \ifxput@import - \xput@errmsg@shellaccessforbidden{Import not working} - \fi - \else - \endlinechar=-1 - \read\xput@scriptresult to \xput@processresult - \endlinechar=13 - \ifx\xput@processresult\xput@emptystring - \ifxput@import - \xput@errmsg@shellaccessfailed{Import not working} - \fi - \else - \ifx\xput@processresult\xput@ok - \else - \ifx\xput@processresult\xput@err@noimportdir - \xput@errmsg@noimportdir - \else - \xput@errmsg@importdirnotfound{\xput@processresult} - \fi - \fi - \fi - \fi - \immediate\closein\xput@scriptresult -} -\newcommand\xput@addtobatchlist[2]{ - \global\edef\xput@batchlist{\xput@batchlist\% "#1#2" \% "\xput@filename" \%\xput@optimizedext\%\the\numexpr\xput@originalgraphicwidth\%\the\numexpr\xput@originalgraphicheight\%\the\numexpr\xput@cropleft\%\the\numexpr\xput@cropright\%\the\numexpr\xput@croptop\%\the\numexpr\xput@cropbottom\%\the\numexpr\xput@density\%\the\numexpr\width\%\the\numexpr\height\%\xput@downsamplethreshold\%\xput@graphicoptionunsharp\%\xput@quality} -} -\newcommand\xput@batchoptimize{ - \immediate\openin\xput@scriptresult={|xputserver batchoptimize\xput@batchlist} - \ifeof\xput@scriptresult - \else - \endlinechar=-1 - \read\xput@scriptresult to \xput@processresult - \endlinechar=13 - \fi - \immediate\closein\xput@scriptresult -} - -% errors -\def\xput@errmsg@undefined#1#2{ - \ifx#2\xput@emptystring - \else - \ClassError{Xput}{Undefined #1 `#2'}{Check the name `#2'.\MessageBreak\MessageBreak\@ehc} - \fi -} -\def\xput@errmsg@backcoverdefinedafterfrontcover{ - \ClassError{Xput}{Back cover needs to be defined before front cover}{Define the back cover before the front cover.\MessageBreak\MessageBreak\@ehc} -} -\def\xput@errmsg@shellaccessforbidden#1{ - \ClassError{Xput}{Shell access forbidden. #1}{Make sure `xputserver' is added to the list of shell escape commands\MessageBreak(shell_escape_commands = xputserver) in your `texmf.cnf'.\MessageBreak\MessageBreak\@ehc} -} -\def\xput@errmsg@shellaccessfailed#1{ - \ifdefined\XeTeXversion - \ClassError{Xput}{Shell access failed. #1}{Make sure the xput `scripts' folder is added to your path.\MessageBreak\MessageBreak\@ehc} - \else - \ClassError{Xput}{Shell access failed. #1}{Make sure the xput `scripts' folder is added to your path.\MessageBreak Shell access does not work in unrestricted mode (--shell-escape).\MessageBreak Make sure `xputserver' is added to the list of shell escape commands\MessageBreak(shell_escape_commands = xputserver) in your `texmf.cnf'.\MessageBreak\MessageBreak\@ehc} - \fi -} -\def\xput@errmsg@inkscapenotinstalled#1{ - \ClassError{Xput}{Inkscape not installed. #1}{Make sure Inkscape is installed.\MessageBreak\MessageBreak\@ehc} -} -\def\xput@errmsg@magicknotinstalled#1{ - \ClassError{Xput}{ImageMagick not installed. #1}{Make sure ImageMagick is installed.\MessageBreak\MessageBreak\@ehc} -} -\def\xput@errmsg@importdirnotfound#1{ - \ClassError{Xput}{Import directory `#1' not found}{Create the directory `#1'.\MessageBreak\MessageBreak\@ehc} -} -\def\xput@errmsg@noimportdir{ - \ClassError{Xput}{Import directory not found}{Create the directory `import' in your working directory\MessageBreak or define the shell variable `XPUT_IMPORT_DIRECTORY'.\MessageBreak\MessageBreak\@ehc} -} -\def\xput@errmsg@lowdensity#1#2#3{ - \ifnum#1=0 - \ClassWarning{Xput}{The file `#2' has a low pixel density of #3 ppi} - \else - \ClassError{Xput}{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 -} diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 5a958bf7d74..af46a00c5e6 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -890,7 +890,7 @@ my @TLP_working = qw( xifthen xii xii-lat xindex xindy-persian xint xintsession xistercian xits xkcdcolors xkeyval xlop xltabular xltxtra xml2pmx xmltex xmpincl xmuthesis xnewcommand - xoptarg xpatch xpeek xpiano xpicture xpinyin xprintlen xpunctuate xput + xoptarg xpatch xpeek xpiano xpicture xpinyin xprintlen xpunctuate xq xsavebox xsim xskak xstring xtab xtuthesis xunicode xurl xwatermark xyling xymtex xypic xypic-tut-pt xytree yafoot yagusylo yaletter yamlvars yannisgr yathesis yax yazd-thesis diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 1c2dbceaca9..d1af9eec770 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -3552,7 +3552,6 @@ $standardttf = '\.ttf|\.TTC'; 'tex4ebook' => '\.lua$', 'texosquery' => '\.jar$', 'tlcockpit' => '\.jar$', - 'xput' => 'xput$', ); diff --git a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc index 5777080645d..4724346299c 100644 --- a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc @@ -236,5 +236,4 @@ depend wheelchart depend worldflags depend xistercian depend xpicture -depend xput depend xypic diff --git a/Master/tlpkg/tlpsrc/xput.tlpsrc b/Master/tlpkg/tlpsrc/xput.tlpsrc deleted file mode 100644 index f7b3a88e919..00000000000 --- a/Master/tlpkg/tlpsrc/xput.tlpsrc +++ /dev/null @@ -1,2 +0,0 @@ -binpattern f bin/${ARCH}/${PKGNAME} -binpattern f bin/${ARCH}/${PKGNAME}server |