summaryrefslogtreecommitdiff
path: root/macros/generic/olsak-misc/cropmarks.tex
blob: d098f8144e930a1031345e8e77410a2038a15635 (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
% cropmarks.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Petr Olsak  <petr@olsak.net>                           Jun. 2022

% This macro adds crop-marks to PDF documents and creates new PDF ouput.
% See the end of this file for usage and more information.

\newdimen\mlenght  \newdimen\mthick   
\newdimen\gap      \newdimen\lgap
\newdimen\hmargin  \newdimen\vmargin
\newdimen\overlap
\newcount\tmpnum
\newcount\hmiddle  \newcount\vmiddle

%% Defaults:

\hmargin=10mm  % added left+right margins from the document border to the sheet border   
\vmargin=10mm  % added top+bottom margins from the document border to the sheet border   
\mlenght=5mm   % lenght of the crop-mark abscisses
\gap=2mm       % distance of crop-mark abscisses from the document corner
\mthick=.2pt   % thickness of the crop-mark abscisses
\overlap=0mm   % document borders can exceed to the crop area by \overlap
\hmiddle=1     % number of equidistant middle marks in left+right margins
\vmiddle=1     % number of equidistant middle marks in top+bottom margins

\def\document{name}
\def\info{}

\newbox\hrul \newbox\vrul

\def\initboxes{
   \setbox\hrul=\hbox{\vrule width\mlenght height.5\mthick depth.5\mthick}
   \setbox\vrul=\hbox to0pt{\hss\vrule width\mthick  height\mlenght\hss}
   \ht\hrul=0pt \dp\hrul=0pt
   \lgap=\gap  \advance\lgap by\mlenght
}
\def\cropLT{\vbox to0pt{\vss\llap{\copy\hrul\kern\gap\raise\gap\copy\vrul}}}
\def\cropRT{\vbox to0pt{\vss\rlap{\raise\gap\copy\vrul\kern\gap\copy\hrul}}}
\def\cropLB{\vbox to0pt{\llap{\copy\hrul\kern\gap\lower\lgap\copy\vrul}\vss}}
\def\cropRB{\vbox to0pt{\rlap{\lower\lgap\copy\vrul\kern\gap\copy\hrul}\vss}}
\def\middleT{\vbox to0pt{\vss\copy\vrul\kern\gap}}
\def\middleB{\vbox to0pt{\kern\gap\copy\vrul\vss}}
\def\middleL{\llap{\copy\hrul\kern\gap}}
\def\middleR{\rlap{\kern\gap\copy\hrul}}

% \cropmarks{box} 
% creates a dimension-less crop marks around the box and prints the box with them:

\def\cropmarks#1{%
   \vbox{\offinterlineskip 
         \setbox0=\hbox{\kern-\overlap#1\kern-\overlap}
         \dimen0=\wd0 \dimen1=\ht0 \advance\dimen1 by\dp0 \advance\dimen1 by-2\overlap
         \kern-\overlap
         \box0
         \kern-\overlap
         \vbox to0pt{
            \kern-\dimen1
            \ifx\info\empty \else
               \vbox to0pt{\vss\hbox{\quad\strut\info}\kern\gap}\fi
            \hbox to\dimen0{\cropLT\hss \vmiddleloop\middleT \cropRT}
            \vss \tmpnum=0
            \loop \ifnum\tmpnum<\hmiddle
                  \advance\tmpnum by1
                  \hbox to\dimen0{\middleL\hss\middleR}%
                  \vss \repeat
            \hbox to\dimen0{\cropLB\hss\vmiddleloop\middleB \cropRB}
         }
}}
\def\vmiddleloop#1{\tmpnum=0
   \loop
   \ifnum\tmpnum<\vmiddle
      \advance\tmpnum by1
      #1\hss
      \repeat
}
\def\docropmarks{%
   \initboxes
   \setbox0=\hbox{\pdfximage {\document.pdf}\pdfrefximage\pdflastximage}
   \pdfpagewidth=\dimexpr\wd0-2\overlap+2\hmargin  \relax
   \pdfpageheight=\dimexpr\ht0+\dp0-2\overlap+2\vmargin \relax
   \hoffset=\hmargin \advance\hoffset by-\pdfhorigin
   \voffset=\vmargin \advance\voffset by-\pdfvorigin
   %
   \pageno=1
   \shipout\cropmarks{\box0}
   \loop
      \ifnum\pageno<\pdflastximagepages
      \advance\pageno by1
      \shipout\cropmarks
         {\hbox{\pdfximage page\pageno{\document.pdf}\pdfrefximage\pdflastximage}}
      \repeat
   \end
}
\let\\=\undefined % for better elimination of bad command line syntax

\frenchspacing
\def\othe #1{\ifnum#1<10 0\fi\the#1}
\def\today {\the\year-\othe\month-\othe\day}   % you can re-define this format
\ifx\optexversion\undefined \catcode`\_=12 \fi % names can include _ character

\endinput


About the cropmarks.tex macro
=============================

This macro adds crop-marks to arbitrary PDF documents. The PDF document can
be created by LaTeX or OpTeX or ConTeXt or something else. Then use
this plain TeX macro for creating additional crop-marks.

Prepare following TeX file. Its name can be crop.tex, for example, but its
name cannot be cropmarks.tex, becuase this is the macro file.

--------------------------------

\input cropmarks

\def\document{name} % the name of the PDF file without extension 
\def\info{}         % info text printed in the top (in crop area) 

\hmargin=10mm  % added left+right margins from the document border to the sheet border   
\vmargin=10mm  % added top+bottom margins from the document border to the sheet border   
\mlenght=5mm   % lenght of the crop-mark abscisses
\gap=2mm       % distance of crop-mark abscisses from the document corner
\mthick=.2pt   % thickness of the crop-mark abscisses
\overlap=0mm   % document borders can exceed to the crop area by \overlap
\hmiddle=1     % number of equidistant middle marks in left+right margins
\vmiddle=1     % number of equidistant middle marks in top+bottom margins

\docropmarks   % reads \document.pdf and creates new PDF file

---------------------------------

and run it by:

   pdftex crop

or

   optex crop

Of course, you can set different values than these default ones mentioned
in the example.

The information text defined in the \info macro can include \document.pdf
(document name), \folio (page number), \today (current date). For example,
you can try:

   \def\info{\tt [\document.pdf] -- \today\ -- page: \folio}

You can run cropmarks without creating the crop file directly from command line:

   pdftex cropmarks '\def\document{name} \docropmarks'

This command reads name.pdf and creates cropmarks.pdf as the output.
You can have your own configuration of mentioned values in cropmaks.cfg file 
and run

   pdftex cropmaks '\input cropmarks.cfg \def\document{name} \docropmarks'

You can use optex instead pdftex, of course.

If you want to put more pages to one sheet then you have to do this job
first and then you can add cropmarks for whole sheets. Use another software
(or your TeX macro or use OpTeX trick 0088) for creating sheets and create a
new PDF document. Then set appropriate number of middle marks and read this
new document with sheets at input side when you are using cropmarks.tex