27
Una Introducción

Manual de programacion LaTeX

Embed Size (px)

DESCRIPTION

Guia introductoria a programación en LaTeX

Citation preview

Page 1: Manual de programacion LaTeX

Una Introducción

Page 2: Manual de programacion LaTeX

ELABORANDO DOCUMENTOS

DE CALIDAD

PROGRAMACIÓN EN LATEX

MOISÉS SAMUEL TOLEDO JULIÁN

Comunidad Peruana de LATEX

LIMA, PERÚ2013

Page 3: Manual de programacion LaTeX

Índice general

Pág.

Portada ii

Prólogo v

1 Comandos LATEX 11.1 Definición de comandos nuevos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Definición de entornos nuevos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Comandos TEX 52.1 Comando DEF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Comando def sin argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Comando def con argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Comando LET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Comando IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Algunas acciones de IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8NEWIF: extensión de IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3 Creando un archivo de clase CLS 113.1 Finalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Identificando un archivo de clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Declarando opciones de clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Ejecutando las opciones de clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Cargando la clase base y otros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4 Creando un archivo de estilo STY 174.1 Finalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2 Diferencia entre un CLS y un STY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

iii

Page 4: Manual de programacion LaTeX
Page 5: Manual de programacion LaTeX

Prólogo

El presente manual de introducción a programación en LATEX está basado en la experiencia delautor como usuario de LATEX, por ello los errores que se puedan encontrar a lo largo de este documentoes de total responsabilidad del autor.

En el primer capítulo se describe los comandos LATEX que son usados para la creación de entornosy nuevos comandos. La utilidad de este capítulo es realizar un primer acercamiento a programacióny notar que los comandos aquí descritos no siempre satisfacen las necesidades del usuario, por lo quese precisa de otros recursos para extender dichas funciones.

En el segundo capítulo se presentan 3 comandos TEX muy útiles para la creación de archivos declase y estilo, se describen también algunas extensiones de dichos comandos y otros recursos com-plementarios. Desde aquí se indica que los comandos presentados son apenas una pequeña parte deltotal, por ello en este capítulo se indica la literatura adecuada para que el usuario pueda incrementarsus conocimientos y así poseer mayores herramientas para crear características mas completas parasu documento.

En el tercer capítulo se describe la estructura de un archivo de clase, así también se proporcionaun ejemplo de aplicación. El usuario puede crear estructuras mas completas para su documentoLATEX, todo ello dependerá de su experiencia y sobre todo paciencia.

En el cuarto capítulo se describe la diferencia entre un archivo de clase y estilo, así como los casosen que este último resulta mas útil.

Atendiendo a lo indicado en las primeras líneas del presente prólogo, se pide informar al autorsobre los errores y/o comentarios que se tengan sobre lo indicado en este manual al e-mail:

[email protected]

También se puede dejar comentarios en las páginas

https://www.facebook.com/pages/LaTeX-OnLiNe/108938102529090http://latexonline.wordpress.com/

Lima, 30 de enero del 2013.

v

Page 6: Manual de programacion LaTeX
Page 7: Manual de programacion LaTeX

Capítulo 1

Definiendo comandos LATEX

Pág.1.1 Definición de comandos nuevos 11.2 Definición de entornos nuevos 2

Una de las principales ventajas de TEX es su flexibilidad y versatilidad. Estas cualidades se suelenconcretar, fundamentalmente, en que TEX no es un programa cerrado con un número grande decomandos y entornos predefinidos, sino que es programable, permitiendo al usuario desarrollar suspropios comandos y entornos, adaptándolos completamente a sus necesidades.En este capítulo se explica la manera en que se definen nuevos comandos y entornos, haciendo usode la sintaxis de LATEX, dejando el uso de elementos nativos de TEX para el siguiente capítulo.

1.1. Definición de comandos nuevosEn LATEX podemos definir comandos, de acorde a nuestras necesidades. Así cada una de ellas

tendrá que ver con:

a) Abreviar nombres de comandos ya existentes.

b) Comandos nuevos, con o sin argumentos.

c) Redefiniciones de comandos ya existentes.

En las dos primeros casos usamos la instrucción \newcommand y en el tercero \renewcommand,cada uno de los cuales posee la misma sintaxis. Así para los dos primeros casos:

\newcommand{\nombre}[n][defecto]{definicion}

donde:

n: cantidad de argumentos, usado cuando se desea que \nombre tenga “n” argumentos (el primerode ellos define un argumento opcional), aquí n = 1, 2, . . . , 9.

defecto: definición del argumento opcional, se indica el valor por defecto para el argumento opcionalde \nombre.

Se desea definir un “estilo de letra” para resaltar un texto con perfil sanserif e itálica. Dandola opción de establecer el tamaño de letra. Para ello se define el comando \estiloespecial(cuyo argumento opcional esta definido en tamaño large), de la siguiente forma:

\newcommand{\estiloespecial}[2][\large]{{#1\itshape\sffamily#2}}

Ejemplo 1.1

1

Page 8: Manual de programacion LaTeX

2 CAPÍTULO 1. COMANDOS LATEX

Lo usamos como: \estiloespecial{mi texto} si deseamos usar la opción por defecto, y paramodificar la opción por defecto a otro tamaño \estiloespecial[\footnotesize]{mi texto}.

Para abreviar entornos que son de uso frecuente, como \begin{itemize}, el cual podemossimplificarlo como \bi y \end{itemize} como \ei, las instrucciones serían:

\newcommand{\bi}{\begin{itemize}}\newcommand{\ei}{\end{\itemize}}

Ejemplo 1.2

Tengamos en cuenta que:

i) El nombre del nuevo comando puede contener una o mas letras (mayúsculas o minúsculas) perono dígitos ni otros símbolos del teclado (como por ejemplo el símbolo @).

ii) Si el comando \nombre ya existe, entonces LATEX emitirá un mensaje de error, en cuyo casodebemos sustituir \newcommand por \providecommand.

iii) Se sugiere escribir las instrucciones (de definición de comandos) en el preámbulo del documento,esto facilita las labores de revisión y sirve de modelo para futuros documentos.

Podemos modificar el estilo de numeración de un determinado contador, por ejemplo para hacerque los capítulos aparezcan numerados en romanos:

\renewcommand{\thechapter}{\Roman{Chapter}}

Ejemplo 1.3

1.2. Definición de entornos nuevosPara definir nuevos entornos o redefinir los existentes, disponemos de los siguientes comandos:

\newenvironment{NombreEntorno}[NumArg][ArgDef]{DefEntrada}{DefSalida}\renewenvironment{NombreEntorno}[NumArg][ArgDef]{DefEntrada}{DefSalida}

donde:

NombreEntorno: es el nombre del entorno.

NumArg: es el número de argumentos (comprendido entre 1 y 9).

ArgDef: es el valor asignado por defecto al argumento optativo (si en caso se desea obtener unentorno con un argumento opcional), que será el primero de los argumentos.

DefEntrada: es el conjunto de ordenes que se ejecutan antes de entrar en el entorno.

DefSalida: es el conjunto de ordenes que se ejecutan al salir del entorno.

Page 9: Manual de programacion LaTeX

1.2. DEFINICIÓN DE ENTORNOS NUEVOS 3

Crearemos un entorno para escribir citas, de tal forma que el nombre del autor sea un argumento:

\newenvironment{cita}[1]{\newcommand{\autor}{#1}\begin{quote}%\itshape}{\end{quote}\centerline{\autor}}

Ejemplo 1.4

\begin{cita}{Lope de Vega}La raíz de...\end{cita}

La raíz de todas las pasiones esel amor. De él nace la tristeza,el gozo, la alegría y la desespera-ción.

Lope de Vega

Resultado 1.1

Ahora daremos un ejemplo en el que se hace uso de \renewenvironment. Antes de ello sedefinirá un entorno al cual denominaremos comenta. Aquí el código y el efecto:

\newcounter{contin}\newenvironment{comenta}{\noindent\slshape Comentario:

\begin{quote}\small\itshape}{\stepcounter{contin}\hfill

(\arabic{contin})\end{quote}}\begin{comenta}El comando ...\end{comenta}

Comentario:

El comando \newcounter define un nue-vo contador, en tanto que el comando\stepcounter incrementa en una unidadal contador definido anteriormente. Note-mos que al final el comando \arabic rea-liza la tarea de imprimir el contador enformato numérico (usar \alph si se quie-re letras). (1)

Ejemplo 1.5

Se desea redefinir el entorno comenta de modo que permita imprimir (junto al encabezado) el nombredel autor del comentario. El código de redefinición y su uso se da a continuación

\renewenvironment{comenta}[1]{\begin{sloppypar}\noindent\slshape Comentario:#1\begin{quote}\small\itshape}{\stepcounter{contin}\hspace*{\fill}(\arabic{contin})\end{quote}\end{sloppypar}}

\begin{comenta}{El comentarista del manual}Texto del entorno redefinido ...\end{comenta}

Resultado 1.2

Note que se adicionó (en la definición de entrada y salida del entorno) a \begin{sloppypar} y\end{sloppypar} respectivamente, para obtener textos con particiones silábicas mas tolerantes (damayor espaciado entre palabras). También notese el cambio de \hfill por \hspace*{\fill}, paraeste caso los efectos requeridos son los mismos pero el código es ligeramente distinto.

Page 10: Manual de programacion LaTeX
Page 11: Manual de programacion LaTeX

Capítulo 2

Comandos básicos de programación TEX

Pág.2.1 Comando DEF . . . . . . . . 5Comando def sin argumentos . . . 5Comando def con argumentos . . . 62.2 Comando LET . . . . . . . . 72.3 Comando IF . . . . . . . . . . 8Algunas acciones de IF . . . . . . . 8NEWIF: extensión de IF . . . . . . 8

Aquí definiremos algunos comandos básicos TEX los cuales permitirán crear un documento de clase(cls) y estilo (sty). La idea es realizar una primera aproximación a programación en LATEX, por locual no se explicaran todos los comandos TEX en este capítulo (mas aun, alguno de los comandosque se presentan se complementan con otros no indicados aquí).

2.1. Comando DEF

Una manera TEX de definir nuevos comandos es haciendo uso del comando \def1, su sintaxisqueda establecida

\def{\nuevo_comando}{definicion}

Si el comando a definir, eventualmente se usará en modo matemático entonces se debe agregaren su definición el comando \ensuremath, quedando

\def{\nuevo_comando}{\ensuremath{definicion}}

DEF sin argumentos

Se define un comando para insertar un operador lógico matemático (la implicación) cuya sintaxisLATEX es \rightarrow, la cual cambiaremos a \imp

\def\imp{\rightarrow}

Ejemplo 2.6

1Escribir en el preámbulo o fuera de el (esto incluye el caso de escribir fuera de un documento .tex como porejemplo un documento de estilo, el cual posee extensión .sty) no hace diferencia, mas es recomendable escribir estassentencias dentro del preámbulo, puesto que así se lleva mas control sobre todos los comandos creados, lo cual da masorden al documento.

5

Page 12: Manual de programacion LaTeX

6 CAPÍTULO 2. COMANDOS TEX

$p \imp q$ p→ q

Resultado 2.3

Ahora adaptamos el comando \imp para que pueda ser aplicado tanto en modo matemático comofuera de él

\def\imp{\ensuremath{\rightarrow}}

El símbolo de implicación es \imp$p \imp q$

El símbolo de implicación es →p→ q

Resultado 2.4

DEF con argumentos

El comando \def admite (así como otros comandos) hasta 9 argumentos, de los cuales el primeroes opcional (esto es, si el usuario no proporciona dicho argumento el comando trabajará con un valorpor defecto). Para hacer referencia a los argumentos se hace uso de #n (n = 1, 2, . . . , 9) quedando

\def\nuevo_comando#1#2...#9{definicion}

Se define un comando (válido tanto en modo matemático como fuera de el) para la ecuaciónde la esfera n-dimensional de radio r, este comando será denominado \esfera y poseerá tresargumentos, en las cuales se indica la variable, dimensión y radio (respectivamente)

\def\esfera#1#2#3{\ensuremath{#1_1^2+#1_2^2+\cdots+#1_#2^2=#3^2}}

Ejemplo 2.7

La ecuación de la esfera$4$-dimensional de radio $2$es \esfera{x}{4}{2}

La ecuación de la esfera 4-dimensional de ra-dio 2 es x2

1 + x22 + · · ·+ x2

4 = 22

Resultado 2.5

Page 13: Manual de programacion LaTeX

2.2. COMANDO LET 7

2.2. Comando LETSi deseamos transferir la definición de un comando preestablecido (incluyendo sus argumentos) a

un nuevo comando, entonces debemos usar \let, así

\let\nuevo_comando=\comando_anterior

Vamos a definir un comando para crear un nuevo párrafo cuyo texto sea en negrita y cursiva.Para ello

creamos un comando temporal (lo llamaremos \temp) que haga dicha función

\def\temp{\par\bfseries\itshape}

luego pasamos la definición del comando temporal a un nuevo comando

\let\newpar=\temp

Ejemplo 2.8

Un maestro de la Ley, que queríaponerlo a prueba, se levantó y ledijo: ‘‘Maestro, ¿qué debo hacer paraconseguir la vida eterna?’’\newparJesús le dijo: ‘‘¿Qué está escrito enla Escritura? ¿Qué lees en ella?’’ Elhombre contestó: ‘‘Amarás al Señor tuDios con todo tu corazón, con toda tualma, con todas tus fuerzas y con todatu mente; y amarás a tu prójimo como ati mismo.’’ Jesús le dijo:‘‘¡Excelente respuesta! Haz esoy vivirás.’’

Un maestro de la Ley, que quería ponerlo aprueba, se levantó y le dijo: “Maestro, ¿quédebo hacer para conseguir la vida eterna?”Jesús le dijo: “¿Qué está escrito enla Escritura? ¿Qué lees en ella?” Elhombre contestó: “Amarás al Señortu Dios con todo tu corazón, con todatu alma, con todas tus fuerzas y contoda tu mente; y amarás a tu próji-mo como a ti mismo.” Jesús le dijo:“¡Excelente respuesta! Haz eso y vi-virás.”

Resultado 2.6

Cabe indicar que

al usar el código \let\newpar=\par\bfseries\itshape no se obtendría el resultado deseado(puede usted comprobarlo!), por ello la necesidad de crear un comando temporal.

aunque posteriormente se modifique algo de la definición de \temp el comando \newpar nocambiará, puesto que \let saca una copia del comando \temp en su definición inicial.

Page 14: Manual de programacion LaTeX

8 CAPÍTULO 2. COMANDOS TEX

2.3. Comando IF

Para producir diferentes resultados (o acciones) dependiente del valor de una variable, se debeusar el comando \if, este genera una estructura de control (condicional). Su sintaxis es

\if<test> [parte a] \else [parte b] \fi

Acciones de IF

• Si el resultado de <test> es verdadero, entonces se procesa las órdenes contenidas en [parte a]y si es falso se procesa [parte b].

• los comandos que no deben de faltar son \if y \fi los cuales inician y acaban la sentenciarespectivamente.

• dentro de [parte a] o [parte b] pueden aparecer otros condicionales (a esto se le denominaanidamiento), donde cada \if debe estar asociado a su respectivo \fi. Una posible estructurade condicionales anidados seria

\if<test1>\if<test2> [parte a] \else [parte b] \fi

\else\if<test3> [parte c] \else [parte d] \fi

\fi

Comando NEWIF

Para crear un condicional con estados2 preestablecidos, se usa el comando \newif. Su sintaxisqueda definido por

\newif\ifNuevoCondional

Al usar \newif se tiene a disposición tres nuevos comandos: \if<test>, \NuevoCondicionaltrue ysu correspondiente \NuevoCondicionalFalse. Así se obtienen tres estructuras distintas

\newif\ifNuevoCondional\NuevoCondionaltrue

obtenemos que \NuevoCondicional seinicia en verdadero (modo habilitado).

\newif\ifNuevoCondional\NuevoCondionalfalse

obtenemos que \NuevoCondicional seinicia en falso (modo deshabilitado).

\newif\ifNuevoCondional\if<test> [parte a] \else [parte b] \fi

el \NuevoCondicional queda anidado.2Esto es: iniciar como habilitado o deshabilitado el comando creado.

Page 15: Manual de programacion LaTeX

2.3. COMANDO IF 9

Se define un comando (de nombre \grafico) el cual permita incorporar leyendas al pie de ungráfico, con el siguiente criterio

a) si la longitud de la leyenda es menor a la anchura del gráfico, entonces la leyenda se imprimecentrada con respecto al gráfico.

b) si la longitud es superior a la anchura del gráfico, entonces la leyenda se imprime con unaanchura igual a la del gráfico.

c) debe permitir elegir entre colocar o no un recuadro al gráfico.

Ejemplo 2.9

\newlength{\ancho}\newif\ifrecuadro\recuadrofalse\def\grafico#1#2#3#4#5{%\ifx#5R\recuadrotrue\else\ifx#5N%\recuadrofalse\fi\fi\vbox{\ifrecuadro\else\fboxrule0pt%\fi\fboxsep0pt\hbox{\fboxrule2pt\fboxsep2pt%\fbox{\includegraphics[width=#2,%height=#3]{#1}}}\vspace{\abovecaptionskip}%\settowidth{\ancho}{#4}%\ifdim\ancho<#2\hbox to#2{\hss#4\hss}\else\hbox{\parbox{#2}{#4}}\fi}}

Ahora imprimimos la imagen con los criterios dados

\grafico{nombre-imagen}{ancho}{alto}%{leyenda}{opcion-de-recuadro}

en donde para la opción de recuadro,podemos usar R o N para recuadraro no la gráfica respectivamente.

Esta es mi leyenda

Resultado 2.7

Unos comentarios adicionales con respecto a este código:

• el comando \newlength define una nueva longitud, el cual facilita la comparación de la anchuradel argumento #4 con respecto a la imagen.

• el comando \ifx compara dos argumentos entre sí, dando verdadero si son iguales y falso encaso contrario. Su sintaxis general es: \ifxArg1Arg2.

• el comando \settowidth iguala las dimensiones del comando \ancho al argumento #4.

• el comando \ifdim es usado para comparar dos longitudes mediante la relación <, > o =. Susintaxis general es: \ifdim Dim1 Relacion Dim2.

• el comando \hss es usado para centrar el contenido de la leyenda (argumento #4) con respectoal ancho de la imagen (argumento #2).

Page 16: Manual de programacion LaTeX
Page 17: Manual de programacion LaTeX

Capítulo 3

Archivos de clase

Pág.3.1 Finalidad . . . . . . . . . . . 113.2 Estructura . . . . . . . . . . . 11Identificando un archivo de clase . 12Declarando opciones de clase . . . . 12Ejecutando las opciones de clase . . 12Cargando la clase base y otros . . . 133.3 Ejemplo . . . . . . . . . . . . 13

Los archivos de clase poseen la extensión .cls, así un archivo de clase se distingue del archivoprincipal (el cual posee extensión .tex) no solamente por su extensión, sino también por su usosubordinado al archivo .tex.Un archivo de clase debe ser invocado en el documento principal mediante la instrucción:

\documentclass{nombre-archivo-de-clase}

3.1. FinalidadCuando se requiere uniformizar el aspecto de todos los documentos que se vayan a producir (por

ejemplo para un revista, boletín, exámenes, notas personales, etc) disponer de un archivo de clase esmuy útil. Para poder usar un archivo de clase es preciso (mas no estrictamente necesario) colocar elarchivo cls en la misma carpeta que el documento tex.

Ahora, no siempre es útil crear un archivo de clase. En ocasiones resulta mas cómodo crear unarchivo de estilo (de extensión .sty) o varios de ellos. Por ejemplo si se desea dotar de característicasdiversas (estilo de fuente, encabezados, entornos personalizados, etc) al documento, sería una buenaopción crear una serie de archivos .sty, puesto que así se obtendría una librería de archivos deestilo los cuales pueden ser usados en otros documentos tex. Para un usuario experimentado puederesultarle práctico colocar todo ello en un archivo de clase, sin embargo cuando se desea usar algunade las características en otro documento puede resultar laborioso seleccionar determinadas seccionesdel archivo cls para añadirlas al nuevo documento.

3.2. EstructuraLos comandos TEX y LATEX presentados hasta aquí permiten implementar ciertas características

al documento. Quedan muchos comandos por describir los cuales proporcionarían mayor libertad enla dotación de características, mas en lo que respecta a este manual procuramos mostrar que: unospocos comandos proporcionan resultados interesantes.

Por tanto se recomienda hacer uso de los siguientes libros para afianzar los conceptos aquí mos-trados y conocer de nuevos comandos

a) TEX By Topic, de Victor Eijkhout.

b) LATEX Companion, de Frank Mittelbach y Michel Goossens.

11

Page 18: Manual de programacion LaTeX

12 CAPÍTULO 3. CREANDO UN ARCHIVO DE CLASE CLS

Identificación

En esta parte se define el nombre que se usará cuando se invoque el archivo cls, así como algunasanotaciones extras. Por lo general estos datos brindan información descriptiva sobre el archivo declase, lo cual facilita la lectura del conjunto de instrucciones ahí contenidas.

\ProvidesFile{nombre-archivo.cls}[año/mes/dia]\typeout{anotaciones-extras}

Adicional a la información que se pueda establecer en este punto, sería favorable para el usuariorealizar comentarios (haciendo uso del símbolo %) para indicar la estructura general del archivode clase. A su vez, ir señalando (independiente de los comentarios dados al inicio) las líneas queconforman un grupo de instrucciones y realizan una tarea específica (los cuales al final conforman elconjunto de características que se desea brindar al documento).

Declaración de opciones

Existen diversas maneras de declarar opciones, más es recomendable usar \DeclareOption porser más eficiente (sobre todo consume menos memoria).

Antes se deben definir las variables que se irán a usar en el archivo de clase, para ello se definennuevos condicionales con el comando \newif, así

\newif\ifargumento

Usaremos \argumentotrue o \argumentofalse para cargar una opción por defecto. Así, por ejemplo,si no se desea cargar la opción argumento en modo habilitado entonces usamos

\newif\ifargumento\argumentofalse

posteriormente se debe declarar argumento como opción a habilitar en el documento tex1, comple-mentándose así el código anterior

\DeclareOption{argumento}{\argumentotrue}

Ejecución de opciones

Para leer las opciones que serán activadas al ser declaradas en la opción de clase del archivo tex,se debe escribir

\ProcessOptions\ifargumento%

\argumentotrue%\fi

1Indicado en la primera línea de código con: \documentclass[argumento]{nombre-archivo-cls}.

Page 19: Manual de programacion LaTeX

3.3. EJEMPLO 13

Carga de la clase

A.- Clase base: aquí se especifica si el archivo de clase está basado en una clase estándarpreestablecida como (article, book, report, etc) de LATEX. Así debemos usar

\LoadClass{clase-estandar}

en caso se desee cargar algunas opciones (de la clase estándar), se debe escribir

\LoadClass[opciones]{clase-estandar}

Se sugiere revisar los archivos de clase correspondientes a book y article, puesto que en ella seencuentran códigos relevantes que pueden ser de ayuda en la creación de archivos de clase a futuro.Por ejemplo, ver

• para book http://www.tex.ac.uk/ctan/macros/latex/unpacked/book.cls

• para article http://www.tex.ac.uk/ctan/macros/latex/unpacked/article.cls

B.- Paquetes: aquí se indican los paquetes que se harán uso (por defecto) en el documento clasea crear. Para ello usamos

\RequirePackage{nombre-paquete}

C.- Definiciones: aquí se pueden incluir algunas definiciones las cuales pueden ser reutilizadosa lo largo del archivo cls o directamente (invocado) en el documento tex, así

\def\argumento#1#2...#n{instrucciones}

3.3. EjemploLos ejemplos que se dan en esta sección son adaptaciones del código creado por Luis Varona2

(universidad de la Rioja en España) a quien agradezco su amable disposición al autorizar el libre usodel código.

Se desea imprimir los datos de los autores de un documento al final del mismo, para ello secreará un archivo de clase de nombre clase0.cls, así como el comando \contact bajo elformato

\contact{dirección autor 1}{email 1}{pagina web 1}

se habilitará el uso de este comando mediante una opción de clase, el cual llamaremosautocontact. Se explicará la estructura del archivo cls de acuerdo a lo establecido en estecapítulo.

Ejemplo 3.10

2Juan Luis Varona Malumbres, e-mail [email protected], website http://www.unirioja.es/cu/jvarona

Page 20: Manual de programacion LaTeX

14 CAPÍTULO 3. CREANDO UN ARCHIVO DE CLASE CLS

Identificación

\ProvidesFile{clase0.cls}[2013/01/01]\typeout{Ejemplo de archivo de clase}

% ---------------------- CODIGO INICIAL --------------------------------%% Creando la opcion autocontact\newif\ifautocontact

\autocontactfalse % Se inicia en modo desactivado (false) por defecto

Codigo de clase para contact 3.8

Declaración de opciones

DeclareOption{autocontact}{\autocontacttrue}

Codigo de clase para contact 3.9

Ejecución de opciones

\ProcessOptions\ifautocontact%

\autocontacttrue%\fi

Codigo de clase para contact 3.10

Carga de la clase

A.- Clase base

\LoadClass{article}

Codigo de clase para contact 3.11

B.- PaquetesIndicamos que no precisa especificar todos los paquetes aquí, por lo general se suele cargar los

mas comunes. Cada documento se va particularizando según los atributos que se quiera obtener, porello es aconsejable optar por una de las siguientes opciones

revisar el archivo de clase antes de escribir el archivo tex para verificar que paquetes están precargados.

crear un comentario (usando %) al inicio del archivo cls (o del archivo tex) indicando lospaquetes pre cargados.

Page 21: Manual de programacion LaTeX

3.3. EJEMPLO 15

% --------- TEXTO EN ESPAÑOL Y SILABEO -------------------%\RequirePackage[spanish]{babel}\hyphenation{au-tor}

% --------- OTROS PAQUETES QUE SE DESEA PRECARGAR --------%\RequirePackage{graphicx}\RequirePackage{url}% Permite usar diversos caracteres que no se

% pueden escribir de forma directa\RequirePackage{amsmath,amsthm}\RequirePackage{amssymb}\date{} % no pone la fecha

Codigo de clase para contact 3.12

C.- DefinicionesIniciamos creando el entorno trivlist cuya función es poder ordenar los datos (en bloque) que

se ingresen en los campos del comando \contact, lo cual da un efecto de lista no numerada (osin viñetas). Notar el uso del comando \let el cual transfiere las propiedades del comando \url a\contacturl. Posteriormente se define la estructura del bloque que se irá a imprimir al final de lapágina del documento, así también se aprovecha estos comandos para enlazarlos posteriormente a laorden last page y así ser invocados al final.

% ---- Se define un entorno corto para trivlist --------------%\{block}{\begin{trivlist}\item{}}{\end{trivlist}}\def\emailname{Correo electronico}\def\webname{Pagina web}\let\contacturl\url

% ------ Se define comandos para el last page -----------------%\let\@contact=\empty\newcommand{\contact}[3]{%

\expandafter\gdef\expandafter\@contact\expandafter{%\@contact \vskip 2.00pt plus 0.75 pt minus 0.25pt\relax

\begin{block}\footnotesize\scshape % tamaño y tipo de letra

\begin{minipage}{\textwidth}%\noindent#1\ifx\empty #2\else\\[1.5pt]\normalfont\emailname: \contacturl{#2}\fi\ifx\empty #3\else\\[1.5pt]\normalfont\webname: \contacturl{#3}\fi

\end{minipage}\end{block}}}

\def\contactalert{Se debe usar \contact{Autor}%{autor@email}{Pagina web} antes de \ begin{document}}

Codigo de clase para contact 3.13

Page 22: Manual de programacion LaTeX

16 CAPÍTULO 3. CREANDO UN ARCHIVO DE CLASE CLS

% Se imprime el contacto:\newcommand{\printcontact}{

\medskip\ifx\empty\@contact\noindent{\footnotesize % tamaño y tipo de letra

\contactalert\par}%\else\@contact\fi\let\@contact\empty}

\ifautocontact%\newcommand{\makelastpage}{\printcontact}\else\newcommand{\makelastpage}{\relax}\fi

% ------- redefinicion de \end{document} mediante enddocument ------%% se usa para cargar la orden last page

\let\endorigdocument\enddocument\def\enddocument{\enlargethispage{2mm}\makelastpage\label{LastPage}

\endorigdocument}

\endinput

Codigo de clase para contact 3.14

Para acabar este ejemplo, haremos una breve explicación sobre el uso del símbolo @ en algunoscomandos TEX:

• el usuario tiene libertad para crear comandos con los nombres que crea mas convenientes, massin embargo existen nombres que ya están pre establecidos, sobre todo si los nombres son dadosen ingles.

• al crear un documento cls se definen comandos cuyos nombres pueden caer dentro de la listade nombres que un usuario podría asignar a otro comando en la escritura de un documento tex(subordinados al archivo cls).

• debido a ello se hace necesario proteger el nombre de un comando creado en un archivo de clase(incluso dentro de un archivo tex) haciendo uso del símbolo @. Esta practica se extiende (dealgún modo) cuando se quiere limitar la acción de un comando mediante el uso de un comandono existente.

• algunos de los comandos internos3 de LATEX poseen el símbolo @, en general varios de loscomandos TEX lo poseen. De modo que para no crear un comando que ya esté pre definido poralgún archivo de clase en la instalación LATEX que se tenga, sería conveniente no abusar del usode @.

3Los ladrillos bajo el cual esta diseñado LATEX.

Page 23: Manual de programacion LaTeX

Capítulo 4

Archivos de estilo

Pág.4.1 Finalidad . . . . . . . . . . . 174.2 Diferencia entre un CLS y un

STY . . . . . . . . . . . . . . 184.3 Ejemplo . . . . . . . . . . . . 18

Los archivos de estilo poseen extensión .sty, un archivo de estilo debe ser invocado en el documentoprincipal mediante la instrucción:

\usepackage{nombre-archivo-de-estilo}

4.1. Finalidad

Los archivos de estilo son usados en

a) la implementación de características especiales

b) implementación de comandos creados por el usuario

en el primer caso se recomienda revisar otros archivos de estilo que posean un comportamientosimilar a la característica que se desea implementar, para luego a partir de los comandos TEX yLATEX proporcionados aquí y en los libros de referencia, realizar las modificaciones correspondientes.

En la siguiente dirección web se encontraran las contribuciones realizadas por usuarios de LATEX.En ella figuran diversos archivos de estilo los cuales pueden ser aprovechados de forma directa o sermodificados según la necesidad

http://www.ctan.org/tex-archive/macros/latex/contrib/

Existen otras contribuciones que no se encuentran alojadas en la web anterior, por ejemplo serecomienda recurrir a la siguiente web para encontrar diversas instrucciones (según el tema de discu-sión) que en su conjunto constituirían un archivo de estilo, naturalmente dichas instrucciones tienenque estar relacionadas según la(s) característica(s) que se desee obtener

http://tex.stackexchange.com/

Una advertencia importante

Algunos documentos de estilo que se puedan encontrar en la web hacen uso de paquetes y/ocomandos de LATEX31. Motivo por el cual es preciso instalar dichos paquetes o tener los archivos enla misma carpeta donde se esta trabajando.

1Esta versión está en preparación, la actual versión de MiKTEX (distribución para Windows) es 2.9.4757.

17

Page 24: Manual de programacion LaTeX

18 CAPÍTULO 4. CREANDO UN ARCHIVO DE ESTILO STY

4.2. Diferencia entre un CLS y un STY

La diferencia entre los archivos de clase y estilo radica en que los archivos de estilo son elaboradosteniendo en cuenta la implementación y/o modificación de una característica específica del documentoen tanto que los archivos de clase poseen un efecto mayor ya que dota de mayores características aun documento.

En cuando a escritura de código, la única diferencia esencial para que un archivo de clase seaun archivo de estilo viene dada por la instrucción

\LoadClass{article}

de esta manera, en vez de usar \documentclass{mi-archivo-de-clase} se usa

\documentclass{article}% book, report, beamer, etc\usepackage{mi-archivo-de-estilo}

cuando se realiza la adaptación de un archivo de clase a un archivo de estilo quizá sea necesarioañadir y/o modificar algunos comandos del archivo de clase, puesto ambos tipos de archivo poseenun comportamiento global y local respectivamente.

4.3. Ejemplo

Se dará un ejemplo en la que se añade una cabecera descriptiva al inicio de un artículo. Estees una adaptación del código creado por Luis Varona2 (universidad de la Rioja en España) para laRevista de la Real Sociedad Matemática Española (RSME).

Se desea imprimir a modo de encabezado (al inicio del documento) los datos correspondientesa la publicación periódica que realiza un grupo de investigación. Entre los datos que se deseaimprimir se tiene: nombre del grupo de investigación, volumen, año, número de publicacióny las páginas que abarca el artículo publicado (este último es cargado de forma automática).Para ello se creará el archivo de estilo: cabecera.sty, la impresión de los datos se realizaraescribiendo las siguientes instrucciones en el archivo tex

\grupname{Nombre del grupo de investigación}\volume{XX}\yearofpublication{XXXX}\issuenumber{X}

se habilitará el uso de estos comandos mediante la declaración \usepackage{cabecera}.

Ejemplo 4.11

Primero se define los comandos a usar para la impresión de datos. Se añade el comando, quepermite colocar en la cabecera del documento (a partir de la segunda página) un nombre cortopara el grupo de investigación, \shortgrupname. Así el código inicial para el documento de estilocabecera.sty es

2Juan Luis Varona Malumbres, e-mail [email protected], website http://www.unirioja.es/cu/jvarona

Page 25: Manual de programacion LaTeX

4.3. EJEMPLO 19

\def\yearofpublication#1{\def\theyearofpublication{#1}}\def\volume#1{\def\thevolume{#1}}\def\issuenumber#1{\def\theissuenumber{#1}}\def\grupname#1{\def\thegrupname{#1}}\grupname{nnnnnnnnnnn}\yearofpublication{xxxx}\volume{xx}\issuenumber{x}\def\shortgrupname#1{\def\theshortgrupname{#1}}\shortgrupname{Nombre corto del grupo}

Codigo de estilo para cabecera 4.15

A continuación se indica la estructura que tendrá el encabezado. Se añade el comando, queimprime el texto provisional indicando que el texto esta en revisión, \provisional

% Por si queremos indicar que la paginacion es provisional:\def\theprovisional{}\def\provisional{%

\def\theprovisional{ (provisional)}%}% Para la cabecera de la primera pagina de cada articulo:\newcommand{\makefirstpageofarticle}{\markright{\footnotesize\scshape%\thegrupname,Vol.~\thevolume\ (\theyearofpublication), N\’um.~\theissuenumber,

P\’ags.~\thepage--\pageref{LastPage}\theprovisional}}\def\theleftheading{\theshortgrupname}\def\leftheading#1{\def\theleftheading{#1}\makestandardpage}\newcommand{\makestandardpage}{%

\markboth{{\footnotesize\scshape \theleftheading}}%{{\footnotesize\scshape \theshortgrupname}}%

}

Codigo de estilo para cabecera 4.16

Ahora se define el estilo para cabecera.sty, los textos de la cabecera se imprimen a tamaño\footnotesize, y los números de página en \small.

\def\ps@headingscabecera{%\let\@oddfoot\@empty\let\@evenfoot\@empty

% \def\@evenhead{\thepage\hfil\slshape\leftmark}%ORIGINAL DE \ps@myheadings\def\@evenhead{\small\thepage\hfil\slshape\leftmark}

% \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% ORIGINAL DE \ps@myheadings\def\@oddhead{{\slshape\rightmark}\hfil\small\thepage}

\let\@mkboth\@gobbletwo\let\sectionmark\@gobble\let\subsectionmark\@gobble}

Codigo de estilo para cabecera 4.17

Page 26: Manual de programacion LaTeX

20 CAPÍTULO 4. CREANDO UN ARCHIVO DE ESTILO STY

Las siguientes instrucciones permite incluir en la primera página del documento los datos de lacabecera

\let\ps@firstpage\ps@headingscabecera\def\@fb@botlist{\@botlist}\def\@fb@topbarrier{\suppressfloats[t]}

\def\FloatBarrier{\par\begingroup \let\@elt\relax\edef\@tempa{\@fb@botlist\@deferlist\@dbldeferlist}%\ifx\@tempa\@empty\else

\ifx\@fltovf\relax % indicator of recursion\if@firstcolumn

\clearpage\else

\null\newpage\FloatBarrier\fi

\else\newpage \let\@fltovf\relax\FloatBarrier % recurse once only

\fi\fi \endgroup\@fb@topbarrier }

% Se activa el tipo de pagina por defecto:\pagestyle{headingscabecera}

Codigo de estilo para cabecera 4.18

Se complementa el código anterior (poner atención a los comentarios incluidos en el código),motivo por el cual no esta enmarcado

\newif\ifexistsfixedsectiontitle\existsfixedsectiontitlefalse

\newif\ifalreadyonetitle\alreadyonetitlefalse

\def\goodbreaksecondsemititle{\null\vskip 0em plus 3.5em\pagebreak[3]}\let\@author\@empty % inicializado para usarlo en los "if"% Para poder añadir un espacio previo (positivo o negativo)% antes de los titulos\newdimen{\thepreviousvspace}\setlength{\thepreviousvspace}{0pt}\def\previousvspace#1{\setlength{\thepreviousvspace}{#1}}

\renewcommand\maketitle{\FloatBarrier\par

\begingroup\renewcommand\thefootnote{\@fnsymbol\c@footnote}%\def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%\long\def\@makefntext##1{\parindent 1em\noindent

\hb@[email protected]{%\hss\@textsuperscript{\normalfont\@thefnmark}}##1}%

\if@twocolumn\ifnum \col@number=\@ne

Page 27: Manual de programacion LaTeX

4.3. EJEMPLO 21

\@maketitle\else

\twocolumn[\@maketitle]%\fi

\else\ifodd\thepage\else\cleardoublepage\fi % Empezar en pagina impar\global\@topnum\z@ % Previene a las figuras ir a la parte superior\@maketitle

\fi\makefirstpageofarticle\thispagestyle{firstpage}\@thanks

\endgroup\global\let\@thanks\@empty\global\let\@author\@empty\global\let\@date\@empty\global\let\@title\@empty\makestandardpage % Para que, a partir de ahora, use la cabecera estandar\alreadyonetitletrue

}\def\@maketitle{%

\ifodd\thepage\else\cleardoublepage\fi %Para que empiece en pagina impar\null\vskip 0.333em%\vspace*{\thepreviousvspace}%\begin{center}%\let \footnote \thanks

{\large\bfseries \@title \par}%\vskip 1.25em%\if\@empty\@author\else % Por si no hay autor{\par}\vskip .5em{\bfseries

\lineskip .5em%\begin{tabular}[t]{c}%

\@author\end{tabular}\par}%

\fi{\large \@date}%

\end{center}%\par\vskip 2em}

Por ultimo se imprime la cantidad de páginas que abarca el artículo que se escribe:

\let\endorigdocument\enddocument\def\enddocument{\enlargethispage{2mm}\label{LastPage}\endorigdocument}

Codigo de estilo para cabecera 4.19

NOTA: El comando \provisional en caso de ser usado debe ser colocado en el preámbulo deldocumento tex.