summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/eskdx/source/eskdfreesize.sty.in
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/eskdx/source/eskdfreesize.sty.in
Initial commit
Diffstat (limited to 'macros/latex/contrib/eskdx/source/eskdfreesize.sty.in')
-rw-r--r--macros/latex/contrib/eskdx/source/eskdfreesize.sty.in174
1 files changed, 174 insertions, 0 deletions
diff --git a/macros/latex/contrib/eskdx/source/eskdfreesize.sty.in b/macros/latex/contrib/eskdx/source/eskdfreesize.sty.in
new file mode 100644
index 0000000000..8648ba6364
--- /dev/null
+++ b/macros/latex/contrib/eskdx/source/eskdfreesize.sty.in
@@ -0,0 +1,174 @@
+% 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 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Konstantin Korikov.
+%
+% This work consists of all files listed in manifest.txt.
+%
+
+% Пакет предоставляет возможность вставки листа
+% почти любого размера (ограничения описаны в руководстве
+% пользователя eskdx):
+
+m4_ESKDX_INIT
+m4_FILE_INIT
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{eskdfreesize}[m4_dnl
+m4_FILE_ID([[$Date:: 2010-02-20#$]]) Inserting Free Size Sheets]
+
+\RequirePackage{eskdstamp}
+
+% переключение размера возможно только в pdflatex.
+% Tем не менее, latex тоже сможет собрать такой документ,
+% но все большие страницы
+% обрежет по размерам формата, установленного в documentclass
+\RequirePackage{ifpdf}
+\ifpdf{}
+\else{\PackageWarningNoLine{eskdfreesize}
+ {It's better to compile this document with pdflatex.\MessageBreak
+ In DVI you will get only part of the inserted big sheet}}
+\fi
+
+
+
+% в eskdstamp для ускорения отрисовки рамки применен \savebox
+% в нашем случае это неудобно, будем рисовать персонально
+% на каждой странице
+\newcommand{\ESKDdrawFrameFree}{%
+ \put(\ESKDltu{\ESKDframeX},\ESKDltu{\ESKDframeY}){%
+ \setlength{\unitlength}{1mm}%
+ \begin{picture}(0,0)(0,0)
+ \linethickness{\ESKDlineThick}
+ \put(0,\ESKDltu{\ESKDframeH}){\line(1,0){\ESKDltu{\ESKDframeW}}}
+ \put(0,0){\line(1,0){\ESKDltu{\ESKDframeW}}}
+ \put(0,0){\line(0,1){\ESKDltu{\ESKDframeH}}}
+ \put(\ESKDltu{\ESKDframeW},0){\line(0,1){\ESKDltu{\ESKDframeH}}}
+ \end{picture}}}
+
+% содержимое нестандартной графы 32 по умолчанию
+\newcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDemptyFormatName}}
+
+% определим нашу собственную нестандартную графу 32
+\newcommand{\ESKDdrawColumnXXXIIfree}{%
+ \setlength{\ESKD@tmpdima}{\ESKDframeX+\ESKDframeW-50mm}%
+ \setlength{\ESKD@tmpdimb}{\ESKDframeY-3.7mm}%
+ \put(\ESKDltu{\ESKD@tmpdima},\ESKDltu{\ESKD@tmpdimb}){%
+ \makebox[50mm][r]{\ESKDfontIII\ESKDtheColumnXXXIIfree}}}
+
+
+
+% Определим новый стиль. Подробнее про определение своих стилей
+% можно прочитать в руководстве пользователя eskdx,
+% или заглянуть в eskdstamp.sty,
+% кусок оттуда был использован как основа для стиля freesize
+\ESKDnewStyle{freesize}{8mm}
+\ESKDputOnStyle{freesize}{frame}{\ESKDdrawFrameFree}
+\ESKDputOnStyle{freesize}{stamp}{\ESKDdrawStampIIa}
+\ifESKD@enable@columns@xix
+ \ESKDputOnStyle{freesize}{columnsxix}{\ESKDdrawColumnsXIX}
+\fi
+\ifESKD@enable@column@xxvi
+ \ESKDputOnStyle{freesize}{columnxxvi}{\ESKDdrawColumnXXVI}
+\fi
+\ifESKD@enable@columns@xxvii
+ \ESKDputOnStyle{freesize}{columnsxxvii}{\ESKDdrawColumnsXXVIIi}
+\fi
+\ifESKD@enable@column@xxxi
+ \ESKDputOnStyle{freesize}{columnxxxi}{\ESKDdrawColumnXXXI}
+\fi
+\ifESKD@enable@column@xxxii
+ % наша новая графа 32
+ \ESKDputOnStyle{freesize}{columnxxxii}{\ESKDdrawColumnXXXIIfree}
+\fi
+\ifESKD@enable@column@xxxiii
+ \ESKDputOnStyle{freesize}{columnxxxiii}{\ESKDdrawColumnXXXIII}
+\fi
+\ifESKD@enable@column@xxxiv
+ \ESKDputOnStyle{freesize}{columnxxxiv}{\ESKDdrawColumnXXXIV}
+\fi
+\ifESKD@zonelabels%
+ \ESKDputOnStyle{freesize}{zonelabels}{\ESKDdrawZoneLabelsI}
+\fi
+
+
+% вспомогательные счетчики для записей в лог
+\newcounter{ESKD@free@sizepagebegin}
+\newcounter{ESKD@free@sizepageend}
+
+% теперь самое сложное - сам переключатель
+\newcommand{\ESKDfreeSize}[3]{%
+ \ESKDclearDoublePage%
+ \setcounter{ESKD@free@sizepagebegin}{\value{page}}% запомним текущую страницу
+ \pdfpagewidth=#1%
+ \pdfpageheight=#2%
+ \setlength{\ESKD@origin@y}{#2-1in}%
+ \setlength{\ESKDframeW}{\pdfpagewidth-\ESKD@margin@si-\ESKD@margin@so}%
+ \setlength{\ESKDframeH}{\pdfpageheight-\ESKD@margin@t-\ESKD@margin@b}%
+ \ESKDstyle{freesize}%
+ \expandafter{#3}%
+ % зафиксируем факт вставки листа в \jobname.log
+ \ESKDclearDoublePage%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDemptyFormatName}}% сброс графы 32
+ \setcounter{ESKD@free@sizepageend}{\value{page}}%
+ \addtocounter{ESKD@free@sizepageend}{-1}%
+ \ifthenelse{\value{ESKD@free@sizepagebegin}<\value{ESKD@free@sizepageend}}% латех начал новую страницу
+ {\immediate\write0{eskdfreesize: sheet(s) with size (#1 x #2) inserted
+ at page(s) \noexpand[\arabic{ESKD@free@sizepagebegin}%
+ -\arabic{ESKD@free@sizepageend}\noexpand]}}
+ {\immediate\write0{eskdfreesize: sheet(s) with size (#1 x #2) inserted
+ at page(s) \noexpand[\arabic{ESKD@free@sizepageend}\noexpand]}}
+ % теперь вернем всё как было до нас
+ \setlength{\ESKD@origin@y}{\paperheight-1in}%
+ \pdfpageheight=\paperheight%
+ \pdfpagewidth=\paperwidth%
+ \setlength{\ESKDframeW}{\paperwidth-\ESKD@margin@si-\ESKD@margin@so}%
+ \setlength{\ESKDframeH}{\paperheight-\ESKD@margin@t-\ESKD@margin@b}%
+ \ESKDstyle{\ESKD@default@style@other}%
+ \newpage%
+}
+
+
+% Определим несколько готовых к употреблению форматов
+\newcommand{\ESKDlandscapeAIII}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa3FormatName}}%
+ \ESKDfreeSize{420mm}{297mm}{#1}}
+
+\newcommand{\ESKDportraitAIII}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa3FormatName}}%
+ \ESKDfreeSize{297mm}{420mm}{#1}}
+
+\newcommand{\ESKDlandscapeAII}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa2FormatName}}%
+ \ESKDfreeSize{594mm}{420mm}{#1}}
+
+\newcommand{\ESKDportraitAII}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa2FormatName}}%
+ \ESKDfreeSize{420mm}{594mm}{#1}}
+
+\newcommand{\ESKDlandscapeAI}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa1FormatName}}%
+ \ESKDfreeSize{841mm}{594mm}{#1}}
+
+\newcommand{\ESKDportraitAI}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa1FormatName}}%
+ \ESKDfreeSize{594mm}{841mm}{#1}}
+
+\newcommand{\ESKDlandscapeAZERO}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa0FormatName}}%
+ \ESKDfreeSize{1189mm}{841mm}{#1}}
+
+\newcommand{\ESKDportraitAZERO}[1]{%
+ \renewcommand\ESKDtheColumnXXXIIfree{\@nameuse{ESKDa0FormatName}}%
+ \ESKDfreeSize{841mm}{1189mm}{#1}}
+
+\newcommand{\ESKDlandscapeBanner}[1]{%
+ % Пятиметровое полотно для подшивки гармошкой в обычную папку А4.
+ % Просто для демонстрации
+ \ESKDfreeSize{5000mm}{297mm}{#1}}