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