TeX e LaTeX

Creare una classe o un pacchetto per LaTeX

Per scrivere una classe o un pacchetto bisogna prima avere una buona conoscenza di LaTeX e una infarinatura di TeX.
Le guide da leggere sono quelle base di LaTeX, la guida clsguide ed infine Appunti di Programmazione in TeX e LaTeX di Enrico Gregorio. Non dimenticatevi poi di guardare direttamente ai sorgenti di pacchetti o classi che possono assomigliare a quello che state creando.

Appunti sparsi

Le opzioni

Opzione classica

\newif\ifpippo
\DeclareOption{pippo}{\pippotrue}
...
\ProcessOptions\relax

Opzione xkeyval

\newif\ifpippo
\define@key[SAP]{famiglia}{pippo}[]{\pippotrue}
...
\ProcessOptionsX[SAP]<famiglia>

Altro modo di fare una scelta tra opzioni

\newcommand{\@fontsize}{}
...
\DeclareOption{10pt}{\renewcommand{\@fontsize}{10pt}}
\DeclareOption{11pt}{\renewcommand{\@fontsize}{11pt}}
...

Da ricordare che la scrittura \DeclareOption{11pt}{\renewcommand{\@fontsize}{\CurrentOption}} non funziona perché quando si finisce di processare le opzioni \CurrentOption diventa (credo) nullo ed infatti il comando appena definito non produce nulla.

Ordine in cui vengono richiamate le opzioni con \LoadClass

  1. Opzioni di default della classe richiamata con \LoadClass
  2. Opzioni richiamate con \ExecuteOptions
  3. Opzioni del comando \documentclass
  4. Opzioni del comando \LoadClass

Non si possono mischiare le opzioni di keyval con le opzioni dichiarate alla LaTeX cioè con \DeclareOption.

Condizionali

\newif\ifNOME
\NOMEfalse
\NOMEtrue
\ifNOME fai questo \else fai questo \fi

\if\listatoken fai questo \else fai questo \fi
\ifcase\numero fai questo \or questo \else fai questo \fi
\if@twoside fai questo \else fai questo \fi
\ifnum\numero=numero fai questo \else fai questo \fi
\IfFileExists{file}{fai questo}{altrimenti questo}
\@ifundefined{comando}{fai questo}{altrimenti questo}
\@ifpackageloaded{pacchetto}{fai questo}{altrimenti questo}

Pacchetti ifthen e xifthen per cose più complicate.

Rendere un pacchetto o una classe disponibile a tutti. L'upload sul CTAN

Controllare che non esistano nomi di classi o pacchetti uguali al vostro. Usate nomi significativi. Il limite di otto lettere è ancora consigliabile?

L'upload

Dopo aver preparato i sorgenti e la documentazione in uno dei due modi visti finora, bisogna preparare un altro file con una breve descrizione del pacchetto. Il file deve chiamarsi README. Ecco un esempio:

*********************************************************************
*                         Class sapthesis                           *
*********************************************************************

       This is the README file for the "sapthesis" class for LaTeX.
       It corresponds to version 0.1 of the sapthesis class
	   (1 January 2009)


** License **********************************************************

       Copyright (c) 2009 by Francesco Biccari.

       This work (specified below) may be distributed and/or
	   modified under the conditions of the 
	   LaTeX Project Public License,
       either version 1.3 of this license or any later version.
       The latest version of this license is in
         http://www.latex-project.org/lppl.txt
       and version 1.3 or later is part of all distributions of
	   LaTeX version 2005/12/01 or later.

       This work has the LPPL maintenance status 'maintained'.
       The Current Maintainer of this work is Francesco Biccari.


** Archive Information **********************************************

       This work consists of the following files
       included in the sapthesis.zip archive: 

          1. sapthesis.cls (main file)
          2. sapthesis_manual.pdf (manual of sapthesis.cls)
          3. sapthesis_manual.tex (source of the manual)
          4. README (this file)

       sapthesis.zip archive may be obtained from CTAN.


** Class information ************************************************

       sapthesis.cls can be used with the LaTeX typesetting system
       to produce dissertations that adhere to 
       "Sapienza - University of Rome" 's guidelines for publishing.

       See sapthesis_manual.pdf for usage of sapthesis.cls


** Installation instruction *****************************************

       The following files should end up in your texmf tree
       (or your localtexmf tree) at these locations:

          <texmf>/tex/latex/sapthesis/sapthesis.cls
          <texmf>/doc/latex/sapthesis/sapthesis.pdf
          <texmf>/doc/latex/sapthesis/README

       Then, you need to update the file database.

       Alternatively, you can simply copy all of these files into
       your local work directory where your thesis files will live.


*********************************************************************
Francesco Biccari
1 January 2009
End of File

A parte le informazioni basilari è importante che contenga informazioni sulla licenza, scegliendo preferibilmente la licenza "LaTeX project public license" (LPPL) oppure GPL. Inoltre se avete deciso di non fornire una documentazione "seria", dovete quantomeno inserirne una nel file README.

Una volta preparati tutti i nostri file, va preparato un archivio .zip contenente sia la classe o pacchetto in oggetto, sia il file README, sia la documentazione in pdf con i relativi sorgenti (ovviamente se avete usato listings dovete mettere i file dtx, ins, README). Poi andate sul CTAN, http://www.ctan.org/upload, e inserite le informazioni richieste per poi procedete all'upload.