Initial work on the workflow: articles now use an existing .pub file to fill up page...
[lematema] / lematema.cls
1 %%%% Class file for Le Matematiche
2 %%% Author: Giuseppe Bilotta
3 %%% Email (work): bilotta@dmi.unict.it
4 %%% Email (home): giuseppe.bilotta@gmail.com
5
6 \NeedsTeXFormat{LaTeX2e}
7 \ProvidesClass{lematema}[2007/02/08 v0.1
8 Class for articles in ``Le Matematiche'']
9
10 %%% Language options
11 \DeclareOption{english}{\PassOptionsToPackage{\CurrentOption}{babel}}
12 \DeclareOption{french}{\PassOptionsToPackage{\CurrentOption}{babel}}
13 \DeclareOption{italian}{\PassOptionsToPackage{\CurrentOption}{babel}}
14
15 %%% draft/final
16 \DeclareOption{draft}{\PassOptionsToClass{\CurrentOption}{article}}
17 \DeclareOption{final}{\PassOptionsToClass{\CurrentOption}{article}}
18
19 \ProcessOptions\relax
20
21 %%% Class based on the standard article class
22 \LoadClass[10pt,twoside]{article}
23 %%% Font: times (and math stuff)
24 \usepackage{mathptmx}
25 %%% Package `babel' for language management
26 \RequirePackage[italian]{babel}
27 %%% Package `url' for urls and emails
28 \RequirePackage{url}
29 %% Define an \email{...} command
30 \DeclareUrlCommand\email{\urlstyle{tt}}
31
32 %%% AMS math environments and symbols
33 \RequirePackage{amsmath}
34 \RequirePackage{amssymb}
35 \RequirePackage{amsthm}
36
37 %%% Bibliography
38 \RequirePackage[square,numbers,sort&compress,sectionbib]{natbib}
39 \bibliographystyle{plain}
40 \def\bibhere{\bibliography{\jobname}}
41 \addto\captionsitalian{%
42   \def\refname{Bibliografia}%
43   \def\bibname{Bibliografia}%
44 }
45 \addto\captionsenglish{%
46   \def\refname{References}%
47   \def\bibname{References}%
48 }
49 \addto\captionsfrench{%
50   \def\refname{Bibliographie}%
51   \def\bibname{Bibliographie}%
52 }
53 %
54 \def\bibsection{%
55   \par
56   \vspace*{2cm}%
57   \centering{\MakeUppercase{\refname}}%
58   \par
59 }
60 \setlength{\bibsep}{3pt}
61
62 % %\magnification\magstephalf
63 %%% Page geometry, using the `geometry' package
64 \RequirePackage[paperwidth=17cm,%
65                 paperheight=24cm,%
66                 footskip=0pt,%
67                 headsep=0.5cm,%
68                 headheight=0.5cm,%
69                 width=12.2cm,%
70                 %height=18.5cm,% overspecification, comment out
71                 left=2cm,%
72                 top=2cm,%
73                 bottom=2.5cm]{geometry}
74
75 %%% Our default head/foot style
76
77 \renewcommand{\ps@plain}{%
78   \renewcommand{\@oddhead}{\hfill{\footnotesize\@htitle}\hfill\thepage}%
79   \renewcommand{\@evenhead}{\thepage\hfill{\footnotesize\@hauthor}\hfill}%
80   \renewcommand{\@oddfoot}{}%
81   \renewcommand{\@evenfoot}{}%
82 }
83 \pagestyle{plain}
84
85 \def\@htitle{\textbf{(no title)}}
86 \def\@hauthor{\textbf{(no author)}}
87
88 %%% Footnotes
89 \renewcommand\footnoterule{%
90   \hrule\@width.4\columnwidth
91   \kern2.6\p@}
92
93 %%% Section styles
94 \def\@seccntformat#1{\csname the#1\endcsname.\quad}
95 \renewcommand\section{\@startsection {section}{1}{\z@}%
96                                    {-24pt \@plus -6pt \@minus -3pt}%
97                                    {\medskipamount}%
98                                    {\normalfont\bfseries}}
99
100 %%% Theorem environments
101 \addto\captionsitalian{%
102   \def\theoremname{Teorema}%
103   \def\corollaryname{Corollario}%
104   \def\lemmaname{Lemma}%
105   \def\propositionname{Proposizione}%
106   \def\definitionname{Definizione}%
107   \def\examplename{Esempio}%
108   \def\remarkname{Osservazione}%
109   \def\notename{Nota}%
110 }
111 \addto\captionsenglish{%
112   \def\theoremname{Theorem}%
113   \def\corollaryname{Corollary}%
114   \def\lemmaname{Lemma}%
115   \def\propositionname{Proposition}%
116   \def\definitionname{Definition}%
117   \def\examplename{Example}%
118   \def\remarkname{Remark}%
119   \def\notename{Note}%
120 }
121 \addto\captionsfrench{%
122   \def\theoremname{Th\'eor\`eme}%
123   \def\corollaryname{Corollaire}%
124   \def\lemmaname{Lemma}%
125   \def\propositionname{Proposition}%
126   \def\definitionname{D\'efinition}%
127   \def\examplename{Exemple}%
128   \def\remarkname{Remarque}%
129   \def\notename{Note}%
130 }
131
132 \theoremstyle{plain}
133 \newtheorem{thm}{\theoremname}[section]
134 \newtheorem{cor}{\corollaryname}[section]
135 \newtheorem{lemma}{\lemmaname}[section]
136 \newtheorem{prop}{\propositionname}[section]
137
138 \theoremstyle{definition}
139 \newtheorem{dfn}{\definitionname}[section]
140 \newtheorem{exa}{\examplename}[section]
141 \newtheorem{rem}{\remarkname}[section]
142 \newtheorem{note}{\notename}[section]
143
144 %%% Commands that define the article information
145 \let\originaltitlecmd\title
146 \def\title#1{\originaltitlecmd{#1}\titlemark{#1}}
147 \def\titlemark#1{\gdef\@htitle{\MakeUppercase{#1}}}
148 \def\titlenote#1{\expandafter\@titlenote\expandafter{\the\@titlenote\thanks{#1}}}
149 \newtoks\@titlenote
150
151 \def\authormark#1{\gdef\@hauthor{\MakeUppercase{#1}}}
152 \def\author#1{%
153 \if@authortoks
154 \expandafter\@authortoks\expandafter{\the\@authortoks{} - #1}%
155 \else
156 \@authortoks{#1}%
157 \@authortokstrue
158 \fi
159 \authormark{\the\@authortoks}%
160 \def\@author{\the\@authortoks}%
161 \@lastauthor{#1}%
162 }
163 \newtoks\@authortoks
164 \newif\if@authortoks\@authortoksfalse
165 \newtoks\@lastauthor
166
167 \def\address#1{%
168 \expandafter\expandafter\expandafter\@addresstoks\expandafter\expandafter\expandafter{%
169 \expandafter\the\expandafter\@addresstoks\expandafter\par
170 \expandafter\bigskip
171 \expandafter\MakeUppercase\expandafter{\the\@lastauthor}\\
172 #1}%
173 }
174 \newtoks\@addresstoks
175 \def\@address{\par\bigskip\begin{flushright}%
176   \itshape
177   \the\@addresstoks
178 \end{flushright}}
179 \AtEndDocument{\@address}
180
181 %% Mathematics Subject Classification
182 \def\MSC#1{\gdef\@MSC{#1}}
183 \def\@MSC{}
184 %% Keywords
185 \def\keywords#1{\gdef\@keywords{#1}}
186 \def\@keywords{}
187
188 %% Year/Volume/Number/First Page/Last Page
189 \def\LM@Year{????}
190 \def\LM@Vol{???}
191 \def\LM@Num{??}
192 \def\LM@FirstPg{??}
193 \def\LM@LastPg{??}
194
195 %% Redefine \date to parse a string yyyy/mm/dd, which will be used
196 %% as submission date
197 \newcounter{LM@year}
198 \newcounter{LM@month}
199 \newcounter{LM@day}
200 \def\date#1{\LM@parsedate#1\LM@enddate}
201 \def\LM@parsedate#1/#2/#3\LM@enddate{%
202 \setcounter{LM@year}{#1}%
203 \setcounter{LM@month}{#2}%
204 \setcounter{LM@day}{#3}%
205 }
206
207 %% turn a number/counter into an italian month
208 \def\@itmonth#1{\ifcase#1\or gennaio\or febbraio\or marzo\or aprile\or
209 maggio\or giugno\or luglio\or agosto\or settembre\or ottobre\or novembre\or
210 dicembre\else\textbf{??}\fi}
211 \def\itmonth#1{\expandafter\@itmonth\csname c@#1\endcsname}
212
213 \renewcommand{\maketitle}{%
214   \begingroup
215     \renewcommand\thefootnote{}%
216     \def\@makefnmark{}%
217     \long\def\@makefntext##1{\parindent 1em\noindent##1}%
218     \newpage
219     \global\@topnum\z@   % Prevents figures from going at top of page.
220     \@maketitle
221     \thispagestyle{empty}\@thanks
222   \endgroup
223   \setcounter{footnote}{0}%
224   \global\let\thanks\relax
225   \global\let\maketitle\relax
226   \global\let\@maketitle\relax
227   \global\let\@thanks\@empty
228   \global\let\@author\@empty
229   \global\let\@date\@empty
230   \global\let\@title\@empty
231   \global\let\title\relax
232   \global\let\author\relax
233   \global\let\date\relax
234   \global\let\and\relax
235   \global\let\MSC\relax
236   \global\let\@MSC\relax
237   \global\let\keywords\relax
238   \global\let\@keywords\relax
239   \global\let\titlenote\relax
240   \global\let\@titlenote\relax
241 }
242
243 %% insert the article information in the top right corner
244 \def\@articleinfo{%
245 \noindent\footnotesize LE MATEMATICHE\\
246 Vol.~\LM@Vol~(\LM@Year)~--~Fasc.~\LM@Num,~pp.~\LM@FirstPg--\LM@LastPg
247 }
248
249 %% Make the title page
250 \def\@maketitle{%
251   \newpage
252   \@articleinfo
253   %% Submission date (at the bottom)
254   \thanks{%
255     \hskip0.8cm Entrato in redazione \arabic{LM@day} \itmonth{LM@month} \arabic{LM@year}\\}%
256   %% MSC, if present
257   \ifx\@MSC\empty\else\thanks{%
258   \textit{Subject Classification:} \@MSC
259   }\fi%
260   %% Keywords, if present
261   \ifx\@keywords\empty\else\thanks{%
262   \textit{Keywords:} \@keywords
263   }\fi%
264   \vskip 4.5truecm%
265   \begin{center}%
266   \let \footnote \thanks
267     {\def\\{\protect\linebreak}%
268     \Large\bfseries \MakeUppercase{\@title}
269     %% Title note, if present
270     \the\@titlenote
271     \par}%
272     \vskip 0.5truecm%
273     {\Large
274       \begin{tabular}[t]{c}%
275         \MakeUppercase{\@author}
276       \end{tabular}\par}%
277   \end{center}%
278   \par
279   \vskip 0.5truecm}
280
281 \renewenvironment{abstract}{%
282 \small\quotation
283 }{%
284 \endquotation
285 }
286
287 % In case the author forgets it:
288 \AtBeginDocument{\maketitle}
289
290 \expandafter\IfFileExists\expandafter{\jobname.pub}{%
291   \InputIfFileExists{\jobname.pub}{\typeout{Volume data loaded}}\relax%
292   \c@page=\LM@FirstPg\relax
293   \AtEndDocument{%
294     \@bsphack
295     \protected@write\@auxout{}%
296       {\string\xdef\string\LM@LastPg{\thepage}}%
297     \@esphack
298   }%
299 }{}