Приветствую.
Пытаюсь запилить для себя стиль страниц по ГОСТ 21.101–97 СПДС «Оосновные требования к проектной и рабочей документации». Вкратце, для тех кто не в курсе — это тот же ЕСКД, но с другими штампами, для строителей. Вот, что получилось
\documentclass[14pt,a4paper]{extarticle}
\usepackage{xltxtra}
\setmainfont{Linux Libertine O}
\usepackage{polyglossia}
\setmainlanguage{russian}
\usepackage{indentfirst}
\frenchspacing
% Поля страницы по ЕСКД
\usepackage[
left=30mm,
top=15mm,
right=15mm,
bottom=15mm,
footskip=10mm,
nohead,
nomarginpar,
driver=xetex
]{geometry}
% Создаем новые стили страницы
\makeatletter
\newcommand{\spds@titleheight}[1]{%
\setlength{\textheight}{\paperheight}
\addtolength{\textheight}{-#1}
\addtolength{\textheight}{-30mm}
}
% Титульный лист
\newcommand\ps@spdstitle{%
\spds@titleheight{0mm}
\renewcommand{\@oddhead}{}
\renewcommand{\@evenhead}{}
\renewcommand{\@oddfoot}{%
\unitlength=1mm
\begin{picture}(0,0)(10,0)
\linethickness{0.6mm}
\put(0,0){\line(1,0){185}}
\put(0,287){\line(1,0){185}}
\put(0,0){\line(0,1){287}}
\put(185,0){\line(0,1){287}}
\end{picture}
СПДС~— Титульный лист\hfill % Debug
}
\renewcommand{\@evenfoot}{}
}
% Первый лист — форма 5 по ГОСТ 21.101–97
\newcommand\ps@spdsformfive{%
\spds@titleheight{40mm}
\renewcommand{\@oddhead}{}
\renewcommand{\@evenhead}{}
\renewcommand{\@oddfoot}{%
\unitlength=1mm
\begin{picture}(0,0)(10,0)
\linethickness{0.6mm}
% Рамка
\put(0,0){\line(1,0){185}}
\put(0,287){\line(1,0){185}}
\put(0,0){\line(0,1){287}}
\put(185,0){\line(0,1){287}}
% Штамп
\put(0,25){\line(1,0){185}}
\put(0,40){\line(1,0){185}}
\put(0,30){\line(1,0){65}}
\put(135,15){\line(1,0){50}}
\put(135,20){\line(1,0){50}}
\put(20,0){\line(0,1){40}}
\put(40,0){\line(0,1){40}}
\put(55,0){\line(0,1){40}}
\put(65,0){\line(0,1){40}}
\put(135,0){\line(0,1){25}}
\put(150,15){\line(0,1){10}}
\put(165,15){\line(0,1){10}}
\put(10,25){\line(0,1){15}}
\put(30,25){\line(0,1){15}}
\linethickness{0.2mm}
\put(0,5){\line(1,0){65}}
\put(0,10){\line(1,0){65}}
\put(0,15){\line(1,0){65}}
\put(0,20){\line(1,0){65}}
\put(0,25){\line(1,0){65}}
\put(0,35){\line(1,0){65}}
\end{picture}
СПДС~— Основная надпись по форме 5\hfill % Debug
}
\renewcommand{\@evenfoot}{}
}
\makeatother
\begin{document}
\thispagestyle{spdstitle}
Тестовый текст в начале страницы.
\vfill
Тестовый текст в конце страницы.
\newpage
\pagestyle{spdsformfive}
%\newgeometry{bottom=55mm}
Тестовый текст в начале страницы.
\vfill
Тестовый текст в конце страницы.
\newpage
Тестовый текст в начале страницы.
\vfill
Тестовый текст в конце страницы.
\newpage
Тестовый текст в начале страницы.
\vfill
Тестовый текст в конце страницы.
\end{document}
Все более-менее работает, но в зависимости от формы штампа должна меняться высота текстового поля, за что отвечает служебная команда \spds@titleheight{}. Она и меняется, но для следующей за текущей страницы. А вот как сделать так, чтоб высота изменялась немедленно?
Можно, конечно, запилить для каждой формы штампа отдельную команду, которая сначала будет дергать \newgeometry{} из пакета geometry с нужными параметрами, а потом будет устанавливать стиль страницы, но выглядит это уж больно костыльно. Может есть способ довести до ума стиль страницы?
P.S. Компилировать XeLaTeX'ом или переделать преамбулу.