From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/gentombow/LICENSE | 27 + macros/latex/contrib/gentombow/Makefile | 36 ++ macros/latex/contrib/gentombow/README.md | 49 ++ macros/latex/contrib/gentombow/bounddvi-en.pdf | Bin 0 -> 43566 bytes macros/latex/contrib/gentombow/bounddvi-en.tex | 135 +++++ macros/latex/contrib/gentombow/bounddvi.pdf | Bin 0 -> 118273 bytes macros/latex/contrib/gentombow/bounddvi.sty | 87 +++ macros/latex/contrib/gentombow/bounddvi.tex | 148 +++++ macros/latex/contrib/gentombow/gentombow-ja.pdf | Bin 0 -> 212291 bytes macros/latex/contrib/gentombow/gentombow-ja.tex | 453 ++++++++++++++ macros/latex/contrib/gentombow/gentombow.pdf | Bin 0 -> 145247 bytes macros/latex/contrib/gentombow/gentombow.sty | 769 ++++++++++++++++++++++++ macros/latex/contrib/gentombow/gentombow.tex | 302 ++++++++++ macros/latex/contrib/gentombow/pxgentombow.pdf | Bin 0 -> 23384 bytes macros/latex/contrib/gentombow/pxgentombow.sty | 16 + macros/latex/contrib/gentombow/pxgentombow.tex | 25 + 16 files changed, 2047 insertions(+) create mode 100644 macros/latex/contrib/gentombow/LICENSE create mode 100644 macros/latex/contrib/gentombow/Makefile create mode 100644 macros/latex/contrib/gentombow/README.md create mode 100644 macros/latex/contrib/gentombow/bounddvi-en.pdf create mode 100644 macros/latex/contrib/gentombow/bounddvi-en.tex create mode 100644 macros/latex/contrib/gentombow/bounddvi.pdf create mode 100644 macros/latex/contrib/gentombow/bounddvi.sty create mode 100644 macros/latex/contrib/gentombow/bounddvi.tex create mode 100644 macros/latex/contrib/gentombow/gentombow-ja.pdf create mode 100644 macros/latex/contrib/gentombow/gentombow-ja.tex create mode 100644 macros/latex/contrib/gentombow/gentombow.pdf create mode 100644 macros/latex/contrib/gentombow/gentombow.sty create mode 100644 macros/latex/contrib/gentombow/gentombow.tex create mode 100644 macros/latex/contrib/gentombow/pxgentombow.pdf create mode 100644 macros/latex/contrib/gentombow/pxgentombow.sty create mode 100644 macros/latex/contrib/gentombow/pxgentombow.tex (limited to 'macros/latex/contrib/gentombow') diff --git a/macros/latex/contrib/gentombow/LICENSE b/macros/latex/contrib/gentombow/LICENSE new file mode 100644 index 0000000000..c463b620a9 --- /dev/null +++ b/macros/latex/contrib/gentombow/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2016-2019 Hironobu Yamashita +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/macros/latex/contrib/gentombow/Makefile b/macros/latex/contrib/gentombow/Makefile new file mode 100644 index 0000000000..f376d1ade0 --- /dev/null +++ b/macros/latex/contrib/gentombow/Makefile @@ -0,0 +1,36 @@ +KANJI = -kanji=utf8 +FONTMAP = -f ipaex.map -f ptex-ipaex.map +TEXMF = $(shell kpsewhich -var-value=TEXMFHOME) + +all: bounddvi.pdf bounddvi-en.pdf \ + gentombow.pdf gentombow-ja.pdf #pxgentombow.pdf + +.SUFFIXES: .tex .dvi .pdf +.tex.dvi: + platex $(KANJI) $< + platex $(KANJI) $< + rm *.aux *.log +.dvi.pdf: + dvipdfmx $(FONTMAP) $< + +bounddvi-en.dvi: bounddvi-en.tex + latex $< + latex $< + rm *.aux *.log +gentombow.pdf: gentombow.tex + pdflatex $< + pdflatex $< + rm *.aux *.log + +.PHONY: install clean +install: + mkdir -p ${TEXMF}/doc/latex/gentombow + cp ./Makefile ${TEXMF}/doc/latex/gentombow/ + cp ./LICENSE ${TEXMF}/doc/latex/gentombow/ + cp ./README.md ${TEXMF}/doc/latex/gentombow/ + cp ./*.pdf ${TEXMF}/doc/latex/gentombow/ + cp ./*.tex ${TEXMF}/doc/latex/gentombow/ + mkdir -p ${TEXMF}/tex/latex/gentombow + cp ./*.sty ${TEXMF}/tex/latex/gentombow/ +clean: + rm -f *.dvi *.pdf diff --git a/macros/latex/contrib/gentombow/README.md b/macros/latex/contrib/gentombow/README.md new file mode 100644 index 0000000000..82fc0584d5 --- /dev/null +++ b/macros/latex/contrib/gentombow/README.md @@ -0,0 +1,49 @@ +# gentombow + +This bundle provides a LaTeX package for generating Japanese-style +crop marks (called 'tombow' in Japanese) for practical use in +self-publishing. + +## Bundle contents + +- gentombow.sty: + Generate crop marks (called 'tombow' in Japanese) for + practical use in self-publishing. + It provides the core 'tombow' feature if not available. +- pxgentombow.sty: + (Superseded by gentombow.sty; for compatibility only.) +- bounddvi.sty: + Set papersize special to DVI file. + Can be used on LaTeX/pLaTeX/upLaTeX (with DVI output mode) + with dvips or dvipdfmx drivers. + Old version (v6.0) of this package, written by Koichi INOUE + in 2004, is available at + https://www.ma.ns.tcu.ac.jp/Pages/TeX/bounddvi.sty.html + (dead link). + Now it is maintained by Hironobu Yamashita by his courtesy. + +## Character encoding + +All the package files (.sty) contain ASCII characters only. +All the document files (.tex) are encoded in UTF-8. + +## Installation + +- *.sty -> $TEXMF/tex/latex/gentombow +- *.tex, *.pdf -> $TEXMF/doc/latex/gentombow + +## Repository + +The bundle is maintained on GitHub: + https://github.com/aminophen/gentombow + +## License + +The bundle may be distributed and/or modified under the terms of +the 3-clause BSD license (see [LICENSE](./LICENSE)). + +## Release Date + +2019-07-21 + +Hironobu Yamashita diff --git a/macros/latex/contrib/gentombow/bounddvi-en.pdf b/macros/latex/contrib/gentombow/bounddvi-en.pdf new file mode 100644 index 0000000000..cbbdb00ef2 Binary files /dev/null and b/macros/latex/contrib/gentombow/bounddvi-en.pdf differ diff --git a/macros/latex/contrib/gentombow/bounddvi-en.tex b/macros/latex/contrib/gentombow/bounddvi-en.tex new file mode 100644 index 0000000000..61e78f985b --- /dev/null +++ b/macros/latex/contrib/gentombow/bounddvi-en.tex @@ -0,0 +1,135 @@ +%# -*- ascii characters only -*- + +% Package v1.0--v6.0: Koichi INOUE +% Package v7.0-- : Hironobu Yamashita +% The package documentation (this file) was +% written by Hironobu Yamashita. + +\documentclass[a4paper]{article} +\usepackage{doc} +\usepackage{bounddvi} +\GetFileInfo{bounddvi.sty} +\title{Package \textsf{bounddvi} \fileversion} +\author{Koichi Inoue \& Hironobu Yamashita} +\date{\filedate} +\begin{document} + +\maketitle + +Package \textsf{bounddvi} sets papersize special into DVI file. +This package can be used in both tate (vertical) and yoko (horizontal) +writing directions of Japanese p\LaTeX/up\LaTeX, and both +\texttt{dvipdfmx} and \texttt{dvips} drivers are supported. +The \texttt{tombow} option defined in Japanese p\LaTeX\ kernel is +also supported. Of course, this package can be used also with the +original \LaTeX\ in DVI output mode. + +This package (since v7.0) is part of \textsf{gentombow} bundle: +\begin{verbatim} + https://github.com/aminophen/gentombow +\end{verbatim} +Originally it was part of \textsf{platex-tools} bundle, +but it has been moved since March 2018. + +\section*{Usage} + +Load this package in preamble. +\begin{verbatim} + \documentclass[a5paper]{article} + \usepackage{bounddvi} + ... +\end{verbatim} +Process the \texttt{.tex} file using \texttt{latex} + +\texttt{dvips} chain or \texttt{latex} + \texttt{dvipdfmx} chain. + +\section*{Known limitations} + +\begin{enumerate} +\item The compatibility with \textsf{geometry} package may not be +perfect, as both \textsf{geometry} and \textsf{bounddvi} embeds +papersize special into a DVI file. The loading order of these +two packages may affect the actual size of output. +\item This package supports ``\textsf{jsclasses}-like employment'' +of \verb+\mag+, because it's more widely used in Japan. This may +be incompatible with some classes or packages which employ +\verb+\mag+ in other ways. +\end{enumerate} +The details are described in the sections below. + +\subsection*{The behavior of multiple papersize specials} + +Sometimes multiple papersize specials may be embedded into a DVI +file. Among these specials, the specification which appears +\emph{at last} in DVI takes effect when \texttt{dvipdfmx} or +\texttt{dvips} (\TeX\ Live 2017 or later) is used\footnote{% +When \texttt{dvips} in \TeX\ Live 2016 or earlier is used, +the specification which appears \emph{first} in DVI took effect, +but the default behavior was changed in \TeX\ Live r42420 to +be compatible with \texttt{dvipdfmx}. The new option \texttt{-L0} +can be used to recover the old behavior.}. For example, when the +following source is processed with \texttt{dvipdfmx}, +\begin{verbatim} + % latex + dvipdfmx + \documentclass{...} + \usepackage{bounddvi} + \usepackage[dvipdfm]{geometry} +\end{verbatim} +the specification by \textsf{geometry} wins. + +\section*{Note about \texttt{\char92mag} handling} + +Among the packages in CTAN, there are two types of implementation +in terms of \verb+\mag+ employment. It seems that there is no +(official or practical) ``standard'' in \verb+\mag+ treatment. + +When the output is going to the physical size of A4 +($210\,\mathrm{mm} \times 297\,\mathrm{mm}$) with the setting of +\verb+\mag=2000+, there are two ways: some classes/packages can set +\begin{quote} + \texttt{\char92mag=2000}\\ + \texttt{\char92paperwidth=210mm} ($= 420\,\mathrm{truemm}$)\\ + \texttt{\char92paperheight=297mm} ($= 594\,\mathrm{truemm}$) +\end{quote} +and others can set +\begin{quote} + \texttt{\char92mag=2000}\\ + \texttt{\char92paperwidth=105mm} ($= 210\,\mathrm{truemm}$)\\ + \texttt{\char92paperheight=148.5mm} ($= 297\,\mathrm{truemm}$) +\end{quote} +The first way is adopted by \textsf{geometry} package etc, and it's +(probably) based on the behavior of the \verb+papersize+ special of +\texttt{dvips}. It does not handle true units properly, and accepts +only non-true units and evaluates them as if they were true units. +The second way is adopted by \textsf{jsclasses} document class etc, +and is also suppoted by \verb+pdf:pagesize+ special of +\texttt{dvipdfm(x)}. This can be more consistent with \LaTeX, since +all other layout parameters (e.g. \verb+\textwidth+) are set +according to the unit truemm. + +The \textsf{bounddvi} supports the latter, so some classes/packages +which are based on the former may or may not work properly when +using \textsf{bounddvi} package. + +\section*{References} + +\begin{itemize} +\item Setting paper size using \texttt{dvips} \& \texttt{dvipdfm} + (description in Japanese)\\ + \texttt{https://www.ma.ns.tcu.ac.jp/Pages/TeX/bounddvi.sty.html} +\end{itemize} + +\section*{ChangeLog} + +\begin{itemize} + \item 2002/03/10 v1.0 (KI) First version + \item 2002/10/30 v2.0 (KI) Add \texttt{dvipdfm} \texttt{pdf:pagesize} special + \item 2003/03/22 v3.2 (KI) Compatibility with \textsf{hyperref} + \item 2004/05/08 v4.0 (KI) Support for $\mathtt{\char92mag} \ne 1000$ + \item 2004/12/08 v5.2 (KI) Compatibility with \textsf{geometry} + \item 2004/12/15 v6.0 (KI) Not to use \texttt{dvipdfm(x)} \texttt{pdf:pagesize special} + \item 2016/10/25 v7.1 (HY) Support for p\LaTeXe\ tombow option, + compatibility with \textsf{graphics}/\textsf{color} packages + \item 2016/12/28 v7.2 (HY) Documentation for the new \texttt{dvips} behavior +\end{itemize} + +\end{document} diff --git a/macros/latex/contrib/gentombow/bounddvi.pdf b/macros/latex/contrib/gentombow/bounddvi.pdf new file mode 100644 index 0000000000..ca36021fc9 Binary files /dev/null and b/macros/latex/contrib/gentombow/bounddvi.pdf differ diff --git a/macros/latex/contrib/gentombow/bounddvi.sty b/macros/latex/contrib/gentombow/bounddvi.sty new file mode 100644 index 0000000000..35432df5f0 --- /dev/null +++ b/macros/latex/contrib/gentombow/bounddvi.sty @@ -0,0 +1,87 @@ +% +% bounddvi.sty +% 2016/12/28 v7.2-v7.0 h.y.acetaminophen@gmail.com +% 2004/12/15 v6.0-v1.0 inoue@ma.ns.tcu.ac.jp +% +% This package, originally written by Koichi Inoue +% and modified by Hironobu Yamashita, is distributed +% as part of the gentombow bundle. +% https://github.com/aminophen/gentombow +% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{bounddvi}[2016/12/28 v7.2 bounddvi] + +% catcode trick to hide \iftombow ... \else ... \fi +% since \iftombow is defined only in pLaTeX. +\ifx\pfmtname\@undefined + \catcode`\Q=14\relax +\else + \catcode`\Q=9\relax +\fi + +% Note: graphics/color drivers +% - dvips.def 2016/07/10 v3.1a or later +% - dvipdfmx.def 2016/07/10 v4.12 or later +% emit papersize special _only_ when \Gin@setpagesizetrue +% and \mag = 1000. When graphicx(s) or color is used with +% setpagesize option (= default since 2016) and \mag equals +% to 1000, we can exploit its routine. +% (they are using \AtBeginDocument{\AtBeginDvi{...}}) +% However, these .def files do _not_ care about tombow by pLaTeX; +% so, we set \stock{width,height} to invoke stock test in those +% files (probably meant for memoir.cls). +Q \iftombow +Q % if \stockwidth/\stockheight are not available, +Q % define them now +Q \ifx\stockwidth\@undefined \newdimen\stockwidth \fi +Q \ifx\stockheight\@undefined \newdimen\stockheight \fi +Q % if \stockwidth already has effective value, do nothing; +Q % otherwise assume pLaTeX-style tombow and set it to +Q % \paperwidth + 2in (similar for \stockheight) +Q \ifdim\stockwidth>\z@\else +Q \stockwidth\paperwidth \advance\stockwidth2in +Q \fi +Q \ifdim\stockheight>\z@\else +Q \stockheight\paperheight \advance\stockheight2in +Q \fi +Q \fi + +% reset catcode trick +\catcode`\Q=11\relax + +% following code is almost equivalent to +% \AtBeginDocument{\AtBeginDvi{...}} +% however, we append the specification to the _beginning_ of +% \@begindocumenthook; this ensures proper papersize when +% dvips (TeX Live 2016 or earlier) is used. +\begingroup +\def\@prependto@begindocumenthook{\global\setbox\@begindvibox + \vbox{\csname yoko\endcsname\unvbox\@begindvibox + \begingroup + % if \stockwidth/\stockheight are defined & have effective + % values, copy them to \paperwidth/\paperheight + % for current group + \ifx\stockwidth\@undefined\else \ifdim\stockwidth>\z@ + \paperwidth\stockwidth + \fi\fi + \ifx\stockheight\@undefined\else \ifdim\stockheight>\z@ + \paperheight\stockheight + \fi\fi + % adjust for \mag and emit papersize special + \divide\paperwidth\@m\multiply\paperwidth\mag + \divide\paperheight\@m\multiply\paperheight\mag + \special{papersize=\the\paperwidth,\the\paperheight}% + \endgroup}} +\toks@\expandafter\expandafter\expandafter + {\expandafter\@prependto@begindocumenthook\@begindocumenthook} +\xdef\@begindocumenthook{\the\toks@} +% append papersize special again to the _end_ of the +% current \@begindocumenthook; this will be meaningful e.g. when +% geometry is loaded before bounddvi. +% (geometry adds \AtBeginDocument{\AtBeginDvi{...}} specification) +\expandafter\g@addto@macro\expandafter\@begindocumenthook + \expandafter{\@prependto@begindocumenthook} +\endgroup + +\endinput diff --git a/macros/latex/contrib/gentombow/bounddvi.tex b/macros/latex/contrib/gentombow/bounddvi.tex new file mode 100644 index 0000000000..b21b9c33a5 --- /dev/null +++ b/macros/latex/contrib/gentombow/bounddvi.tex @@ -0,0 +1,148 @@ +%# -*- coding: utf-8 -*- +\ifx\epTeXinputencoding\undefined\else % defined in e-pTeX (> TL2016) + \epTeXinputencoding utf8 % ensure utf-8 encoding for platex +\fi + +% パッケージ作者 (v1.0--v6.0):東京都市大学(旧称・武蔵工業大学)井上浩一 +% 修正版 (v7.0--) および本ドキュメント:山下弘展 (Hironobu Yamashita) + +\documentclass[a4paper]{jsarticle} +\usepackage{doc} +\usepackage{bounddvi} +\GetFileInfo{bounddvi.sty} +\title{Package \textsf{bounddvi} \fileversion} +\author{Koichi Inoue \& Hironobu Yamashita} +\date{\filedate} +\begin{document} + +\maketitle + +DVIファイルは用紙サイズ情報を含みませんが、PostScriptやPDFといった +用紙サイズを規定するフォーマットへ変換するプログラム(\texttt{dvips}や +\texttt{dvipdfmx})は、\verb+\special+命令によってDVIファイルに埋め込ま +れた用紙サイズ情報を解釈します。 +たとえば、幅100mm、高さ200mmの用紙に出力したい場合は +\begin{verbatim} + \special{papersize=100mm,200mm} +\end{verbatim} +のように指定してやることができます。 + +\textsf{bounddvi}パッケージは、クラスファイルなどが想定している用紙 +サイズ情報(\verb+\paperwidth+, \verb+\paperheight+)をDVIファイルに +\verb+\special+命令として埋め込むことで、\texttt{dvips}や +\texttt{dvipdfmx}の出力用紙サイズを指定する機能を提供します。 +\begin{verbatim} + \documentclass[a4j]{jarticle} + \usepackage{bounddvi} + \begin{document} + …本文… + \end{document} +\end{verbatim} +のように使います。p\LaTeX における横組と縦組の両方で使え、また +版面拡大(\verb+\mag+)が使われた場合にも対応しています(詳細は付録 +を参照してください)。また、v7.0以降、p\LaTeX カーネルのトンボ +オプションを使用した場合にも対応しており、p\LaTeX が仮定している +「トンボのノビ(2in)を含めたサイズ」に設定します。 + +本パッケージはv7.0以降、\textsf{gentombow}バンドルの一部として +配布されています: +\begin{verbatim} + https://github.com/aminophen/gentombow +\end{verbatim} +2017年までは\textsf{platex-tools}バンドルの一部でしたが、 +2018年以降は移転しました。 + +\section*{他のパッケージとの互換性} + +用紙サイズ設定機能だけを提供する\textsf{bounddvi}パッケージのほかにも、 +パッケージの機能の一部として用紙サイズ設定を行うものがいくつかあります。 +\begin{itemize} +\item 日本語環境でよく用いられる、p\LaTeX/up\LaTeX 用のクラスファイル + \textsf{jsclasses}(奥村さん作)の\texttt{papersize}オプション + との併用は問題ありません(ただし、このオプションを使用すれば用紙 + サイズ設定には十分ですから、本\textsf{bounddvi}パッケージを併用 + することにも特にメリットはありません)。 +\item 2016年以降の\textsf{graphics/graphicx}パッケージや + \textsf{color}パッケージには用紙サイズ設定機能 + (\texttt{setpagesize}オプション:デフォルトで有効)が + ありますが、併用しても問題は起きないでしょう。 +\item \textsf{hyperref}パッケージも上と同様で、併用しても + 問題は起きないでしょう。 +\item \textsf{geometry}パッケージと併用する場合は、 + 本\textsf{bounddvi}パッケージを\emph{後から}読み込むほうが + 安全でしょう。特に、\texttt{dvipdfmx}を使用して変換する場合に + トンボを付けたいなら、\textsf{bounddvi}を後から読み込むことで + うまくいく可能性があります(付録を参照)。 +\end{itemize} + +\section*{付録:複数の用紙サイズ指定が発行された場合の挙動} + +一つのDVIファイルに複数の用紙サイズ指定\verb+\special+命令が +埋め込まれる場合があります。このうち、\texttt{dvipdfmx}および +\TeX\ Live 2017以降の\texttt{dvips}では、DVIファイルの\emph{最後}に +指定されたものが有効になります\footnote{\TeX\ Live 2016以前の +\texttt{dvips}では、DVIファイルの\emph{最初}に指定されたものが有効 +でしたが、\TeX\ Live r42420で挙動が変更されました。\texttt{-L0}オプ +ションを指定すると従来の挙動に戻ります。}。たとえば\textsf{bounddvi}と +\textsf{geometry}を併用したソース +\begin{verbatim} + \documentclass{...} + \usepackage{bounddvi} + \usepackage[dvipdfm]{geometry} +\end{verbatim} +を\textsf{dvipdfmx}でPDFに変換すると、\textsf{geometry}パッケージの +指定が優先されます。このとき、用紙サイズの設定が正しいかどうかは +\textsf{geometry}パッケージに依存します。 + +\section*{付録:\texttt{\char92mag}の扱いについて} + +本\textsf{bounddvi}パッケージは、日本で広く使われている奥村さんの +\textsf{jsclasses}クラス流の\verb+\mag+の用法をサポートしています。 +しかし、\verb+\mag+の使い方はCTANにある多様なパッケージの中で統一 +されておらず、大きく分けて二通りの使い方があるようです。 + +たとえば、版面を2倍に拡大 (\verb+\mag=2000+) して物理的なA4サイズ +($210\,\mathrm{mm}\times297\,\mathrm{mm}$)の出力を得たい場合 +\begin{quote} + \texttt{\char92mag=2000}\\ + \texttt{\char92paperwidth=210mm} ($= 420\,\mathrm{truemm}$)\\ + \texttt{\char92paperheight=297mm} ($= 594\,\mathrm{truemm}$) +\end{quote} +と設定するものと +\begin{quote} + \texttt{\char92mag=2000}\\ + \texttt{\char92paperwidth=105mm} ($= 210\,\mathrm{truemm}$)\\ + \texttt{\char92paperheight=148.5mm} ($= 297\,\mathrm{truemm}$) +\end{quote} +と設定するものとが存在します。 +前者は\textsf{geometry}パッケージなどの方式で、おそらく\texttt{dvips}の +\verb+papersize+ specialの挙動(truedimenを正しく解釈せず、trueの付か +ない単位だけを受け付けてあたかもtrue付であるかのように評価)に則った +ものでしょう。後者は\textsf{jsclasses}クラスの方式で、これは +\texttt{dvipdfm(x)}の\verb+pdf:pagesize+ specialとも同じです。 +この方式のほうが、truedimenで設定された\LaTeX のほかのレイアウト変数 +(\verb+\textwidth+など)に対して一貫性があると思われます。 +本\textsf{bounddvi}パッケージがサポートしているのは後者の方式です。 + +\section*{参考} + +\begin{itemize} +\item dvipsやdvipdfmなどで用紙サイズを出力\\ + \texttt{https://www.ma.ns.tcu.ac.jp/Pages/TeX/bounddvi.sty.html} +\end{itemize} + +\section*{変更履歴} + +\begin{itemize} + \item 2002/03/10 v1.0 (KI) 最初の公開版 + \item 2002/10/30 v2.0 (KI) \texttt{dvipdfm}の\texttt{pdf:pagesize special}を使用 + \item 2003/03/22 v3.2 (KI) \textsf{hyperref}との互換性を改良 + \item 2004/05/08 v4.0 (KI) $\mathtt{\char92mag} \ne 1000$に対応 + \item 2004/12/08 v5.2 (KI) \texttt{dvips}で\textsf{geometry}との互換性を改良 + \item 2004/12/15 v6.0 (KI) \texttt{dvipdfm(x)}の\texttt{pdf:pagesize special}を不使用に + \item 2016/10/25 v7.1 (HY) p\LaTeXe{}のトンボサポート、 + 2016年の新しい\textsf{graphics}/\textsf{color}に対応 + \item 2016/12/28 v7.2 (HY) 新仕様の\texttt{dvips}をドキュメント化 +\end{itemize} + +\end{document} diff --git a/macros/latex/contrib/gentombow/gentombow-ja.pdf b/macros/latex/contrib/gentombow/gentombow-ja.pdf new file mode 100644 index 0000000000..7d26cf32e7 Binary files /dev/null and b/macros/latex/contrib/gentombow/gentombow-ja.pdf differ diff --git a/macros/latex/contrib/gentombow/gentombow-ja.tex b/macros/latex/contrib/gentombow/gentombow-ja.tex new file mode 100644 index 0000000000..ce0d6e767e --- /dev/null +++ b/macros/latex/contrib/gentombow/gentombow-ja.tex @@ -0,0 +1,453 @@ +%# -*- coding: utf-8 -*- +\ifx\epTeXinputencoding\undefined\else % defined in e-pTeX (> TL2016) + \epTeXinputencoding utf8 % ensure utf-8 encoding for platex +\fi + +\documentclass[a4paper,dvipdfmx]{jsarticle} +\usepackage{doc} +\makeatletter +%%% import from jltxdoc.cls +\def\verb{\relax\ifmmode\hbox\else\leavevmode\vadjust{}\fi + \bgroup \let\do\do@noligs \verbatim@nolig@list + \ttfamily \verb@eol@error \let\do\@makeother \dospecials + \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}} +\xspcode"5C=3 %% \ +\xspcode"22=3 %% " +%%% dangerous bend +\font\man=manfnt at 10pt +\def\dbend{\leavevmode\raise0pt\hbox{\man\char'177}} +\newenvironment{dangerous}{% + \ifnum\@listdepth>\z@ + \GenericError{}{Do not use `dangerous' environment inside any list}{}{} + \fi + \par\addvspace\medskipamount + \@tempdima=\dimexpr\textwidth-2zw\relax\small + \divide\@tempdima by\dimexpr1zw\relax\@tempcnta=\@tempdima + \leftskip=\dimexpr\textwidth-\@tempcnta zw\relax + \@totalleftmargin\dimexpr\leftskip+0zw + \linewidth=\dimexpr\@tempcnta zw-0zw + \parindent1zw\noindent\kern-\leftskip\hbox to\leftskip{\dbend\hss}% + \everypar{\everypar{}}\ignorespaces +}{\par\addvspace\medskipamount} +%%% logo +\def\pTeX{p\kern-.15em\TeX} +\def\epTeX{$\varepsilon$-\pTeX} +%%% misc +\newcommand{\Meta}[1]{$\langle$\mbox{}\textit{#1}\mbox{}$\rangle$} +\newcommand{\jMeta}[1]{$\langle$\mbox{}\textsf{#1}\mbox{}$\rangle$} +%%% +\makeatother +\usepackage{longtable} +\usepackage[pdfbox]{gentombow} +%\usepackage{bounddvi} +\GetFileInfo{gentombow.sty} +\title{Package \textsf{gentombow} \fileversion} +\author{Hironobu Yamashita} +\date{\filedate} +\begin{document} + +\maketitle + +\begin{center} +English version is available: see \textsf{gentombow.pdf}! +\end{center} + +日本の出版では、たとえば仕上がり寸法がA4サイズの場合、一回り大きな +B4サイズの用紙の中央にトンボ付きで印刷することがあるようです。 +このドキュメントは、実際にA4用紙をB4用紙の中央にトンボ付きで +配置している事例です。 + +\textsf{gentombow}パッケージは、クラスファイルなどが想定している用紙 +サイズ情報(\verb+\paperwidth+, \verb+\paperheight+)を検知し、 +それより一回り大きなサイズの用紙の中央にトンボ付きで出力するために +必要な機能を提供します。使い方の例は +\begin{verbatim} + \documentclass[a4j]{jarticle} + \usepackage{gentombow} + \usepackage{bounddvi} + \begin{document} + …本文… + \end{document} +\end{verbatim} +です。 + +任意の\LaTeX フォーマットで利用可能です。具体的には +\begin{itemize} +\item p\LaTeX, up\LaTeX (縦組にも対応) +\item Lua\LaTeX (Lua\TeX-ja使用の場合は縦組にも対応) +\item pdf\LaTeX +\item Xe\LaTeX +\end{itemize} +での動作を確認しています。また、\textsf{jsclasses}のような +版面拡大(\verb+\mag+)が使われた場合にも対応しています。 + +ただし、本パッケージは実際の出力サイズ指定を発行しませんので、 +以下のいずれかのパッケージと併用するとよいでしょう: +\begin{itemize} +\item \textsf{bounddvi}パッケージ(\textsf{gentombow}バンドル) +\item \textsf{bxpapersize}パッケージ(ZRさん作) +\item \textsf{graphicx}パッケージの2016年以降の版 + (\texttt{setpagesize}機能つきのもの) +\end{itemize} +\textsf{bounddvi}パッケージは本パッケージと同じく +\textsf{gentombow}バンドルに収録されていますが、 +名前のとおりDVIを経由する場合にしか利用できません。 +一方、\textsf{bxpapersize}パッケージは汎用で、Lua\TeX のような +PDF直接出力の場合にも利用できます。また、\textsf{graphicx}パッケージ +は画像挿入用のパッケージですが、2016年以降は自動的に出力サイズ指定も +行うようです($\verb+\mag+ \ne 1000$の場合には機能しません)。 + +本パッケージは、\textsf{gentombow}バンドルの一部として +配布されています: +\begin{verbatim} + https://github.com/aminophen/gentombow +\end{verbatim} +2017年までは\textsf{platex-tools}バンドルの一部でしたが、 +2018年以降は独立させてあります。また、v0.9eまでは +(u)p\LaTeX とLua\TeX-ja専用の\textsf{pxgentombow}パッケージを +用意していましたが、v0.9f以降は\textsf{gentombow}に一本化しました。 + +\section{簡単な使用法} + +はじめに、パッケージをオプション指定なしに使用する場合の機能を +説明します。 + +\subsection{用紙サイズの自動検知による出力サイズ決定} + +パッケージにはあらかじめA系列(\texttt{a0}--\texttt{a10})、 +B系列(\texttt{b0}--\texttt{b10})、C系列(\texttt{c0}--\texttt{c10})と +\texttt{letter}, \texttt{legal}, \texttt{executive}の用紙サイズが +定義されています。ここで、B系列はISOではなくJISです。 +また、変型版として\texttt{a4var}(\texttt{a4}の変型)と +\texttt{b5var}(\texttt{b5}の変型)も定義されています。 + +これらのうちいずれか(ただし\texttt{a0}, \texttt{b0}, \texttt{c0}を +除く)の用紙サイズを検知すると、 +出力サイズが次の規則で自動的に決定されます\footnote{なお、 +C系列と\texttt{letter}, \texttt{legal}, \texttt{executive}については +日本での慣習が不明の +ため、現時点ではA系列のサイズで出力することにしています。}。 +\begin{itemize} +\item 用紙サイズがA系列のとき: + 出力サイズは一回り大きなB系列 +\item 用紙サイズがB, C系列または + \texttt{letter}, \texttt{legal}, \texttt{executive}のとき: + 出力サイズは一回り大きなA系列 +\end{itemize} +この場合、パッケージを読み込んだだけでトンボが付きます。 +なお、用紙サイズが横長の場合は自動的に出力も横長になり、 +縦長の場合は自動的に縦長になります。 + +よく使われる用紙サイズの例を挙げます。 +\begin{longtable}[c]{cc} + \hline + 用紙サイズ & 出力サイズ \\ + \hline + a6 & b6 \\ + b6 & a5 \\ + a5 & b5 \\ + b5 & a4 \\ + a4 & b4 \\ + b4 & a3 \\ + a3 & b3 \\ + b3 & a2 \\ + \hline + c6 & a5 \\ + c5 & a4 \\ + c4 & a3 \\ + c3 & a2 \\ + \hline + letter & a3 \\ + legal & a3 \\ + executive & a4 \\ + \hline +\end{longtable} + +\subsection*{参考:用紙サイズの自動検知に失敗した場合の出力サイズ決定} + +仮に用紙サイズが定義済みのいずれとも異なる場合は、デフォルトでは +用紙の天地左右に1インチずつのノビを付けたサイズで出力します。 +たとえば、幅$100\,\mathrm{mm}$、高さ$200\,\mathrm{mm}$の用紙の場合、 +出力サイズは幅$100\,\mathrm{mm}+2\,\mathrm{in}$、 +高さ$200\,\mathrm{mm}+2\,\mathrm{in}$になります。 + +\subsection{トンボへのバナーの出力} + +デフォルトでは\makeatletter\texttt{\the\@bannertoken}\makeatother +のような形式で、トンボにジョブ情報(処理ファイル名と日付)を示すバナーが +出力されます。これは、\pLaTeX 向けの日本語クラスファイルの多くで +利用可能な\verb+tombow+オプションと同様です。 +ただし、クラスオプションに\verb+tombo+(ジョブ情報を出力しない)または +\verb+mentuke+(トンボの線を表示しない)が指定されている場合は、 +この設定が引き継がれます。 + +\section{パッケージオプション} + +パッケージオプションによって、出力サイズやバナーのジョブ情報の有無を +指定する方法を説明します。 + +\subsection{出力サイズの明示指定} + +自動決定されるサイズと異なるサイズに出力したい場合、 +パッケージオプションで明示的に指定することができます。たとえば +\begin{verbatim} + \documentclass[a4j]{jarticle} + \usepackage[tombow-a3]{gentombow} + \begin{document} + …本文… + \end{document} +\end{verbatim} +とすると、出力サイズは(自動決定のb4は無視されて)a3に変わります。 +指定可能なサイズは、定義済みの用紙サイズと同じものです。すなわち、 +A系列(\texttt{a0}--\texttt{a10})、 +B系列(\texttt{b0}--\texttt{b10})、 +C系列(\texttt{c0}--\texttt{c10})と +\texttt{a4var}, \texttt{b5var}, +\texttt{letter}, \texttt{legal}, \texttt{executive}です。 +なお、ここでも用紙サイズが横長の場合は自動的に出力も横長になり、 +縦長の場合は自動的に縦長になります。 + +オプションは\jMeta{トンボ形式}\texttt{-}\jMeta{出力サイズ}の書式で与えます。 +トンボ形式は、p\LaTeX の標準クラスと同じで +\verb+tombow+, \verb+tombo+, \verb+mentuke+のいずれかを選びます +(\verb+tombow+はジョブ情報を表示し、\verb+tombo+は表示しません。 +また、\verb+mentuke+はトンボの線を表示しません)。 + +\subsection{トンボに表示するジョブ情報の有無} + +用紙サイズを明示的に指定する場合は、前節のようにトンボ形式と出力サイズを +同時にオプションで与えることができます。 +逆に出力サイズを自動決定に任せつつ、ジョブ情報の有無だけを指定したい +場合は、トンボへのバナー出力を抑制する\verb+notombowbanner+オプションを +使用してください。 + +\section{詳細なカスタマイズ} + +\textsf{gentombow}パッケージは、トンボの見た目やバナーの内容を +カスタマイズする機能も提供します。 + +\subsection{トンボに表示するバナーの内容} + +\verb+\settombowbanner+命令を用います。例えば\epTeX の +\verb+\pdfcreationdate+プリミティブを使って +\begin{verbatim} + \documentclass[a4j]{jarticle} + \usepackage{gentombow} + \settombowbanner{\jobname\space (\pdfcreationdate)} + \begin{document} + …本文… + \end{document} +\end{verbatim} +とすると、バナーの表示内容は +{\settombowbanner{\jobname\space (\pdfcreationdate)}% + \makeatletter\texttt{\the\@bannertoken}\makeatother}になります。 +命令の引数には任意のトークン列を与えることができます。 + +\subsection{バナーの文字のフォント} + +\verb+\settombowbannerfont+命令を用います。例えば +\begin{verbatim} + \settombowbannerfont{cmss10 at 9pt} +\end{verbatim} +のような指定が可能です。内部的には\verb+\font+プリミティブを利用しており、 +使用している\TeX エンジンがサポートする任意のフォントを指定可能です +\footnote{Lua\TeX やXe\TeX (\textsf{gentombow}パッケージの場合)では、 +OpenTypeフォントを直接利用することもできます。}。 + +\subsection{トンボの線の太さ} + +デフォルトではトンボの線の太さは0.1~ptですが、 +\verb+\settombowwidth{1pt}+とすると1~ptになります。 +命令の引数には任意の寸法を与えることができますが、 +実用上は数pt以内が良いでしょう。 + +\subsection{塗り足し(ドブ)の幅} + +デフォルトでは塗り足し(ドブ)の幅は3~mmですが、 +\verb+\settombowbleed{5mm}+とすると5~mmになります。 +命令の引数には任意の寸法を与えることができますが、実用上は数mmでしょう。 + +\subsection{トンボの色} + +トンボの色を指定します。実際に色をつける場合は +\textsf{xcolor}パッケージ(推奨)またはまたは\textsf{color}パッケージが必要です。 +\verb+\settombowcolor{\color[cmyk]{0,1,0,0}}+とするとマゼンタになります。 +CMYKの版ごとにトンボを作成する場合や、特色のトンボが必要な場合に便利です。 + +\section{PDFのデジタルトンボ(page box)の設定} + +この機能はドライバに依存するため、オプション機能としています。 +\textsf{gentombow}パッケージ読み込み時に\verb+pdfbox+オプションを +指定します。DVIを経由する場合は、さらにドライバオプションも必須です +\footnote{例外として、\textsf{gentombow}が読み込まれた時点で +\textsf{graphics}/\textsf{color}のいずれかが読み込まれていた +場合は、そのドライバ設定を引き継ぐことができます。}。 + +この機能を有効化すると、PDFに以下のバウンディングボックス情報 +(いわゆるデジタルトンボ)が書き込まれ、 +さらに用紙サイズ設定(\verb+/MediaBox+相当)も行われます。 +\begin{itemize} +\item \verb+/TrimBox+: 仕上がり紙面サイズ。 +\item \verb+/BleedBox+: 裁ち落とし領域を含んだサイズ。 +\item \verb+/CropBox+, \verb+/ArtBox+: 明示しない。 +\end{itemize} +注意:\textsf{pdfx}パッケージがPDF/Xモードで読み込まれていれば、 +このオプション機能は自動的に有効化されます。 +また、\verb+/CropBox+も明示します。 + +\section{その他の注意点} + +特定のクラスファイルやパッケージと一緒に使用する場合、 +いくつかの注意点があります。 + +\subsection{\textsf{jsclasses}で使用する場合の注意} + +奥村晴彦氏による\textsf{jsclasses}のクラス(2016年以降は日本語\TeX 開発 +コミュニティが管理)を使用していて、10pt以外のサイズオプションを +指定する場合は、以下のいずれかの方法をとってください。 +\begin{itemize} +\item クラスオプションに「トンボオプション」 + (\verb+tombow+または\verb+tombo+)を追加する。 +\item クラスオプションに「\verb+\mag+を使わないオプション」 + (\verb+nomag+または\verb+nomag*+)を追加する。 +\end{itemize} +これは、\textsf{jsclasses}クラス内で行われる\verb+\oddsidemargin+と +\verb+\topmargin+の計算の都合からくる制約です。たとえば +\begin{verbatim} + \documentclass[a4j,14pt]{jsarticle} + \usepackage{gentombow} +\end{verbatim} +という使い方は\emph{誤り}です(このままでは誤った余白設定が +適用されますので、安全のため\textsf{gentombow}パッケージ +がエラーを出すようにしてあります)。代わりに +\begin{verbatim} + \documentclass[a4j,14pt,tombow]{jsarticle} + \usepackage{gentombow} +\end{verbatim} +と書くようにしてください。 + +また、塗り足しの幅などの寸法指定は\verb+true+付きの単位を +使用してください。例えば +\verb+\settombowbleed{3truemm}+と指定すれば、 +\verb+\mag+による版面拡大(縮小)後の塗り足し幅を3~mmにできます。 + +同様に、ZR氏による\textsf{BXjscls}のクラスを使用していて、10pt以外の +サイズオプションを指定する場合は +\begin{itemize} +\item クラスオプションに「\verb+\mag+を使わないオプション」 + (\verb+nomag+または\verb+nomag*+)を追加する。 +\end{itemize} +という対処が必要です(\textsf{BXjscls}クラスでは「トンボオプション」が +機能しないダミーになっていることに注意)。 + +\subsection{レイアウト設定の注意} + +余白などのレイアウト設定でありがちですが、 +\verb+\hoffset+や\verb+\voffset+の値を$0$以外に設定するのは +避けてください。このような設定は\textsf{gentombow}パッケージの +トンボ出力機能と衝突するため、正しい出力が得られません。 +レイアウト設定のために変更すべきなのはこれらの寸法ではなく、 +\verb+\oddsidemargin+や\verb+\topmargin+であることがほとんどです。 +したがって、それらを適切な値に設定するか、レイアウトの設定すべてを +\textsf{geometry}パッケージに任せてしまうのも一つの方法です。 + +\begin{dangerous} +たとえば左右の余白を$25\,\mathrm{mm}$に、上下の余白を +$30\,\mathrm{mm}$にしたいとき\footnote{ここでは「本文の領域以外」を +余白と定義します。すなわち、ヘッダとフッタは余白の一部です。}、 +まず「\TeX の1インチ」を +削除してから\verb+\oddsidemargin+や\verb+\topmargin+を変更すると、 +「見かけ上は」期待どおりの結果になることがあります。 +\begin{verbatim} + \setlength{\hoffset}{-1in}% <== NG + \setlength{\voffset}{-1in}% <== NG + \setlength{\oddsidemargin}{25mm} + \setlength{\topmargin}{30mm} + \setlength{\textwidth}{\paperwidth} + \addtolength{\textwidth}{-2\oddsidemargin} + \setlength{\textheight}{\paperheight} + \addtolength{\textheight}{-2\topmargin} + \addtolength{\topmargin}{-\headheight} + \addtolength{\topmargin}{-\headsep} +\end{verbatim} +しかし、この設定では\textsf{gentombow}パッケージがトンボを +追加するとき、正しい余白を維持することができません。 + +一方、\verb+\hoffset+や\verb+\voffset+は$0$のままで、以下のように +\verb+\oddsidemargin+や\verb+\topmargin+を設定していれば問題ありません。 +\begin{verbatim} + \setlength{\oddsidemargin}{-0.4mm}% 25mm = 1inch - 0.4mm + \setlength{\topmargin}{4.6mm}% 30mm = 1inch + 4.6mm + \setlength{\textwidth}{\paperwidth} + \addtolength{\textwidth}{-50mm} + \addtolength{\topmargin}{-\headheight} + \addtolength{\topmargin}{-\headsep} + \setlength{\textheight}{\paperheight} + \addtolength{\textheight}{-60mm} +\end{verbatim} +これと同等のレイアウト設定は、以下のように\textsf{geometry}パッケージで +行うのが簡単です。 +\begin{verbatim} + \usepackage[lmargin=25mm,rmargin=25mm, + tmargin=30mm,bmargin=30mm]{geometry} +\end{verbatim} +\end{dangerous} + +\section*{雑記} + +発端はこの話です。 +\begin{itemize} +\item 齋藤修三郎 (@psi\_tau) on Twitter, 2017年2月9日\\ + \texttt{https://twitter.com/psi\_tau/status/829873082911248386} +\end{itemize} + +また、現在検討中の事項を挙げておきます。 +\begin{itemize} +\item 現状では、用紙の横長・縦長がそのまま出力に反映されるので、 + これを逆転させるオプションの実装。また、任意の出力サイズを + 指定できるインタフェースの実現。 +\item 自動で決定できる出力サイズの拡張。現状では用紙サイズが + 定義値に完全一致する場合のみ自動決定されるが、中間のサイズでも + その一回り大きなサイズに出力したい場合があるのではないか。 +\item 出版用途ではカラー印刷の場合に、CMYKの版ごとにトンボを作る + 必要がある。\textsf{color}パッケージが利用可能な場合に、 + オプション次第でCKなど必要な色を選べるようにするとよい + のではないか\footnote{ただし作者の本業は出版ではないので、 + 商用を含む実用には程遠いかもしれない。}。 +\item $\verb+\mag+ \ne 1000$の場合について、\textsf{jsclasses}以外での + 動作は未確認。特に、\textsf{geometry}とは共存しない可能性が高い。 +\item \verb+\stockwidth+/\verb+\stockheight+が + \verb+\paperwidth+/\verb+\paperheight+より小さい場合の動作。 + 現在は警告を出すだけとしているが、さらに天地左右1inに + フォールバックしたほうが無難だろうか。 +\end{itemize} + +\section*{変更履歴} + +\begin{itemize} + \item 2017/02/10 v0.1 最初の公開版(\textsf{pxgentombow}として) + \item 2017/03/01 v0.4 トンボ形式の修正など + \item 2017/05/05 v0.5 \textsf{jsclasses}の$\verb+\mag+ \ne 1000$に対応、 + 最初のCTANリリース版 + \item 2017/05/06 v0.6 \textsf{jsclasses}との共存時のチェック強化、 + Lua\TeX-jaでの動作確認 + \item 2017/07/23 v0.7 ドキュメント更新 + \item 2017/12/17 v0.9 \textsf{gentombow}パッケージの新設 + \item 2018/03/16 v0.9e クラスオプションの\verb+tombow+等の引き継ぎ、 + トンボ書式のカスタマイズ機能の追加 + (\verb+\settombowbanner+, + \verb+\settombowbannerfont+, + \verb+\settombowwidth+の各命令) + \item 2018/05/17 v0.9g \textsf{gentombow}に\textsf{pxgentombow}を統合、 + \verb+pdfbox+オプションの追加、 + \verb+\settombowbleed+, \verb+\settombowcolor+の追加 + \item 2018/08/20 v0.9h 用紙サイズ検出に\texttt{hagaki}を追加、 + \textsf{pdfpages}対策の改良 + \item 2018/08/30 v0.9j \textsf{jsclasses}の$\verb+\mag+ \ne 1000$でも + \verb+pdfbox+オプションが正常動作するように改良、 + \verb+\settombowbleed+が\verb+/TrimBox+に反映されな + かったバグの修正 + \item 2019/07/21 v0.9k \textsf{pdfx}パッケージとの整合性をとる改良 +\end{itemize} + +\end{document} diff --git a/macros/latex/contrib/gentombow/gentombow.pdf b/macros/latex/contrib/gentombow/gentombow.pdf new file mode 100644 index 0000000000..b346075d67 Binary files /dev/null and b/macros/latex/contrib/gentombow/gentombow.pdf differ diff --git a/macros/latex/contrib/gentombow/gentombow.sty b/macros/latex/contrib/gentombow/gentombow.sty new file mode 100644 index 0000000000..396a8f3405 --- /dev/null +++ b/macros/latex/contrib/gentombow/gentombow.sty @@ -0,0 +1,769 @@ +% +% gentombow.sty +% written by Hironobu Yamashita (@aminophen) +% +% This package is part of the gentombow bundle. +% https://github.com/aminophen/gentombow +% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{gentombow} + [2019/07/21 v0.9k Generate crop mark 'tombow'] +\def\pxgtmb@pkgname{gentombow} +\@namedef{ver@pxgentombow.sty}{}% fake + +%% error status +\chardef\pxgtmb@errlevel=\z@ + +%% supported engines +% case 2: pdfLaTeX etc. +% case 1: pLaTeX2e <2018-04-01>+2 or older +% case 0: pLaTeX2e <2018-05-20> or newer +\ifx\pfmtversion\@undefined + \@ifpackageloaded{luatexja}{}{\chardef\pxgtmb@errlevel=\tw@} +\fi +\ifnum\pxgtmb@errlevel<\tw@ + \ifx\@tombowreset@@paper\@undefined + \chardef\pxgtmb@errlevel=\@ne + \fi +\fi +\ifcase\pxgtmb@errlevel + \let\pxgtmb@sel@twoone\@gobble + \let\pxgtmb@sel@two@one\@gobbletwo + \let\pxgtmb@sel@two\@gobble +\or + \let\pxgtmb@sel@twoone\@firstofone + \let\pxgtmb@sel@two@one\@secondoftwo + \let\pxgtmb@sel@two\@gobble +\or + \let\pxgtmb@sel@twoone\@firstofone + \let\pxgtmb@sel@two@one\@firstoftwo + \let\pxgtmb@sel@two\@firstofone +\else + \PackageError{\pxgtmb@pkgname}{% + This cannot happen! + Please report to package author}\@ehc + \expandafter\endinput +\fi +\@onlypreamble\pxgtmb@sel@twoone +\@onlypreamble\pxgtmb@sel@two@one +\@onlypreamble\pxgtmb@sel@two + +%%%%% EMULATION BEGIN + +% required for patching \@outputpage +\pxgtmb@sel@twoone{\RequirePackage{etoolbox}} + +% patch \@outputpage +\begingroup +\def\pxgtmb@emu@status{0} +\let\pxgtmb@emu@outputpage\@outputpage +\pxgtmb@sel@two@one +{%% case 2 begin + \patchcmd\pxgtmb@emu@outputpage % try first patch + {\reset@font\normalsize\normalsfcodes}% + {\@tombowreset@@paper + \reset@font\normalsize\normalsfcodes}% + {}{\def\pxgtmb@emu@status{1}} + \patchcmd\pxgtmb@emu@outputpage % try second patch + {\@begindvi \vskip \topmargin}% + {\@begindvi \@outputtombow \vskip \@@topmargin}% + {}{\def\pxgtmb@emu@status{1}} +}%% case 2 end +{%% case 1 begin + \patchcmd\pxgtmb@emu@outputpage % try patch + {% + \@@topmargin\topmargin + \iftombow + \@@paperwidth\paperwidth \advance\@@paperwidth 6mm\relax + \@@paperheight\paperheight \advance\@@paperheight 16mm\relax + \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax + \fi + \reset@font\normalsize\normalsfcodes} + {\@tombowreset@@paper + \reset@font\normalsize\normalsfcodes}% + {}{\def\pxgtmb@emu@status{1}} +}%% case 1 end +% commit the change only when successful; otherwise +% tombow feature is never enabled, exit right away +\pxgtmb@sel@twoone +{%% case 2 and 1 begin + \if 0\pxgtmb@emu@status\relax + \global\let\@outputpage\pxgtmb@emu@outputpage + \else + \PackageError{\pxgtmb@pkgname}{% + Failed in patching \string\@outputpage!\MessageBreak + Sorry, I can't proceed anymore...}\@ehc + \expandafter\expandafter\expandafter\endinput\expandafter + \fi +}%% case 2 and 1 end +\endgroup +% + +% provides equivalent for plcore.ltx +\pxgtmb@sel@two +{%% case 2 begin +\newif\iftombow \tombowfalse +\newif\iftombowdate \tombowdatetrue +\newdimen\@tombowwidth +\setlength{\@tombowwidth}{.1\p@} +}%% case 2 end +\pxgtmb@sel@twoone +{%% case 2 and 1 begin +\setlength{\@tombowwidth}{.1\p@} +\def\@tombowbleed{3mm} +\def\@tombowcolor{\normalcolor} +}%% case 2 and 1 end +\pxgtmb@sel@two +{%% case 2 begin +\newbox\@TL\newbox\@Tl +\newbox\@TC +\newbox\@TR\newbox\@Tr +\newbox\@BL\newbox\@Bl +\newbox\@BC +\newbox\@BR\newbox\@Br +\newbox\@CL +\newbox\@CR +\font\@bannerfont=cmtt9 +\newtoks\@bannertoken +\@bannertoken{} +}%% case 2 end +\pxgtmb@sel@twoone +{%% case 2 and 1 begin +\def\maketombowbox{% hide \yoko from all boxes + \setbox\@TL\hbox to\z@{\csname yoko\endcsname\hss + \vrule width\dimexpr 10mm+\@tombowbleed\relax height\@tombowwidth depth\z@ + \vrule height10mm width\@tombowwidth depth\z@ + \iftombowdate + \raise4pt\hbox to\z@{\hskip5mm\@bannerfont\the\@bannertoken\hss}% + \fi}% + \setbox\@Tl\hbox to\z@{\csname yoko\endcsname\hss + \vrule width10mm height\@tombowwidth depth\z@ + \vrule height\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth depth\z@}% + \setbox\@TC\hbox{\csname yoko\endcsname + \vrule width10mm height\@tombowwidth depth\z@ + \vrule height10mm width\@tombowwidth depth\z@ + \vrule width10mm height\@tombowwidth depth\z@}% + \setbox\@TR\hbox to\z@{\csname yoko\endcsname + \vrule height10mm width\@tombowwidth depth\z@ + \vrule width\dimexpr 10mm+\@tombowbleed\relax height\@tombowwidth depth\z@\hss}% + \setbox\@Tr\hbox to\z@{\csname yoko\endcsname + \vrule height\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth depth\z@ + \vrule width10mm height\@tombowwidth depth\z@\hss}% + \setbox\@BL\hbox to\z@{\csname yoko\endcsname\hss + \vrule width\dimexpr 10mm+\@tombowbleed\relax depth\@tombowwidth height\z@ + \vrule depth10mm width\@tombowwidth height\z@}% + \setbox\@Bl\hbox to\z@{\csname yoko\endcsname\hss + \vrule width10mm depth\@tombowwidth height\z@ + \vrule depth\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth height\z@}% + \setbox\@BC\hbox{\csname yoko\endcsname + \vrule width10mm depth\@tombowwidth height\z@ + \vrule depth10mm width\@tombowwidth height\z@ + \vrule width10mm depth\@tombowwidth height\z@}% + \setbox\@BR\hbox to\z@{\csname yoko\endcsname + \vrule depth10mm width\@tombowwidth height\z@ + \vrule width\dimexpr 10mm+\@tombowbleed\relax depth\@tombowwidth height\z@\hss}% + \setbox\@Br\hbox to\z@{\csname yoko\endcsname + \vrule depth\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth height\z@ + \vrule width10mm depth\@tombowwidth height\z@\hss}% + \setbox\@CL\hbox to\z@{\csname yoko\endcsname\hss + \vrule width10mm height.5\@tombowwidth depth.5\@tombowwidth + \vrule height10mm depth10mm width\@tombowwidth}% + \setbox\@CR\hbox to\z@{\csname yoko\endcsname + \vrule height10mm depth10mm width\@tombowwidth + \vrule height.5\@tombowwidth depth.5\@tombowwidth width10mm\hss}% +} +\def\@outputtombow{% + \iftombow + \vbox to\z@{\kern-\dimexpr 10mm+\@tombowbleed\relax\relax + \boxmaxdepth\maxdimen + \moveleft\@tombowbleed \vbox to\@@paperheight{% + \color@begingroup + \@tombowcolor + \hbox to\@@paperwidth{\hskip\@tombowbleed\relax + \copy\@TL\hfill\copy\@TC\hfill\copy\@TR\hskip\@tombowbleed}% + \kern-10mm + \hbox to\@@paperwidth{\copy\@Tl\hfill\copy\@Tr}% + \vfill + \hbox to\@@paperwidth{\copy\@CL\hfill\copy\@CR}% + \vfill + \hbox to\@@paperwidth{\copy\@Bl\hfill\copy\@Br}% + \kern-10mm + \hbox to\@@paperwidth{\hskip\@tombowbleed\relax + \copy\@BL\hfill\copy\@BC\hfill\copy\@BR\hskip\@tombowbleed}% + \color@endgroup + }\vss + }% + \fi +} +}%% case 2 and 1 end +\pxgtmb@sel@two +{%% case 2 begin +\newdimen\@@paperheight +\newdimen\@@paperwidth +\newdimen\@@topmargin +}%% case 2 end +\pxgtmb@sel@twoone +{%% case 2 and 1 begin +\def\@tombowreset@@paper{% + \@@topmargin\topmargin + \iftombow + \@@paperwidth\paperwidth + \advance\@@paperwidth 2\dimexpr\@tombowbleed\relax + \@@paperheight\paperheight \advance\@@paperheight 10mm\relax + \advance\@@paperheight 2\dimexpr\@tombowbleed\relax + \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax + \fi +} +}%% case 2 and 1 end +\pxgtmb@sel@two +{%% case 2 begin +\newcount\hour +\newcount\minute +}%% case 2 end + +%%%%% EMULATION END + +%% import from jsclasses +\hour\time \divide\hour by 60\relax +\@tempcnta\hour \multiply\@tempcnta 60\relax +\minute\time \advance\minute-\@tempcnta + +\ifnum\mag=\@m\else + % if BXjscls is detected and \mag != 1000, + % the layout will be definitely broken + \ifx\bxjs@param@mag\@undefined\else + \PackageError{\pxgtmb@pkgname}{% + It seems you are using Japanese `BXjscls'\MessageBreak + (bxjsarticle, bxjsbook, bxjsreport, etc.) or\MessageBreak + some derived class. Try adding `nomag' or\MessageBreak + `nomag*' to the class option list}\@ehc + \fi + % if \mag != 1000 and \inv@mag is defined, assume jsclasses-style \mag employment + \ifx\inv@mag\@undefined\else + % \pxgtmb@magscale is almost equivalent to \jsc@magscale (introduced around 2016) + % but defined only when \mag is actually employed + \begingroup + % calculation code borrowed from BXjscls + \@tempcnta=\mag + \advance\@tempcnta100000\relax + \def\pxgtmb@tempa#1#2#3#4\@nil{\@tempdima=#2#3.#4\p@} + \expandafter\pxgtmb@tempa\the\@tempcnta\@nil + \xdef\pxgtmb@magscale{\strip@pt\@tempdima} + \endgroup + \fi +\fi + +%% this package will use tombo feature in pLaTeX kernel +% if tombow-related option is not included in class option list, +% show info and enable it now +\iftombow\else + % if jsclasses is detected and \mag != 1000, it's too late + % -- When a size option other than `10pt' is specified, + % jsclasses uses \mag and calculates \oddsidemargin and \topmargin + % differently, depending on tombow status. + % In order to force `jsclasses' to calculate correctly, + % `tombow' or `tombo' is required as a class option. + % ... or, you may add `nomag' or `nomag*' instead. + \ifx\pxgtmb@magscale\@undefined\else + \PackageError{\pxgtmb@pkgname}{% + It seems you are using Japanese `jsclasses'\MessageBreak + (jsarticle, jsbook, jsreport, etc.) or some\MessageBreak + derived class. Please add `tombow' or `tombo'\MessageBreak + to the class option list}\@ehc + \fi + % BXjscls is already checked above, no check here + \PackageInfo\pxgtmb@pkgname{tombow feature enabled by \pxgtmb@pkgname} +\fi +\tombowtrue %\tombowdatetrue %% enabled by tombowbanner option +\setlength{\@tombowwidth}{.1\p@}% + +%% import from jsclasses +\@bannertoken{% + \jobname\space(\number\year-\two@digits\month-\two@digits\day + \space\two@digits\hour:\two@digits\minute)} + +%% prepare dimension +\ifx\stockwidth\@undefined \newdimen\stockwidth \fi +\ifx\stockheight\@undefined \newdimen\stockheight \fi + +%% prepare flag +\newif\ifpxgtmb@switch \pxgtmb@switchfalse +\newif\ifpxgtmb@landscape \pxgtmb@landscapefalse +\newif\ifpxgtmb@pdfx@x \pxgtmb@pdfx@xfalse + +%% passed from class options +%% should be declared first inside this package (least priority) +\DeclareOption{tombow}{\tombowdatetrue} +\DeclareOption{tombo}{\tombowdatefalse} +\DeclareOption{mentuke}{\tombowdatefalse \setlength{\@tombowwidth}{\z@}} + +%% package options part 1 +\DeclareOption{tombowbanner}{\tombowdatetrue} +\DeclareOption{notombowbanner}{\tombowdatefalse} +\DeclareOption{tombowdate}{% obsolete since v0.9c (2018/01/11) + \PackageWarning{\pxgtmb@pkgname}{% + Option `tombowdate' is renamed;\MessageBreak + use `tombowbanner' instead}% + \tombowdatetrue} +\DeclareOption{notombowdate}{% obsolete since v0.9c (2018/01/11) + \PackageWarning{\pxgtmb@pkgname}{% + Option `notombowdate' is renamed;\MessageBreak + use `notombowbanner' instead}% + \tombowdatefalse} + +%% register a list of candidate papersize +% * \pxgtmb@addpapersize[]{}{}{} +% used for declaration of papersize. +% when no option is specified (that is, \ifpxgtmb@switch = \iffalse), +% also used for automatic stocksize determination. +% * if = \@empty, the next is assumed. +% * if = n, stocksize is set to papersize + 2in. +\def\pxgtmb@addpapersize{\@ifnextchar[{\pxgtmb@addp@persize}{\pxgtmb@addp@persize[\@empty]}} +\def\pxgtmb@addp@persize[#1]#2#3#4{% + % get current papersize and search through known standard in ascending order + \ifx\pxgtmb@guessedtombow\@empty + \ifx\pxgtmb@guessedpaper\@empty + % shorter edge -> \@tempdima, longer edge -> \@tempdimb + \ifdim\paperwidth>\paperheight\relax + \pxgtmb@landscapetrue + \@tempdima\paperheight \@tempdimb\paperwidth + \else + \pxgtmb@landscapefalse + \@tempdima\paperwidth \@tempdimb\paperheight + \fi + % \@ovri and \@ovro are used temporarily (safe enough) + \@ovri=#3\relax + \@ovro=#4\relax + % when jsclasses-style \mag employment is assumed ... + \ifx\pxgtmb@magscale\@undefined\else + \@ovri=\inv@mag\@ovri\relax + \@ovro=\inv@mag\@ovro\relax + \fi + % compare + \ifdim\@tempdima=\@ovri\relax \ifdim\@tempdimb=\@ovro\relax + \def\pxgtmb@guessedpaper{#2}% + \ifx#1\@empty\else + \def\pxgtmb@guessedtombow{#1}% + \if n\pxgtmb@guessedtombow\else + \ExecuteOptions{tombow-#1}% package defaults to tombowdatetrue + \pxgtmb@switchfalse + \fi + \fi + \fi \fi + \else + \def\pxgtmb@guessedtombow{#2}% save for console message + \pxgtmb@setstock{#3}{#4}% set stockwidth/height + \fi\fi + \DeclareOption{tombow-#2}{% + \pxgtmb@switchtrue + \tombowdatetrue + \pxgtmb@setstock{#3}{#4}% + }% + \DeclareOption{tombo-#2}{% + \pxgtmb@switchtrue + \tombowdatefalse + \pxgtmb@setstock{#3}{#4}% + }% + \DeclareOption{mentuke-#2}{% + \pxgtmb@switchtrue + \tombowdatefalse + \setlength{\@tombowwidth}{\z@}% + \pxgtmb@setstock{#3}{#4}% + }% +} +\def\pxgtmb@setstock#1#2{% + \ifpxgtmb@landscape + \setlength\stockwidth{#2}% + \setlength\stockheight{#1}% + \else + \setlength\stockwidth{#1}% + \setlength\stockheight{#2}% + \fi + % when jsclasses-style \mag employment is assumed ... + \ifx\pxgtmb@magscale\@undefined\else + \stockwidth=\inv@mag\stockwidth\relax + \stockheight=\inv@mag\stockheight\relax + \fi +}% +\@onlypreamble\pxgtmb@addpapersize +\@onlypreamble\pxgtmb@addp@persize +\@onlypreamble\pxgtmb@setstock + +%% initialize before search +\def\pxgtmb@guessedpaper{} +\def\pxgtmb@guessedtombow{} +\@onlypreamble\pxgtmb@guessedpaper +\@onlypreamble\pxgtmb@guessedtombow + +%% package options part 2 +% ISO A series <=> JIS B series in the ascending order +\pxgtmb@addpapersize{a10}{26mm}{37mm} +\pxgtmb@addpapersize{b10}{32mm}{45mm} +\pxgtmb@addpapersize{a9}{37mm}{52mm} +\pxgtmb@addpapersize{b9}{45mm}{64mm} +\pxgtmb@addpapersize{a8}{52mm}{74mm} +\pxgtmb@addpapersize{b8}{64mm}{91mm} +\pxgtmb@addpapersize{a7}{74mm}{105mm} +\pxgtmb@addpapersize{b7}{91mm}{128mm} +\pxgtmb@addpapersize{a6}{105mm}{148mm} +\pxgtmb@addpapersize{b6}{128mm}{182mm} +\pxgtmb@addpapersize{a5}{148mm}{210mm} +\pxgtmb@addpapersize{b5}{182mm}{257mm} +\pxgtmb@addpapersize{a4}{210mm}{297mm} +\pxgtmb@addpapersize{b4}{257mm}{364mm} +\pxgtmb@addpapersize{a3}{297mm}{420mm} +\pxgtmb@addpapersize{b3}{364mm}{515mm} +\pxgtmb@addpapersize{a2}{420mm}{594mm} +\pxgtmb@addpapersize{b2}{515mm}{728mm} +\pxgtmb@addpapersize{a1}{594mm}{841mm} +\pxgtmb@addpapersize{b1}{728mm}{1030mm} +\pxgtmb@addpapersize[n]{a0}{841mm}{1189mm} +\pxgtmb@addpapersize[n]{b0}{1030mm}{1456mm} + +%% package options part 3 +% ISO C series +\pxgtmb@addpapersize[a9]{c10}{28mm}{40mm} +\pxgtmb@addpapersize[a8]{c9}{40mm}{57mm} +\pxgtmb@addpapersize[a7]{c8}{57mm}{81mm} +\pxgtmb@addpapersize[a6]{c7}{81mm}{114mm} +\pxgtmb@addpapersize[a5]{c6}{114mm}{162mm} +\pxgtmb@addpapersize[a4]{c5}{162mm}{229mm} +\pxgtmb@addpapersize[a3]{c4}{229mm}{354mm} +\pxgtmb@addpapersize[a2]{c3}{324mm}{458mm} +\pxgtmb@addpapersize[a1]{c2}{458mm}{648mm} +\pxgtmb@addpapersize[a0]{c1}{648mm}{917mm} +\pxgtmb@addpapersize[n]{c0}{917mm}{1297mm} +% misc +\pxgtmb@addpapersize[b4]{a4j}{210mm}{297mm} +\pxgtmb@addpapersize[b5]{a5j}{148mm}{210mm} +\pxgtmb@addpapersize[a3]{b4j}{257mm}{364mm} +\pxgtmb@addpapersize[a4]{b5j}{182mm}{257mm} +\pxgtmb@addpapersize[b4]{a4var}{210mm}{283mm} +\pxgtmb@addpapersize[a4]{b5var}{182mm}{230mm} +\pxgtmb@addpapersize[a3]{letter}{8.5in}{11in} +\pxgtmb@addpapersize[a3]{legal}{8.5in}{14in} +\pxgtmb@addpapersize[a4]{executive}{7.25in}{10.5in} +\pxgtmb@addpapersize[a5]{hagaki}{100mm}{148mm} + +%% package options part 4 +\def\pxgtmb@pdfbox@status{0} +\DeclareOption{pdfbox}{\def\pxgtmb@pdfbox@status{1}} +\DeclareOption{dvips}{\def\pxgtmb@driver{s}} +\DeclareOption{dvipdfmx}{\def\pxgtmb@driver{m}} +\DeclareOption{xetex}{\def\pxgtmb@driver{x}} +\DeclareOption{pdftex}{\def\pxgtmb@driver{p}} +\DeclareOption{luatex}{\def\pxgtmb@driver{l}} + +%% default options +\ExecuteOptions{tombowbanner}% package defaults to tombowdatetrue +\ProcessOptions + +%% display search result +% if any of explicit size option is specified, \ifpxgtmb@switch = \iftrue. +% otherwise, automatic size detection should be successful. +\ifpxgtmb@switch\else + % check status + \@tempcnta=\z@\relax + \ifx\pxgtmb@guessedpaper\@empty + \advance\@tempcnta\@ne\relax + \fi + \ifx\pxgtmb@guessedtombow\@empty + \advance\@tempcnta\tw@\relax + \else\if n\pxgtmb@guessedtombow + \advance\@tempcnta\tw@\relax + \fi\fi + % message + \ifodd\@tempcnta + %\PackageWarningNoLine\pxgtmb@pkgname{% + % No size option specified, and automatic papersize\MessageBreak + % detection also failed} + \else + \typeout{***** Package \pxgtmb@pkgname\space detected \pxgtmb@guessedpaper paper. *****} + \fi + \ifnum\@tempcnta>\@ne\relax + \PackageWarningNoLine\pxgtmb@pkgname{% + Output size cannot be determined. Please add size\MessageBreak + option (e.g. `tombow-a4') to specify output size.\MessageBreak + Falling back to +1in ..} + \stockwidth\paperwidth \advance\stockwidth 2in + \stockheight\paperheight \advance\stockheight 2in + \else + \typeout{***** Now the output size is automatically set to \pxgtmb@guessedtombow. *****} + \fi +\fi + +%% warnings +\ifdim\stockwidth<\paperwidth + \PackageWarningNoLine\pxgtmb@pkgname{% + \string\stockwidth\space is smaller than \string\paperwidth!\MessageBreak + Is this really what you want?} +\fi +\ifdim\stockheight<\paperheight + \PackageWarningNoLine\pxgtmb@pkgname{% + \string\stockheight\space is smaller than \string\paperheight!\MessageBreak + Is this really what you want?} +\fi + +%% pdf "digital tombo" (driver-dependent) +% the box size calculation is delayed until \AtBeginDocument +% to allow users to change \@tombowbleed in the preamble + +% convert pt -> bp +\def\pxgtmb@PDF@setbp#1#2{% + \@tempdima=.996264#2\relax % 0.996264 = 72/72.27 (cf. 1in = 72.27pt = 72bp) + \@tempdima=\pxgtmb@magscale\@tempdima % adjustment for jsclasses-style \mag employment + \edef#1{\strip@pt\@tempdima}} +% calculate and create pdf boxes +\def\pxgtmb@PDF@calcbox{% + \begingroup + % provide fallback definition inside this group + \ifx\pxgtmb@magscale\@undefined + \def\pxgtmb@magscale{1}% + \fi + % set pdf boxes in bp unit + \pxgtmb@PDF@setbp\pxgtmb@PDF@crop@ur@x\stockwidth + \pxgtmb@PDF@setbp\pxgtmb@PDF@crop@ur@y\stockheight + \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ll@x{\dimexpr(\stockwidth-\paperwidth)/2}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ll@y{\dimexpr(\stockheight-\paperheight)/2}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ur@x{\dimexpr(\stockwidth+\paperwidth)/2}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@trim@ur@y{\dimexpr(\stockheight+\paperheight)/2}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@bleed@ll@x{\dimexpr(\stockwidth-\paperwidth)/2-\@tombowbleed}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@bleed@ll@y{\dimexpr(\stockheight-\paperheight)/2-\@tombowbleed}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@bleed@ur@x{\dimexpr(\stockwidth+\paperwidth)/2+\@tombowbleed}% + \pxgtmb@PDF@setbp\pxgtmb@PDF@bleed@ur@y{\dimexpr(\stockheight+\paperheight)/2+\@tombowbleed}% + \xdef\pxgtmb@PDF@CTM{% + %% CropBox: normally implicit (same as MediaBox, large paper size) + %% however, pdfx.sty in PDF/X mode sets /CropBox explicitly, so I need to override it! + \ifpxgtmb@pdfx@x + \noexpand\pxgtmb@PDF@begin + /CropBox [0 0 + \pxgtmb@PDF@crop@ur@x\space + \pxgtmb@PDF@crop@ur@y] \noexpand\pxgtmb@PDF@end + \fi + %% BleedBox: explicit (final paper size + surrounding \@tombowbleed) + \noexpand\pxgtmb@PDF@begin + /BleedBox [\pxgtmb@PDF@bleed@ll@x\space + \pxgtmb@PDF@bleed@ll@y\space + \pxgtmb@PDF@bleed@ur@x\space + \pxgtmb@PDF@bleed@ur@y] \noexpand\pxgtmb@PDF@end + %% TrimBox: explicit (final paper size) + \noexpand\pxgtmb@PDF@begin + /TrimBox [\pxgtmb@PDF@trim@ll@x\space + \pxgtmb@PDF@trim@ll@y\space + \pxgtmb@PDF@trim@ur@x\space + \pxgtmb@PDF@trim@ur@y] \noexpand\pxgtmb@PDF@end + %% ArtBox: implicit + %% [Note] PDF/X requires /TrimBox or /ArtBox but not both! + }% + \endgroup +} + +% do it +\AtBeginDocument{\pxgtmb@PDF@emit} +\def\pxgtmb@PDF@emit{% + % handle compatibility with pdfx.sty here; + % if pdfx.sty with PDF/X mode detected, force [pdfbox] option! + \pxgtmb@handle@pdfx + \ifpxgtmb@pdfx@x\def\pxgtmb@pdfbox@status{1}\fi + % start actual procedure for [pdfbox] option + \if 1\pxgtmb@pdfbox@status +%% supported drivers: dvips, dvipdfmx, XeTeX, pdfTeX, LuaTeX +\ifnum0\ifx\pdfvariable\@undefined\else\the\outputmode\fi=0\relax +\ifnum0\ifx\pdfpageattr\@undefined\else\the\pdfoutput\fi=0\relax + %% for DVI output or XeTeX + \ifx\XeTeXversion\@undefined + \chardef\pxgtmb@errlevel=\z@ + % check graphics/graphicx/color status + \ifx\Gin@driver\@undefined + \ifx\pxgtmb@driver\@undefined % driver option unavailable + \PackageError{\pxgtmb@pkgname}{% + Option `pdfbox' is driver-dependent!\MessageBreak + Please add a driver option}\@ehc + \def\pxgtmb@driver{s}% fallback + \fi + \else + % check consistency + \def\pxgtmb@tempa{dvips.def}\ifx\Gin@driver\pxgtmb@tempa + \ifx\pxgtmb@driver\@undefined + \def\pxgtmb@driver{s}% pass + \else + \if s\pxgtmb@driver\else \chardef\pxgtmb@errlevel=\@ne \fi + \fi + \else\def\pxgtmb@tempa{dvipdfmx.def}\ifx\Gin@driver\pxgtmb@tempa + \ifx\pxgtmb@driver\@undefined + \def\pxgtmb@driver{m}% pass + \else + \if m\pxgtmb@driver\else \chardef\pxgtmb@errlevel=\@ne \fi + \fi + \else + \ifx\pxgtmb@driver\@undefined + \PackageError{\pxgtmb@pkgname}{% + Option `pdfbox' is driver-dependent!\MessageBreak + Please add a driver option}\@ehc + \def\pxgtmb@driver{s}% fallback + \fi + \fi\fi + \ifnum\pxgtmb@errlevel>\z@ + \PackageWarningNoLine{\pxgtmb@pkgname}{% + Inconsistent driver option detected!\MessageBreak + Package `graphics' or `color' already\MessageBreak + loaded with different driver option}\@ehc + \fi + \fi + \else + \def\pxgtmb@driver{x} + \fi + % required for putting \special to every page + \ifx\pfmtname\@undefined + \RequirePackage{atbegshi} + \else + \IfFileExists{pxatbegshi.sty} + {\RequirePackage{pxatbegshi}} + {\RequirePackage{atbegshi}} + \fi + % do it + \if x\pxgtmb@driver + %% for XeTeX (similar to dvipdfmx, except for paper size) + \AtBeginDocument{% + \pxgtmb@PDF@calcbox + \def\pxgtmb@PDF@begin{}\def\pxgtmb@PDF@end{}% + \edef\pxgtmb@PDF@CTM{{pdf:put @thispage << \pxgtmb@PDF@CTM >>}}} + % force paper size + \pdfpagewidth\stockwidth \pdfpageheight\stockheight + % emit pdf boxes + \AtBeginShipout{\setbox\AtBeginShipoutBox=\vbox{% + \baselineskip\z@skip\lineskip\z@skip\lineskiplimit\z@ + \expandafter\special\pxgtmb@PDF@CTM % here! + \copy\AtBeginShipoutBox}} + \else + \if s\pxgtmb@driver + %% for dvips + \AtBeginDocument{% + \pxgtmb@PDF@calcbox + \def\pxgtmb@PDF@begin{[ }\def\pxgtmb@PDF@end{/PAGE pdfmark }% + \edef\pxgtmb@PDF@CTM{{ps:SDict begin \pxgtmb@PDF@CTM end}}} + \else\if m\pxgtmb@driver + %% for dvipdfmx + \AtBeginDocument{% + \pxgtmb@PDF@calcbox + \def\pxgtmb@PDF@begin{}\def\pxgtmb@PDF@end{}% + \edef\pxgtmb@PDF@CTM{{pdf:put @thispage << \pxgtmb@PDF@CTM >>}}} + \else + %% for others (in case graphics option wrong) + \PackageError{\pxgtmb@pkgname}{Sorry, driver unsupported}\@ehc + \def\pxgtmb@PDF@CTM{{}}% dummy + \fi\fi + %% common + \begingroup + % when jsclasses-style \mag employment is assumed ... + % [Note] \special{papersize=,} accepts only non-true units + % and evaluates them as if they were true units! + \ifx\pxgtmb@magscale\@undefined\else + \stockwidth \pxgtmb@magscale\stockwidth + \stockheight\pxgtmb@magscale\stockheight + \fi + \xdef\pxgtmb@PDF@size{{papersize=\the\stockwidth,\the\stockheight}} + \endgroup + \AtBeginShipout{\setbox\AtBeginShipoutBox=\vbox{% + \baselineskip\z@skip\lineskip\z@skip\lineskiplimit\z@ + % force paper size + \expandafter\special\pxgtmb@PDF@size + % emit pdf boxes + \expandafter\special\pxgtmb@PDF@CTM % here! + \copy\AtBeginShipoutBox}} + \fi +\else + %% for pdfTeX + \def\pxgtmb@driver{p} + % force paper size + \pdfpagewidth\stockwidth \pdfpageheight\stockheight + % emit pdf boxes + \AtBeginDocument{% + \pxgtmb@PDF@calcbox + \def\pxgtmb@PDF@begin{}\def\pxgtmb@PDF@end{}% + \edef\pxgtmb@PDF@CTM{{\pxgtmb@PDF@CTM}}% + \expandafter\pdfpageattr\pxgtmb@PDF@CTM} +\fi\else + %% for LuaTeX + \def\pxgtmb@driver{l} + % force paper size + \pagewidth\stockwidth \pageheight\stockheight + % emit pdf boxes + \AtBeginDocument{% + \pxgtmb@PDF@calcbox + \def\pxgtmb@PDF@begin{}\def\pxgtmb@PDF@end{}% + \edef\pxgtmb@PDF@CTM{pageattr{\pxgtmb@PDF@CTM}}% + \expandafter\pdfvariable\pxgtmb@PDF@CTM} +\fi + \fi +} + +%% make visible tombow box according to the current status of +%% \@bannerfont, \@bannertoken, \@tombowwidth & \@tombowbleed +\maketombowbox + +%% shift amount +\hoffset .5\stockwidth +\advance\hoffset -.5\paperwidth +\advance\hoffset-1truein\relax +\voffset .5\stockheight +\advance\voffset -.5\paperheight +\advance\voffset-1truein\relax + +%% user interface +\newcommand{\settombowbanner}[1]{% + \iftombowdate\else + \PackageWarning{\pxgtmb@pkgname}{% + Package option `tombowbanner' is not effective.\MessageBreak + The banner may be discarded}% + \fi + \@bannertoken{#1}\maketombowbox} +\newcommand{\settombowbannerfont}[1]{% + \font\@bannerfont=#1\relax \maketombowbox} +\newcommand{\settombowwidth}[1]{% + \setlength{\@tombowwidth}{#1}\maketombowbox} +\newcommand{\settombowbleed}[1]{% + \def\@tombowbleed{#1}\maketombowbox} +\newcommand{\settombowcolor}[1]{% + \def\@tombowcolor{#1}} +% forbid changing \@tombowbleed after \begin{document} +% because pdf boxes are calculated only inside \AtBeginDocument +\@onlypreamble\settombowbleed + +%% patch internal of pdfpages.sty to work with tombow +%% (tested on pdfpages 2017/10/31 v0.5l) +%% Note the code is the same as that of pxpdfpages.sty, +%% but reserved here since gentombow.sty can be used on +%% any LaTeX format +%% (cf. pxpdfpages.sty is restricted to (u)pLaTeX) +\def\pxgtmb@patch@pdfpages{% + \RequirePackage{etoolbox} + \patchcmd{\AM@output}{% + \setlength{\@tempdima}{\AM@xmargin}% + \edef\AM@xmargin{\the\@tempdima}% + \setlength{\@tempdima}{\AM@ymargin}% + \edef\AM@ymargin{\the\@tempdima}% + }{% + \setlength{\@tempdima}{\AM@xmargin\iftombow+1in\fi}% + \edef\AM@xmargin{\the\@tempdima}% + \setlength{\@tempdima}{\AM@ymargin\iftombow-1in\fi}% + \edef\AM@ymargin{\the\@tempdima}% + } + {\PackageInfo{\pxgtmb@pkgname}{Patch for pdfpages applied}} + {\PackageWarningNoLine{\pxgtmb@pkgname}{Patch for pdfpages failed}}% +} +%% however, if running (u)pLaTeX, use pxpdfpages.sty if available +\ifx\pfmtname\@undefined\else + \IfFileExists{pxpdfpages.sty}{% + \def\pxgtmb@patch@pdfpages{\RequirePackage{pxpdfpages}}% + }{} +\fi +%% do it +\AtBeginDocument{\@ifpackageloaded{pdfpages}{\pxgtmb@patch@pdfpages}{}} + +%% patch pdfx.sty +%% (tested on pdfx 2019/02/27 v1.6.3) +\def\pxgtmb@handle@pdfx{\@ifpackageloaded{pdfx}{\let\ifpxgtmb@pdfx@x\ifpdfx@x}{}} + +\endinput diff --git a/macros/latex/contrib/gentombow/gentombow.tex b/macros/latex/contrib/gentombow/gentombow.tex new file mode 100644 index 0000000000..3f6a1ada64 --- /dev/null +++ b/macros/latex/contrib/gentombow/gentombow.tex @@ -0,0 +1,302 @@ +%# -*- ascii characters only -*- + +\documentclass[a4paper]{article} +\usepackage{doc} +\makeatletter +%%% dangerous bend +\font\man=manfnt at 10pt +\def\dbend{\leavevmode\raise0pt\hbox{\man\char'177}} +\newenvironment{dangerous}{% + \ifnum\@listdepth>\z@ + \GenericError{}{Do not use `dangerous' environment inside any list}{}{} + \fi + \par\addvspace\medskipamount + \@tempdima=\dimexpr\textwidth-2zw\relax\small + \divide\@tempdima by\dimexpr1zw\relax\@tempcnta=\@tempdima + \leftskip=\dimexpr\textwidth-\@tempcnta zw\relax + \@totalleftmargin\dimexpr\leftskip+0zw + \linewidth=\dimexpr\@tempcnta zw-0zw + \parindent1zw\noindent\kern-\leftskip\hbox to\leftskip{\dbend\hss}% + \everypar{\everypar{}}\ignorespaces +}{\par\addvspace\medskipamount} +%%% misc +\newcommand{\Meta}[1]{$\langle$\mbox{}\textit{#1}\mbox{}$\rangle$} +%%% +\makeatother +\usepackage{longtable} +\usepackage[pdfbox]{gentombow} +%\usepackage{bxpapersize} +\GetFileInfo{gentombow.sty} +\title{Package \textsf{gentombow} \fileversion} +\author{Hironobu Yamashita} +\date{\filedate} +\begin{document} + +\maketitle + +It is convenient to print documents for final smaller paper sizes +on paper of the printer's standard physical paper size; +it allows printing close to the logical paper edge +and even outside the logical page. + +This package \textsf{gentombow} provides a Japanese-style +crop marks (called `tombow' in Japanese) for trimming paper stacks, +and place the document page at the center of a larger physical +paper sheet. It automatically detects the page size +(\verb+\paperwidth+, \verb+\paperheight+) which is +going to be set by document class. +This document itself is a demonstration of this package, +with final A4 paper printed on B4 (JIS B4; not ISO B4!) paper. + +A basic usage: +\begin{verbatim} + \documentclass[a4paper]{article} + \usepackage{gentombow} + \usepackage{graphicx} + \begin{document} + The content + \end{document} +\end{verbatim} + +Note that this package does nothing about output paper size +specification; use one of the followings to do it. +\begin{itemize} +\item \textsf{graphicx} package + with \texttt{setpagesize} feature added in 2016 + (supports all engines) +\item \textsf{bxpapersize} package + (supports all engines; by Takayuki YATO) +\item \textsf{bounddvi} package + (supports only DVI output mode; part of \textsf{gentombow} bundle) +\end{itemize} + +This package is part of \textsf{gentombow} bundle: +\begin{verbatim} + https://github.com/aminophen/gentombow +\end{verbatim} +Originally it was part of \textsf{platex-tools} bundle, +but it has been moved since March 2018. + +\section{Basic Functions} + +First, I introduce some basic functions of \textsf{gentombow} package. + +\subsection{Automatic Determination of Output Size} + +In this package, +the following printer's standard physical paper sizes are predefined; +A series (\texttt{a0}--\texttt{a10}), +B series (\texttt{b0}--\texttt{b10}), +C series (\texttt{c0}--\texttt{c10}), +\texttt{letter}, \texttt{legal} and \texttt{executive}. +In the current release, `B series' is JIS standard, +not ISO standard (this might be changed in the near future). +Also, some variations \texttt{a4var} and \texttt{b5var} are predefined. + +When one of the above sizes (except \texttt{a0}, \texttt{b0} +and \texttt{c0}) is detected, the output size is +automatically determined along with the following rule: +\begin{itemize} +\item When A series detected: + the output is going to be larger B series +\item When B/C series or + \texttt{letter}, \texttt{legal}, \texttt{executive} detected: + the output is going to be larger A series +\end{itemize} +The crop marks are automatically added. +The orientation (landscape/portrait) of the input paper is +also preserved. + +The following list shows common examples: +\begin{longtable}[c]{cc} + \hline + Detected page size & Output size \\ + \hline + a6 & b6 \\ + b6 & a5 \\ + a5 & b5 \\ + b5 & a4 \\ + a4 & b4 \\ + b4 & a3 \\ + a3 & b3 \\ + b3 & a2 \\ + \hline + c6 & a5 \\ + c5 & a4 \\ + c4 & a3 \\ + c3 & a2 \\ + \hline + letter & a3 \\ + legal & a3 \\ + executive & a4 \\ + \hline +\end{longtable} + +\subsection*{When Automatic Determination Failed} + +When the page size is different from any of the predefined sizes, +the page is placed with the surrounding 1~inch margins. +For example, when the page has $100\,\mathrm{mm}$ width and +$200\,\mathrm{mm}$ height, the output size is going to be +$100\,\mathrm{mm}+2\,\mathrm{in}$ width and +$200\,\mathrm{mm}+2\,\mathrm{in}$ height. + +\subsection{Job Info Printing} + +By default, the crop marks are printed with a banner, which shows +a job info like \makeatletter\texttt{\the\@bannertoken}\makeatother. +The format is similar to \verb+tombow+ option, which is +available in most of the common Japanese classes. +The default also reacts to \verb+tombo+ (without a job info) or +\verb+mentuke+ (do not print actual crop marks) class options. + +\section{Package Options} + +You can specify output size and/or disable job info printing +using package options. + +\subsection{Explicit Specification of Output Size} + +You can also force the output size using package option. +For example, +\begin{verbatim} + \documentclass[a4paper]{article} + \usepackage[tombow-a4]{gentombow} + \begin{document} + The content + \end{document} +\end{verbatim} +forces the output size to be a3 (the automatic determination +`b4' is discarded). Available sizes are the same as +the predefined sizes, that is, +A series (\texttt{a0}--\texttt{a10}), +B series (\texttt{b0}--\texttt{b10}), +C series (\texttt{c0}--\texttt{c10}) and +\texttt{a4var}, \texttt{b5var}, +\texttt{letter}, \texttt{legal}, \texttt{executive}. +The orientation (landscape/portrait) of the input paper is +also preserved again. + +The option format is: +\Meta{crop mark format}\texttt{-}\Meta{output size}. +The crop mark format is one of the following: +\verb+tombow+ (default), \verb+tombo+ (without a job info), +\verb+mentuke+ (do not print actual crop marks). + +\subsection{Disabling Job Info Printing} + +When you specify the output size explicitly, the crop mark format +can be given at the same time, as described previously. +When the output size is automatically determined, you can disable +job info printing by \verb+notombowbanner+ option. + +\section{Customization of Crop Mark} + +The \textsf{pxgentombow} package provides some commands to +customize crop mark format. + +\subsection{Banner content} + +Using \verb+\settombowbanner+, you can set the banner content. +An example using \verb+\pdfcreationdate+ (pdf\TeX\ primitive) +\begin{verbatim} + \documentclass[a4paper]{article} + \usepackage{gentombow} + \settombowbanner{\jobname\space (\pdfcreationdate)} + \begin{document} + The content + \end{document} +\end{verbatim} +will result in +{\settombowbanner{\jobname\space (\pdfcreationdate)}% + \makeatletter\texttt{\the\@bannertoken}\makeatother}. +The argument is an arbitrary token list. + +\subsection{Banner font} + +Using \verb+\settombowbannerfont+, you can change the font +with which the banner is printed. +\begin{verbatim} + \settombowbannerfont{cmss10 at 9pt} +\end{verbatim} +This feature internally calls the \TeX\ primitive \verb+\font+, +and accepts all fonts supported by the engine. When Lua\TeX\ or +Xe\TeX\ is used, a native OpenType font can also be given. + +\subsection{Crop mark line width} + +By default, the line width of crop marks is 0.1~pt. +This can be change to 1~pt by \verb+\settombowwidth{1pt}+. +The argument is an arbitrary dimension. + +\subsection{Bleed margin width} + +By default, the bleed margin width is 3~mm. +This can be change to 5~mm by \verb+\settombowwidth{5mm}+. +The argument is an arbitrary dimension. + +\subsection{Crop mark color} + +Set the color of crop marks. Package \textsf{xcolor} (recommended) or +\textsf{xcolor} is required. +For example, \verb+\settombowcolor{\color[cmyk]{0,1,0,0}}+ sets magenta. + +\section{Setting PDF page box (``digital tombow'')} + +This is an optional driver-dependent feature. +When \textsf{gentombow} is required with the option \verb+pdfbox+, +following page boxes are emitted to the output PDF file. +The paper size (\verb+/MediaBox+) is also corrected. +\begin{itemize} +\item \verb+/TrimBox+: final paper size. +\item \verb+/BleedBox+: paper size plus bleed margin. +\item \verb+/CropBox+ and \verb+/ArtBox+ are not set. +\end{itemize} +Note: if the package \textsf{pdfx} is loaded with PDF/X mode, +this optional feature is automatically enabled. +Also, \verb+/CropBox+ is set explicitly. + +\section{Additional Notes} + +Here is some additional notes for use with several classes/packages. + +\subsection{Note for \textsf{BXjscls} users} + +When using \textsf{BXjscls} (by Takayuki YATO) with size option +other than 10pt, please add \verb+nomag+ or \verb+nomag*+ to the +class option. For example, +\begin{verbatim} + \documentclass[a4paper,14pt]{bxjsarticle} + \usepackage{gentombow} +\end{verbatim} +will not work as expected (\textsf{gentombow} throws an error +for safety). + +\subsection{Note about Layout Settings} + +You should not change \verb+\hoffset+ or \verb+\voffset+ to non-zero +value, for the purpose of layout settings. Such settings will +conflict with the feature of \textsf{gentombow} package. +To set page layout correctly, you should adjust \verb+\oddsidemargin+ +or \verb+\topmargin+, or leave it to \textsf{geometry} package. + +\section*{Change History} + +\begin{itemize} + \item 2017/12/17 v0.9 First CTAN release + \item 2018/03/16 v0.9e Add \verb+\settombowbanner+, + \verb+\settombowbannerfont+ and + \verb+\settombowwidth+. + \item 2018/05/17 v0.9g Add \verb+pdfbox+ option, + \verb+\settombowbleed+ and + \verb+\settombowcolor+. + \item 2018/08/20 v0.9h Add \texttt{hagaki} size for paper detection, + improve patches for \textsf{pdfpages}. + \item 2018/08/30 v0.9j Support \textsf{jsclasses}-style \verb+\mag+ employment + also with \verb+pdfbox+ option. + Fix a bug that \verb+\settombowbleed+ is not + considered by \verb+/TrimBox+. + \item 2019/07/21 v0.9k Support \textsf{pdfx} package. +\end{itemize} + +\end{document} diff --git a/macros/latex/contrib/gentombow/pxgentombow.pdf b/macros/latex/contrib/gentombow/pxgentombow.pdf new file mode 100644 index 0000000000..a0da4121e0 Binary files /dev/null and b/macros/latex/contrib/gentombow/pxgentombow.pdf differ diff --git a/macros/latex/contrib/gentombow/pxgentombow.sty b/macros/latex/contrib/gentombow/pxgentombow.sty new file mode 100644 index 0000000000..ab28b38bb1 --- /dev/null +++ b/macros/latex/contrib/gentombow/pxgentombow.sty @@ -0,0 +1,16 @@ +% +% pxgentombow.sty +% written by Hironobu Yamashita (@aminophen) +% +% This package is part of the gentombow bundle. +% https://github.com/aminophen/gentombow +% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pxgentombow} + [2018/05/17 v0.9g Generate crop mark 'tombow'] +\PackageWarningNoLine{pxgentombow}{% + Package `pxgentombow' is now superseded by\MessageBreak + `gentombow', use `gentombow' instead} +\RequirePackageWithOptions{gentombow}% load it +\endinput diff --git a/macros/latex/contrib/gentombow/pxgentombow.tex b/macros/latex/contrib/gentombow/pxgentombow.tex new file mode 100644 index 0000000000..8a8c2616bd --- /dev/null +++ b/macros/latex/contrib/gentombow/pxgentombow.tex @@ -0,0 +1,25 @@ +%# -*- coding: utf-8 -*- +\ifx\epTeXinputencoding\undefined\else % defined in e-pTeX (> TL2016) + \epTeXinputencoding utf8 % ensure utf-8 encoding for platex +\fi + +\documentclass[a4paper]{jsarticle} +\usepackage{doc} +\usepackage{pxgentombow} +\usepackage{bounddvi} +\GetFileInfo{pxgentombow.sty} +\title{Package \textsf{pxgentombow}} +\author{Hironobu Yamashita} +\date{2018年5月17日} +\begin{document} + +\maketitle + +\begin{center} +The package \textsf{pxgentombow} is now superseded by \textsf{gentombow}! +\end{center} + +\textsf{pxgentombow}パッケージは、上位版である\textsf{gentombow}パッケージに +統一されました。代わりに\textsf{gentombow}パッケージを使用してください。 + +\end{document} -- cgit v1.2.3