summaryrefslogtreecommitdiff
path: root/language/tibetan/pecha/pecha.cls
blob: 0507186effba908fa2d3cdba2ea896e0bf722613 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
%\iffalse (Meta-Kommentar)
% Eine Klasse zur Erstellung von Tibetischen Texten mit \TibTeX
% \fi
% \title{Eine \LaTeX2e~Klasse zur Erstellung tibetischer Texte mit \TibTeX}
% \author{Dieter Jäger}
% Version 0.1 - 10.11.2004
% Copyright 2004 by Dieter Jäger
% License: GPL

\ProvidesClass{pecha}[2004/11/10 v0.1 Tibetan Pecha document class]
\NeedsTeXFormat{LaTeX2e}
% Tibetan language package
\RequirePackage{ctib}

% This is needed to be able to do the margin texts
\RequirePackage{rotating}


% Set page dimensons
% All the page sizes from the standard classes
% But a5 or b5 may not be very usefull

\DeclareOption{a4pecha3}
   {\setlength\paperwidth {297mm}
    \setlength\paperheight {70mm}}
\DeclareOption{a4pecha2}
   {\setlength\paperwidth {297mm}
    \setlength\paperheight {140mm}}
\DeclareOption{a4paper}
   {\setlength\paperwidth {297mm}%
    \setlength\paperheight  {210mm}}
\DeclareOption{a5pecha3}
   {\setlength\paperwidth {210mm}%
    \setlength\paperheight  {47mm}}
\DeclareOption{a5pecha2}
   {\setlength\paperwidth {210mm}%
    \setlength\paperheight  {74mm}}
\DeclareOption{a5paper}
   {\setlength\paperwidth {210mm}%
    \setlength\paperheight  {148mm}}
\DeclareOption{b5pecha3}
   {\setlength\paperwidth {250mm}%
    \setlength\paperheight  {49.3mm}}
\DeclareOption{b5pecha2}
   {\setlength\paperwidth {250mm}%
    \setlength\paperheight  {74mm}}
\DeclareOption{b5pecha3}
   {\setlength\paperwidth {250mm}%
    \setlength\paperheight  {58.67mm}}
\DeclareOption{b5pecha2}
   {\setlength\paperwidth {250mm}%
    \setlength\paperheight  {88mm}}
\DeclareOption{b5paper}
   {\setlength\paperwidth {250mm}%
    \setlength\paperheight  {176mm}}
\DeclareOption{letterpecha3}
   {\setlength\paperwidth {11in}%
    \setlength\paperheight  {2.83in}}
\DeclareOption{letterpecha2}
   {\setlength\paperwidth {11in}%
    \setlength\paperheight  {4.25in}}
\DeclareOption{letterpaper}
   {\setlength\paperwidth {11in}%
    \setlength\paperheight  {8.5in}}
\DeclareOption{legalpecha3}
   {\setlength\paperwidth {14in}%
    \setlength\paperheight  {2.83in}}
\DeclareOption{legalpecha2}
   {\setlength\paperwidth {14in}%
    \setlength\paperheight  {4.25in}}
\DeclareOption{legalpaper}
   {\setlength\paperwidth {14in}%
    \setlength\paperheight  {8.5in}}
\DeclareOption{executivepaper}
   {\setlength\paperwidth {10.5in}%
    \setlength\paperheight  {2.42in}}
\DeclareOption{executivepaper}
   {\setlength\paperwidth {10.5in}%
    \setlength\paperheight  {3.625in}}
\DeclareOption{executivepaper}
   {\setlength\paperwidth {10.5in}%
    \setlength\paperheight  {7.25in}}

% This is from the book class
% May be changed in future ...
\newcommand\@ptsize{0}
\DeclareOption{8pt}{\renewcommand\@ptsize{8}}
\DeclareOption{9pt}{\renewcommand\@ptsize{9}}
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}

\@lowpenalty   51
\@medpenalty  151
\@highpenalty 301

%\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
%\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
%\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
%\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
%\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
%\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
%\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
%\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
%\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}


% option "rotate", standard: do not do that
% If set the class will rotate the even pages by 180 degrees
\newif\if@pecharotate
\@pecharotatefalse

% standard page frame, using double lines
\def\@pageframe#1{\@doubleframe{#1}}
\newif\if@fsingle
\@fsinglefalse
\newif\if@ffancy
\@ffancyfalse

\newlength\@rulers

\DeclareOption{rotate}{\@pecharotatetrue}
\DeclareOption{fancyframe}{
  \global\@fsingletrue\global\@ffancytrue
  \global\def\@pageframe#1{\@fancyframe{#1}}
}
\DeclareOption{doubleframe}{\@fsinglefalse \global\@rulers=9.2pt \global\def\@pageframe#1{\@doubleframe{#1}}}
\DeclareOption{simplefram}{\global\@rulers=1.6pt \global\def\@pageframe#1{\@fsingletrue \@singleframe{#1}}}

% The pageheight can be adjusted a little bit
\newlength\pecha@pheight
\DeclareOption{narrowpage}{\setlength\pecha@pheight{26ex}}
\DeclareOption{mediumpage}{\setlength\pecha@pheight{28ex}}
\DeclareOption{widepage}{\setlength\pecha@pheight{33ex}}
\DeclareOption{extrawide}{\setlength\pecha@pheight{36ex}}

\newif\if@septitle
\@septitlefalse
\DeclareOption{septitle}{\global\@septitletrue}

\ExecuteOptions{doubleframe,letterpaper,10pt,mediumpage}
\ProcessOptions


\renewcommand{\baselinestretch}{0.7}
\ifnum\@ptsize < 3
   \input{bk1\@ptsize.clo}
   \setlength\lineskip{1\p@}
   \setlength\normallineskip{1\p@}
%   \renewcommand\baselinestretch{}
   \setlength\parskip{0\p@ \@plus \p@}
\else
   \input{size\@ptsize.clo}
   \setlength\lineskip{\p@}
   \setlength\normallineskip{\p@}
%   \renewcommand\baselinestretch{}
   \setlength\parskip{\p@}
\fi


\ifx\pdftexversion\undefined
  \special{papersize=\the\paperwidth,\the\paperheight}
  \special{! /landplus90 true store}
\else
  \setlength\pdfpagewidth{\paperwidth}
  \setlength\pdfpageheight{\paperheight}
  \RequirePackage{times}
\fi

\setlength{\textheight}{\pecha@pheight}

\newlength{\@marginht}
\newlength{\@margindp}
\newlength{\@marginsep}

\newlength{\@pechadim}
\newlength{\@titledim}
\newlength{\@pechawidth}
\newlength{\@@textwidth} % speichert Textbreit für fancy
\newlength{\@titlewidth}
\newlength{\pechamargin}
\setlength{\pechamargin}{0.6in}

\newcounter{pechasheet}
\setcounter{pechasheet}{\@ne}
\@marginht 3ex
\@margindp 1ex

\@pechadim 6em % Abstand zu den Rändern
\advance\@pechadim by \@rulers % Summe der dicke aller vertikalen Linien
\advance\@pechadim by 2\@marginht % Höhe der Randboxen
\advance\@pechadim by 2\@margindp % Tiefe der Randboxen

\textwidth\paperwidth
\advance\textwidth by - 2\pechamargin % Abstand zu Papierrand, 0.6in beidseitig
\@pechawidth\textwidth
\@titledim 0.2\textwidth
\advance\textwidth by - \@pechadim

\@titlewidth\textwidth
\advance\@titlewidth by - \@titledim

\@@textwidth=\textwidth
\if@ffancy
  \advance\textwidth by - 12em % fancy Rahmen haben breite Ränder
\fi

\headheight 0pt
\headsep 0pt
\marginparsep 0pt
\marginparwidth 0pt
\footskip 0pt
\marginparpush 0pt

\topmargin \paperheight
\advance\topmargin by - \textheight
\advance\topmargin by -0.5 \topmargin
\advance\topmargin by - 1.1in
%\advance\topmargin by - 1.2in

\oddsidemargin \paperwidth
\advance \oddsidemargin by - \@pechawidth
\advance \oddsidemargin by - 0.5 \oddsidemargin
%\advance \oddsidemargin by - 1in
\advance \oddsidemargin by - 1.5\pechamargin
\evensidemargin \oddsidemargin

\pagenumbering{arabic}
\sloppy
%\raggedright
\parindent=0pt
\parskip12pt

% Some dimensons I will need

\newbox\@pbox
\newbox\@obox



% Some usefull and simple macros
\newcommand{\tibsmall}[1]{{\footnotesize \begin{tib} #1\end{tib}}}


% Translate numerals from 1 to 99 into words
% numeraly >=100 stay as is 
\def\tibnumeral#1{
\ifnum #1<100
  \ifcase #1
  % 1-10
    \or gcig \or gnyis \or gsum \or bzhi \or lnga
    \or drug \or bdun  \or b-rgyad \or dgu
    \or bcu
  % 11-20
    \or {bcu gcig} \or {bcu gnyis} \or {bcu gsum} \or {bcu bzhi} \or {bco lnga}
    \or {bcu drug} \or {bcu bdun} \or {bco b-rgyad} \or {bcu dgu} \or {nyi zhu}
  % 21 - 30
    \or {nyi zhu tsa gcig} \or {nyi zhu tsa gnyis} \or {nyi zhu tsa gsum}
    \or {nyi zhu tsa bzhi} \or {nyi zhu tse lnga} \or {nyi zhu tsa drug}
    \or {nyi zhu tsa bdun} \or {nyi zhu tsa b-rgyad} \or {nyi zhu tsa dgu}
    \or {gsum bcu}
  % 31 - 40
    \or {gsum bcu so gcig} \or {gsum bcu so gnyis} \or {gsum bcu so gsum}
    \or {gsum bcu so bzhi} \or {gsum bcu so lnga} \or {gsum bcu so drug}
    \or {gsum bcu so bdun} \or {gsum bcu so b-rgyad} \or {gsum bcu so dgu}
    \or {bzhi bcu}
  % 41 - 50
    \or {bzhi bcu zhe gcig} \or {bzhi bcu zhe gnyis} \or {bzhi bcu zhe gsum}
    \or {bzhi bcu zhe bzhi} \or {bzhi bcu zhe lnga} \or {bzhi bcu zhe drug}
    \or {bzhi bcu zhe bdun} \or {bzhi bcu zhe b-rgyad} \or {bzhi bcu zhe dgu}
    \or {lnga bcu}
  % 51 - 60
    \or {lnga bcu nga gcig} \or {lnga bcu nga gnyis} \or {lnga bcu nga gsum}
    \or {lnga bcu nga bzhi} \or {lnga bcu nge lnga} \or {lnga bcu nga drug}
    \or {lnga bcu nga bdun} \or {lnga bcu nga b-rgyad} \or {lnga bcu nga dgu}
    \or {drug bcu}
  % 61 - 70
    \or {drug bcu re gcig} \or {drug bcu re gnyis} \or {drug bcu re gsum}
    \or {drug bcu re bzhi} \or {drug bcu re lnga} \or {drug bcu re drug}
    \or {drug bcu re bdun} \or {drug bcu re b-rgyad} \or {drug bcu re dgu}
    \or {bdun bcu}
  % 71 - 80
    \or {bdun bcu don gcig} \or {bdun bcu don gnyis} \or {bdun bcu don gsum}
    \or {bdun bcu don bzhi} \or {bdun bcu don lnga} \or {bdun bcu don drug}
    \or {bdun bcu don bdun} \or {bdun bcu don b-rgyad} \or {bdun bcu don dgu}
    \or {b-rgyad bcu}
  % 81 -90
    \or {b-rgyad bcu rgya gcig} \or {b-rgyad bcu rgya gnyis}
    \or {b-rgyad bcu rgya gsum}
    \or {b-rgyad bcu rgya bzhi} \or {b-rgyad bcu rgya lnga}
    \or {b-rgyad bcu rgya drug}
    \or {b-rgyad bcu rgya bdun} \or {b-rgyad bcu rgya b-rgyad}
    \or {b-rgyad bcu rgya dgu}
    \or {dgu bcu}
  % 91 - 99
    \or {dgu bcu go gcig} \or {dgu bcu go gnyis} \or {dgu bcu go gsum}
    \or {dgu bcu go bzhi} \or {dgu bcu go lnga} \or {dgu bcu go drug}
    \or {dgu bcu go bdun} \or {dgu bcu go b-rgyad} \or {dgu bcu go dgu}
  \fi
\else
  #1
\fi
}

% Makros to create the right and left margin texts

\def\@oleft{}
\def\@@oleft{}
\def\@eleft{}
\def\@eright{}
\def\@oright{}
\def\@oddright{}
\def\@evenright{}
\def\@evenleft{}
\def\@oddleft{}
\def\@theleft{}
\def\@theright{}

\newcommand{\oddleft}[2]{\global\def\@oleft{#1}\global\def\@@oleft{#2}}
\newcommand{\oddright}[1]{\global\def\@oright{#1}}
\newcommand{\evenleft}[1]{\global\def\@eleft{#1}}
\newcommand{\evenright}[1]{\global\def\@eright{#1}}


% Print a title page (default: none)
\newif\if@pechatitle
\@pechatitlefalse


% Title page (similar to book.cls)
\def\title#1{\gdef\@title{#1}}
\def\@title{\@latex@error{No \noexpand\title given}\@ehc}

% vertical double line
\def\@doubleruler{\vrule\kern1.5pt\vrule}


% ignore standard chapter marks
\newcommand{\paragraph}[1]{}
\newcommand{\subparagraph}[1]{}
\newcommand{\section}[1]{\medskip}
\newcommand{\subsection}[1]{}
\newcommand{\subsubsection}[1]{}
\newcommand{\chapter}[1]{\bigskip}
\newcommand{\part}[1]{\bigskip}

\newcommand{\newsheet}{\clearpage\ifodd\c@page\else
    \hbox{}\newpage\fi}

% Titlepage environment
\newenvironment{titlepage}{%
  \newsheet
  \setcounter{page}\@ne
}%
{%
  \if@septitle 
    \newsheet
    \setcounter{page}\@ne
    \setcounter{pechasheet}{\@ne}
  \else
    \newpage
  \fi
}

% Print a title page with the typical frame
\newcommand{\maketitle}
{
  \global\@pechatitletrue
  \setbox\@pbox\hbox{\parbox{\@titlewidth}{\begin{center}\@title\par\end{center}}}
  % Beautify short titles
  %\ifdim\ht\@pbox < 2.5ex \ht\@pbox=2.5ex \dp\@pbox=1.25ex\fi
  % Calculate offsets to center the title page
  \setlength\@tempdima{\textwidth}
  \advance\@tempdima by - 12pt
  \advance\@tempdima by - 10em
  \advance\@tempdima by - \wd\@pbox
  \advance\@tempdima by - 0.5\@tempdima
  \ifdim\@tempdima < 0em \setlength\@tempdima{0em}\fi
  \setlength\@tempdimb{\textheight}
  \advance\@tempdimb - 4pt
  \advance\@tempdimb - 5em
  \advance\@tempdimb by - \ht\@pbox
  \advance\@tempdimb by - \dp\@pbox
  \advance\@tempdimb by - 0.5 \@tempdimb
  \ifdim\@tempdimb < 0em \setlength\@tempdimb{0em}\fi
  \begin{titlepage}
    \hbox{
    \kern\@tempdima
    \vbox{%
      \kern\@tempdimb
      \hrule
      \hbox{%
        \vrule\kern1.5pt
        \vbox{\kern1.5pt\hrule
          \hbox{\vrule
            \if@septitle
              \kern2em
            \else
              \pecha@numtitle
            \fi
            \vbox{\kern2.5em\hrule
              \hbox{\vrule\kern1.5pt
                \vbox{\kern1.5pt\hrule
                  \hbox{\vrule\kern4em\@doubleruler\kern2em\@doubleruler
                    \kern1em\box\@pbox\kern1ex
                 \@doubleruler\kern2em\@doubleruler\kern4em\vrule
               }
               \hrule\kern1.5pt}\kern1.5pt\vrule
             }\hrule\kern2.5em
           }\kern2.5em\vrule
         }\hrule\kern1.5pt
       }\kern1.5pt\vrule
     }\hrule\vfill
   }\hfill
   }
  \end{titlepage}
}

% print sheet number on title page

\def\pecha@numtitle{
  \setlength{\@tempdimc}{\textheight}
  \advance \@tempdimc by - 2\@tempdimb
  \advance \@tempdimc by - 1em
  \if@septitle
  \else
  \setbox\@obox\hbox{
    \hbox to \@tempdimc{
      \scriptsize\tib\@oleft~\hss\tib\tibnumeral{\thepechasheet}\hss\@@oleft
  }}
  \ht\@obox=\@marginht
  \dp\@obox=\@margindp
  \kern\dp\@obox
  \begin{turn}{-90}
     \kern-\@tempdimc\kern-0.8em\box\@obox
  \end{turn}
  \fi
}

\def\pecha@titlepage#1{
  \box#1
  \global\@pechatitlefalse
}


% The left "header" on odd pages
\def\@oddleft{%
  \setbox\@pbox\hbox{
      \hbox to \textheight{
        \scriptsize\tib\@oleft\hss\tib\tibnumeral{\thepechasheet}\hss\@@oleft
      }}
  \ht\@pbox=\@marginht
  \dp\@pbox=\@margindp
  \begin{turn}{-90}
    \kern-\textheight\kern-1em\box\@pbox
  \end{turn}
}

% the left "header" on even pages
\def\@evenleft{%
  \setbox\@pbox\hbox{
      \hskip-\textheight\kern-1em\hbox to \textheight{
        \scriptsize\tib\hss\@eleft\hss
      }
    }
  \ht\@pbox=\@marginht
  \dp\@pbox=\@margindp
  \begin{turn}{-90}
    \box\@pbox
  \end{turn}
}

% The right "header" on odd pages
\def\@oddright{%
  \setbox\@pbox\hbox{
    \hbox to \textheight{
      \footnotesize\hss\kern1em\@oright\hss}}
  \ht\@pbox=\@marginht
  \dp\@pbox=\@margindp
  \begin{turn}{90}
    \box\@pbox
  \end{turn}
}

% The right "header" on even pages
\def\@evenright{%
  \setbox\@pbox\hbox{
    \hbox to \textheight
      {\footnotesize\hss\kern1em\@eright\hss}}
  \ht\@pbox=\@marginht
  \dp\@pbox=\@margindp
  \begin{turn}{90}
    \box\@pbox
  \end{turn}
}

% The left "header" on odd pages
\def\@oddfancy{
  \setbox\@pbox\hbox{
      \hbox to \textheight{
        \footnotesize\tib\@oleft\hss\tibnumeral{\thepechasheet}\hss\@@oleft
      }}
  \ht\@pbox=\@marginht
  \dp\@pbox=\@margindp
  \begin{turn}{-90}
    \hskip-\textheight\kern-1em\box\@pbox
  \end{turn}
}

% the left "header" on even pages
\def\@evenfancy{
  \setbox\@pbox\hbox{
      \hskip-\textheight\kern-1em\hbox to \textheight{
        \footnotesize\tib\hss\@eleft\hss\
      }
    }
  \ht\@pbox=\@marginht
  \dp\@pbox=\@margindp
  \begin{turn}{-90}
    \box\@pbox
  \end{turn}

}


% section{Die Ausgabefunktionen}
% Um die Pecha-typischen Textrahmen zu erzeugen, wurde die
% LaTeX Ausgaberoutine umgeschrieben.
% Kopf- und Fußzeilen machen bei Pechas keinen Sinn,
% deshalb werden sie ausgelassen.
% Dafür übernehmen die linken und rechten Ränder
% eine ähnliche Funktion.
%
% Klassenoptionen:
% Seiten können derzeit in drei unterschiedlichen
% Stilen ausgegeben werden:
% Mit folgenden Klassenoptionen kann die Ausgabe
% beeinflußt werden:
% doubleframe
% Wird von dieser Klasse als Standardrahmen verwendet.
% Der Textrahmen besteht aus einer Doppellinie.
% singleframe
% Entspricht eher dem originalen tibetischen Stil:
% Der Text wird von einem einfachen Textrahmen umgeben.
% fancyframe
% Diese Option kann mit einer der vorangehenden Optionen
% kombiniert werden. Sie bewirkt, daß die ersten drei
% Seiten von einem besonderen Rahmen umgeben werden. 
% Die restlichen Seiten werden mit doppeltem oder 
% einfachen Rahmen ausgegeben.
%
% Die Seiten werden mit Hilfe des geometry-Pakets korrekt
% auf die Mitte des Blattes positioniert.
% Auch der linke Offset für die Buchbindung
% muß wieder abgezogen werden, damit die Seiten
% auf Vor- und Rückseite gleich positioniert werden.
%
% Das Paket "rotating" wird benutzt, um die
% Randzeilen hochkant darzustellen.
% Außerdem ermöglicht die Klassenoption "rotate" es,
% jede gerade Seite um 180 Grad gedreht darzustellen,
% was beim Ausdruck auf Duplexdruckern hilfreich sein kann.

% |@doubleframe|
% Dieses Makro erzeugt einen pechatypischen Doppelrahmen
% um die Textbox in Argument #1
\def\@doubleframe#1{
  \hbox{\vrule %left outer line
    \vbox{\hrule\kern1.5pt % top outer line
      \hbox{\kern1.5pt\vrule % left inner line
        \vbox{\hrule % top inner line
          \hbox{
          \vbox{
            \hbox{
              \@theleft % left box content
              \@doubleruler\kern0.5em % left box inner margin
              \vbox{
                \kern1.5ex
                \box#1
                \kern1.5ex
              }
              %\kern0.5em 
              \@doubleruler % right box inner margin
              \@theright}
            } % right box content
          }\hrule % right inner line
        }\vrule\kern1.5pt % lower inner line
      }\kern1.5pt\hrule % right outer line
    }\vrule % lower outer line
  }
}

% |@singleframe|
% Dieses Makro erzeugt einen pechatypischen einfachen Rahmen
% um die Textbox in Argument #1

\def\@singleframe#1{
  \hbox{\vrule
        \vbox{\hrule
          \hbox{
          \vbox{
            \hbox{
            \@theleft
            \vrule\kern0.5em
            \vbox{
              \kern1.5ex
              \box#1
              \kern1.5ex
            }
            %\kern0.5em
            \vrule
            \@theright}}
          }\hrule
        }\vrule
  }
}

% |@fancyframe|
% Dieses Makro erzeugt einen pechatypischen Rahmen
% um die Textbox in Argument #1.
% Hier wird auf den ersten ein besonderer Rahmen erstellt,
% alle folgenden Seiten werden je nach Option (simple,fancy oder
% standard,fancy) in einem einfachen oder einem doppelten Rahmen
% ausgegeben.
\def\@fancyframe#1{
%  \ifnum\thepage > 2
%    \global\@ffancyfalse
%    \if@fsingle
%      \global\def\@pageframe{\@singleframe#1}
%    \else
%      \global\def\@pageframe{\@doubleframe#1}
%    \fi
%    \global\addtolength\textwidth{-12em}
%    \global\addtolength\linewidth{-12em}
%  \fi
  \hbox{\vrule
    \vbox{\hrule\kern1.5pt
      \hbox{\kern1.5pt\vrule
        \vbox{\hrule\kern2em
          \hbox{
            \ifodd\c@page
              \@oddfancy
            \else
              \@evenfancy
            \fi
            \vrule
            \vbox{\hrule\kern1.5pt
              \hbox{\kern1.5pt
                \vrule
                \vbox{
                  \hrule
                  \hbox{
                    \kern4em\@doubleruler\kern2em\@doubleruler\kern0.5em
                    \vbox{
		    %\kern0.5em
                    \box#1}
                    \@doubleruler\kern2em\@doubleruler\kern4em
                  }
                  \hrule
                }\vrule\kern1.5pt
              }\kern1.5pt\hrule
            }\vrule\kern2em
          }\kern2em\hrule
        }\vrule\kern1.5pt
      }\kern1.5pt\hrule
    }\vrule
  }
}


% |pecha@outputpage|
% Das ist die neu geschriebene Ausgaberoutine
% Derzeit kann sie folgendes:
% Ausgabe einer Titelseite (muß beim Pecha von hier aus geschehen)
% Ausgabe einer einfachen Textseite mit beliebigem Inhalt im
% Pecha-Doppelrahmen
% Ausgabe der linken Randzeilen im Pecha-Stil
% Ausgabe von rechten Randzeilen, voreingestellt
% auf die Seitennummer. Man kann geradseitige und
% ungeradseitige rechte können mit den Makros
% |\oddright| und |\evenright| unabhängig von einander
% eingestellt werden.

\def\@outputpage{\pecha@outputpage}

\def\pecha@outputpage{%
  \begingroup
    \let\protect\noexpand
    \set@typeset@protect % otherwise fonts cannot be changed here
    \reset@font
    \normalsize
    \normalsfcodes
    \@parboxrestore
    % a hack for empty pages: These need to be framed properly
    \ifodd\count\z@ 
         \let\@themargin\oddsidemargin
    \else 
         \let\@themargin\evensidemargin
      \fi
    \setbox\@outputbox\vbox{\hfil\box\@outputbox\hfil}
    \if@pechatitle
      \setbox\@outputbox\hbox{\pecha@titlepage{\@outputbox}}
    \else
      \ifodd\c@page
        \let\@theleft\@oddleft
        \let\@theright\@oddright
        \setbox\@outputbox\hbox{\@pageframe{\@outputbox}}
      \else
        \let\@theleft\@evenleft
        \let\@theright\@evenright
        \if@pecharotate
          \setbox\@outputbox\hbox{%
          %\hskip3pt %I don't know why I do need this!
          \begin{turn}{180}
            \@pageframe{\@outputbox}
          \end{turn}
          }
        \else
          \setbox\@outputbox\hbox{\@pageframe{\@outputbox}}
        \fi
        \stepcounter{pechasheet}
      \fi
    \fi
    \shipout\vbox{%
    \let\label\@gobble
    \let\index\@gobble
    \let\glossary\@gobble
    \baselineskip \footskip
    \@begindvi
    \vskip \topmargin 
    \moveright\@themargin
    \box\@outputbox
  }
  \set@typeset@protect
  \endgroup
  \stepcounter{page}%
}

\endinput