latex-style-esdpx/xespdfreesize.sty
2020-03-14 15:04:02 +03:00

181 lines
7.7 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% Copyright 2006 Konstantin Korikov <lostclus@ua.fm>
%
% 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.
%
% Пакет предоставляет возможность вставки листа
% почти любого размера (ограничения описаны в руководстве
% пользователя xespdx):
%
% This is automaticaly generated file, do not edit it.
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xespdfreesize}[2020/03/20 v1.00 Inserting Free Size Sheets]
\RequirePackage{xespdstamp}
% переключение размера возможно только в pdflatex.
% Tем не менее, latex тоже сможет собрать такой документ,
% но все большие страницы
% обрежет по размерам формата, установленного в documentclass
\RequirePackage{ifpdf}
\ifpdf{}
\else{\PackageWarningNoLine{xespdfreesize}
{It's better to compile this document with pdflatex.\MessageBreak
In DVI you will get only part of the inserted big sheet}}
\fi
% в xespdstamp для ускорения отрисовки рамки применен \savebox
% в нашем случае это неудобно, будем рисовать персонально
% на каждой странице
\newcommand{\XESPDdrawFrameFree}{%
\put(\XESPDltu{\XESPDframeX},\XESPDltu{\XESPDframeY}){%
\setlength{\unitlength}{1mm}%
\begin{picture}(0,0)(0,0)
\linethickness{\XESPDlineThick}
\put(0,\XESPDltu{\XESPDframeH}){\line(1,0){\XESPDltu{\XESPDframeW}}}
\put(0,0){\line(1,0){\XESPDltu{\XESPDframeW}}}
\put(0,0){\line(0,1){\XESPDltu{\XESPDframeH}}}
\put(\XESPDltu{\XESPDframeW},0){\line(0,1){\XESPDltu{\XESPDframeH}}}
\end{picture}}}
% содержимое нестандартной графы 32 по умолчанию
\newcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDemptyFormatName}}
% определим нашу собственную нестандартную графу 32
\newcommand{\XESPDdrawColumnXXXIIfree}{%
\setlength{\XESPD@tmpdima}{\XESPDframeX+\XESPDframeW-50mm}%
\setlength{\XESPD@tmpdimb}{\XESPDframeY-3.7mm}%
\put(\XESPDltu{\XESPD@tmpdima},\XESPDltu{\XESPD@tmpdimb}){%
\makebox[50mm][r]{\XESPDfontIII\XESPDtheColumnXXXIIfree}}}
% Определим новый стиль. Подробнее про определение своих стилей
% можно прочитать в руководстве пользователя xespdx,
% или заглянуть в xespdstamp.sty,
% кусок оттуда был использован как основа для стиля freesize
\XESPDnewStyle{freesize}{8mm}
\@ifpackageloaded{xespdplain}{
\XESPDputOnStyle{freesize}{pagenumber}{\XESPDdrawPlainPageNumber}}
{
\XESPDputOnStyle{freesize}{frame}{\XESPDdrawFrameFree}
\XESPDputOnStyle{freesize}{stamp}{\XESPDdrawStampIIa}
\ifXESPD@enable@columns@xix
\XESPDputOnStyle{freesize}{columnsxix}{\XESPDdrawColumnsXIX}
\fi
\ifXESPD@enable@column@xxvi
\@ifclassloaded{xespdgraph}{% графа 26 нужна только для чертежей
\XESPDputOnStyle{freesize}{columnxxvi}{\XESPDdrawColumnXXVI}}
\fi
\ifXESPD@enable@column@xxxii
% наша новая графа 32
\XESPDputOnStyle{freesize}{columnxxxii}{\XESPDdrawColumnXXXIIfree}
\fi
\ifXESPD@enable@column@xxxiii
\XESPDputOnStyle{freesize}{columnxxxiii}{\XESPDdrawColumnXXXIII}
\fi
\ifXESPD@enable@column@xxxiv
\XESPDputOnStyle{freesize}{columnxxxiv}{\XESPDdrawColumnXXXIV}
\fi
\ifXESPD@zonelabels%
\XESPDputOnStyle{freesize}{zonelabels}{\XESPDdrawZoneLabelsI}
\fi}
% вспомогательные счетчики для записей в лог
\newcounter{XESPD@free@sizepagebegin}
\newcounter{XESPD@free@sizepageend}
% теперь самое сложное - сам переключатель
\newcommand{\XESPDfreeSize}[3]{%
\@ifundefined{XESPD@no@specii@sizes}{}{\XESPD@no@specii@sizes}% для нормальной работы с плазовой спецификацией
\XESPDclearDoublePage%
\setcounter{XESPD@free@sizepagebegin}{\value{page}}% запомним текущую страницу
\pdfpagewidth=#1%
\pdfpageheight=#2%
\setlength{\XESPD@origin@y}{#2-1in}%
\setlength{\XESPDframeW}{\pdfpagewidth-\XESPD@margin@si-\XESPD@margin@so}%
\setlength{\XESPDframeH}{\pdfpageheight-\XESPD@margin@t-\XESPD@margin@b}%
\XESPDstyle{freesize}%
\expandafter{#3}%
% зафиксируем факт вставки листа в \jobname.log
\XESPDclearDoublePage%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDemptyFormatName}}% сброс графы 32
\setcounter{XESPD@free@sizepageend}{\value{page}}%
\addtocounter{XESPD@free@sizepageend}{-1}%
\ifthenelse{\value{XESPD@free@sizepagebegin}<\value{XESPD@free@sizepageend}}% латех начал новую страницу
{\immediate\write0{xespdfreesize: sheet(s) with size (#1 x #2) inserted
at page(s) \noexpand[\arabic{XESPD@free@sizepagebegin}%
-\arabic{XESPD@free@sizepageend}\noexpand]}}
{\immediate\write0{xespdfreesize: sheet(s) with size (#1 x #2) inserted
at page(s) \noexpand[\arabic{XESPD@free@sizepageend}\noexpand]}}
% теперь вернем всё как было до нас
\setlength{\XESPD@origin@y}{\paperheight-1in}%
\pdfpageheight=\paperheight%
\pdfpagewidth=\paperwidth%
\setlength{\XESPDframeW}{\paperwidth-\XESPD@margin@si-\XESPD@margin@so}%
\setlength{\XESPDframeH}{\paperheight-\XESPD@margin@t-\XESPD@margin@b}%
\XESPDstyle{\XESPD@default@style@other}%
\newpage%
}
% Определим несколько готовых к употреблению форматов
\newcommand{\XESPDlandscapeAIV}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa4FormatName}}%
\XESPDfreeSize{297mm}{210mm}{#1}}
\newcommand{\XESPDportraitAIV}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa4FormatName}}%
\XESPDfreeSize{210mm}{297mm}{#1}}
\newcommand{\XESPDlandscapeAIII}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa3FormatName}}%
\XESPDfreeSize{420mm}{297mm}{#1}}
\newcommand{\XESPDportraitAIII}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa3FormatName}}%
\XESPDfreeSize{297mm}{420mm}{#1}}
\newcommand{\XESPDlandscapeAII}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa2FormatName}}%
\XESPDfreeSize{594mm}{420mm}{#1}}
\newcommand{\XESPDportraitAII}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa2FormatName}}%
\XESPDfreeSize{420mm}{594mm}{#1}}
\newcommand{\XESPDlandscapeAI}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa1FormatName}}%
\XESPDfreeSize{841mm}{594mm}{#1}}
\newcommand{\XESPDportraitAI}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa1FormatName}}%
\XESPDfreeSize{594mm}{841mm}{#1}}
\newcommand{\XESPDlandscapeAZERO}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa0FormatName}}%
\XESPDfreeSize{1189mm}{841mm}{#1}}
\newcommand{\XESPDportraitAZERO}[1]{%
\renewcommand\XESPDtheColumnXXXIIfree{\@nameuse{XESPDa0FormatName}}%
\XESPDfreeSize{841mm}{1189mm}{#1}}
\newcommand{\XESPDlandscapeBanner}[1]{%
% Пятиметровое полотно для подшивки гармошкой в обычную папку А4.
% Просто для демонстрации
\XESPDfreeSize{5000mm}{297mm}{#1}}