LINUX.ORG.RU

Создание рамок в латехе (не по ГОСТу)

 ,


1

3

Доброго времени суток! Уважаемые форумчане, помогите пожалуйста решить несколько вопросов. Дело все в том, что при оформлении рабочих инструкций на нашем предприятии необходимо, чтобы каждый технический документ имел рамку. Причем эта рамка «самопальная». Латех я только начинаю осваивать. Как ее нарисовать я нашел здесь. Код несколько модифицировал:

\documentclass[a4paper,12pt,oneside]{scrartcl}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage{textcomp}
\newcommand*{\No}{\textnumero}

\textwidth=175mm
\textheight=260mm
\oddsidemargin=-.4mm
\headsep=5mm

\topmargin=-1in
\unitlength=1mm

\def\HL{\line(1,0){185}}
\def\Box#1#2{\makebox(#1,5){#2}}
\def\simpleGrad{\small\noindent\hbox to 0pt{%
\vbox to 0pt{%
\noindent\begin{picture}(185,287)(5,0)
\linethickness{0.3mm}
\put(0,0){\framebox(185,287){}}
\put(0,0){\Box{29}{Изменение}}
\put(0,5){\Box{13}{\No}}
\put(0,10){\Box{19}{Дата}}
\put(0, 15)\HL
\put(175,10){\Box{-31}{\ Лист \thepage}}
\put(175,5){\Box{-16}{Всего листов 1}}
\end{picture}
}}}

\makeatletter
\def\@oddhead{\simpleGrad}
\def\@oddfoot{}
\makeatother

\begin{document}
Много текста
\end{document}
Вроде получилось нормально, но остаются невыясненными следующие вопросы:

  1. Как сделать в правом верхнем углу колонтитул?
  2. Как сделать так, что бы слова в рамке «Лист» и «Всего листов» не смещались друг относительно друга?

Второй пункт поясню более детально. Дело в том, что если эти слова (например, «Лист 1», «Всего листов 9») выровнять, то при количестве листов 10 и более выравнивание сбивается. Заранее вам всем благодарен за проявленное внимание.



Последнее исправление: Gadenysh (всего исправлений: 1)

Как сделать в правом верхнем углу колонтитул?

Я для рамок элементарно делал: втыкал \parbox нужной ширины внутрь \vbox to 0pt{\hbox to 0pt{...}}, а там уже собственно текст колонтитула и был. Аналогично с номером страницы и т.п.

Вообще, проще всего целиком рамку в колонтитул вставлять и не париться.

Как сделать так, что бы слова в рамке «Лист» и «Всего листов» не смещались друг относительно друга?

Вручную каждый бокс в нужную позицию загнать.

Ептить! Узнаю свой код. Моя рамка =D

Только вместо нормальной кодировки зачем-то хрюникод.

// для «всего листов» либо пакет total-как-то-там используй, либо воткни в конце текста \ref{lastpage}, а в поле «total» пиши \pageref{lastpage}

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 3)
Ответ на: комментарий от Eddy_Em

Мил человек, только на Вас одна надежда, бо сил моих больше нет. Латех только начинаю осваивать, а тут эта рамка... Покажите пожалуйста на конкретном примере (с кодом) как эту рамку вставить в колонтитул и как в данном случае этот колонтитул написать, чтобы не парится. Вручную каждый бокс выровнять не получиться, ну у меня по крайней мере не получилось, ибо если «Лист 1» и «Всего листов 9» будут находится на одном уровне, то «Лист 2» и «Всего листов 13», например, на разных. Заранее Вам благодарен за помощь.

Gadenysh
() автор топика
Ответ на: комментарий от Gadenysh

Она уже сидит в колонтитуле: \def\@oddhead{\simpleGrad}.

Если просто копипастой заниматься, ничего работать не будет. Надо понимать что копипастишь.

Выравнивание там элементарно идет: \put(x,y){\Box{w}{text}} помещает по заданным (x,y) координатам бокс шириной w с текстом "text" (но если текст будет шире, то он вылезет за рамки бокса).

Чтобы бокс был в рамке, надо \framebox писать. И так далее. Читать мануал до прояснения.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Я то читаю, но не во все сразу могу вникнуть (не программист) - поэтому и прошу конкретный пример (если это конечно не сложно). Собственно я сюда поэтому на написал в надежде, что Вы ответите. А дальше буду разбираться.

Gadenysh
() автор топика
Ответ на: комментарий от Gadenysh
\documentclass[a4paper,12pt,oneside]{extarticle}
\usepackage[koi8-r]{inputenc}
\usepackage[english, russian]{babel}
\def\No{\textnumero}
\textwidth=175mm
\textheight=260mm
\oddsidemargin=-.4mm
\headsep=5mm

\topmargin=-1in
\unitlength=1mm

\def\VL{\line(0,1){15}}
\def\HL{\line(1,0){185}}
\def\Box#1#2{\makebox(#1,5){#2}}
\def\simpleGrad{\sl\small\noindent\hbox to 0pt{%
\vbox to 0pt{%
\noindent\begin{picture}(185,287)(5,0)
\linethickness{0.3mm}
\put(0,0){\framebox(185,287){}}
\put(0,0){\Box{7}{Лит.}}
\put(0, 15)\HL
\multiput(0, 5)(0, 5){2}{\line(1,0){65}}
\put(7, 0){\VL\Box{10}{Изм.}}
\put(17, 0){\VL\Box{23}{\No~докум.}}
\put(40, 0){\VL\Box{15}{Подп.}}
\put(55, 0){\VL\Box{10}{Дата}}
\put(65, 0){\VL\makebox(85,15){\large\sc\rightmark}}
\put(150, 0){\VL\makebox(35,10){\normalsize Лист: \thepage}}
\put(150,10){\line(1,0){35}}
\put(150,10){\makebox(35,5){Всего листов~\pageref{lastpage}}}
\end{picture}
}}}

\makeatletter
\pagestyle{headings}
\def\@oddhead{\simpleGrad}
\def\@oddfoot{}
\makeatother
\begin{document}
\noindent Страница 1, верх\hfill право
\tableofcontents
\section{Раздел 1}
\vfill
\noindent Страница 1, низ\hfill право
Страница 2
\newpage
\section{Еще раздел}
\subsection{Подраздел}
Текст
\newpage
\section{Очередной раздел}
\subsection{И Подраздел}
Текст


\label{lastpage}
\end{document}

но это не отменяет необходимости чтения Кнута.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Доброго времени суток! Большое спасибо за помощь. Более-менее разобрался. Несколько упростил (мне так более понятно) Ваш код, добавил выравнивание. Теперь надписи в боксах остаются на одном расстоянии друг относительно друга. Посмотрите пожалуйста, что я там наделал. Может что можно сделать лучше?

\documentclass[a4paper,12pt,oneside, draft]{scrartcl}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\def\No{\textnumero}
\textwidth=175mm
\textheight=260mm
\oddsidemargin=-.4mm
\headsep= 7mm

\topmargin=-1in
\unitlength=1mm

\def\simpleGrad{\small\noindent\hbox to 0pt{%
\vbox to 0pt{%
\noindent\begin{picture}(185,287)(5,0)
\linethickness{0.3mm}
\put(0,0){\framebox(185,287){}}
\put(0, 15){\line(1,0){185}}
\put(130, 281){\makebox(50,5)[r]{ДЛИННЫЙ КОЛОНТИТУЛ}}
\put(5,10){\makebox(35,5)[l]{Изменение}}
\put(5,5){\makebox(35,5)[l]{\No}}
\put(5,0){\makebox(35,5)[l]{Дата}}
\put(153,10){\makebox(35,5)[l]{Лист~\thepage}}
\put(153,5){\makebox(35,5)[l]{Всего листов~\pageref{lastpage}}}
\end{picture}
}}}

\makeatletter
\pagestyle{headings}
\def\@oddhead{\simpleGrad}
\def\@oddfoot{}
\makeatother
\begin{document}
\noindent Страница 1, верх\hfill право
\vfill
\noindent Страница 1, низ\hfill право    
\label{lastpage}
\end{document}
З.Ы. Еще раз спасибо за участие!

Gadenysh
() автор топика
Ответ на: комментарий от Eddy_Em

Вот такая вот рамка. А то что не по ГОСТу, так я про это даже в названии темы написал. Такие вот у нас требования на заводе к оформлению технической документации (рабочие инструкции, СОПы). Сегодня буду делать титульный лист. Там там тоже рамка, но несколько отличная от этой. А Вам ещё раз огромное спасибо за помощь.

Gadenysh
() автор топика
Ответ на: комментарий от Eddy_Em

Рамка на титульном листе

Доброго времени суток! Будьте так добры, подскажите, а как сделать, чтобы Ваша первоначальная рамка была на титульном листе? Как ни пытался, ну не хочет эта рамка отображаться на нем.

Gadenysh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.