You are on page 1of 599

C

uando no estamos a la caza de buena comida cerca de la

Francisco
Solsona y Elisa Viso
Universidad, explorando nuevos sistemas de cmputo,
programando, o dando clases, nos encontrars discutiendo nuevos proyectos e ideas para difundir y ensear computacin. As
nacieron, hace ya ms de un lustro, las ideas plasmadas en el libro
MANUAL DE SUPERVIVENCIA EN
que tienes en tus manos. Por un lado intenta ser un vehculo para
introducirte al mundo del software libre, a Linux y a la prograLINUX
macin y por el otro, un manual de supervivencia y referencia de
aplicaciones tiles para consolidarte como programador.
La vida del computlogo es muy divertida y llena de
emociones al trabajar con aplicaciones de software, sistemas de
Francisco Solsona
cmputo y en general, con nuevas tecnologas. Algunas veces, sin
embargo, moverte en el mundo de posibilidades que ofrece la
Elisa Viso
computacin es abrumador, sobre todo en el terreno del software

Temas de computacion

libre. Este libro te ofrece una visin moderna y desenfadada de


Linux, poniendo a tu disposicin una ruta clara en el laberinto de
sus aplicaciones. Fue realizado por programadores entusiastas y
est dirigido a otros programadores entusiastas en busca de algo
ms de lo que los sistemas operativos y herramientas conven-

MANU
AL DE SUPERVIVENCIA EN LINUX
cionales suelen ofrecer.

Imgen de portada:
Naturaleza Muerta (leo sobre lienzo)
Pablo Picasso
10 de abril de 1947

uando no estamos a la caza de buena comida cerca de la

Francisco
Solsona y Elisa Viso
Universidad, explorando nuevos sistemas de cmputo,
programando, o dando clases, nos encontrars discutiendo nuevos proyectos e ideas para difundir y ensear computacin. As
nacieron, hace ya ms de un lustro, las ideas plasmadas en el libro
MANUAL DE SUPERVIVENCIA EN
que tienes en tus manos. Por un lado intenta ser un vehculo para
introducirte al mundo del software libre, a Linux y a la prograLINUX
macin y por el otro, un manual de supervivencia y referencia de
aplicaciones tiles para consolidarte como programador.
La vida del computlogo es muy divertida y llena de
emociones al trabajar con aplicaciones de software, sistemas de
Francisco Solsona
cmputo y en general, con nuevas tecnologas. Algunas veces, sin
embargo, moverte en el mundo de posibilidades que ofrece la
Elisa Viso
computacin es abrumador, sobre todo en el terreno del software

Temas de computacion

libre. Este libro te ofrece una visin moderna y desenfadada de


Linux, poniendo a tu disposicin una ruta clara en el laberinto de
sus aplicaciones. Fue realizado por programadores entusiastas y
est dirigido a otros programadores entusiastas en busca de algo
ms de lo que los sistemas operativos y herramientas conven-

MANU
AL DE SUPERVIVENCIA EN LINUX
cionales suelen ofrecer.

Imgen de portada:
Naturaleza Muerta (leo sobre lienzo)
Pablo Picasso
10 de abril de 1947

FRANCISCO SOLSONA

MANUAL
SUPERVIVENCIA
EN

ELISA VISO
(COORDINADORES)

DE
LINUX

MAURICIO ALDAZOSA JOS GALAVIZ IVN HERNNDEZ CANEK PELEZ


KARLA RAMREZ FERNANDA SNCHEZ PUIG FRANCISCO SOLSONA
MANUEL SUGAWARA ARTURO VZQUEZ ELISA VISO

FACULTAD

DE

CIENCIAS, UNAM
2007

Esta obra aparece gracias al apoyo


del proyecto PAPIME PE-100205

Manual de supervivencia en Linux


1 edicin, 2007
Diseo de portada: Laura Uribe
Universidad Nacional Autnoma de Mxico,
Facultad de Ciencias
Circuito exterior. Ciudad Universitaria.
Mxico 04510
cse@fciencias.unam.mx
ISBN: 978-970-32-5040-0
Impreso y hecho en Mxico

ndice general
Prefacio
XII
1. Introduccin a Unix
1
1.1. Historia . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
1
1.1.1. Sistemas UNIX libres . .
. . .
. . . . . . . . . . . . .
2
1.1.2. El proyecto GNU . . . . .
. . .
. . . . . . . . . . . . .
3
1.2. Sistemas de tiempo compartido . .
. . .
. . . . . . . . . . . . .
4
1.2.1. Los sistemas multiusuario
. . .
. . . . . . . . . . . . .
4
1.3. Inicio de sesin . . . . . . . . . . . . .
. . . . . . . . . . . . .
5
1.4. Emacs . . . . . . . . . . . . . . .
. . .
. . . . . . . . . . . . .
6
1.4.1. Introduccin a Emacs . . .
. . .
. . . . . . . . . . . . .
6
1.4.2. Emacs y t . . . . . . . .
. . .
. . . . . . . . . . . . .
7

. .
10
. .

.
14
.
14
.
18
.
20
.
20

2. Ambientes gr cos en Linux


2.1. Ambientes de escritorio . . . . .
. . . . . . . . . .
2.2. KDE . . . . . . . . . . . . . . .
. . . . . . . . . .
2.2.1. Con guracin de KDE . . .
. . . . . . . . . .
2.2.2. KDE en 1, 2, 3 . . . . . .
. . . . . . . . . .
2.2.3. Quemado de discos con K3b
. . . . . . . . . .
2.2.4. Amarok . . . . . . . . . .
. . . . . . . . . .
2.3. Emacs . . . . . . . . . . . . . .
. . . . . . . . . .
2.4. Comenzando con Emacs . . . . . .
. . . . . . . . . .

. .
. .
. .
. .
.

.
.

.
.

. .
. .
.

9
.
.
.
.
.
10
.
.
.
.
.
.
.
.
.
.

.
9

3. Sistema de Archivos
23
3.1. El sistema de archivos . . . . . . . . . . . . . .
. . . . . . . . . . . . . 23
3.1.1. Rutas absolutas y relativas . . . . . . .
. . . . . . . . . . . . . 26
3.2. Movindose en el rbol del sistema de archivos
. . . . . . . . . . . . 27
3.2.1. Permisos de archivos . . . . . . . . . .
. . . . . . . . . . . . . 30
3.2.2. Archivos estndar y redireccionamiento
. . . . . . . . . . . . . 34
3.3. Otros comandos de Unix . . . . . . . . . . . .
. . . . . . . . . . . . . 37

3.3.1. Sintaxis estndar de comandos . . . . .


. . . . . . . . . . . 37

ii

3.4. Agrupando nombres de archivos . . . . . . . . . . . .


. . . . . . . . . . . 44
3.5. Konqueror: administrador de archivos y algo ms . . .
. . . . . . . . . . 45
3.5.1. Iniciando Konqueror . . . . . . . . . . . . . .
. . . . . . . . . . . 46
3.5.2. Konqueror como administrador de archivos . .
. . . . . . . . . . . 46
3.5.3. Konqueror como un navegador web . . . . . .
. . . . . . . . . . . 48
3.5.4. Konqueror como una aplicacin integrada . . .
. . . . . . . . . . 49
3.6. Emacs . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 50
3.6.1. Ejecutando Emacs desde la lnea de comandos
. . . . . . . . . . 50
3.6.2. Conceptos esenciales . . . . . . . . . . . . . .
. . . . . . . . . . . 52
3.6.3. Dired . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 53
3.6.4. Ejecucin de comandos de Unix desde Emacs .
. . . . . . . . . . 54

4. Edicin
55
4.1. La guerra de los editores de texto . . . . .
. . . . . . . . . . . . . 55
4.1.1. Vieja guardia contra nueva guardia
. . . . . . . . . . . . . 56
4.2. Kate: un editor para programadores . . .
. . . . . . . . . . . . . 56
4.2.1. Introduccin . . . . . . . . . . .
. . . . . . . . . . . . 56
4.2.2. Empezando a utilizar Kate . . . .
. . . . . . . . . . . . . 57
4.2.3. Editando archivos . . . . . . . . .
. . . . . . . . . . . . . 59
4.3. Emacs . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 64
4.3.1. Comandos . . . . . . . . . . . .
. . . . . . . . . . . . . 65
4.3.2. Movimiento . . . . . . . . . . . .
. . . . . . . . . . . . . 66
4.3.3. Matando y borrando . . . . . . .
. . . . . . . . . . . . . 67
4.3.4. Reencarnacin de texto . . . . . .
. . . . . . . . . . . . 68
4.3.5. Regiones . . . . . . . . . . . . .
. . . . . . . . . . . . . 68
4.3.6. Rectngulos . . . . . . . . . . . .
. . . . . . . . . . . . 68
4.3.7. Registros . . . . . . . . . . . . .
. . . . . . . . . . . . . 69
4.3.8. Archivos . . . . . . . . . . . . .
. . . . . . . . . . . . . 70
4.3.9. Buscar . . . . . . . . . . . . . .
. . . . . . . . . . . . . 70
4.3.10. Reemplazar . . . . . . . . . . . .

. . . . . . . . . 70
4.3.11. Guardar . . . . . . . . . . . . . .
. . . . . . . . . . . . . 71
4.3.12. Ventanas . . . . . . . . . . . . .
. . . . . . . . . . . . . 71
4.3.13. Marcos (frames) . . . . . . . . .
. . . . . . . . . . . . . 71
4.3.14. Ayuda en lnea . . . . . . . . . .
. . . . . . . . . . . . 72
4.3.15. Lista de buffers . . . . . . . . . .
. . . . . . . . . . . . . 72
4.3.16. Anzuelos (Hooks), setq y otros . .
. . . . . . . . . . . . . 72
4.3.17. Ortografa . . . . . . . . . . . . .
. . . . . . . . . . . . 73
4.3.18. Extendiendo Emacs . . . . . . . .
. . . . . . . . . . . . . 74

iii
5. Internet
77
5.1. Redes de computadoras . . . . . . . . . . . . . . .
. . . . . . . . .
77
5.1.1. Relacin cliente-servidor . . . . . . . . . .
. . . . . . . .
78
5.1.2. TCP/IP . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
79
5.2. Web . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
80
5.3. Redes y direcciones . . . . . . . . . . . . . . . . .
. . . . . . . . .
81
5.3.1. Domicilios estndar en Internet . . . . . .
. . . . . . . .
81
5.3.2. Nomenclatura antigua e internacional . . .
. . . . . . . . .
81
5.4. WWW . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
82
5.4.1. URL: especi cacin de objetos en Internet
. . . . . . . .
83
5.4.2. Navegadores . . . . . . . . . . . . . . . .
. . . . . . . . .
83
5.4.3. Google . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
85
5.4.4. Wikipedia . . . . . . . . . . . . . . . . . .
. . . . . . . . .
85
5.5. Los programas de correo de Unix . . . . . . . . . .
. . . . . . . . .
86
5.6. Netiquete . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
87
5.6.1. Algunos puntos del netiquete . . . . . . . . .
. . . . . . . . .
87
5.7. KMail: lector de correo electrnico . . . . . . . . .
. . . . . . . .
89
5.7.1. Introduccin . . . . . . . . . . . . . . . .
. . . . . . . .
89
5.7.2. Utilizando KMail . . . . . . . . . . . . . .
. . . . . . . . .
90
5.8. FTP . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
93
5.8.1. Qu es un FTP annimo? . . . . . . . . .
. . . . . . .
93
5.8.2. Comandos para FTP . . . . . . . . . . . .
. . . . . . . . .
93
5.9. SSH: Secure Shell . . . . . . . . . . . . . . . . . .
. . . . . . . . .
95
5.9.1. Accediendo a sistemas remotos . . . . . .
. . . . . . . . .
96
5.9.2. Copiando archivos entre sistemas . . . . .
. . . . . . . . .
96
5.10. PGP: Pretty Good Privacy . . . . . . . . . . . . .
. . . . . . . . .
97
5.10.1. Funcionamiento de PGP . . . . . . . . . .
. . . . . . . . .
98
5.11. RSS: sistema de noticias . . . . . . . . . . . . . .
. . . . . . . . .
99
5.11.1. Introduccin . . . . . . . . . . . . . . . .

.
5.12.
. .
.

.
.

.
5.13.
. .
.

.
5.14.
. .
.

. . . . . .
99
5.11.2. Akregator . . . . . . . . . . . . . . . . . .
. . . . . . .
99
Mensajera instantnea . . . . . . . . . . . . . . .
. . . . . . 101
5.12.1. Introduccin . . . . . . . . . . . . . . . .
. . . . . . 101
5.12.2. Kopete . . . . . . . . . . . . . . . . . . .
. . . . . . . 101
5.12.3. Creando cuentas . . . . . . . . . . . . . .
. . . . . . . 103
5.12.4. Funciones bsicas . . . . . . . . . . . . . .
. . . . . . 104
5.12.5. Extensiones . . . . . . . . . . . . . . . . .
. . . . . . . 105
Rdesktop: Remote Desktop Protocol Client . . . .
. . . . . . . 106
5.13.1. Utilizando Rdesktop . . . . . . . . . . . .
. . . . . . . 106
Kontact, una suite de productividad en KDE . . . .
. . . . . . . 106
5.14.1. Resumen . . . . . . . . . . . . . . . . . .
. . . . . . . 108
5.14.2. Correo, KMail . . . . . . . . . . . . . . .
. . . . . . . 108

iv
.

. .
5.15.
. .

5.14.3.
. .
5.14.4.
. .
Emacs
. .
5.15.1.
. .
5.15.2.
. .
5.15.3.
. .
5.15.4.
. .
5.15.5.
. .
5.15.6.
. .

Contactos, KAddressBook . . . . . . . .
. . . . . . 108
Calendario y pendientes con KOrganizer
. . . . . . 112
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 119
VM . . . . . . . . . . . . . . . . . . . .
. . . . . . 121
BBDB . . . . . . . . . . . . . . . . . . .
. . . . . . 128
w3m . . . . . . . . . . . . . . . . . . .
. . . . . . 131
ERC . . . . . . . . . . . . . . . . . . . .
. . . . . . 136
TRAMP . . . . . . . . . . . . . . . . . .
. . . . . . 139
Diccionario . . . . . . . . . . . . . . . .
. . . . . . 140

6. LATEX
.

.
.
.
.
.
.

.
.
.
.

.
.
.

.
.

143
6.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 143
6.2. Componentes de un texto . . . . . . . . . . . . . . . .
. . . . . . . . . . 144
6.3. Ambientes para formato . . . . . . . . . . . . . . . .
. . . . . . . . . . 145
6.3.1. Posibles errores . . . . . . . . . . . . . . . . .
. . . . . . . . . . 147
6.4. Formato general de un documento . . . . . . . . . . .
. . . . . . . . . . 149
6.4.1. Cartas . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 152
6.5. Tipos y tamaos de letras . . . . . . . . . . . . . . . .
. . . . . . . . . 153
6.6. Listas de enunciados o prrafos . . . . . . . . . . . . .
. . . . . . . . . 156
6.6.1. Numeraciones . . . . . . . . . . . . . . . . .
. . . . . . . . . . 157
6.6.2. Listas marcadas . . . . . . . . . . . . . . . . .
. . . . . . . . . . 160
6.6.3. Descripciones . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 161
6.6.4. Listas ms compactas . . . . . . . . . . . . . .
. . . . . . . . . 163
6.7. Tablas . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 164
6.7.1. Multicolumnas . . . . . . . . . . . . . . . . .
. . . . . . . . . . 166
6.7.2. Separacin de renglones y columnas . . . . . .
. . . . . . . . . 168
6.7.3. Lneas incompletas verticales y horizontales
. . . . . . . . 172
6.7.4. Espacio entre los renglones . . . . . . . . . . .
. . . . . . . . . . 173
6.8. Matemticas en LATEX . . . . . . . . . . . . . . . . . .
. . . . . . . . . 174
6.8.1. Frmulas matemticas . . . . . . . . . . . . .

.
.
.

.
.

.
.

.
.

. . . . . . . . . 176
6.9. Emacs y LATEX . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 178
6.9.1. Anotaciones en los smbolos . . . . . . . . . .
. . . . . . . . . 192
6.9.2. Arreglos de frmulas . . . . . . . . . . . . . .
. . . . . . . . . 193
6.10. Imgenes y guras . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 197
6.10.1. Tablas, guras, etc. . . . . . . . . . . . . . . .
. . . . . . . . . 197
6.10.2. Cortando guras . . . . . . . . . . . . . . . .
. . . . . . . . . 204
6.10.3. Colores . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 205
6.10.4. Dibujando objetos geomtricos . . . . . . . . .
. . . . . . . . . 207
6.10.5. Lneas . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 207
6.10.6. Acomodando objetos . . . . . . . . . . . . . .
. . . . . . . . . . 226
6.11. Referencias e ndices . . . . . . . . . . . . . . . . . .
. . . . . . . . . 231

v
.
.

.
6.12.
. .
.

6.11.1. Referencias bibliogr cas


. . . . . . . . .
6.11.2. ndices . . . . . . . . . .
. . . . . . . . . .
Emacs
. . . . . . . . . . . . . .
. . . . . . . . .
6.12.1. AUCTEX . . . . . . . . .
. . . . . . . . .
6.12.2. RefTEX . . . . . . . . . .
. . . . . . . . .
6.12.3. Preview . . . . . . . . . .
. . . . . . . . .

. .
231
. .
. . . . . . 237
.
. . .
. . . . . . . 237
. . .
. . . . . . . 238
. . .
. . . . . . . 241
. . .
. . . . . . . 242
.

.
.
.

.
.
.
.
.
.

7. Lenguajes de marcado
7.1. XML . . . . . .
. . . . . .
7.2. HTML . . . . . .
. . . . . .
7.2.1. XHTML
. . . . . .
7.3. CSS . . . . . . .
. . . . . .
7.3.1. Javascript
. . . . . .
7.4. Emacs . . . . . .
. . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

245
.
246
.
249
.
249
.
250
.
253
.
255

.
.
.
.
.
.

8. Herramientas para desarrollo


256
8.1. Control de versiones . . . . . . .
. . .
. . . . . . . . . . . . . . . . . . 256
8.1.1. subversion . . . . . . . .
. . .
. . . . . . . . . . . . . . . . . . 256
8.1.2. Introduccin a subversion
. . .
. . . . . . . . . . . . . . . . . . 257
8.2. Emacs . . . . . . . . . . . . . . .
. . .
. . . . . . . . . . . . . . . . . . 260
8.2.1. JDEE . . . . . . . . . . .
. . .
. . . . . . . . . . . . . . . . . . 260
8.2.2. psvn . . . . . . . . . . . .
. . .
. . . . . . . . . . . . . . . . . . 268
9. Extendiendo tu ambiente
271
9.1. Programacin en shell . . . . . . . . . . . . . .
. . . . . . . . . . . .
9.1.1. Variables . . . . . . . . . . . . . . . .
. . . . . . . . . . .
9.1.2. Preparacin . . . . . . . . . . . . . . .
. . . . . . . . . . . .
9.1.3. Vigilando el espacio en disco . . . . . .
. . . . . . . . . . .
9.1.4. Listado de directorios . . . . . . . . . .
. . . . . . . . . . .
9.1.5. Recorridos recursivos . . . . . . . . . .
. . . . . . . . . . .

.
.

.
.

.
.

271
.

272
272

273

275

278

.
.
.
.
.
.

9.1.6. Comparando archivos . . . . . . . . .


. . . . . . . . . . .
9.1.7. Otra vez el problema de borrar la basura
. . . . . . . . . . .
9.1.8. Para saber ms . . . . . . . . . . . . .
. . . . . . . . . . . .
9.2. Emacs . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
9.2.1. La madre de todos los lenguajes . . . .
. . . . . . . . . . .
9.2.2. LISP en 15 minutos . . . . . . . . . . .
. . . . . . . . . . .
9.2.3. Resumen . . . . . . . . . . . . . . . .
. . . . . . . . . . .
9.3. Evaluaciones . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
9.3.1. Nombres de buffers . . . . . . . . . . .
. . . . . . . . . . .
9.4. De niciones de funciones . . . . . . . . . . . .
. . . . . . . . . . . .
9.4.1. defun . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
9.4.2. let . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .

283

285

289

289

289

290

298

299

299

301

301

305

vi

9.5.

9.6.

9.7.

9.8.

9.4.3. La forma especial if . . . . . . . . . . . . . . .


. . . . . . . . . . 306
9.4.4. save-excursion . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 307
9.4.5. Resumen . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 308
Funciones relacionadas con buffers . . . . . . . . . . . .
. . . . . . . . . . 311
9.5.1. De nicin (simpli cada) de beginning-of-buffer
. . . . . . . . . . 311
9.5.2. Resumen . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 314
Funciones fundamentales . . . . . . . . . . . . . . . . .
. . . . . . . . . . 314
9.6.1. car y cdr . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 315
9.6.2. Cortando y guardando texto . . . . . . . . . . .
. . . . . . . . . . 318
9.6.3. Inicializacin de variables: defvar . . . . . . . .
. . . . . . . . . . 321
9.6.4. copy-region-as-kill . . . . . . . . . . . . . . . .
. . . . . . . . . . 322
9.6.5. Resumen . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 325
Lluvia de funciones . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 326
9.7.1. Quin o qu es ASCII? . . . . . . . . . . . . .
. . . . . . . . . . 326
9.7.2. Cmo numerar una regin de lneas? . . . . . .
. . . . . . . . . . 327
9.7.3. Borrado efectivo de espacios . . . . . . . . . . .
. . . . . . . . . . 328
9.7.4. Un ejercicio totalmente intil, o eso parece . . .
. . . . . . . . . . 330
9.7.5. Resumen . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 332
Para saber ms . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 333

A. Distribuciones de Linux
A.1. Ubuntu
. . . . .
A.1.1.
. . . . .
A.1.2.
. . . . .
A.2. Debian
. . . . .
A.2.1.
. . . . .
A.2.2.
. . . . .
A.3. Fedora
. . . . .
A.3.1.
. . . . .
A.3.2.

. . . . .
. . .
Filosofa
. .
Manejo de
. . .
. . . . .
. . .
Filosofa
. .
Manejo de
. . .
. . . . .
. . .
Filosofa
. .
Manejo de

. . . . .
. .
. . . . .
. . .
software
. .
. . . . .
. .
. . . . .
. . .
software
. .
. . . . .
. .
. . . . .
. . .
software

.
.
.

.
.

.
.
.
.

.
.
.
.
.

.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.

.
.

.
.
.
.

.
.

.
.
.
.

.
.

.
.
.

.
.
.
.
.
.

337
.
337
.
337
.
338
.
340
.
340
.
340
.
340
.
340
.

341

B. Compilando e instalando a pie


343
B.1. Aplicaciones no disponibles . . . . . . . . . . . . . . . . . . . .
. . . . . 343
C. Emacs: archivos de con guracin
347
C.1. /.emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .
347
C.2. /.vm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .
349
C.3. /.emacs-w3m . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .
350

ndice de

guras

1.1. Acceso al sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . .


. . .
5
1.2. Inicio de una sesin en un sistema UNIX. . . . . . . . . . . . . . . . . . .
6
1.3. Equivocacin al teclear la contrasea. . . . . . . . . . . . . . . . . . . . .
6
2.1. KControl . . . . . . . . . . .
.
. . . . . . . . . . .
2.2. Administracin de usuarios . .
.
. . . . . . . . . . . .
2.3. Administracin de contraseas
.
. . . . . . . . . . . .
2.4. Disposicin del teclado . . . .
.
. . . . . . . . . . . .
2.5. KDE . . . . . . . . . . . . . .
.
. . . . . . . . . . . .
2.6. K3b . . . . . . . . . . . . . .
.
. . . . . . . . . . . .
2.7. Quemado de un disco de datos
.
. . . . . . . . . . . .
2.8. Quemado de un disco de audio
.
. . . . . . . . . . . .
2.9. Amarok . . . . . . . . . . . .
.
. . . . . . . . . . . .
2.10. Emacs en el men de KDE . .
.
. . . . . . . . . . . .
.

3.1.
.
3.2.
. .
3.3.
. .
3.4.
. .
3.5.
. .
3.6.
. .
3.7.
. .
.

.
.
.

.
.
.
.

.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

. .
11
. .

12

.
.
.

. .
12
. .
. . 14
. . .
. . 15
. . .
. . 16
. . .
. . 16
. . .
. . 18
. . .
. . 19
. . .
. . 20

Sistema de archivos en un sistema Unix . . . .


. . . . . . . . . . . .
Resultado de entubar ls -al con less . . . . .
. . . . . . . . . . . .
Konqueror como un administrador de archivos .
. . . . . . . . . . . .
Konqueror con un emulador de terminal . . . .
. . . . . . . . . . . .
Konqueror como un navegador de Internet . . .
. . . . . . . . . . . .
Konqueror deplegando una imagen . . . . . . .
. . . . . . . . . . . .
Konqueror deplegando un documento postscrip.
. . . . . . . . . . . .

25

.
.

29

47

48

49

49

50

4.1. Kate en el men de KDE . . . . . . . . . . . . . . . . . . . . . . . . . . .


57
4.2. Ventana de inicio de Kate . . . . . . . . . . . . . . . . . . . . . . . .
. . . 60
5.1. Ventana principal de KMail .
. . . . . .
. . . . . . . . . . . . . .
89
5.2. Vista principal de Akregator
. . . . . .
. . . . . . . . . . . . . . . 100
5.3. Kopete en el men de KDE .
. . . . . .
. . . . . . . . . . . . . . 103
5.4. Vista principal de kopete . . . . . . . .
. . . . . . . . . . . . . . . 104
5.5. Ventana inicial de Kontact .
. . . . . .
. . . . . . . . . . . . . . . 107

5.6.
.

KAddressBook . . . . . . .
. . . . . . . .

.
.

.
.

.
.

.
.

.
.

. .
109

viii
.

.
.

.
.

.
.

.
.

.
.

.
.
.

.
.
.

5.7. Creando una nueva agenda . . . . . .


.
. . . . . . . . . . . . 110
5.8. Creando una nuevo contacto . . . . .
.
. . . . . . . . . . . . 110
5.9. Pestaa de detalles . . . . . . . . . .
.
. . . . . . . . . . . . 111
5.10. KAddressBook con algunos contactos
.
. . . . . . . . . . . . 111
5.11. KOrganizer . . . . . . . . . . . . . .
.
. . . . . . . . . . . . 112
5.12. Creando una nuevo evento . . . . . .
.
. . . . . . . . . . . . 113
5.13. Ajustando la repeticin de un evento .
.
. . . . . . . . . . . . 114
5.14. Agregando participantes en un evento
.
. . . . . . . . . . . . 115
5.15. Ajustando la hora de la reunin . . . .
.
. . . . . . . . . . . . 116
5.16. Vista Qu es lo siguiente? . . . . . .
.
. . . . . . . . . . . 116
5.17. Vista Lista . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 117
5.18. Vista Da . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . 117
5.19. Vista Semana laboral . . . . . . . . .
.
. . . . . . . . . . . . 118
5.20. Vista Semana . . . . . . . . . . . . .
.
. . . . . . . . . . . . 118
5.21. Vista Tres das siguientes . . . . . . .
.
. . . . . . . . . . . . 119
5.22. Vista Mes . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . 120
5.23. El diario dentro de Kontact . . . . . .
.
. . . . . . . . . . . . 120

6.1. Gr co introducido con includegraphics


. . . . . . . . . . . 201
6.2. Escalando objetos con graphics. . . . . . . . .
. . . . . . . . . . . . 202
6.3. Rotaciones y re ejos con graphics . . . . .
. . . . . . . . . . . . 203
6.4. Tomando pedazos de guras . . . . . . . . . .
. . . . . . . . . . . . 204
6.5. Ejemplo de opciones para dibujar . . . . . . . .
. . . . . . . . . . . . 213
6.6. Gra cacin de funciones arbitrarias . . . . . .
. . . . . . . . . . . 221
6.7. Impresin de la retcula . . . . . . . . . . . . .
. . . . . . . . . . . 222
6.8. Colocacin de los ejes . . . . . . . . . . . . .
. . . . . . . . . . . . 222
6.9. Segunda forma de pintar la retcula . . . . . . .
. . . . . . . . . . . . 223
6.10. Divertimento con slo trazo de lneas . . . . . .
. . . . . . . . . . . 224
6.11. Dibujo de una gr ca en LATEX . . . . . . . . .
. . . . . . . . . . . 229
6.12. Actividad 6.52 . . . . . . . . . . . . . . . . . .

.
.

.
.

. . . . . . . . . . . . 231
6.13. Ejemplo de LATEX usando BIBTEX
. . . . . . . . . . . 233
6.14. Salida de LATEX al ejecutar BIBTEX . . . . . . .
. . . . . . . . . . . . . . 234
6.15. Ejemplo de una base de datos BIBTEX . . . . .
. . . . . . . . . . . . . . 235
6.16. Ejemplo usando los estilos BIBTEX . . . . . . .
. . . . . . . . . . . . . . 236
6.17. Preview en accin . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 243

.
.
.
.

7.1. Pgina sin hoja de estilo . . . . . . . . . . . . . . . . . . . . . .


. . . . . 251
7.2. Pgina con hoja de estilo . . . . . . . . . . . . . . . . . . . . . .
. . . . . 252

ndice de tablas
1.

Convenciones tipogr cas . . . . . . . . . . . . . . . . . . . . . . . . . .


XII

3.1. Comandos de Unix importantes . . . . . . . . . . . . . . . . . . . . . . .


. 39
3.2. Emacs: opciones de inicio . . . . . . . . . . . . . . . . . . . . . . . .
. . 51
3.3. Emacs: comandos del modo dired . . . . . . . . . . . . . . . . . . . . . .
53
4.1. Kate: enlaces de tecla para acceso rpido . .
. . . . . . . . . . 61
4.2. Kate: opciones para buscar y reemplazar . .
. . . . . . . . . . . 63
4.3. Kate: sangrados disponibles . . . . . . . .
. . . . . . . . . . . 64
4.4. Emacs: comandos de movimiento . . . . .
. . . . . . . . . . . 66
4.5. Emacs: movimiento a lugares especiales . .
. . . . . . . . . . . 67
4.6. Emacs: comandos para matar y borrar . . .
. . . . . . . . . . . 67
4.7. Emacs: comandos para manejar rectngulos
. . . . . . . . . . 69
4.8. Emacs: comandos para manejar registros . .
. . . . . . . . . . . 69
4.9. Emacs: comandos para revisar ortografa . .
. . . . . . . . . . 74

5.1. Dominios de jerarqua superior . . . . . . . . . .


. . . . . . . . . .
82
5.2. Servicios comunes de Google . . . . . . . . . . .
. . . . . . . . . . .
85
5.3. Otros servicios de la Wikipedia . . . . . . . . . .
. . . . . . . . . . .
86
5.4. Algunos comandos disponibles en el sistema . .
. . . . . . . . . . .
94
5.5. Emacs: comandos de seleccin de VM . . . . . .
. . . . . . . . . . 124
5.6. Emacs: comandos para componer correo en VM .
. . . . . . . . . . . 125
5.7. Emacs: comandos de Mail . . . . . . . . . . . .
. . . . . . . . . . . 126
5.8. Emacs: comandos para contestar correo en VM .
. . . . . . . . . . . 126
5.9. Emacs: comandos para adelantar mensajes de VM
. . . . . . . . . . . 127
5.10. Emacs: tipos vlidos para campos BBDB . . . .
. . . . . . . . . . 129
5.11. Emacs: comandos de BBDB . . . . . . . . . . .
. . . . . . . . . . . 130
5.12. Emacs: iniciando w3m . . . . . . . . . . . . . .
. . . . . . . . . . . 131
5.13. Emacs: siguiendo ligas con w3m . . . . . . . . .
. . . . . . . . . . . 132
5.14. Emacs: navegando con w3m . . . . . . . . . . .
. . . . . . . . . . . 133

5.15. Emacs: puntos de inters en la pgina ala w3m .


. . . . . . . . . 133
5.16. Emacs: movimiento entre pginas con w3m . . .
. . . . . . . . . . 134

x
5.17.
.
5.18.
. . .
5.19.
. . .
5.20.
. .
5.21.
. . .
.

.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.

Emacs: manejo de imgenes en w3m


. . . . . . . . .
Emacs: ligas favoritas en w3m . .
. . . . . . . .
Emacs: comandos de ERC . . . . .
. . . . . . . .
Emacs: mdulos para extender ERC
. . . . . . . . .
Emacs: comandos de dictionary . .
. . . . . . . .

.
.
.
.

.
.
.
.
.

.
.
.

.
.

.
135
.
136
.
137
.
138
.
141

6.1. LATEX: ambientes . . . . . . . . . . . . . . . . .


. . . . . . . . . . . . 145
6.2. LATEX: comandos para modi car espacios . . . .
. . . . . . . . . . . 150
6.3. Tamaos disponibles para letras . . . . . . . . .
. . . . . . . . . . . 154
6.4. LATEX: comandos para cambios de tipo de letra . .
. . . . . . . . . . . . 155
6.5. Modi cadores para la de nicin de columnas . .
. . . . . . . . . . 165
6.6. Acentos . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 175
6.7. Smbolos no ingleses . . . . . . . . . . . . . . .
. . . . . . . . . . . 175
6.8. Smbolos de puntuacin y especiales . . . . . . .
. . . . . . . . . . . 175
6.9. Smbolos griegos . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 179
6.10. Smbolos con echas . . . . . . . . . . . . . . .
. . . . . . . . . . . 180
6.11. Operadores y smbolos relacionales . . . . . . .
. . . . . . . . . . . 180
6.12. Smbolos varios . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 182
6.13. Nombres de funciones comunes . . . . . . . . .
. . . . . . . . . . . . 182
6.14. Smbolos agrandables . . . . . . . . . . . . . . .
. . . . . . . . . . . 184
6.15. Delimitadores . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 186
6.16. Tipos de letras en modo matemtico . . . . . . .
. . . . . . . . . . . 187
6.17. Acentos en modo matemtico . . . . . . . . . . .
. . . . . . . . . . . 192
6.18. Comandos de espacio en modo matemtico . . .
. . . . . . . . . . . 196
6.19. Posiciones posibles para los otantes . . . . . . .
. . . . . . . . . . . 198
6.20. Conversin de grados Farenheit a Centgrados . .
. . . . . . . . . . . 199
6.21. Conversin de Farenheit a Centgrados . . . . . .
. . . . . . . . . . . 200
6.22. Representaciones numricas . . . . . . . . . . .
. . . . . . . . . . . 200
6.23. Comparacin de tamaos . . . . . . . . . . . . .
. . . . . . . . . . . 204
6.24. Paquetes de pgf para colores y dibujos . . . . . .

. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .

.
.
.
.
.
.
.
.
.

. .
6.25.
.
6.26.
.
6.27.
.
6.28.
.
6.29.
.
6.30.
.
6.31.
.
6.32.
. .
6.33.
. .
6.34.
. .

. . . . . . . . . . 205
Colores bsicos con los que se cuenta . . . . . .
. . . . . . . . . . 206
Modi cadores para el trazo de lneas y guras . .
. . . . . . . . . 212
Opciones de grosor y estilos de lneas . . . . . .
. . . . . . . . . . 213
Ejemplos de guras en TikZ . . . . . . . . . . .
. . . . . . . . . . 214
Lneas dobles . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 214
Tipos de puntas de echas en TikZ . . . . . . . .
. . . . . . . . . . 215
Figuras geomtricas que se pueden lograr en TikZ
. . . . . . . . . . 216
Gra cacin de funciones comunes en TikZ . . .
. . . . . . . . . 218
Smbolos para marcar curvas que se gra can . . .
. . . . . . . . . 219
Emacs: comandos de AUCTEX . . . . . . . . . .
. . . . . . . . . . 239

. .
. .
. .
. .
. .
. .
.
. .
. .
. .

8.1. subversion: comandos ms importantes . . . . . . . . . . . . . . . . . .


. 259

xi
8.2.
. .
8.3.
.
8.4.
. .
8.5.
.
8.6.
. .

JDEE: abreviaturas de estructuras de control . . .


. . . . . . . 263
JDEE: formas para completar campos y mtodos
. . . . . . . 264
JDEE: enunciados import . . . . . . . . . . . . .
. . . . . . . 264
JDEE: generadores de cdigo, wizards . . . . . .
. . . . . . . 265
Emacs: comandos de psvn . . . . . . . . . . . .
. . . . . . . 269

9.1. Programacin en shell: variables automticas . . . . . . . . . . . . . . . . 27


5

Prefacio
Este libro presenta las aplicaciones y el enfoque que un estudiant
e de computacin o un
futuro programador debe dominar para sacar el mayor provecho de su ens
eanza profesional en programacin y, en general, en las ciencias de la computacin. Hemo
s vertido aqu
la experiencia de media docena de aos impartiendo cursos propeduticos de
supervivencia
para estudiantes de la licenciatura en ciencias de la computacin de la
Facultad de Ciencias
de la Universidad Nacional Autnoma de Mxico.
Convenciones tipogr cas
Tabla 1

Convenciones tipogr cas


Entidad

Descripcin
Utilizamos este tipo de letra (font) para enfa

tizar o resaltar
Enfatizado
palabras o frases.
Las utilizamos para modismos, palabras o frase
s en ingls y
itlicas

palabras utilizadas en el medio y cuya traduccin

o aceptacin en el idioma no es clara.


Los comandos y opciones se muestran as. Cuando
encuentres lneas tales como: % comando, stas represent
an comandos que puedes teclear y ejecutar en una te
rminal. Por
comando
convencin utilizaremos % para signi car que debe
ejecutarse como un usuario no-priviligiado y $ cuan
do debe ejecutarse como sper-usuario o root.
Utilizaremos este tipo de letra para escribir
cdigo que debe
enunciados
ir en un archivo.
Este smbolo es el logo del ambiente Gnome y sir
ve para sealar qu aplicaciones para este ambiente son equi
valentes
a la revisada en la seccin donde aparece.
Contina en la
siguiente pgina

xiv
Tabla 1 Convenciones tipogr cas
ntina de la pgina anterior
Entidad

Co

Descripcin
Este smbolo es el logo del ambiente KDE y

sirve para sealar aplicaciones alternativas o similare


s a la revisada en la
seccin donde aparece.
Este smbolo es el logo del editor Emacs y
sirve para sealar
paquetes alternativos o similares al rev
isado en la seccin
donde aparece.
A quin est dirigido
Este texto est dirigido a estudiantes y profesionales de la c
omputacin o futuros programadores que estn interesados en incursionar en el mundo del so
ftware libre, conocer el
sistema operativo Linux y que requieran dominar rpidamente herram
ientas orientadas al
desarrollo y productividad en este ambiente.
Es un libro prctico, por lo que es importante resaltar que to
do lo que se ve en los
distintos captulos puede repetirse en un sistema de cmputo con sis
tema operativo Linux. Asimismo, los ejercicios en algunas de las secciones son de
utilidad para rea rmar el
conocimiento y se recomienda realizarlos en el orden presentado.

Distribucin y ambientes
Algunas de
A lo largo del libro encontrars muchos ejemplos que funcionarn
bien en cualquier
estas notas
distribucin de Linux. Sin embargo, y a pesar de nuestros mejores
esfuerzos, hemos incluimuestran
do aplicaciones que no son parte esencial de las distribuciones
de Linux ms utilizadas.
comandos
Cada vez que esto sucede te mostramos, en una nota al margen, el
comando que debes
ejecutar como sper-usuario para instalar dicha aplicacin.
Para lograr esto, por supuesto, nos hemos visto en la necesi
dad de utilizar una distribucin y optamos por Ubuntu y como administrador de paquetes utiliza
mos apt. Por ejemplo,
vers en notas al margen algo parecido a esto:
% smart install kate
lo que constituye (como vers en el Captulo 1) una lnea de comandos
que, al ser ejecutada,
se conecta a la red, localiza la aplicacin kate, la descarga a tu
computadora y la instala.
En el apndice A se presenta una relacin de algunas de las dist
ribuciones ms impor-

tantes en el mercado al momento de la edicin de este libro. En di


cho anexo encontrars,

xv
entre otros datos interesantes de cada distribucin, la manera preferida de admini
strar aplicaciones.
En el apndice B se presentan las opciones que se tienen para instalar paquete
s o funciones de tu distribucin favorita. Podrs ver ah cmo compilar para instalar algunos d
e
los servicios que se presentan en este libro.
Finalmente, en el apndice C colocamos los archivos principales para tu archiv
o .emacs
que fuimos construyendo a lo largo de este material, as como los archivos necesar
ios para
correo e internet.

Introduccin a Unix
1
1.1. Historia
La primera versin de UNIX, llamada Unics, fue escrita en 1969 por Ken T
hompson.
Corra en una computadora PDP-7 de Digital. Ms adelante, los laboratorios Bel
l, el MIT
y General Electric se involucraron en la creacin del sistema Multics, grand
e en tamao,
y el primer sistema de tiempo compartido que inclua muchas ideas innovadora
s acerca
de sistemas operativos. Thompson y algunos de sus colegas admiraban las ca
pacidades de
Multics; sin embargo, pensaban que era demasiado complicado. Su idea era d
emostrar que
era posible construir un sistema operativo que proporcionara un ambiente d
e desarrollo
cmodo de una forma ms simple. Y afortunadamente, tuvieron un xito admirable e
n el
desarrollo de esta idea; a pesar de esto, UNIX es irnicamente mucho ms compl
icado de
lo que Multics nunca lleg a ser.
En 1970 Thompson, junto con Dennis Ritchie, port UNIX a la PDP-11/20. R
itchie
dise y escribi el primer compilador de C para proveer un lenguaje que pudiera
ser usado
para escribir una versin porttil del sistema. En 1973, Ritchie y Thompson re
escribieron
el kernel de UNIX, el corazn del sistema operativo, en C.
Inicialmente se otorgaron licencias gratuitas para utilizar UNIX a uni
versidades con
propsitos meramente educativos (en 1974). Esta versin fue la quinta edicin (l
as ediciones hacen referencia a las ediciones del manual de referencia de UNIX). La
sexta edicin
fue liberada en 1975; sin embargo, fue hasta la sptima edicin, liberada por
los laboratorios Bell en 1979, donde se logr la meta deseada: portabilidad; esta edic
in fue la que
sirvi como punto de partida para la generacin de este nuevo y maravilloso mu
ndo: el
mundo UNIX. sta es considerada la edicin clsica de UNIX. Las dos vertientes ms

2
Introduccin a Unix
fuertes creadas a partir de esta edicin de UNIX son: System V (no confu
ndirlo con la
quinta edicin) y el sistema BSD (Berkeley Software Distribution).
A pesar de que ambos sistemas surgieron de la misma in uencia y comp
arten muchas
caractersticas, los dos sistemas se desarrollaron con personalidades mu
y distintas. System
V es ms conservador y slido; mientras que BSD es ms innovador y experimen
tal. System
V era un sistema comercial, mientras que BSD no.
La historia es mucho ms detallada y an hay mucho que contar acerca d
el desarrollo
de cada una de estas vertientes, de las cuales surgieron todava muchas
vertientes ms de
UNIX.
En el caso de la licenciatura en Ciencias de la Computacin en la Fa
cultad de Ciencias,
como en muchas otras universidades de prestigio, el servicio al que ac
ceden los estudiantes
y la mayora de los profesores es utilizando una implementacin de UNIX, L
inux, con
computadoras conectadas en una red, por lo que todo lo que sucede entr
e los estudiantes y
la computadora ser en el contexto de esta red.
1.1.1.

Sistemas UNIX libres

Los sistemas compatibles UNIX libres1 para la arquitectura i386, no


tablemente Linux y
FreeBSD, han hecho de UNIX un sistema al alcance de cualquiera. Estos
sistemas proveen
excelente rendimiento y vienen con un conjunto de caractersticas y herr
amientas estndar
de UNIX. Son tan robustos que incluso muchas empresas han basado su de
sarrollo en
alguno de estos sistemas.
Dado que estos sistemas no contienen software propietario pueden se
r usados, copiados y distribuidos por cualquiera (incluso gratis). Las copias de esto
s sistemas se pueden
conseguir en CD-ROM o bien por medio de Internet.
Linux. Linux es una versin de UNIX libre, originada por Linus Torvalds
en la Universidad de Helsinki en Finlandia. Fue inspirado por Minix escrito por
Andrew Tanenbaum y sigue ms o menos las convenciones de System V. Su desarroll
o ha sido
llevado a cabo por programadores (hackers, wizards) de todo el mu
ndo, coordinados
por Linus a travs de Internet. Una gran cantidad de cdigo incluida
en el "sistema
operativo Linux"2 es GNU y la versin de X es XFree86.
Hay varias distribuciones de Linux y algunas de las ms importantes
son:
Ubuntu: http://www.ubuntu.com/ (y Kubuntu, la distribucin qu
e utilizamos en

este trabajo: http://www.kubuntu.org/)


Fedora: http://fedora.redhat.com/
1
En este contexto libre, es una traduccin literal de free que no si
gni ca gratis, (como en cervezas gratis),
sino signi ca libre (como en libertad de expresin).
2
Un sistema operativo es un conjunto de programas que controla y a
dministra los recursos de la computadora, como son el disco, la memoria, los dispositivos de entrada y s
alida.

1.2 Sistemas de tiempo compartido


3
Debian: http://www.debian.org/
openSUSE: http://www.opensuse.org/
FreeSpire: http://freespire.org/
Linux se distribuye bajo la licencia GPL (General Public Lic
ence), que es conocida
como CopyLeft y que representa gran parte de la idiosincrasi
a del mundo UNIX libre.
FreeBSD. FreeBSD es derivado del sistema BSD (de la versin 4.4 para
ser exactos); fue
creado, igual que Linux, para la arquitectura i386. Su idea fu
ndamental de desarrollo es tener un ambiente estable de desarrollo para esa arquit
ectura. Est soportado
por un grupo internacional de voluntarios. La gran mayora de lo
s programas que
conforman los sistemas FreeBSD, a diferencia de Linux, estn gob
ernados por licencias estilo Berkeley, las cuales permiten redistribuciones sie
mpre y cuando el cdigo
incluya una nota reconociendo el derecho de autor de Regents o
f the University of
California and the FreeBSD project. Algunas otras partes de Fr
eeBSD son GNU y
estn cubiertas por la GPL.
La pregunta ms comn entre usuarios de UNIX en el mundo es: cul es m
ejor: Linux
o FreeBSD? La respuesta no es clara. Ambos tienen cosas buenas y ta
l vez la mejor forma
de saberlo es probar ambos.
1.1.2.

El proyecto GNU

El proyecto GNU buscaba desarrollar un sistema compatible con U


NIX, totalmente
libre3 . Es operado por la FSF (Free Software Foundation), organiza
cin fundada por Richard Stallman, quien ha escrito gran parte del cdigo de GNU. GNU es
una anagrama
de "GNUs not UNIX". Algunas herramientas invaluables para el trabajo
diario de un estudiante de Ciencias de la Computacin (al menos en esta Universidad)
que han sido desarrolladas dentro del proyecto GNU son: un editor de texto (Emacs)
, el compilador de C
(gcc), un depurador (gdb), y versiones de prcticamente todas las her
ramientas estndar de
UNIX.
Todo el software distribuido por GNU se libera bajo la licencia
GPL. De acuerdo con
los trminos de esta licencia, cualquiera puede modi car el software y
redistribuir su propia versin. La restriccin principal es que te obliga a redistribuirlo
incluyendo el cdigo
fuente, an en el caso de que t hayas hecho las modi caciones.
UNIX es un sistema operativo multi-usuario y multi-tarea, es de
cir, permite a muchos

usuarios conectarse al sistema y cada uno de estos usuarios puede e


jecutar varios programas
a la vez.
3
A varios aos de haber sido creada, lo han logrado. Su nombre es
Hurd y promete muchas cosas interesantes en el mundo de los sistemas operativos. Sin embargo, Linux,
(que sigue mucha de la losofa de GNU,
pero no es el proyecto GNU), le lleva mucha ventaja. Sin duda algun
a sta es una poca interesante para estar
metido en el software libre: nos esperan cosas buenas.

4
Introduccin a Unix
1.2. Sistemas de tiempo compartido
UNIX es un sistema de tiempo compartido. Esto signi ca que las compu
tadoras que
trabajan con UNIX pueden aceptar ms de un usuario al mismo tiempo. La c
omputadora
principal (la parte del hardware que ejecuta realmente la mayora del tr
abajo) recibe el
nombre de computadora an trin. Una de las tareas del sistema operativo es
asegurar que
los recursos de la computadora an trin se compartan entre todos los usuar
ios.
Para trabajar con UNIX normalmente usars una terminal. Una terminal
UNIX bsica
consta de una pantalla, un teclado y algunas cosas ms. No obstante, com
o se ver ms
adelante algunas terminales son ms complejas que otras.
Cada vez que oprimes una tecla, la terminal enva una seal a la compu
tadora an trin.
Como respuesta, esta ltima enva su propia seal de regreso a la terminal,
indicndole que
despliegue el carcter correspondiente en la pantalla. UNIX fue con gurado
de tal forma
que cuando la computadora an trin efecta el eco, puedes ver que lo que tec
lea se recibe
bien y que la conexin entre la computadora an trin y la terminal est intact
a.

1.2.1.

Los sistemas multiusuario

Muchas computadoras an trin estn conectadas directamente a las termina


les. No obstante, hay muchos centros de cmputo que ofrecen una variedad de computa
doras an trin.
En tales casos, la terminal podra estar conectada a una computadora esp
ecial, denominada
servidor.
Casi todas las computadoras an trin cuentan con un teclado y una pant
alla, que son
parte de la computadora. Para UNIX, teclado y pantalla son slo otra ter
minal. Sin embargo,
dichas partes reciben el nombre especial de consola.
Un sistema UNIX clsico puede usar una computadora an trin que se encue
ntre en la
o cina del administrador del sistema. Dicha computadora podra estar conec
tada a una sala
llena de terminales o computadoras al otro extremo del corredor o en o
tro piso e incluso en
otro edi cio.
Bsicamente, todos los sistemas UNIX aceptan varios usuarios a la ve
z. No obstante,
algunas computadoras UNIX slo pueden ser usadas por una persona simultne
amenente
y son mejor conocidas como estaciones de trabajo4 .

4
Esto no signi ca que la estacin de trabajo no tenga capacidades mul
tiusuario o multitarea; la estacin
de trabajo es una mquina con capacidades limitadas tanto en espacio en
disco como en velocidad de procesamiento, razn por la cual es conveniente que slo una persona la utilice
.

1.3 Inicio de sesin


5
1.3. Inicio de sesin
Dentro de los sistemas UNIX, todos los usuarios del sistema, s
ea ste uniusuario o
multiusuario, se identi can con un nombre de usuario, tambin conocido
como su login o
logname, que ser provisto por el administrador del sistema. La clav
e de usuario generalmente est relacionada con el nombre y apellido del usuario. Dos uso
s comunes es la de
dar al usuario la primera letra de su nombre junto con su apellido
, o las tres iniciales de su
nombre y dos apellidos. Por ejemplo, supongamos que el nombre comp
leto de un usuario
es Juan Prez y su nombre de usuario podra ser juan o jp. En este lib
ro, utilizaremos juan
como tu nombre de usuario.
Para usar un sistema UNIX, en primer lugar debes iniciar una s
esin con un nombre
de usuario; el sistema pedir este nombre por medio del programa log
in; debers teclear la
clave que te fue asignada, respetando minsculas y maysculas5 . Al te
rminar con los carcteres que componen tu clave, debers oprimir la tecla Enter , para
que el sistema reciba
la clave y la procese. Supongamos que la clave de acceso es juanPe
rez123. La pantalla de
la computadora se ve como en la gura 1.1, esperando a que le des la
contrasea correcta.

Figura 1.1 Acceso al sistema.


Red Hat L i n u x r e l e a s e 6 . 2 ( Zoot )
K e r n e l 2.2.14 5.0 on an i 6 8 6
l o g i n : juan
Password :

En este punto del proceso de iniciar una sesin, debers teclear l


a contrasea de acceso
que tienes registrada en el sistema. Nota que, por seguridad, la c
ontrasea no se muestra
en la pantalla, por lo cual se deber teclear con cuidado, tambin res
petando maysculas y
minsculas. Si la clave de acceso corresponde con la registrada en e
l sistema, podrs iniciar
una sesin.
Si Juan ingresa correctamente su contrasea, la pantalla de la c
omputadora lucir como
en la gura 1.2, donde estNum es el nombre de la computadora en la q
ue se est iniciando
la sesin. La forma precisa de cmo aparece la combinacin del nombre de
l usuario y el

nombre de la mquina puede variar, pero usualmente aparecen en donde


el sistema espera
5
UNIX es sensible al uso de maysculas y minsculas.

6
Introduccin a Unix
que le des instrucciones una vez iniciada la sesin.
Figura 1.2 Inicio de una sesin en un sistema UNIX.
Fedora Core r e l e a s e 2 ( Tettnang )
K e r n e l 2.6.5 1.385 on an i 6 8 6
l o g i n : juan
Password :
L a s t l o g i n : Tue Nov 28 11 : 2 0 : 5 4 from bar . f c i e n
c i a s . unam . mx
[ juan@estNum j d] %
Es comn equivocarse al teclear la contrasea. Si esto sucede, el sis
tema responder
con un mensaje de contrasea invlida y proceder a pedirte nuevamente el
inicio de sesin,
desde la clave de usuario:
Figura 1.3 Equivocacin al teclear la contrasea.
I n c o r r e c t password . Try again
login :
Puedes corregir la contrasea mientras no hayas oprimido la tecla Ente
r , si oprimes si
multneamente las teclas Control u 6 , lo que borra todos los carcteres
tecleados hasta
ese momento y puedes volver a empezar a teclearla. Esto es convenien
te por dos razones: la
primera de ellas, para ahorrarte el tener que volver a teclear la cl
ave de usuario y la segunda
porque el sistema te dar un nmero mximo de oportunidades (generalmente
entre tres y
cinco) para entrar en sesin, por lo que es deseable evitar introducir
mal la contrasea.
1.4. Emacs
1.4.1.

Introduccin a Emacs

Emacs es un editor de pantalla avanzado, autodocumentado, con gurabl


e, extensible
y de tiempo real.
Decimos que Emacs es un editor de pantalla porque normalmente el
texto que que
remos editar es visible en la pantalla y se actualiza automticamente
mientras tecleas los
comandos; es por esto ltimo que decimos que es de tiempo real. El nom
bre Emacs fue
escogido como abreviatura de Editor MACros.
6
Usaremos en adelante la notacin C u , que deber leerse como contr
ol u, para denotar la combinacin
de la tecla Control oprimida al mismo tiempo que u .

1.4 Emacs
7
Decimos que es avanzado porque tiene muchas ms funciones de la
s que comnmente
encontramos en editores de pantalla, como son control de subproce
sos, facilidades para la
edicin de archivos fuente de varios lenguajes de programacin, as com
o una gran cantidad
de utileras para hacer nuestra vida ms fcil.
C h es
El que sea auto documentado signi ca que en cualquier momento p
uedes teclear una
Control
secuencia especial, que es C h, y saber cules son tus opciones; ta
mbin puedes encontrar
junto con h
qu hace cualquier comando o encontrar documentacin espec ca de un tema
.
El que sea con gurable signi ca que puedes cambiar las de niciones
de los comandos
de Emacs, es decir, controlar su comportamiento para que se adapt
e a tus necesidades o tus
preferencias.
Extensible signi ca que puedes ir ms all de la simple con guracin y
escribir coman
dos completamente nuevos, usando un lenguaje de programacin llamad
o Emacs Lisp, del
cual tambin aprenders algo en estas notas en la Seccin 9.2.
1.4.2.

Emacs y t

Si hay algo que debes aprender y atesorar de este libro, es E


macs. Una situacin que le
ocurre a todas las aplicaciones de software en Linux y en prcticam
ente cualquier sistema
operativo es que pasan de moda, pierden vigencia rpidamente. Es pr
obable incluso que
para el momento que leas algunos captulos de este trabajo, las apl
icaciones aqu revisadas
hayan sido reemplazadas por otras o que existan versiones nuevas
y, con alta probabilidad
por desgracia, sern distintas.
Emacs tiene una historia de muchos aos, ms de tres dcadas en cir
culacin, y algo
importante es que no ha cambiado signi cativamente y, estamos segur
os, ser el caso en
este momento que t te inicias en Emacs. Esto es importante porque
la inversin intelectual
que realizas al aprender y dominar este editor te redituar por muc
hos aos.
Por este motivo, a lo largo de todo el libro, encontrars una s
eccin titulada as: Emacs.
En cada una de estas secciones te mostraremos qu hace tan interesa
nte a este editor y
descubriremos juntos muchas de las tareas que pueden atenderse a
travs de Emacs, por
ejemplo: editar diversos archivos, programar en distintos lenguaj
es, acceder a tu correo
electrnico, entre otras acciones y todo esto al mismo tiempo.
Si bien es cierto que puedes ejecutar distintas aplicaciones
(explicadas en este mis

mo libro) para realizar muchas tareas de manera simultnea, cuando


utilizas Emacs para
realizar algunas o todas esas tareas, obtienes ciertas ventajas:
memoria compartida, un ex
celente sistema de respaldo para copiar, pegar o reordenar datos,
entre otras ventajas. Tu
productividad se incrementar notablemente, te lo garantizamos.

Ambientes gr cos
en Linux
2
2.1. Ambientes de escritorio
Un escritorio ofrece una interfaz gr ca de usuario1 para interactuar con
la computa
dora. La otra opcin para interactuar con la computadora es mediante una int
erfaz de lnea
de comandos2 . Para la mayora de las personas el escritorio ms comn es Window
s de
Microsoft, para otras cuantas MAC OS. En Linux se tienen muchos escritorio
s que puedes
utilizar en tu computadora. La base de todos estos escritorios es el siste
ma de ventanas
X, que es un sistema que provee los elementos bsicos para que se dibujen la
s ventanas y
se interacte con ellas. La interaccin ms comn entre el servidor de X y el usua
rio es
cuando el cliente est corriendo en la misma computadora que el servidor. Es
to es lo que
ocurre cuando inicias tu computadora de forma normal. Existen otras posibi
lidades como
exportar todo tu escritorio desde otra computadora o exportar algunas vent
anas.
Tomando como base a X, existen varios escritorios para Linux. Como en
la mayora de
las aplicaciones en UNIX, existen ms de una para realizar la misma tarea. A
lgunos de los
ms comunes son:
KDE
GNOME
1
GUI, del ingls Graphic User Interface
2
CLI, del ingls, Command Line Interface

10
ientes gr cos en Linux

Amb

Enlightenment
Xfce

2.2. KDE
KDE es un escritorio libre para estaciones de trabajo UNIX. La mot
ivacin de los des
arrolladores es tener un escritorio para UNIX con el que sea fcil traba
jar, y que tenga una
aplicacin equivalente a las disponibles en los sistemas operativos prop
ietarios. KDE hace
uso de QT, una caja de herramientas (toolkit) gr co de la compaia Trolltec
h. Cuando
se tom esta decisin en 1996, por el autor Matthias Ettrich3 , hubo varia
s crticas por esa
decisin. El problema es que en esas fechas QT no tena una licencia de so
ftware libre y
a la gente del proyecto GNU le preocupaba que se usara algo as para cre
ar un escritorio
que quera ser libre. Dada esta situacin se inici otro proyecto, GNOME, qu
e no hara uso
de QT y sera totalmente libre. En Noviembre de 1998 Trolltech cre una nu
eva licencia Q
Public License bajo la cual distribua a QT. Finalmente en Septiembre de
l 2000, Trolltech
liber la versin de QT para UNIX bajo la GPL, adems de la QPL, por lo que
ahora KDE
es totalmente libre.

2.2.1.

Con guracin de KDE

El comportamiento de KDE lo puedes con gurar mediante el uso del cen


tro de control
de KDE, el cual puedes ejecutar mediante el comando kcontrol. Para eje
cutar una aplica
cin sin tener que hacer uso de la consola puedes utilizar el atajo por
omisin Alt+F2. En
la gura 2.1 se muestra la ventana inicial del centro de control, dividi
da en 2 secciones. En
la seccin 1 se muestran las categoras mediante las cuales se puede con gur
ar a KDE. En
la seccin 2 se presenta la informacin pertinente al mdulo que se est con gur
ando. Al
iniciar, KControl nos presenta en esta seccin cierta informacin elementa
l:
1.
2.
3.
4.
3

Versin de KDE
Nombre del sistema
Nombre del usuario
Versin del ncleo del sistema

El correo que inici todo lo puedes ver en


http://groups.google.com/group/de.comp.os.linux.misc/msg/c
b4b2d67ffc3ffce

2.2 KDE
13
Escritorios mltiples
Accesos rpidos
En la categora Regional y Accesibilidad, se encuentra el mdulo Acces
os rpidos de
teclado. Mediante ellos es posible asociar una accin a una combinacin de
teclas. Es de
esa forma que al presionar las teclas Alt+Tab cambias de una ventana a
otra. Existen varias
combinaciones predeterminadas como Alt+F4 para cerrar una ventana. Des
de aqu puedes
crear combinaciones de teclas para ejecutar tus acciones ms comunes sin
tener que separar
las manos del teclado.

Internacionalizacin
Hay ocasiones en las que puedes desear tener ms de una idioma con gur
ado en tu
sistema. De esa forma puedes hacer que KDE despliegue todos sus mensaj
es en el idioma
de tu preferencia. Para poder hacer eso es necesario que instales el p
aquete de interna
cionalizacin de KDE que corresponde al idioma que quieres utilizar. El
nombre de estos
paquetes es de la forma kde i18n XX en donde XX es el cdigo de dos letr
as para el idio
ma que quieres instalar. Para espaol el nombre del archivo es kde i18n
es mientras que
para italiano es kde i18n i t. Para instalar dicho paquete es necesari
o que ejecutes apt get
install kde i18n es. Una vez hecho eso puedes regresar al centro de co
ntrol y dentro de
la categora Regional y Accesibilidad, en el mdulo Pas/Regin e idioma podrs
agregar el
idioma que acabas de instalar.

Disposicin del teclado


Adems de cambiar el idioma con el que se presenta KDE, tambin puedes
cambiar
la disposicin del teclado. De esa forma es posible que tu teclado se co
mporte como si
fuera un teclado en un idioma distinto. Para hacer eso es necesario qu
e vayas a la catego
ra Regional y Accesibilidad y ah vayas al mdulo Disposicin del teclado, ta
l como se
muestra en la gura 2.4. Debers seleccionar la opcin Activar diseos de tecl
ado y luego
seleccionar los idiomas que deseas en tu teclado. En la pestaa Opciones
de cambio puedes
seleccionar cmo quieres que KDE te muestre la bandera que corresponde a
l teclado que
ests utilizando. Adems puedes seleccionar si cada vez que cambias la dis

posicin del te
clado afecta a todas las aplicaciones o slo a la aplicacin que est activa
en el momento en
el que realizas el cambio. Para cambiar la disposicin del teclado de fo
rma rpida puedes
usar el atajo por omisin de KDE que es CTRL+ALT+K; o si seleccionaste l
a opcin para
mostrar la bandera, puedes hacer click sobre ella.

2.2 KDE
15
provee al usuario de una interfaz sencilla para poder quemar CD o DV
D. Hay que sealar
que K3b es slo la interfaz gr ca ya que el trabajo real lo llevan a cabo
las aplicaciones
cdrecord, cdrdao y growisofs. En la gura 2.6 se muestra la ventana in
icial de K3b.
Figura 2.5 El escritorio

Quemado de un disco de datos


Al seleccionar la opcin Nuevo proyecto de CD de Datos, K3b te pre
senta con una in
terfaz para navegar el sistema de archivos y seleccionar cules archiv
os son los que deseas
incluir en tu CD. Para agregar un archivos nuevo a la compilacin slo e
s necesario encon
trarlos en el navegador que est en la parte superior y seleccionarlo,
como se muestra en la
gura 2.7. Otra opcin es arrastrarlos desde Konqueror o desde el escrit
orio hacia la parte
baja de K3b.

2.2 KDE
17
portantes son Grabando y Descripcin del volumen. En la primera es neces
ario seleccionar
cul dispositivo se va a usar para quemar el disco y a qu velocidad, qu mo
do de grabacin
y qu opciones queremos emplear. En los modos de grabacin puedes seleccio
nar uno de
los siguientes:
DAO
TAO

Disc at once, copia todo el disco en una sola pasada.


Track at once, genera pausas entre cada una de las pistas de

l disco.
En bruto No procesa los datos (til para copiar imgenes).

Entre las opciones que puedes seleccionar estn:


Simular No lleva a cabo la copia, slo la simula, para ver si no hay pro
blemas.
Al vuelo Copia los datos directamente, sin generar una imagen intermed
ia.
Slo crear imagen En lugar de quemar el disco crea una imagen, para ser
quemada pos
teriormente.
Eliminar imagen Si se cre la imagen para quemarla, se puede eliminar un
a vez comple
tado el proceso.
Veri car los datos grabados Una vez terminado el proceso de quemado, se
comparan los
datos para ver que hayan sido copiados exitosamente.
En la pestaa Descripcin del volumen puedes ingresar los datos con lo
s que quieres
que se identi que al disco. Puedes ingresar la etiqueta del disco, el no
mbre de la persona
que prepar los datos, el nombre de la persona que los edit, en qu sistema
operativo se
realiz la copia y con qu aplicacin.

Quemado de un disco de msica


Al seleccionar la opcin Nuevo proyecto de CD de audio, K3b te prese
nta una interfaz
similar a la utilizada para quemar datos; la diferencia es cmo presenta
la informacin que
quieres quemar en el disco. Ahora presenta cada uno de los tracks que
quieres grabar y la
duracin de cada uno de ellos, como se muestra en la gura 2.8. Para poder
utilizar archivos
mp3 dentro de k3b es necesario instalar una biblioteca adicional. Debe
s instalar el paquete
libk3b2 mp3, y lo haces con el comando sudo apt get install libk3b2 mp
3. El resto de
las opciones para grabar son similares a las presentadas cuando quemas

un disco de datos.

2.4 Comenzando con Emacs


21
muchas implementaciones de editores parecidos a Emacs.
La versin ms importante y reconocida de Emacs es la del proyecto GN
U5 , la cual,
junto con XEmacs6 otra versin muy popular y completa de Emacs son las
opciones
ms comunes hoy en da; si tu sistema operativo es algn Unix de distribucin
libre (Linux,
FreeBSD, Hurd, etc.) muy probablemente ya tienes instalado uno o ambo
s editores.
El lugar usual para Emacs en el men de KDE es en la seccin de desar
rollo, rea r
mando que Emacs es una buena opcin para desarrolladores y diseadores de
sistemas.

5
Para mayor informacin sobre Emacs y el proyecto GNU, visita http:
//www.gnu.org.
6
XEmacs es otra versin de Emacs. Su nfasis est en el soporte de inte
rfaces gr cas de usuario. Algunos
de los autores del presente trabajo usamos XEmacs y otros Emacs; sin
embargo, prcticamente todo lo que
veremos aqu puede ser usado, sin cambio alguno, en ambas versiones. Si
quieres ms informacin sobre
XEmacs visita el sitio, http://www.xemacs.org.

Sistema de
Archivos
3
3.1. El sistema de archivos
El sistema de archivos de Unix es la forma en la que los usuarios y el
sistema operativo
organizan su informacin. ste consiste de un conjunto de archivos, cada uno d
e los cuales
tiene un nombre llamado nombre de archivo. Hay tres clases de archivos:
Archivos regulares, que contienen informacin.
Directorios1 , que contienen un conjunto de archivos. Los conjunto
s de archivos se
identi can por el nombre del directorio que los agrupa.
Archivos especiales de varias clases:
Archivos especiales de dispositivo, que proveen acceso a dispo
sitivos tales co
mo terminales o impresoras.
Archivos especiales FIFO (First In First Out, cola), algunas v
eces llamados
named pipes, que proveen un canal para comunicacin entre proc
esos indepen
dientes y que tienen un nombre asociado.
Como la mayora de los sistemas operativos modernos, Unix organiza su sis
tema de
archivos como una jerarqua de directorios. La jerarqua de directorios es un r
bol (tree),
pero dibujado como un rbol de cabeza o de lado. Un directorio especial, roo
t, es la
1
Los directorios tambin se conocen como carpetas.

24
istema de Archivos

raz de la jerarqua. Ms adelante veremos comandos para navegar y modi car el rbol
de
directorios.
Un directorio puede contener subdirectorios, archivos regulares y archi
vos especiales.
Unix trata a los subdirectorios como tipos particulares de archivos. Si uno
despliega los
contenidos de un directorio, los subdirectorios se listan junto con los dems
archivos.
Unix ve a un archivo, no importando su tipo, como una sucesin de bytes,
almacenados
en dispositivos externos como un disco duro, un diskette, un CD, un DVD o u
na unidad de
almacenamiento USB. Los programas que usan al archivo identi can cualquier es
tructura
interna que el archivo pueda tener.
Un nombre de archivo puede tener hasta 255 carcteres en la mayora de los
sistemas;
antes se limitaba el tamao de un nombre a 14 carcteres.
El nombre de un archivo puede contener cualquier carcter excepto / o el ca
rcter
nulo; sin embargo, algunos otros como & y (espacio en blanco) pueden causar p
roble
mas por sus signi cados especiales para su interpretacin en la lnea de comandos
. Si tu
sistema permite carcteres fuera del conjunto ASCII, tales como letras acentu
adas (como
nuestra letra ), tambin se puedes usarlas para nombrar archivos. Los nombres
de archivos
son sensibles a las maysculas y minsculas, esto es, archivo y Archivo identi ca
n a dos
archivos distintos. Por convencin, los archivos cuyo nombre comienza con un
punto (.),
llamados dot les, por lo general se usan como archivos de con guracin para prog
ramas.
Algunos programas esperan que sus archivos de entrada y salida estn comp
uestos de un
identi cador seguido de un punto y luego una extensin. En general es una conve
ncin muy
til para el usuario utilizar extensiones en los nombres de sus archivos para
identi carlos
fcilmente. Por ejemplo:
txt
Se re ere a archivos de texto
jpg Se re ere a imgenes en formato JPEG
java Programas de Java
cc
Programas de C++
tex Documentos para LATEX
c
Programas de C
En el caso de los sistemas Unix, el nmero de carcteres en la extensin no e
st li
mitado, ms que en cuanto a que el nombre total del archivo no puede tener ms
de 255
carcteres.
En Unix, como ya mencionamos y al igual que en otros sistemas operativo
s, los archivos
se almacenan en una estructura jerrquica de rbol, cuyo primer nivel es el dir
ectorio raz, el

cual se denota por el carcter /. Dicho directorio almacena todos los archivos
del sistema,
que a su vez pueden ser directorios.
En los sistemas Unix, cada usuario tiene un directorio personal, en el
cual almacena
sus archivos. Dicho directorio se conoce como el hogar (home). Una vez que
entres en
sesin, cada programa que se ejecuta se encuentra situado en un directorio de
trabajo. El
shell inicia, por omisin, en el directorio hogar del usuario. Un ejemplo sim
pli cado de un

3.1 El sistema de archivos


25
directorio en un sistema Unix se muestra en la gura 3.1. En esta gur
a encerraremos en
valos a los directorios y en rectngulos a los archivos. Mostramos pu
ntos suspensivos
cuando suponemos que en ese lugar aparecen un nmero considerable de
archivos y/o
directorios, pero por falta de espacio no los mostramos.

Figura 3.1 Sistema de archivos en un sistema Unix


arch
ash
bin
rm
zsh 3.0.7
MAKEDEV
dev
.emacs
zqft3
algoritmo
s
elisa
capit1
/
varios
home

fulano
tareas
Tarea1

vaz

sbin

win98

26
Sistema de Archivos
3.1.1.

Rutas absolutas y relativas

Las rutas son expresiones que se usan para identi car un archivo o u
n conjunto de ar
chivos. Se construyen bajando por el rbol del sistema de archivos, como
el que se muestra
en la gura 3.1.
Para referirse al directorio raz se utiliza el carcter /; a partir del
directorio raz se
puede descender en la jerarqua de directorios, siguiendo ramas del rbol,
hasta llegar al
archivo o directorio deseado, separando cada directorio con el carcter /.
Por ejemplo,
para referirse al archivo llamado ash que se encuentra en el directori
o bin, podemos usar
la ruta /bin/ash.
Cuando se hace referencia a un archivo o directorio a partir del d
irectorio raz utilizando
una ruta, se dice que es una ruta absoluta. No es necesario referirse
a un archivo o directorio
a partir de la raz, sino que tambin se puede hacer a partir del director
io de trabajo, es decir,
en el directorio en el que el usuario se encuentra parado. Cuando una
referencia a un archivo
o directorio se hace a partir del directorio de trabajo, se dice que e
s una ruta relativa.
La forma de presentar una ruta relativa es similar a la usada por
las rutas absolutas, con
la diferencia de que al principio no se pone el smbolo /. As, el descens
o en la jerarqua
por las ramas del rbol no se lleva a cabo a partir de la raz sino a part
ir del directorio de
trabajo. Por ejemplo, supn que tu clave de usuario es fulanito y tu dir
ectorio hogar es
/home/fulanito. Al iniciar una sesin te encontrars en este directorio. S
upongamos que te
quieres referir al archivo Tarea1 que est en el directorio tareas de tu
propio directorio.
Dicho archivo se representa usando la ruta absoluta
/home/fulanito/tareas/Tarea1
y usando una ruta relativa
tareas/Tarea1.
El directorio actual se denota por . y su padre se llama ... Haciendo
uso de dicha
notacin puedes usar trayectorias que vayan hacia arriba o hacia abajo e
n la jerarqua de
directorios. Siguiendo con el ejemplo anterior, si el directorio de tr
abajo es /home/fulani
to/tareas, entonces la ruta relativa del archivo Ejemplo.java en el di
rectorio algoritmos
del usuario fulanito es
../algoritmos/Ejemplo.java
El signi cado de esta ruta es: Estando en el directorio tareas vamos al
padre del mismo
que es fulano utilizando ... De ah bajamos por la rama algoritmos. Siguie
ndo esa ruta

es que encontramos al archivo Ejemplo.java. A esta ruta relativa es eq


uivalente la ruta
absoluta
/home/fulano/algoritmos/Ejemplo.java
Nota que si el usuario se encontrara en otro lugar del rbol, la rut
a relativa para alcanzar
a Ejemplo.java sera otra. Es, precisamente, relativa al punto en el rbol
en el que se
encuentre el usuario.

3.2 Movindose en el rbol del sistema de archivos


27
Dado que el concepto de directorio base o home es tan important
e, hay una notacin
especial para l, reconocida por cualquier intrprete de comandos de Un
ix excepto Bourne:
el carcter al inicio de una trayectoria se re ere al directorio home del
usuario actual,
mientras que vaz hace referencia al directorio home del usuario vaz. T
ambin utiliza
remos esa notacin extensamente. Por ejemplo, para el usuario elisa, /a
lguno.txt se
re ere al archivo /home/elisa/alguno.txt.
Una notacin menos conveniente para referirte al directorio home
es $HOME, que nos
regresa el valor de la variable de ambiente HOME que cualquier intrp
rete de comandos,
incluyendo Bourne, soporta. Por lo tanto, $HOME/alguno.c se re ere al
archivo alguno.c
en tu directorio home.
El sistema de archivos de Unix se puede dividir en distintos di
scos o particiones de
un mismo disco o incluso en distintos medios de almacenamiento. El
sistema de archivos
se encarga de hacer esto transparente a los usuarios, haciendo pare
cer que todo vive en el
mismo lugar. Existen distintas razones para hacer esto:
Los discos y dems dispositivos que contienen los directorios
y sus archivos pueden
ser insu cientes para mantener la jerarqua completa, as que pued
e surgir la necesi
dad de distribuir la jerarqua en varios dispositivos.
Para conveniencia en la administracin, puede ser til partir un
disco muy grande en
varias particiones.
Los dispositivos de almacenamiento pueden no estar permanente
mente unidos a la
computadora. Un disco exible puede contener su propia estructu
ra de directorios.
El sistema de archivos de red permite que si las computadoras
estn conectadas entre
s tengan un sistema de archivos compartido.
Unix acomoda los sistemas de archivos externos asocindoles punto
s de montaje. Un
punto de montaje es un directorio en un sistema de archivos que cor
responde al directorio
raz del sistema de archivos externo. El sistema de archivos primario
es el que emana del
directorio raz real y se llama /. Un sistema de archivos externo se li
ga al sistema primario
por medio del comando mount. Generalmente, todo esto es transparent
es para los usuarios
comunes, as que no debes preocuparte demasiado al respecto, aunque e
s bueno saberlo.

3.2. Movindose en el rbol del sistema de archivos


Por omisin, el shell no muestra en qu directorio ests trabajando. E

s conveniente
poder preguntar cul es el directorio de trabajo (o directorio actual
) y esto se hace con el
comando:
pwd
(Print Working Directory), a lo que el sistema responde con la ruta
absoluta del directorio
en el que te encuentras.

28
istema de Archivos

Para cambiarte de directorio puedes utilizar rutas relativas, si es que


a donde te quieres
mover est hacia abajo en el rbol desde el directorio de trabajo; o bien, util
izar una ruta
absoluta para moverte arbitrariamente a cualquier otro directorio de trabaj
o. El comando
que te permite cambiar de directorio de trabajo es
cd [ruta]
(Change Directory). Es importante mencionar que no te puedes mover a un arc
hivo, sino
nicamente a un directorio. Esto es porque al moverte, lo que se pretende es
cambiar de
directorio de trabajo.
Por ejemplo, si estando en el directorio de trabajo home quieres ubicar
te en el directo
rio varios del usuario elisa, lo puedes hacer de las dos maneras siguientes
:
cd elisa/varios/
cd /home/elisa/varios/
El primer comando usa una ruta relativa, mientras que el segundo comando us
a una ruta
absoluta.
Actividad 3.1 Cmbiate a los siguientes directorios. Despus de cada cambio, pr
egunta
por el directorio de trabajo:
(a) Directorio raz
(b) Directorio sbin
(c) Directorio hogar con tu clave
Para listar el contenido de un directorio usaa:
ls [parmetros] [ARCHIVOS]
Ambos modi cadores se pueden omitir. Los [parmetros] se re eren al formato q
ue
puedes querer para la lista de archivos, mientras que [archivos] se re ere al
lugar en el
rbol del sistema de archivos del que quieres la lista. Si omites los [parmetr
os] la lista
que se muestre ser breve, sin mayor informacin ms que el nombre del archivo o
de los
archivos del directorio de trabajo. Dos de los parmetros ms comunes se re eren
a pedir
una lista extendida, que contenga, entre otra informacin, el tipo de archivo
, su dueo, su
tamao, el da de su ltima modi cacin. Puedes querer que se listen tambin aquellos
archivos que empiezan con algo que no es una letra, como un punto. Para ell
o, tecleamos
el comando de la siguiente manera:
ls al /home/fulanito/
y se mostrar en pantalla la lista de archivos y directorios que se encuentra
n en el directorio
/home/fulanito/, pero nicamente los que cuelgan directamente de ese nodo. Si
omites
[archivos], la lista que se dar ser de los archivos y directorios inmediatame
nte colgando
del directorio de trabajo.

Actividad 3.2 Pide la lista breve de archivos que se encuentran en /usr/loc


al/

3.2 Movindose en el rbol del sistema de archivos


29
Actividad 3.3 Pide la lista extensa de archivos que se encuentran e
n /bin/. Cul es la
informacin que aparece?
Como puedes ver de la actividad anterior, muchas veces los arch
ivos y directorios en
un directorio son tantos, que si pides la lista extensa pudieses no
alcanzar a verla comple
ta. Para ello, haces lo que se llama entubar (en ingls, pipe), que c
onsiste en redirigir la
salida de un comando y usarla como entrada de un segundo comando. Q
uieres que el se
gundo comando sea uno que nos ensee la informacin por pginas. Tenemos
dos de estos
comandos, que se usan precedidos por el smbolo de entubamiento |:
less
more
Si utilizas el comando less para entubar:
fulanito@[estnum fulanito] % ls al /bin | less
la respuesta se muestra por pginas, esto es, muestra el nmero de renglo
nes que le cabe
en la pantalla, y se espera en la parte inferior de la misma a que
teclees un espacio o que
oprimas la tecla AvPg , para seguir con la siguiente pgina. Si teclea
s q , el listado se
suspende.
Veamos el resultado que se te muestra con el comando anterior e
n la gura 3.2 .
Si el comando que se utiliza es less, entonces se podr regresar
sobre el listado, opri
miendo RePg ; y avanzar tecleando espacio o AvPg .
Tambin puedes entubar a que vaya a la impresora, si es que hay alg
una conectada
accesible, con el comando lpr.
Actividad 3.4 Utiliza el comando less para entubar el listado del d
irectorio /usr/bin y d
cmo responde.
Figura 3.2 Resultado de entubar ls
t o t a l 6364
drwxrxrx
2
drwxrxrx
22
rwxrxrx
1
rwxrxrx
1
rwxrxrx
1
a t i c
rwxrxrx
1
l
lrwxrwxrwx
1
gawk
rwxrxrx
1
rwxrxrx
1
rwxrxrx
1
lrwxrwxrwx
1
ash
rwxrxrx
1

al con less
root
root
root
root
root

root
root
root
root
root

4096
4096
2612
60592
263064

Apr
Jun
Mar
Feb
Feb

19
6
7
3
3

2000 .
05:08 . .
2000 arch
2000 ash
2000 ash . s t

root

root

9968

Feb

root

root

Feb

17 2000 awk >

root
root
root
root

root
root
root
root

5756
316848
446800
3

Mar
Feb
Feb
Feb

7
27
2
17

root

root

9528

Feb

3 2000 aumixminima

2000
2000
2000
2000

basename
bash
bash2
bsh >

7 2000 c a t

Con
tina en la siguiente pgina

30
Sistema de Archivos
Figura 3.2 Resultado de entubar ls al con more
ntina de la pgina anterior
rwxrxrx
1 root
root
rwxrxrx
1 root
root
rwxrxrx
1 root
root
rwxrxrx
1 root
root
l e c h a r s
rwxrxrx
1 root
root
rwxrxrx
1 root
root
l i n e s 118

3.2.1.

Co
12044
13436
11952
49680

Mar
Mar
Mar
Mar

7
7
7
6

2000
2000
2000
2000

chgrp
chmod
chown
c on s o

33392
45712

Mar
Feb

7
9

2000
2000

cp
cpio

Permisos de archivos

Los permisos de acceso a un archivo, o simplemente permisos, esp


eci can quin puede
hacer qu a un archivo. Los permisos de un archivo son asignados por s
u dueo y se pueden
ver con el comando ls l y modi carlos con el comando chmod.
Dado que los permisos de un archivo son un atributo del archivo
mismo, todas las ligas
a ese archivo tienen los mismos permisos.

Permisos para operaciones bsicas


Las tres operaciones bsicas que puedes llevar a cabo en un archiv
o son lectura (read ),
escritura (write) y ejecucin (execute). Los permisos requeridos para
realizar estas opera
ciones estn denotados por r, w y x respectivamente. El permiso x es necesa
io para
programas compilados y cualquier guin de shell que intentes usar como
comando. Por
ejemplo, si el archivo qq contiene un guin de shell pero no tiene el
permiso x, no puedes
ejecutar el comando qq por s mismo. Si lo intentas, obtendrs un mensaj
e de error como:
command not found: qq
Sin embargo, puedes ejecutar qq con el comando
sh qq
aun cuando qq no tenga permiso de ejecucin. En este ejemplo tambin nec
esitas que el
archivo qq tenga permisos de lectura para poder ejecutar el script y
a sea directa o indirec
tamente.
Los permisos r, w y x pueden especi carse independientemente para
el dueo del archi
vo, para aquellos que se encuentran en el mismo grupo que el dueo y p
ara todos los dems.
Estas clases estn representadas simblicamente por u (user), g (group)
y o (others).
Los permisos que asignas a un archivo pueden protegerlo no slo de
acceso no desea
do sino tambin de tus propios errores. Por ejemplo, puedes proteger u

n archivo contra
modi caciones no intencionales o de borrarlo accidentalmente suprimien
do su permiso w.

3.2 Movindose en el rbol del sistema de archivos


31
Permisos para directorios
Los permisos de archivos tambin se aplican a los directorios.
El permiso r para un directorio te permite ver qu hay dentro,
pero es insu ciente
para acceder a los archivos que se encuentran dentro.
El permiso w para un directorio se requiere para poder aadir o
borrar archivos de l.
Sin embargo, w no es necesario para modi car un archivo listado
en el directorio o
borrar su contenido.
El permiso x para un directorio te permite operar con los nom
bres en ese directorio
si los conoces, pero no te permite ver cules son si no los con
oces. Normalmente
siempre que r se concede, tambin es as con el permiso x.
Otros permisos de archivos
Adems de los permisos rwx, Unix tiene otras clases de permisos u
sados principalmente
(pero no exclusivamente) por el administrador del sistema. Los desc
ribimos a continuacin.
El set uid bit. El bit set uid le permite a un programa correr con
los permisos de su dueo
en lugar de con los permisos del usuario que lo llama. Puedes
especi car el bit set
uid con s cuando usas el comando chmod. En un listado, se ind
ica reemplazando la
x con una s.
Normalmente, cuando llamas un programa y ese programa accede
a un archivo, los
privilegios de acceso del programa son los mismos que t tiene
s. Como ejemplo,
supn lo siguiente:
El usuario patito es dueo del ejecutable qq.
El programa qq utiliza el archivo privado de patito lla
mado tarea.
El usuario mam pato ejecuta el programa qq.
Los permisos que se aplican a tarea durante la ejecucin son a
qullos de otros
(ya que mam pato no es duea de tarea); no se utilizan los perm
isos del usuario
patito. Por lo tanto, si patito no le dio permisos a su arch
ivo tarea para que otros
lo pudieran leer (todo el mundo), el programa qq no puede ac
ceder a l. Una posible
solucin a esto es que patito le d permisos de acceder al archi
vo tarea a todo el
mundo, pero entonces mam pato podra hacer cualquier cosa con e
l archivo (in
cluso, cosas que patito no tena intensin de permitir.)
El bit set uid es una solucin a esto. Cuando un proceso ejecu
ta un programa, invoca
la funcin exec del sistema, especi cndole a sta la ruta del progr
ama a ser llamado.

Si los permisos del programa incluyen el bit set uid, entonc


es el ID efectivo del
proceso se convierte en aqul del dueo del programa, as que el p
rograma se ejecuta
con los privilegios del dueo del programa.

32
Sistema de Archivos
En efecto, el bit set uid habilita a un usuario para acceder a
un archivo como tarea
indirectamente con mam pato como agente pero no directamente.
El ejemplo clsico del uso del bit set uid es el comando passwd.
El dueo del
archivo /etc/passwd es root (el superusuario) y debe ser escrit
o solamente por el
programa passwd. Los usuarios ordinarios deben ser capaces de p
oder ejecutar el
comando passwd, pero no de modi car directamente el archivo passw
d. Por lo
tanto, el bit set uid est encendido2 para el programa passwd, lo
que le permite
escribir en el archivo /etc/passwd, mientras que esa habilidad
permanece negada
para usuarios ordinarios.
El bit set gid. El bit set gid es como el set uid excepto que se aplic
a a los permisos de
grupo en lugar de a los permisos de dueo. El bit set gid se espec
i ca con una s en
la posicin de la x en los permisos del grupo.
El locking bit. Si el locking bit de un archivo est prendido, un progra
ma que est leyen
do o escribiendo el archivo puede bloquear otros intentos de lee
r o escribir en l al
mismo tiempo. Prender este bit previene que accesos simultneos a
un archivo pue
dan corromper su signi cado y dejarlo en un estado inconsistente.
El locking bit est
representado por una l reemplazando a la x en los permisos del g
rupo.
El sticky bit. Cuando se aplica a un directorio, el sticky bit previen
e que los archivos
dentro de l sean borrados o renombrados por otra persona que no
sea su dueo.
Cuando se aplica a un archivo ejecutable, es la herramienta ade
cuada para retener
al programa en memoria cuando dicho programa puede ser comparti
do por varios
usuarios. Slo el superusuario o el dueo del archivo puede activar
el sticky bit. Este
bit est indicado por una t en el lugar de la x en los permisos d
e otros.
Construccin de permisos
Los comandos chmod, umask y nd hacen uso de la habilidad para const
ruir conjuntos
de permisos simblicamente. Esto lo puedes lograr especi cando un modo sim
blico que
les indique cmo modi car un conjunto existente, posiblemente vaco, de perm
isos.
Un modo simblico consiste de una o ms clusulas separadas por comas. C
ada clu

sula, en turno, consiste de cero o ms letras quin seguidas por una secuenc
ia de una o
ms acciones a aplicar a la categora designada por las letras quin. Cada acc
in consiste
de un operador seguido ya sea de una o ms letras de permisos, de una le
tra quin o de
nada en absoluto. Estas son las letras quin:
u Permiso para el usuario del archivo.
g Permiso para el grupo del archivo.
2
En este contexto, utilizaremos indistintamente prendido, encendid
o, arriba o puesto, para indicar que ese
bit ha sido activado por medio de alguna utilera vlida como el comando c
hmod.

3.2 Movindose en el rbol del sistema de archivos


33
o Permiso para otros (i.e. el resto del mundo.)
a Permiso para cualquiera (equivalente a ugo.)
Si omites las letras quin que preceden al operador, se supone a y
la mscara de
creacin (de la cual hablaremos ms adelante). stos son los operadores:
+ Aade estos permisos.
Quita estos permisos.
= Prende exactamente estos permisos, quitando cualquier otro para l
as letras quin indi
cadas.
stas son las letras de los permisos:
r Lectura
w Escritura
x Ejecucin
X Ejecucin slo si el archivo es un directorio o algn permiso x ya est p
uesto
s Establece el ID de usuario o grupo
t Bit pegajoso
l Bloqueo durante el acceso
Si especi cas una letra quin despus de un operador, entonces se copian
los permisos
asociados con la letra indicada.
Representacin octal de los permisos
Los permisos para un archivo pueden ser especi cados como un nmero
octal. Esta
forma es obsoleta y no recomendada, pero mucha documentacin antigua
de Unix utiliza
la forma octal muy seguido; tambin algunos sistemas (no nuestro caso
, en la Licenciatura
en Ciencias de la Computacin) no soportan an la forma simblica en todo
s los contextos.
El nmero octal se obtiene sumando lgicamente los nmeros de la siguient
e lista:
4000 Establece el ID del usuario en ejecucin.
20d0 Establce el ID del grupo en ejecucin si d es 7,5,3 o 1 (permiso
de ejecucin otroga
do); habilitar el bloque de otra forma.
1000 Habilita el bit pegajoso.
0400 Establece el permiso de lectura para el dueo.
0200 Establece el permiso de escritura para el dueo.
0100 Establece el permiso de ejecucin para el dueo.
0040,0020,0010 Establece permisos de lectura, escritura o ejecucin p
ara el grupo.
0004,0002,0001 Establece permisos de lectura, escritura o ejecucin p
ara el resto de los
usuarios.

34
Sistema de Archivos
Permisos para archivos recin creados
Cuando un programa crea un archivo, especi ca un conjunto de permiso
s para ese ar
chivo. Conjuntos tpicos son u=rw g=rw o=rw (rw rw rw , o 666 en octal)
para archivos
de datos y u=rwx g=rwx o=rwx (rwxrwxrwx, o 777 en octal) para archivos
ejecutables.
Los permisos iniciales son pocos debido a la mscara de creacin de archiv
os, tambin
conocida como la umask (user mask).T puedes cambiarla con el comando umas
k. En
otras palabras, los bits en la mscara de creacin de archivos representan
permisos que
sern negados a los archivos recin creados.
Los permisos de un archivo recin creado se calculan restando lgicame
nte los bits en la
mscara de creacin de archivos de los permisos especi cados por el programa
que lo crea.
Por lo tanto, si tu mscara vale algo como rwxrwxr x (octal 002), que ex
cluye el permiso
de escritura de otros, aqullos fuera de tu grupo no podrn escribir o bor
rar archivos que t
crees a menos que les cambies los permisos ms tarde (con chmod, por eje
mplo).
Un valor tpico para umask es rwxr xr x (octal 022), que niega los p
ermisos de es
critura a todos menos a ti. Con este valor de mscara, un archivo creado
con permisos
especi cados como u=rw g=rw o=rw es en realidad creado con permisos u=rw
g=r o=r.
La reduccin de permisos por el valor de umask se aplica tanto a la crea
cin de nuevos
directorios como de nuevos archivos.
3.2.2.

Archivos estndar y redireccionamiento

Muchos comandos de Unix leen su entrada de la entrada estndar a men


os que especi
ques archivos de entrada; y escriben su salida a la salida estndar. Por
omisin, tanto la
entrada como la salida estn asociados a tu terminal (generalmente la sa
lida es el monitor y
la entrada es el teclado). Otro archivo estndar es el error estndar, que
se usa para mensa
jes de error y otra informacin acerca del funcionamiento de un comando.
La informacin
enviada al error estndar tambin llega a la terminal.
Esta convencin funciona bien porque puedes redireccionar tanto la s
alida como la
entrada estndar. Cuando redireccionas la entrada estndar para ser tomada
del archivo ar
chivo, el programa que lee la entrada estndar leer del archivo archivo e
n lugar de hacerlo
desde la terminal. Algo similar sucede cuando redireccionas la salida
estndar. Cuando se

redirecciona la entrada se usa el operador < precediendo a una trayect


oria, mientras que
para el redireccionamiento de la salida se usa el operador >.
Por ejemplo, el comando cat copia la entrada estndar a la salida es
tndar, por lo tanto
el comando
cat < felix > gato
copia el archivo felix al archivo gato3 . Si utilizas el operador >> a
ntes de una trayectoria,
entonces la salida es agregada al nal del archivo en lugar de escrita d
irectamente. En el

3.2 Movindose en el rbol del sistema de archivos


35
ejemplo anterior, el contenido de gato es sobrescrito con el conten
ido de felix; pero si haces
en su lugar
cat < felix >> gato
el contenido de felix es agregado al nal del contenido de gato. Disc
utiremos ms formas
de redireccionamiento en breve.
El error estndar tambin se puede redireccionar pero la sintaxis p
ara hacerlo es depen
diente del tipo de shell que se utilice.
Para el shell Bourne (sh) y la mayora de los que pertenecen
a su familia, como zsh,
bash, korn, etc., la construccin 2> archivo especi ca que cualq
uier cosa que sea
enviada al error estndar ser redireccionada al archivo archi
vo.
Para el shell C, se utiliza la construccin > & archivo, que
manda tanto la salida
estndar como el error estndar al archivo archivo. Este shell
(y de su familia slo
tcsh) no permite enviar la salida estndar y el error estndar
a distintos archivos. De
hecho, el uso del shell C est en decadencia, pero an tiene a
lgunos seguidores.
Una propiedad importante y valiosa del redireccionamiento es qu
e un programa cuya
entrada o salida es redireccionada no tiene por qu saberlo. En otras
palabras, un programa
escrito bajo la suposicin de que lee de la entrada estndar y escribe
a la salida estn
dar tambin lee y escribe a archivos, siempre y cuando estos ltimos se
an pasados como
redireccionamientos. La misma propiedad se aplica a guiones de shel
l.
Un uso comn de cat es la creacin de archivos nuevos, que generalm
ente contienen
unas pocas lneas que se pueden teclear directamente de la pantalla.
Por ejemplo,
f u l a n i t o @ [ estnum f u l a n i t o ] % c a t > f e l i x
Esta es una prueba de c a t
para v e r exactamente como f u n c i o n a
^D
crea al archivo felix en el directorio de trabajo, y el contenido d
el archivo se tom de
la entrada estndar, que se dio por terminada al teclear C d (represe
ntado por ^D en el
listado), que corresponde a un n de archivo.
Otra manera de crear archivos es mediante el comando
touch mimosa
En realidad este comando lo que hace es actualizar la fecha de
ltima modi cacin del
archivo mimosa. Sin embargo, si el archivo no existe lo crea.
Nota: A lo largo de estas notas diremos que un programa produc

e un resultado cuando
manda algo a la salida estndar. En la terminologa tradicional de Unix
se dice que imprime
el resultado. Esta terminologa viene de los das en los que la mayora d
e las estaciones de
trabajo estaban conectadas a un teletipo en lugar de un monitor, pe
ro no debe confundirse
con la accin de enviar un archivo a la impresora.
3
Nota que como no das ms que el nombre del archivo, la trayect
oria se re ere al directorio de trabajo.

36
istema de Archivos

Actividad 3.5 Crea el archivo felix, con el contenido que t quieras, y


luego ejecuta los
ejemplos que dimos para este comando, en el orden dado.
Actividad 3.6 Ve con ls al gato los parmetros y la fecha de ltima modi ca
cin del
archivo gato. Ejecuta touch sobre el archivo gato. Obtn nuevamente un l
istado extendido
y describe la diferencia entre ambos listados.

Entubamientos y ltros
Puedes usar la salida de un comando como la entrada de otro comando
, conectando
ambos comandos con un tubo (pipe). La construccin resultante es un pipe
line o entuba
miento. Al igual que con las formas de redireccionamiento discutidas a
nteriormente, los
programas conectados no tienen por qu saber de dichas conexiones.
Sintcticamente, creas un entubamiento escribiendo dos comandos con u
n pipe (el sm
bolo |) entre ellos. Por ejemplo, la lnea de comandos
grep pest phones | sort
llama al programa grep, que extrae del archivo phones todas las lneas q
ue contengan
la cadena pest y produce esas lneas como su salida estndar. Esta salida
se entuba a la
entrada del programa sort, que ve dicha salida como su entrada. La sal
ida de la lnea de
comandos completa es una lista ordenada de todas las lneas en phones qu
e contienen
pest.
En una lnea que contenga tanto redireccionamientos como entubamient
os, los redirec
cionamientos tienen mayor precedencia: primero los redireccionamientos
se asocian con
comandos y despus los comandos con sus redireccionamientos se pasan por
los entuba
mientos.
La creacin de un entubamiento implica la creacin de un par de proces
os, uno para
el comando que produce la informacin entubada y otro para el proceso qu
e consume esta
informacin. Estos procesos los crea el shell que interpreta la lnea de c
omandos.
Un ltro es un programa que lee datos de la entrada estndar, los tran
sforma de algu
na manera y luego escribe esta informacin transformada a la salida estnd
ar. Uno puede
construir un entubamiento como una sucesin de ltros; estas sucesiones pr
oveen una for
ma muy poderosa y exible de usar comandos simples para que al combinarl
os alcanzar
grandes metas, posiblemente muy complejas. Generalmente este tipo de e
ntubamientos se

citan como ejemplos de la losofa Unix.


Hay otras herramientas en los Unix estndar para simular estos entub
amientos: archi
vos especiales FIFO, sockets y streams. Pero son mucho ms espec cos y so sti
cados y
de nitivamente fuera del alcance del presente trabajo.

3.3 Otros comandos de Unix


37
3.3. Otros comandos de Unix
Un comando es una instruccin que le dice a Unix que haga algo. La
forma usual de
pasar un comando a Unix es a travs del shell, como respuesta a un pro
mpt que ste nos
proporciona.
El trmino comando se utiliza tambin para referirse a instrucciones
que esperan los
editores de texto como vi o emacs y otro tipo de programas.
3.3.1.

Sintaxis estndar de comandos


POSIX4 de ne una sintaxis estndar para comandos, pero no todos los

comandos la
siguen. Muchos comandos de nidos por POSIX tienen una forma moderna y
una sintaxis
obsoleta, por compatibilidad con sistemas viejos. La razn de esto es
que muchos progra
mas importantes y muy viejos que an estn en uso, siguen sintaxis vieja
de algunos
comandos. Siempre que hablemos de la sintaxis de un comando, tratare
mos de apegarnos
a la sintaxis moderna de POSIX, pero mencionaremos de vez en cuando
la sintaxis vieja
para algunos de ellos.
Aun en sistemas modernos hay una gran cantidad de comandos que n
o se apegan al
estndar. Por ejemplo, el estndar especi ca que las opciones de los coman
dos (no as, los
operandos) pueden aparecer en cualquier orden, pero algunos comandos
pueden requerir
que las opciones aparezcan en un orden particular y muchas veces est
o no est mencio
nado explcitamente en la pgina del manual del comando. En estos y otro
s casos hacer
experimentos siempre es una buena idea.
Un comando consiste de una sucesin de palabras separadas por espa
cios en blanco
(estos espacios en blanco pueden ser espacios sencillos, tabuladores
e incluso en algunos
shell, solamente nuevas lneas escapadas5 ). La primera palabra es el
nombre del coman
do y las palabras subsecuentes son sus argumentos u opciones. El nom
bre del comando
se re ere a un programa o guin de shell a ser ejecutado. Los operandos
consisten de las
opciones del programa, si hay alguna, seguidas de sus operandos, si
hay alguno. Las opcio
nes controlan o modi can lo que el comando hace. Los operandos especi ca
n nombres de
trayectorias o con lo que va a trabajar el comando.
Especi cacin de opciones. Las opciones se especi can con una sucesin de pa
labras.
Cada palabra es un grupo de opciones o una opcin argumento. Las
opciones gene

ralmente se denotan por letras. Se pueden escribir en cualquier


orden y se pueden
4
Portable Operating System Interfaz es un estndar de nido por la IE
EE Institute of Electrical and
Electronics Engineers y ANSI American National Standards Institute .
POSIX tiene como nalidad
de nir un sistema operativo que se comporte como Unix, sea o no Unix.
Han existido varias versiones de
POSIX, siendo la ms importante POSIX.2, parte 2.
5
Una nueva lnea escapada es una que est precedida por una diagonal i
nvertida (\).

38
ma de Archivos

Siste

combinar varias opciones en un solo grupo (siempre y cuando no reciban


ningn ar
gumento). Cada grupo de opciones est precedido por un guin ( ). Por ejem
plo, los
comandos
ls al
ls l a
son equivalentes e indican que el comando ls (list archives) sea llama
do con las
opciones a (all les) y l (long listing).
La ltima (o nica opcin) de un grupo de opciones puede ir seguida por una
palabra
que especi que uno o ms argumentos opcionales para ella. Por ejemplo, el
comando
sed f qqscript qqarchivo
causa que el editor sed edite el archivo qqarchivo usando el guin de sh
ell qqscript;
en este caso, qqscript es un argumento para la opcin f y qqarchivo es
un argumento
para el comando sed mismo.
Cuando se reciben varios argumentos para una misma opcin, generalmente
se se
paran por comas, pero se pueden separar por blancos siempre y cuando s
e encierre
la lista de argumentos entre comillas (dobles o sencillas), o si se po
ne una diago
nal inversa frente a cada espacio en blanco (escapando los espacios en
blanco). En
cualquier caso, los argumentos deben formar una sola palabra. Los dos
ejemplos que
siguen muestran ambas convenciones:
prog o zed1,zed2 y "eres o no eres"
o alternativamente,
prog o zed1,zed2 y eres\ o\ no\ eres
Otras convenciones para argumentos. Hay otras dos convenciones muy comunes
para
especi car argumentos:
Indica el nal de las opciones. Esto es muy til cuando quieres pasar ar
gumentos
que empiezan con a un comando. Por ejemplo,
rm
qq
es una forma de indicar que qq es un archivo y no una opcin, por
lo que el
comando borrar el archivo

qq. Si slo se escribe rm qq, obtendramo

s un
error sobre una opcin q que no reconoce.
Un solo guin representa a la entrada estndar en un contexto en que el
programa
espera una trayectoria. Por ejemplo, el comando
diff
qq
encuentra las diferencias entre la entrada estndar y el comando q
q

3.3 Otros comandos de Unix


39
Citas (quotations)
Todos los shells estndar asignan signi cados especiales a ciertos
carcteres, llamados
meta carcteres. Para usar estos carcteres como carcteres ordinarios en
la lnea de co
mandos, debes citarlos (marcarlos de manera especial para que el sh
ell no los interprete).
Cada shell tiene su propio conjunto de meta carcteres y sus propias
convenciones de cita,
pero algunas reglas generales siempre se cumplen:
Una diagonal inversa (\) siempre sirve como carcter de escape
para uno o ms
carcteres que le sucedan, lo cual le da a esos carcteres un sig
ni cado especial. Si
un carcter es un meta carcter, el signi cado especial es generalm
ente el carcter
mismo. Por ejemplo, \\ usualmente signi ca una sola \ y \$ el s
igno de pesos. En
estos casos, la diagonal inversa le quita su signi cado a los c
arcteres, generalmente
llamados carcteres escapados. La diagonal inversa misma es el
carcter de escape.
Cuando un texto se encierra entre comillas (" "), la mayora de
los meta carcteres
que estn en dicho texto son tratados como carcteres normales, e
xcepto por $, que
generalmente indica sustituciones a realizar.
Otra forma de citar muy similar a la anterior, pero ms fuerte
es usar comillas senci
llas ya que ni siquiera el carcter $ es interpretado.
Los espacios y tabuladores, si se encuentran dentro de algn text
o citado, siempre son
tratados como carcteres normales.
A continuacin damos una breve lista de algunos comandos de Unix
que consideramos
muy importantes.
Tabla 3.1

Comandos de Unix importantes

Comando
cat
lgunos usos comunes

Descripcin
El comando cat copia y concatena archivos. Tiene a
que no implican concatenacin y que lo hacen uno de

los comandos ms
tiles de Unix (en prcticas posteriores lo usaremos e
xhaustivamente).
ln
stentes. Las nue

La forma general de cat es:


cat [ estuv] [archivo. . . ]
El comando ln crea una liga a uno o ms archivos exi
vas ligas proveen nombres adicionales para esos ar

chivos. La forma del


comando ln es:
ln [ f s] archivo ruta
ln [ f s] archivo. . . dir
Con

tina en la siguiente pgina

40
Sistema de Archivos
Tabla 3.1 Comandos de Unix importantes
ina de la pgina anterior
Comando
mv
, el directorio

Cont

Descripcin
El comando mv mueve uno o ms archivos de un directorio
fuente (source), a otro directorio, el directorio des

tino (target). Si tanto


el fuente como el destino estn en el mismo sistema de
archivos, mv
simplemente cambia sus ligas y no mueve ningn dato de
lugar. La forma

cp
ln y mv, cp s

del comando mv es:


mv [ i f] archivo ruta
mv [ i f] archivo. . . dir
El comando cp copia uno o ms archivos. A diferencia de
copia los datos y no slo cambia las ligas de los archi

vos involucrados.
cp no es la nica forma de copiar archivos en Unix, ya
que cat provee un
mtodo alternativo. Ms adelante les diremos cmo. pax con
las opcio
nes

rw es otra forma (pero no lo veremos aqu); cpio c

on la opcin p
es otra (tampoco lo veremos) y tar tambin provee otra
opcin (ste s lo
veremos, pero con un propsito distinto al de copiar ar
chivos). La forma

rm
s ordinarios o di

de
cp
cp
El

cp es:
[ p] iarchivo oarchivo
[ prR] iname. . . odir
comando rm borra ligas a archivos, ya sean archivo

rectorios. Un archivo es eliminado cuando todas sus l


igas han sido borra
das, as que borrar la nica liga a un archivo (el caso ms
comn) borra
rmdir
de la lnea de co

more

el archivo mismo. La forma del comando rm es:


rm [ rR] archivo. . .
El comando rmdir borra ligas a directorios. La forma
mandos es:
rmdir [ ps] dir. . .
donde dir. . . es una lista de directorios.
El comando more te permite examinar uno o ms archivos

en tu termi
nal una pgina a la vez. Tambin lo puedes usar para exam
inar la entra
da estndar y por lo tanto examinar la salida de un pro
grama haciendo
un entubamiento hacia more (espero que despus de este
prrafo te des
cuenta de la cantidad de terminologa que ya debes ms o
menos ma
nejar; si no has ledo el material que se encuentra ant
es de esta seccin,

ests en problemas). La forma de la lnea de comandos par


a more es:
Contina
en la siguiente pgina

3.3 Otros comandos de Unix


41
Tabla 3.1 Comandos de Unix importantes
ontina de la pgina anterior

Comando

Descripcin
more [ ceisu] [ n number] [ t tag] [ p cmd] [archiv

less

Nota que todos los parmetros son opcionales.


Hace lo mismo que more, pero extiende algunas de la

o. . . ]
s capacidades
most
ida a emacs. Tam

interactivas de more.
Hace lo mismo que more, pero con una interfaz parec
bin extiende las capacidades de more utilizando coma

ndos y enlaces de
lpr (lp)
ea enviado a la cola

teclas a la Emacs.
Este comando ocasiona que un conjunto de archivos s
de impresin. Recibe varias opciones, pero la forma u

sual de usarlo es:


lpstat
lpc
lpq
lprm
ueo del archivo o

lpr archivo. . .
Despliega el estado de las solicitudes de impresin.
Hace lo mismo que lpstat.
Muestra la cola de impresin.
Borra un archivo de la cola de impresin (debes ser d
el superusuario para poder eliminar un archivo de l

a cola de impresin).
nd
de archivos

El programa nd busca en partes especi cadas del sistema


de Unix, archivos que casen con un cierto criterio.

La forma del comando


es:
nd ruta. . . [criterio]
Aqu ruta. . . es una lista de trayectorias de archiv
os y directorios (usual
mente slo directorios). En el caso ms simple, el crit
erio de bsqueda es
una sucesin de patrones bsicos, cada uno indicado con
un guin. Cada
patrn primario prueba si un archivo candidato cumple
cierta propiedad;
algunas de estas pruebas primarias siempre se satis
facen (son tautologas,
: )) y se ejecutan slo por sus efectos secundarios.
En general, un crite
rio es una combinacin lgica arbitraria de patrones qu
e se construye a
partir de los patrones primarios.
La prueba primaria print es muy til. Siempre es ver
dadera y, como
efecto secundario, ocasiona que la ruta absoluta de
los archivos encon
trados (casados, apareados) sea enviada a la salida
estndar.
Con
tina en la siguiente pgina

42
Sistema de Archivos
Tabla 3.1 Comandos de Unix importantes
ina de la pgina anterior
Comando
which
cutable; esto es,

Cont

Descripcin
El comando which te permite localizar un programa eje
determina su trayectoria absoluta. La forma de la lnea

de comandos para
le

which es:
which progname. . .
El comando le (archivo) intenta clasi car un archivo exami

nando sus
cmp

primeros bytes. La forma del comando es:


archivo [ cL] [ f archivo] [ m archivo] archivo. . .
El comando cmp compara dos archivos. La forma del com

ando cmp es:


diff
hivos, tales como

cmp [ l | s] archivo1 archivo2


El comando diff analiza las diferencias entre dos arc
diferentes versiones del mismo documento. La forma de

l comando diff
chmod

es:
diff [ bcefhr] [ C n] archivo1 archivo2
El comando chmod cambia los permisos de un archivo. P

ara que este


comando funcione, necesitas permiso de bsqueda en el d
irectorio que
contenga al archivo (lee lo relativo a permisos si al
go de esto no te qued
umask

claro). La forma del comando chmod (change mode) es:


chmod [ Rf] perms archivo. . .
El comando umask te permite cambiar o examinar la msca

ra de crea
cin de archivos, tambin llamada umask value. El comando
umask est
incluido en el shell en lugar de ser un programa inde
pendiente (de hecho,
en shells avanzados, como bash o zsh, la mayora de los
comandos de es
ta seccin estn incluidos en el shell). La sintaxis de l
a lnea de comandos
es:
umask [ S] [perm]
chown
Los comandos chown y chgrp te permiten transferir la
propiedad perso
chgrp
nal y grupal de un conjunto de archivos y directorio
s a alguien ms. La
forma general de estos comandos es:
chown [ R] owner[.group] archivo. . .
chgrp [ R] group archivo. . .
Contina
en la siguiente pgina

3.4 Agrupando nombres de archivos


43
Tabla 3.1 Comandos de Unix importantes
ntina de la pgina anterior
Comando
wc
y lneas en un

Co

Descripcin
El comando wc cuenta el nmero de carcteres, palabras
archivo o conjunto de stos. Una palabra es consider

ada como una se


cuencia (no vaca) de carcteres delimitada por espaci
o en blanco. La
touch
us tiempos de acceso

forma de la lnea de comandos de wc es:


wc [ clw] [archivo. . . ]
El comando touch (toca) un archivo, actualizando s
y modi cacin. Si el archivo no existe, se crea a meno

s que se especi que


lo contrario. Tocar un archivo es una forma fcil de
crear un archivo
nuevo. La forma de la lnea de comandos de touch es:
touch [ acm] [ r ref archivo | t fecha] archivo.
. .
tee
ntenidos de un entu

El comando tee provee una forma de capturar los co


bamiento en un archivo, sin perturbar el

ujo de inf

ormacin a travs del


entubamiento. Toma su nombre por la similitud con
una conexin T
como las de las tuberas de agua en tu casa. La form
a del comando es:
tee

tee [ ai] [archivo. . . ]


tee copia la entrada estndar a la salida estndar y t

ambin a los archivos


archivo. . . . Por ejemplo, si tecleas:
cat hola.txt | tee adios.txt | more
vers el contenido del archivo hola.txt por pginas (q
ue es lo que hace
more) y encontrars en tu directorio actual un archi
vo llamado adios.txt
que ser una copia exacta de hola.txt.

3.4. Agrupando nombres de archivos


Usualmente, es necesario hacer referencia a un conjunto de arch
ivos o directorios. Para
este propsito se utilizan construcciones con comodines. Un comodn es
una construccin
que se puede remplazar por un conjunto o secuencia de carcteres.
El comodn ? se usa para representar un carcter cualquiera. Por ejem
plo, todos los
archivos en el directorio /bin/ que empiezan con cualquier carcter a
l que le sigue nada ms
sh se pueden referir por medio de la expresin /bin/?sh.

44
ema de Archivos

Sist

Actividad 3.7 Ejecuta ls dndole como parmetro la expresin /bin/?sh. Cul es el re


sultado?.
El carcter es otro comodn que se reemplaza por cualquier secuencia de carcte
res,
incluso la secuencia vaca, que es aquella que no tiene ningn carcter.
Actividad 3.8 Ejecuta otra vez el comando ls, pero ahora con el parmetro /bi
n/*sh. Cul
es el resultado? Cules son las diferencias en el listado de archivos con la c
onstruccin
/bin/?sh?
La tercera y ltima forma de expresiones con comodines son las que usan
la expresin
[. . . ]. Los carcteres dentro de los corchetes proporcionan una lista para
que se trate de
casar con alguno (y slo uno) de ellos.
Actividad 3.9 Ejecuta otra vez el comando ls, pero ahora ejectalo con el parm
etro
/bin/[abc]sh. Cul es el resultado? Cules son las diferencias en el listado de c
uan
do se utiliz con la construccin /bin/?sh?
Actividad 3.10 Escribe la ruta absoluta para referirte a todos los archivos
que inician
con m y terminan con .ps en el directorio /usr/share/texmf/doc/metapost/bas
e/.
Actividad 3.11 Escribe las rutas relativas para referirte a los mismos arch
ivos anteriores,
desde los directorios /, /usr/share/, /facultad/calculo/ayudantia/ y /usr/l
ocal/bin.
Actividad 3.12 Crea un directorio llamado miPractica que contenga dos subdi
rectorios
llamados usuarios y archivo y que estn en tu directorio base.
Actividad 3.13 Crea un archivo llamado raizArchivos.dat en el subdirectorio
archivos del
directorio miPractica que contenga un listado de los archivos y directorios
en el directorio
raz. Utiliza ls redireccionando la salida.
Actividad 3.14 A todos los directorios que haz creado asgnales permisos de l
ectura y
escritura para ti y slo de lectura a los dems.
Actividad 3.15 A todos los archivos que haz creado asgnales todos los permis
os para ti
y ningn permiso para los dems.
Actividad 3.16 Crea una copia del directorio miPractica y todo su contenido
, llmale
ejercicios.

Actividad 3.17 Elimina el directorio miPractica y todo su contenido.

3.5 Konqueror: administrador de archivos y algo ms


45
3.5. Konqueror: administrador de archivos y algo ms
Konqueror se podra de nir como un administrador de archivos, pero
es una de nicin
bastante pobre, ya que es capaz de realizar muchas ms cosas. Se trat
a de una de las aplica
ciones estrella de KDE. Con esta aplicacin se ha intentado y consegu
ido tener una nica
aplicacin que recoja todas las necesidades de un usuario.
Konqueror es:
Un manejador de archivos: proporciona funciones de administrac
in de archivos,
que van desde las operaciones simples de cortar, copiar y pega
r hasta bsqueda de
archivos a travs de una red local y remota. Permite previsualiz
ar el contenido de los
archivos y directorios, examinar sus propiedades e iniciar apl
icaciones de una forma
simple.
Un navegador web que cumple las especi caciones de HTML como son
:
Soporte para JavaScript.
CSS (hojas de estilo).
Escrituras bidireccionales (rabe y hebreo).
Soporte para ejecucin de applets de Java.
Extensiones de Netscape para visualizar Flash, RealAudio y
RealVideo.
Comunicaciones seguras mediante SSL.
Llenado automtico de URL y formularios.
Un cliente FTP totalmente equipado.
Una aplicacin de visualizacin universal, capaz de mostrar imgenes
y documentos
sin necesidad de iniciar otras aplicaciones. Esto lo hace inte
grando componentes de
otras aplicaciones: de KView para visualizacin de imgenes; de KD
VI para visuali
zar DVIs; de KGhostView para documentos PostScript; y aplicaci
ones de Kof ce.
Un emulador de terminal, que funciona de la misma manera que u
na terminal normal.
3.1 Administrador de archivos
El navegadores de directorios e Internet dentro de gnome es Nautilu
s.

3.5.1.

Iniciando Konqueror

Hay varias formas de iniciar la aplicacin de konqueror:


Para iniciar konqueror como un administrador de archivos se pu
ede seleccionar el
icono con una casita en el panel o en el escritorio.

46
istema de Archivos

Para iniciar konqueror como un navegador se puede seleccionar el


icono en forma de
globo terrqueo en el panel.
Desde el men, seleccionando Internet >Navegador web Konqueror para
iniciarlo
como navegador o Inicio para iniciarlo en modo de administrador d
e archivos.
Simplemente tecleando konqueror para iniciarlo como administrador
de archivos.

3.5.2.

Konqueror como administrador de archivos

Konqueror se ve como un administrador de archivos comn:


Lista los archivos y directorios contenidos dentro de una carpeta
dada y proporciona
informacin sobre ellos. La ruta de la carpeta actual se muestra en l
a barra de
direccin.
Adems muestra los archivos y directorios utilizando:

La

Vista
Vista
Vista
Vista
Vista
Vista
Vista
lbum

de iconos.
multicolumna.
de rbol.
de lista informativa.
de lista detallada.
de texto.
de tamao de archivo.
de fotos.

gura 3.3 muestra la funcionalidad estndar de konqueror como un a

dministrador
de archivos.

3.6 Emacs
51
compleja para su lnea de comandos; las siguientes son algunas de las
opciones ms impor
tantes:
Tabla 3.2 Emacs: opciones de inicio
Opcin

Descripcin
Edicin en lote. Con esta opcin el editor man

dar mensajes
a la salida estndar. Debes usar las opcione
s l, f y eval para
batch
llamar. Durante el

especi car archivos a ejecutar y funciones a


curso de este trabajo, no habr necesidad de

usar esto y puede


ser considerada una opcin avanzada.
Utiliza la terminal actual (TTY), sin llam
ar el cdigo de tu ma
nw
nejador de ventanas.
Si ocurre algn error mientras Emacs est arra
ncando, iniciar
debug init
as cosas a tu ar

el depurador. Esta opcin es til cuando agreg


chivo de con guracin de Emacs y no estn funcio

nando bien.
q

No carga ningn archivo de inicio.


Carga el archivo de inicio del usuario esp

eci cado en lugar del


user <user>
u <user>
help
version

tuyo.
Lo mismo que user.
Imprime el mensaje de uso de Emacs y sale.
Imprime informacin sobre la versin de Emacs

Lo mismo que version.


Ejecuta la funcin de Lisp nombrada sin pasa

y sale.
rle ningn argu
funcall <function>
f <function>

mento.
Lo mismo que funcall <function>.
Evala la forma de Lisp pasada como parmetro

a eval. Ten
la precaucin de escapar adecuadamente la ex
presin para que
eval <form>
el intrprete de comandos no la ejecute ante
s de que llegue a
load <archivo>

Emacs.
Carga el archivo nombrado de cdigo en Lisp

l <archivo>

Igual que

en Emacs.
load <archivo>.

Por ejemplo la siguiente lnea ejecutar Emacs dentro de la terminal:


% emacs nw
El comando save buffers kill emacs ( C x C
c ) termina la ejecu
cin de Emacs.

52
Sistema de Archivos
3.6.2.

Conceptos esenciales

Dado que Emacs es ms, mucho ms, que un editor de texto, para integra
r tantas ope
raciones distintas en un nico paquete y mostrarlas en una sola ventana,
se crearon varios
conceptos para referirse a estas distintas partes de Emacs.
Adems, y sta es la caracterstica que distingue a Emacs como un sistem
a para in
crementar la productividad del programador, todo comando que puede eje
cutarse puede y
usualmente est asociado a una combinacin de teclas. Puedes utilizar cual
quier tecla co
mo parte de estas combinaciones de teclas y a menudo involucran las te
clas control ( ctrl
en algunos teclados) y meta ( meta ya no existe en teclados modernos y
usualmente se
sustituye por alt ).
Buffers
Emacs, y en general cualquier editor, no modi ca directamente el arc
hivo, sino que
toman una copia del mismo y la coloca en un buffer, el cual contiene t
oda la informacin
del estado actual de la edicin. El estado actual del archivo no cambia
sino hasta que le
indicas a Emacs que deseas guardar los cambios en el disco.
Al igual que los archivos, los buffers tambin tienen un nombre, el
cual generalmente
se corresponde con el del archivo que se est editando. Sin embargo, en
otros casos el
nombre de un buffer no corresponde con el de ningn archivo, sino simple
mente con algn
propsito espec co; es decir, no todos los buffers estn ligados a un archivo
sino que sirven
para interactuar con Emacs. En este sentido es importante que entienda
s la diferencia entre
un buffer y un archivo.
Modos mayores y menores
La versatilidad de Emacs se debe, en buena medida, a que tiene dif
erentes modos de
operacin, de acuerdo con el tipo de texto que se est editando o proceso
que se est ejecu
tando. Esto quiere decir que Emacs se adapta a las necesidades de edic
in de cada tipo de
texto. Por ejemplo, para escribir una carta est el modo de texto; para
editar un programa
Emacs cuenta con modos para una gran cantidad de lenguajes de programa
cin. Esto le
permite a Emacs ser el tipo de editor que t deseas.
Estos modos de operacin se conocen simplemente como modos, y vienen
en dos sa
bores: existen los modos mayores, que son los que proveen caracterstica

s que cambian
radicalmente la manera en que se edita el texto; por ello un buffer si
empre est asociado
exactamente con un modo mayor.
Por otro lado existen los modos menores que aaden comportamientos e
spec cos a un
modo mayor. Por ejemplo, si deseas que se produzca un cambio de lnea cu
ando rebases
una cierta cantidad de carcteres en una lnea, puedes usar un modo menor
llamado Auto

3.6 Emacs
53
ll mode. A diferencia de los modos mayores, un mismo buffer pued
e utilizar cualquier
cantidad de modos menores.
La lnea que aparece en la parte inferior de todo buffer se c
onoce como la lnea de
modo. Esto es porque parte de la informacin que nos proporciona
es precisamente el modo
o modos en el que se est editando el buffer (que aparecen entre
parntesis). Lo primero
que aparece entre estos parntesis es el modo mayor, seguido de t
odos los modos menores
que el buffer en cuestin tenga activados.
Aparecen otros datos en la lnea de modo, como el nombre del
buffer, pero no son
relevantes por el momento.
En el siguiente captulo, en la seccin 4.3, explicaremos el re
sto de los conceptos im
portantes de Emacs y los comandos (y su combinacin de teclas aso
ciadas) de edicin.
En lo que resta de este captulo te mostraremos cmo Emacs puede ej
ecutar comandos de
Linux e incluso un intrprete de comandos completo.
3.6.3.

Dired

C x C f
Es un modo utilitario para manejo de directorios. Este modo
se activa cuando el archivo
( nd le)
que se intenta abrir es un directorio. Por ejemplo, si ejecutas C x
C f y luego completas
permite abrir
o tecleas el nombre de un directorio, digamos /pruebas, Emacs ab
rir dicho directorio
archivos
en el modo dired.
En este modo puedess observar los archivos en un directorio
, cambiar sus permisos y
propietarios, copiar, borrar o mover archivos y directorios. Al
gunos de los comandos que
puedes usar en este modo son:
Tabla 3.3 Emacs: comandos del modo dired
Combinacin
v

Descripcin
Abre el archivo nicamente en modo de l

Abre el archivo, pero en otra ventana

ectura.
.
Abre el archivo en otra ventana pero
te deja en la que actual
C o
mente ests.
Marca los archivo o directorios (para
copiar o mover, por ejem
m
C
R
d
x

plo).
Copia los archivos marcados.
Mueve los archivos marcados.
Marca archivos para eliminacin.
Elimina archivos marcados.

Contina en la siguiente pgina

54
Sistema de Archivos
Tabla 3.3

Emacs: comandos del modo dired


Contina de la pgina anterior

Combinacin
+
Enter
ue ests parado.
3.6.4.

Descripcin
Crea un directorio.
Abre el archivo o directorio en el q

Ejecucin de comandos de Unix desde Emacs

Emacs ofrece varios mecanismos para ejecutar comandos del siste


ma y procesar los
resultados. El ms sencillo de estos mecanismos lo ofrece el comando
shell command o
M !.
Cuando se ejecuta este comando, Emacs solicita se escriba el co
mando en el minibuf
fer6 , que se encuentra en la parte ms baja de la ventana de Emacs,
justo debajo de la lnea
de modo.
Por ejemplo, puedes ejecutar un comando para copiar el archivo
/etc/passwd al direc
torio /tmp, siguiendo esta secuencia:
i. Primero ejecutas el comando M !, tecleando esta combinacin.
ii. A continuacin, en el minibuffer, que dice Shell command:, esc
ribes el comando de
Unix: cp /etc/passwd /tmp
Emacs mostrar a continuacin en la misma lnea, pero que ahora se ll
ama rea de eco,
(Shell command succeeded with no output), indicando que todo sali bi
en y la ejecucin
fue exitosa.
Otro mecanismo muy utilizado es ejecutar un intrprete de comando
s completo dentro
de un buffer de Emacs, lo que se logra con el comando shell y puede
s ejecutarlo con la
secuencia: M x shell. Emacs te llevar inmediatamente a un nuevo buff
er que simula una
terminal de Linux. Como es obvio, en este intrprete de comandos (por
que es un intrprete
de comandos dentro de Emacs) puedes ejecutar todos los comandos de
Unix.
Actividad 3.18 Dentro de Emacs ejecuta un shell, con M x shell y re
pite todas las activi
dades de este captulo.

6
Emacs tambin utiliza esta rea para informar al usuario y en este
caso se conoce como rea de eco y no
como minibuffer. Por ejemplo, cuando escribes un comando como C x C
f, si haces una pausa prolongada
despus de escribir C x, Emacs presenta esa parte en el rea de eco com

o ayuda. Si escribes la secuencia del


comando completa muy rpidamente, Emacs no muestra nada en el rea de e
co para no distraerte.

Edicin
4
4.1. La guerra de los editores de texto
En la cultura geek1 hay un gran debate entre la comunidad de programad
ores sobre cul
editor de texto de propsito general es el mejor. Aunque es una guerra que s
iempre tiene
nuevos contendientes, los grandes campeones hasta la fecha, sobre todo en
el mundo Unix,
son los seguidores de Emacs y los de Vi.
La comunidad de hackers2 trata con reverencia a sus piezas de software
favoritas, mu
chas veces rayando en el fanatismo, y los editores de texto son probableme
nte las piezas
de software ms difundidas y apreciadas. Es cierto, hay otras guerras y muy
violentas, co
mo las de los sistemas operativos o los lenguajes de programacin, pero la d
e los editores
Emacs y Vi es digna de leyendas e historias de encuentros salvajes y cruen
tos entre sus
seguidores.
Nosotros, los autores de este compendio, nos contamos y a mucha honra
entre los se
guidores de Emacs. Vi es malo, de hecho, para los iniciados en el arte de
la edicin (lo cul
sers t tambin al nal de este captulo); es claro que Vi es el editor del in erno y
nos
1
Geek es el sobrenombre que reciben aquellas personas fascinadas, pro
bablemente en forma obsesiva, con
algunos temas espec cos u obscuros de algn rea del conocimiento o de la imagina
cin. En aos recientes,
geek se utiliza generalmente para los obsesionados con tecnologa o computac
in. Es probable que si ests
interesado en los temas del presente libro, t mismo(a) cali ques como geek, bi
envenido(a) al club!
2
hacker es aquella persona que crea o modi ca software o hardware de co
mputadora, incluyendo tareas de
programacin, administracin de sistemas y seguridad. Hack, por otro lado, tie
ne una connotacin negativa y
es algo as como un chicano x, una compostura poco elegante para un programa
o sistema.

56
Edicin
referiremos a l por su nombre completo: vi vi vi (666, en romano)
, el editor de la bestia.
Hablaremos de Emacs ms adelante, en la seccin 4.3. Linux, y de man
era ms general el
software libre, te ofrece una nica cosa y hay que valorarla: la f
acultad de elegir.
4.1.1.

Vieja guardia contra nueva guardia


Hoy da contamos en Linux con ms editores de los que podramos do

minar o explicar
en una vida, menos an en este captulo. Sin embargo, en KDE existe
una nueva camada
de editores que han llamado nuestra atencin porque hacen lo que u
n buen editor debe
hacer, pero adems se integran al resto del ambiente, lo cual, a l
a larga, ofrece otra gama
de posibilidades.
En este captulo revisamos los editores Kate en la siguiente s
eccin y Emacs en la
seccin 4.3. En captulos subsecuentes revisaremos otros editores es
pecializados, como
Kile en el captulo 6. Es importante que tomes en cuenta, sin emba
rgo, que durante tu vida
acadmica y profesional te encontrars en situaciones donde no conta
rs con un ambiente
gr co para trabajar, como KDE, y es aqu donde Emacs muestra su super
ioridad, ya que
tambin puede ejecutarse en una terminal o consola de texto.
4.2. Kate: un editor para programadores
4.2.1.

Introduccin

$ smart
Kate es el editor de texto preferido por programadores en KD
E. Algunas caractersticas
install kate
de Kate que revisaremos en este libro incluyen resaltado con gurab
le de sintaxis para una
gran variedad de lenguajes, desde C o C++ hasta XML o guiones de
shell; la habilidad para
crear y mantener proyectos; una interfaz para varios documentos
(MDI por sus siglas en
ingls) y un emulador de terminal integrado.

4.1 Editores de texto


El editor nativo en Gnome es gedit, un editor de texto e ciente y
sencillo. Este editor,
sin embargo, no es directamente comparable con Kate, que revisam
os en esta seccin, y
tampoco con Emacs, que veremos ms adelante.
Kate es ideal para programadores. Sin embargo, una de sus for
talezas ms importantes

no est relacionada con su manejo de archivos fuente de diversos l


enguajes de programa
cin, sino con la facilidad para abrir varios documentos simultneam
ente. Ms an, para

58
Edicin
En el captulo 5 se describen varios protocolos de red; KDE ofrece so
porte transparente3
para varios de ellos.
Sesiones
Kate soporta sesiones, que son una forma de mantener distintas lis
tas de archivos y
con guraciones. Puedes tener tantas sesiones como desees y stas pueden se
r annimas o
tener un nombre.
Por omisin, cuando inicias Kate se inicia en la sesin predeterminada
, pero cuando lo
inicias con una sesin, el nombre de sta aparece en el ttulo de la ventana
. Puedes iniciar
Kate desde la lnea de comandos e indicarle que abra una sesin:
% kate s nombre lista de archivos
Si la sesin llamada nombre no existe, Kate la crear. En caso de exis
tir una sesin
abierta con ese nombre, los archivos especi cados se anexarn a esa sesin.
Tambin se pueden crear y manejar sesiones desde un ejemplar de Kate
en ejecucin a
travs del men, eligiendo Sesiones.
La lista de documentos
La lista de archivos muestra todos los documentos actualmente abie
rtos en Kate. Los
archivos que han sido modi cados muestran un icono de disco magntico a la
izquierda
para indicar su estado.
Si hay dos o mas archivos abiertos con el mismo nombre (que viven e
n distintos di
rectorios), Kate antepone < 2 > al nombre del segundo, < 3 > al nombre
del tercero y as
sucesivamente. La ventana de informacin te mostrar la ruta completa del
archivo para
que selecciones el adecuado.
Para mostrar en la ventana activa el archivo deseado, basta con qu
e hagas click sobre el
nombre en la lista.
La lista de archivos puede ordenarse de distintas formas; para ell
o Kate ofrece un botn
a la derecha que te permite ordenar con alguno de los siguientes crite
rios: por orden de
apertura, por nombre (alfabtico) y por URL.
Esta lista aparece por omisin, aunque puede moverse, al lado izquie
rdo de la ventana
de edicin.
El selector de archivos
El selector de archivos es un visor de carpetas, que te permite nav
egar tu espacio de
archivos y abrir el archivo adecuado. Su funcionamiento es idntico al d
e otras aplicaciones
KDE, particularmente Konqueror.
3

Cuando decimos que algn proceso es transparente nos referimos al he


cho de que funciona como si no
estuviera ah, que no se le ve.

4.2 Kate: un editor para programadores


59
Emulador de terminal
Kate integra un emulador de terminal que es una copia de la apl
icacin Konsole de
KDE. Est disponible de varias formas, a travs del men Ventana en vista
de herramien
tas, a travs del botn en la parte inferior llamado terminal o bien pu
lsando la tecla F7 .
Esta terminal est aqu para facilitarte acceso a comandos de Linux
y al sistema de
archivos.
Herramientas externas
En el men de Herramientas encontrars uno de herramientas externas
, que te per
mite invocar aplicaciones externas a Kate con datos relacionados co
n l o los documentos
actuales, por ejemplo, su URL, directorio, texto.
Qu herramientas se incluyen es con gurable por el usuario a travs d
el panel de con
guracin de herramientas externas. Las herramientas que se incluyen po
r omisin estn
relacionadas con el sistema para manejo de control de versiones CVS
, otra que te permite
realizar una bsqueda en el web con Google (utiliza Konqueror) con el
texto seleccionado
en el documento y una ms para ejecutar cualquier programa sobre el d
ocumento.
Arrastrar y soltar
Kate soporta el protocolo de KDE para arrastrar (drag) y soltar
(drop), por lo que puedes
arrastrar un archivo desde el escritorio o una ventana de konqueror
y dejarlo caer o soltarlo
encima de Kate y ste abrir el archivo.
4.2.3.

Editando archivos

En la gura 4.2 puedes apreciar la ventana inicial de Kate. Notars


que hemos resaltado
algunas secciones con rojo y estn numeradas. La seccin 1 es similar e
n varias aplicacio
nes que funcionan en KDE y ofrece varios selectores: de documentos,
proyectos y archivos.
Cada selector ofrece distintas posibilidades para localizar un arch
ivo o proyecto a editar.
La seccin marcada con 2, que es la ms grande de la ventana de Kat
e, es donde se
despliega el contenido del archivo que editas. Dado que Kate tiene
la facultad de editar ms
de un archivo a la vez, cuando existe ms de un archivo abierto, en l
a parte superior de esta
ventana se crean varias pestaas, una por cada archivo abierto.
Es posible dividir esta seccin en dos, ya sea de forma horizonta

l o vertical. En ambos
casos, las dos partes o marcos, contendrn el archivo que ests editand
o, pero slo uno de
ellos ser el marco activo, lo que se representa por medio de un indi
cador verde.

4.2 Kate: un editor para programadores


61
Tabla 4.1 Kate: enlaces de tecla para acceso rpido
Enlace

Avpg
Repg
Ins
iceversa. Cuando

Descripcin
Mueve el cursor un carcter a la izquierda.
Mueve el cursor un carcter a la derecha.
Mueve el cursor una lnea arriba.
Mueve el cursor una lnea abajo.
Mueve el cursor una pgina hacia arriba.
Mueve el cursor una pgina hacia abajo.
Pasa de modo insercin a modo sobreescritura y v
est en modo insercin el editor aadir cualquier carc

ter introdu
cido al texto y empujar los carcteres previament
e introducidos a
la derecha del cursor de texto. El modo de sob
reescritura hace que
la entrada de cada carcter elimine el carcter in
mediatamente a la
derecha del cursor de texto.
BackSpace
Inicio
Fin
Supr
lquier texto seleccio
Shift
Shift
F1
Shift F1
Cf
F3
Cb
Cc
Cn

Borra
Mueve
Mueve
Borra

el
el
el
el

carcter a la izquierda del cursor.


cursor al comienzo de la lnea.
cursor al nal de la lnea.
carcter a la derecha del cursor (o cua

nado).
Marca el texto un carcter a la izquierda.
Marca el texto un carcter a la derecha.
Ayuda.
Ayuda: qu es esto?
Buscar.
Repetir la bsqueda.
Insertar un marcador.
Copiar el texto marcado al portapapeles.
Nuevo documento.
C

ontina en la siguiente pgina

62
Edicin
Tabla 4.1 Kate: enlaces de tecla para acceso rpido
ntina de la pgina anterior

Co

Enlace

Descripcin

Cp
Cq
Cr
Cs
Cv
Cx

Imprimir.
Salir
cerrar la copia activa del editor.
Reemplazar.
Salvar archivo.
Pegar.
Borrar el texto marcado y copiarlo al portapape

Cz
CShiftz

Deshacer.
Rehacer.

les.

Trabajando con la seleccin de texto


Hay dos formas de seleccionar secciones de texto en Kate, una d
e ellas con el ratn y
la otra con el teclado.
Para seleccionar con el ratn debes mantener presionado el botn iz
quierdo y arrastrar
el puntero hasta cubrir la regin deseada. El texto se selecciona mie
ntras arrastras.
Para seleccionar con el teclado debes mantener presionada la te
cla Shift y utilizar una
combinacin de las teclas de cursor, Inicio y Fin .
Una vez que has creado una seleccin, puedes por ejemplo copiarla
con la opcin Editar
Copiar o bien C c y posteriormente puedes copiar el texto, ahora en
el portapapeles,
con C v .
Para eliminar la seleccin actual, puedes utilizar alguna de las tres
opciones: (a) elegir del
men Editar Deseleccionar, (b) C a o bien (c) hacer click con el botn
izquierdo del
ratn en cualquier parte del editor.
Buscando y reemplazando
Los dilogos de bsqueda y sustitucin de Kate son muy similares, salv
o porque el
segundo incluye un espacio para indicar la cadena por la que habr de
sustituir la o las
presencias del texto buscado.
Los dilogos contienen estas opciones:

4.2 Kate: un editor para programadores


63
Tabla 4.2

Kate: opciones para buscar y reemplazar


Enlace
Texto a buscar
Expresin regular

Descripcin
Aqu va la cadena de bsqueda.
Si est activado, la cadena de bsqueda

Maysculas y minsculas

tada como una expresin regular.


Si est activada, la bsqueda distinguir en

Desde el cursor

culas y minsculas.
Si est marcado, la bsqueda iniciar de

Buscar hacia atrs

actual del cursor.


Si est activado, la bsqueda se har desd

ser interpre
tre mays
sde el punto
e el punto
actual hacia el inicio del documen
to.
Reemplazar con
Preguntar al reemplazar

Aqu va la cadena de sustitucin.


Si est activado, aparecer un dilogo p

reguntando la
accin que debe llevar a cabo Kate c
ada vez que en
cuentre la cadena de bsqueda. Las p
osibles respuestas
son: s, no, todo y cerrar.
Para iniciar una bsqueda puedes utilizar el men Editar Buscar o bi
en C f ; para
reemplazar debes utilizar Editar Reemplazar o C r .
Marcadores
Los marcadores sirven para sealar lneas interesantes en el docume
nto y volver a ellas
fcilmente en el futuro. Puedes establecer y eliminar marcadores, mov
iendo el cursor a esa
lnea y activando la opcin Marcadores Cambiar o presionando C b . Desp
us, para
recorrer los marcadores en el documento puedes utilizar en el men
Marcadores Siguiente ( CAvpg ) o Anterior ( CRepg ).
Ajustes de lnea y sangrado
Kate tiene una opcin para que le indiques que debe cortar las lne
as que sean ms
largas que cierto tamao. Esto lo puedes con gurar en las preferencias,
en la pgina de
Editor.
Cuando est activada esta opcin de ajuste de lnea, al llegar al nmer
o mximo de
carcteres permitidos, Kate insertar (en un espacio en blanco apropiad
o) un salto de lnea.
En cuanto al sangrado del documento, Kate soporta una amplia ga
ma de sangrados
automticos especializados en distintos tipos de entrada. Puedes util
izar uno de los mo
dos disponibles a travs del men Herramientas Sangrado. En la siguient

e tabla se

64
Edicin
muestran algunos de los sangrados disponibles en Kate:
Tabla 4.3 Kate: sangrados disponibles
Enlace
Ninguno
el sangrado autom
Normal
lar al de la lnea ante

Descripcin
Seleccionando este modo se desactiva completamente
tico.
Este sangrado simplemente mantiene un sangrado simi
rior con cualquier contenido diferente a un espacio

en blanco. Puedes com


binar ste con las acciones sangrar y borrar sangrado
para satisfacer tu gusto
Estilo C
mo C++, C#, Java, Ja

personal.
Es un sangrado para los lenguajes C y similares, co
vascript. Sin embargo, no funciona con lenguajes de

script como Perl o


SS C
imilares, con las mismas
Python

PHP.
Es un sangrado alternativo para los lenguajes C y s
restricciones.
Un sangrado espec co para el lenguaje de script python

.
XML
ntes utilizarlo con

Un sangrado automtico para XML. Sin embargo, no inte


HTML o XHTML, ya que falla con las etiquetas HTML d

e estilo antiguo
(etiquetas abiertas como <br>)

4.3. Emacs
Emacs es el editor de los Dioses, por directa contraposicin con
su odiado archi
enemigo vi (asegrate de leer dos veces la introduccin de este captulo
, en la seccin 4.1).
En el captulo anterior (seccin 3.6.2) te mostramos algunos de lo
s conceptos esenciales
de Emacs y en esta seccin concluimos la exposicin de conceptos y te
ensearemos a
utilizar una pltora de comandos para edicin. No tienes que aprenderl
os todos para utilizar
Emacs, pero es importante los conozcas y practiques cada vez que t
engas oportunidad.
4.3.1.

Comandos

Meta x
Los comandos en Emacs tienen un nombre auto descriptivo. En mucha
s ocasiones estos
sirve para
comandos estn formados por dos o ms palabras separadas por un guin y,
como puedes
ejecutar
imaginar, ejecutar estos comandos llamndolos por su nombre puede re
sultar engorroso.

comandos

4.3 Emacs
65
Por esta razn, Emacs crea un vnculo entre un comando y una secuencia d
e teclas y pue
des ejecutarlo ya sea invocndolos por su nombre, por ejemplo Meta x nd
le, o bien
tecleando la secuencia asociada, en este caso C x C f .
Las secuencias asociadas lucen complicadas al principio, pero de
spus de utilizarlas un
tiempo te dars cuenta que estn ah por muy buenas razones. De hecho, not
ars que los
comandos ms usuales tienen asociadas secuencias de teclas cortas. Ema
cs fu diseado
por programadores, para programadores, por lo que la e ciencia lo es t
odo.
Cada vez que tienes que despegar una de tus manos de la parte ce
ntral del teclado para
buscar con el ratn un comando en los mens, pierdes tiempo valioso. Int
enta: compara el
tiempo que te toma teclear la secuencia C x C f contra el tiempo que
te toma encontrar en
el men el mismo comando nd le. Ahora imagina una sesin de edicin donde es
cribirs
una decena de cuartillas y ejecutars varios cientos de comandos.
Entre ms utilices Emacs menos tendrs que pensar en las secuencias
de los comandos,
tus manos se harn cargo. Esto se conoce como memoria dactilar. Una ve
z que te sien
tas cmodo con los comandos de Emacs que dominas, regresa a este captul
o e investiga
algunos de las secciones que a continuacin presentaremos y aprende nu
evas secuencias.
En la seccin 3.6.2 te dijimos que las teclas Control y Meta ( alt
y alt gr ) son
usualmente utilizadas en secuencias de teclas. De hecho, ya hemos ut
ilizado algunas de
stas a lo largo de este material, pero en nomenclatura de Emacs no mo
stramos el nombre
de estas teclas completo, sino que las sustituimos as: Ct rl es C y M
eta es M. Entonces
una secuencia as: Cx , signi ca mantener presionada Ct rl y sin soltar p
resionar x .
Sucede lo mismo con M, aunque aqu tenemos una pequea variante y es
que la tecla de
escape, esc , puede utilizarse en sustitucin de Meta . Cuando se ejec
uta una secuencia
Mx utilizando esc , sin embargo, no se mantienen presionadas de maner
a simultnea.
Es decir, primero presionamos esc , soltamos, y a continuacin x .

El guin nos sirve para indicar que esas teclas se presionan junt
as, los espacios en la
secuencia nos indican que debemos soltar la(s) tecla(s) anterior(es)
antes de iniciar con las
teclas despus del espacio. Por ejemplo, Cx Cf se teclea as: simultneament
e Ct rl y
x , liberamos ambas y de manera simultnea presionamos Ct rl y f .

66
Edicin
Escribir texto o ejecutar comandos
Puedes estarte preguntando si eventualmente Emacs sirve para e
ditar texto o slo para
ejecutar comandos. Por raro que parezca, Emacs sirve exclusivament
e para ejecutar coman
dos y el ms ejecutado es self insert command, que es ejecutado por
cada tecla y cuya
nica funcin es imprimir el carcter que representa la tecla en el buff
er actual, o sea, la
que acabas de oprimir.
Para redactar una carta, escribir tus tareas, programar o hace
r una presentacin, sim
plemente tienes que ejecutar Emacs, visitar un archivo (con nuestr
o ya viejo amigo: C x
C f ) y comenzar a teclear. Ms adelante te decimos como salvar el
contenido del buf
fer (seccin 4.3.11); recuerda teclear C x C c para terminar la ejec
ucin de Emacs.
4.3.2.

Movimiento

Existe una posicin privilegiada que es donde se efectan las oper


aciones de Emacs,
conocida como el punto. Generalmente, este punto est marcado con el
principio de un
cursor, que es un simptico cuadrado que nos indica dnde ests parado c
on respecto al
buffer que ests editando. El punto en realidad se re ere a la posicin
entre el carcter
cubierto por el cursor y el inmediato anterior.
Como es natural, las primeras operaciones que desears hacer son
las de movimiento
del punto dentro del buffer, las cules se pueden efectuar a muchos
niveles, desde carcter
por carcter, lnea por lnea, palabra por palabra, por prrafo o por pant
alla.
La mayora de las operaciones de movimiento se pueden efectuar t
anto hacia adelante
como hacia atrs. A continuacin presentaremos una tabla de movimiento
s tratando de
explicar, cuando no sea claro, las funciones de estos comandos.
Tabla 4.4

Emacs: comandos de movimiento


Unidad
carcter
palabra
lnea
enunciado
prrafo
pantalla

Adelante
C f
M f
C p
M a
M {
C v

Atrs
C b
M b
C n
M e
M }
M v

Es posible que necesites desplazarte de manera instantnea a cier


tas posiciones privile
giadas del texto. Emacs ofrece los siguientes comandos para realiz

arlo:

4.3 Emacs
67
Tabla 4.5

Emacs: movimiento a lugares especiales


Elemento
lnea
buffer

4.3.3.

Inicio
C a
M<

Fin
C e
M>

Matando y borrando

Hasta el momento sabes cmo agregar texto al buffer y cmo moverte


en l, pero qu
opciones ofrece Emacs para borrar texto? sas te las mostramos aqu, p
ero antes te presen
tamos un comando muy til undo o C x u , que deshace lo que hizo el l
timo comando.
Si ejecutas repetidamente este comando puedes retroceder tanto com
o quieras en el proceso
de edicin del buffer actual.
Los comandos de Emacs para borrar se dividen en dos grandes ca
tegoras, los que
matan y los que borran. Como una manifestacin del optimismo de Emac
s, la muerte no es
para siempre, por lo que todo aquello que matas puede reencarnar.
Para lograr esto, Emacs
enva a todos los muertos a una estructura conocida como el anillo d
e la muerte (kill ring).
Por el contrario, cuando borras algo es para siempre, a menos,
claro, que utilices el co
mando undo. Para evitar que los usuarios de Emacs pasemos malos ra
tos por eliminar cosas
sin quererlo, los nicos comandos para borrar que veremos funcionan
sobre carcteres.
En la siguiente tabla te mostramos los comandos para borrar y
matar.
Tabla 4.6

4.3.4.

Emacs: comandos para matar y borrar


Unidad

Adelante

Atrs

carcter (borrado)

C d

BackSpace

palabra

Md

MBackSpace

lnea

C k

C u 0 C k

enunciado

Mk

C x Supr

Reencarnacin de texto

Cuando matas alguna seccin, los carcteres que la conforman entra


n al kill ring. Si
eres perspicaz te preguntars: de qu sirve que se vayan a este lugar s
i no s como traer
las de regreso? sta es una pregunta vlida: en efecto existe una mane
ra de traer de regreso

aquellos carcteres que han muerto en este buffer (o en cualquier ot


ro buffer); a esta ope

68
Edicin
racin se le conoce como yank y el comando para realizarla es C y . La e
jecucin de este
comando inserta el ltimo texto muerto en el punto actual.
Como es de esperarse, puedes reencarnar texto que hayas matado con
anterioridad.
Esto se logra con el comando My , el cual, si el comando inmediato ante
rior fue un yank,
reemplaza el texto que ste insert con el texto inmediato anterior en el
kill ring. Esto
ltimo se puede repetir sacando sucesivamente lo que est guardado en el k
ill ring.
Los elementos del kill ring son el resultado de acomodar adecuadam
ente bloques de
operaciones matar; por ejemplo si matas dos lneas seguidas, estas dos ln
eas forman parte
de un mismo bloque en el kill ring.
4.3.5.

Regiones

Las divisiones o unidades que hemos revisado no son todas; durante


una sesin de
edicin puedes requerir tomar partes arbitrarias del texto y operar sobr
e ellas. A estas divi
siones se les conoce como regiones.
Una regin comprende los carcteres que se encuentren entre una marca
y el pun
to. La marca es otra posicin especial dentro del buffer y se ja por medi
o del comando
CSpace . El punto es la posicin que tenga el cursor. Es decir, se coloc
a la marca en la
posicin donde se encuentra el punto y mueves el punto ampliando o contr
ayendo la regin,
de nuevo entendida como los carcteres entre la posicin donde est la marca
y la posicin
actual del punto. Emacs indicar visualmente la extensin de la regin, ya s
ea mostrndola
sombreada o cambiando el color del texto.
Existen muchas operaciones que puedes hacer sobre una regin. Por el
momento slo
mencionaremos dos. La primera es matar una regin, que se lleva a cabo c
on el comando
C w y la otra, copiar una regin al kill ring sin matarla, que se lleva
a cabo con el comando
Mw . Esta ltima operacin slo mete la regin al kill ring sin quitarla de su
ubicacin
actual.
4.3.6.

Rectngulos

En Emacs, adems de poder hacer selecciones de carcteres contiguos, t


ambin puedes
seleccionar reas con forma de rectngulos, con la esquina superior izquie
rda en la marca y
la esquina inferior derecha en el punto, o viceversa. Los comandos que
se usan para lidiar
con rectngulos son:

4.3 Emacs
69
Tabla 4.7

Emacs: comandos para manejar rectngulos


Enlace
C x r k
C x r y
C x r o
Mx clear rectangle

4.3.7.

Operacin
Cortar (kill) un rectngulo
Pegar (yank) un rectngulo
Abrir un rectngulo
Borrar un rectngulo

Registros

En Emacs existen una especie de cajones, en donde puedes guard


ar cadenas de texto,
rectngulos o posiciones. Estos cajones reciben el nombre de registr
os, y sus principales
comandos son:
Tabla 4.8
Emacs: comandos para manejar registros
Enlace

Operacin
Copia la regin en un regis

tro. Te pregunta
C x x
por el nombre del registr
o.
Guarda el rectngulo selecc
ionado en el re
C x r r R
er un carcter o un
C x r s R

gistro R, donde R puede s


nmero.
Guarda la seleccin en el r

egistro R.
C x r Space R
or en el registro R.

Guarda la posicin del curs


Inserta el contenido del

registro R, si ste es
C x r i R
C x r j R

un rectngulo o una cadena.


Salta al punto guardado e

n el registro R.
Agrega el texto (que te s
er pedido en el mini
C x r t
en la regin rectan

buffer) a todas las lneas


gular, desplazando el tex

to hacia la derecha.

70
Edicin
4.3.8.

Archivos

Como mencionamos en el captulo anterior (seccin 3.6.3), para abrir


un archivo en
Emacs utilizamos la secuencia: Cx Cf ( nd le). Si te equivocas de archivo,
inme
diatamente despus de utilizar Cx Cf , puedes utilizar el comando Cx Cv ( nd
alternate le).
4.3.9.

Buscar

Emacs incluye varios tipos de bsqueda, el comando search forward u


tiliza el mini
buffer para solicitarte la cadena que deseas buscar.
Probablemente el comando ms til para buscar en Emacs es isearch for
ward (nota la
i al inicio del comando), que sirve para realizar una bsqueda de manera
incremental.
Esto signi ca que Emacs comienza a buscar conforme t escribes la cadena
de bsqueda.
Es ms usual utilizar el enlace Cs que el comando anterior.
Para buscar hacia atrs (o hacia arriba) de manera incremental util
izamos el comando
isearch backward o Cr .
Una vez que inicias una bsqueda incremental, ya sea hacia adelante
o hacia atrs,
puedes utilizar nuevamente Cs o Cr para buscar la siguiente presencia h
acia adelante
o hacia atrs, respectivamente. Cuando llegas al nal (o inicio) del buff
er, Emacs utiliza el
rea de eco para avisarte que no existen ms presencias de la cadena busc
ada; si vuelves a
insistir en buscar hacia ese mismo lado, Emacs da la vuelta y contina
la bsqueda desde
el otro extremo del buffer.
4.3.10.

Reemplazar

Habr ocasiones en las que quieras buscar y cambiar una, algunas o


todas las presencias
de una cadena de texto por otra. Realizar esta tarea manualmente es t
edioso, aun cuando
puedes utilizar los comandos de bsqueda para localizar rpidamente el te
xto a cambiar.
Por este motivo Emacs te ofrece dos comandos principales para ree
mplazar texto. El
primero replace string, cambia todas las ocurrencias de una cadena po
r otra (utiliza el
mini buffer para solicitar ambas cadenas).
Existe sin embargo, otro comando llamado query replace string que
se comporta si
milar, pero antes de realizar cada cambio presenta una serie de opcio
nes para decidir si esa
presencia particular se cambia o no y tambin para decidir reemplazar t

odas las presencias


que se encuentren ms all del punto actual. Este ltimo comando es ms popul
ar y por
ello est asociado a una secuencia corta de teclas: M % .

4.3 Emacs
71
4.3.11.

Guardar

Ya te hemos comentado que mientras editas un documento los cambi


os existen nica
mente dentro de Emacs, en el buffer. Para hacer estos cambios perman
entes debes salvar el
archivo y esto puedes lograrlo con el comando: save buffer o Cx Cs .
Con el comando save some buffers ( Cx s ) Emacs preguntar si desea
s guardar
cada buffer modi cado en tu sesin. Finalmente, el comando write le o C x C
w te
permite salvar el contenido del buffer en un archivo distinto. Emacs
te preguntar el nombre
de dicho archivo utilizando el mini buffer.

4.3.12.

Ventanas

Una ventana en Emacs es una subdivisin del rea de trabajo en donde


podemos des
plegar un buffer. Con Cx 2 , se crea otra ventana en forma horizontal
. Para crear una
ventana vertical puedes utilizar Cx 3 .
Para cambiar entre ventanas debes utilizar Cx o . En cualquiera d
e estas ventanas
puedes realizar todo tipo operaciones, ejecutar comandos de Emacs, e
tc.
Para cerrar todas las ventanas excepto en la que ests parado tecl
ea Cx 1 ; para cerrar
la ventana en la que ests parado teclea Cx 0 .

4.3.13.

Marcos (frames)
Adems de las ventanas, en X tambin podemos crear lo que Emacs llama

frames,
que en terminologa estndar de X se llama ventanas. Confundidos? Es muy
fcil: estos
frames de Emacs lucen como ejecuciones distintas de Emacs, mientras
que las ventanas
son sub divisiones de un mismo frame.
4.3.14.

Ayuda en lnea
No podramos decir que Emacs es un editor de texto autodocumentado s

i no contara
con un sistema de ayuda en lnea. Si tecleas la secuencia Ch ? ? , Emac
s te mostrar
una lista con las opciones de ayuda que tiene a tu disposicin. Por ej
emplo, con la secuencia
Ch k , Emacs te pedir teclear una secuencia de teclas y te dir todo lo
que sabe de esa
secuencia, a qu comando est asociada y la documentacin del comando.

72
Edicin
4.3.15.

Lista de buffers

En Emacs podemos tener una gran cantidad de buffers sobre los cu


ales estamos traba
jando, tantos que es fcil perder de vista o recordar el nombre exacto
del buffer que desea
mos editar. Para estas situaciones existe el comando list buffers o
su enlace
Cx Cb , el cual despliega una lista de los buffers que tenemos abiert
os en ese momento.
En este buffer se despliega informacin bsica de los buffers, su nombre
, su tamao, y, en
caso de estar asociados con un archivo, el nombre del archivo. Otra
informacin muy til
que nos proporciona este comando es si el buffer ha sido modi cado des
de la ltima vez
que se guard en disco.
Tambin desde este buffer podemos ir a los diferentes buffers, pos
icionndonos en el
regln correspondiente y presionando Enter .
4.3.16.

Anzuelos (Hooks), setq y otros

En esta seccin no entraremos en muchos detalles, ya que para ente


nder bien se requiere
de conocimientos de Emacs Lisp, que es el lenguaje para extender Ema
cs. Muchos de los
modos mayores, los comandos, etc. que hemos revisado en este libro e
stn escritos en
Emacs Lisp.
Con los hooks podemos hacer que Emacs ejecute funciones cuando s
uceda algn even
to. Se usan mucho para llamar a ciertas funciones cuando abrimos un
archivo de cierto tipo.
Por el momento no entraremos en detalles acerca de los hooks.
Con setq le decimos el valor que queremos que tenga tal o cul var
iable.
Cada modo tiene su mapa de teclado (por ejemplo, text mode map e
s el mapa para
el modo mayor text) para indicar la accin que realiza cada tecla; est
os mapas pueden
modi carse para cambiar los comandos a ejecutar por estas teclas.
Con require hacemos que Emacs haga un reconocimiento de un archi
vo de de nicio
nes.
4.3.17.

Ortografa

Una carcterstica interesante de la mayora de los editores de texto


modernos es que
te ayudan a revisar la ortografa de tus documentos. Emacs no es la ex
cepcin, pero co
mo muchas cosas con este gran editor, y en general en Linux, para lo

grarlo debes utilizar


componentes externos, otros programas.
$ smart
Para lograr que Emacs revise tu ortografa vamos a utilizar la bib
lioteca ispell.el, que
install
utiliza algn programa de Linux para realizar la revisin ortogr ca. El pro
grama predilecto
aspell es

4.3 Emacs
73
en Linux para revisar ortografa se llama Aspell y, dependiendo de tu
instalacin, puede o
no contener un diccionario en espaol.
Con las siguientes lneas en tu /.emacs le vamos a indicar varias
cosas a Emacs. En
la lnea 1 le indicamos que queremos utilizar el programa de Linux as
pell para revisar
ortografa y, en las lneas 2 y 3 le indicamos detalles sobre el tipo d
e carcteres que incluye
el espaol y algunos argumentos para el programa mismo. Por ejemplo,
la secuencia d es
le indica a aspell que utilice el diccionario llamado es. Finalment
e, en la ltima lnea le
indicamos que utilice por omisin este diccionario en todos los buffe
rs.
1 ( s e t q i s p e l l programname " a s p e l l "
2
i s p e l l e x t r a args ( " W" " 3 " )
3
i s p e l l d i c t i o n a r y a l i s t
4
( cons
5
( " spanish " " [ [ : alpha : ] ] " " [ ^ [ : alph
a : ] ] " " [ . ] "
6
n i l (" B" "d " " es " ) n i l u t f 8)
7
i s p e l l d i c t i o n a r y a l i s t )
8
)
9 ( setd e f a u l t i s p e l l l o c a l d i c t i o n a r y " spa
nish " )
Es importante sepas que con el comando ispell change dictionary
puedes cambiar a
otro diccionario. Estos cambios no son globales y funcionarn nicament
e para el buffer
actual.
Utilizando ispell
Ahora que hemos con gurado un revisor ortogr co en Emacs, en la sigu
iente tabla te
mostramos los comandos ms importantes, con los que puedes revisar la
ortografa de una
palabra o de una porcin del buffer.
Tabla 4.9

Emacs: comandos para revisar ortografa


Enlace

Operacin
Activa el modo Flysp

ell que resalta todas las pa


Mx yspell mode
labras incorrectas.
Revisa y corrige err
ores ortogr cos en la palabra
M$
en el punto.
Contina en la siguiente pgina

74
Edicin

Contina de la pgina anterior


Enlace

Operacin
Completa la palabra ant

es del punto basado en una


MTab
ortografa del diccionari
o.
Mx ispell
regin o buffer activo.
Mx ispellbuffer
ffer.
Mx ispellregion
gin.
4.3.18.

Revisa la ortografa en la
Revisa la ortografa en el bu
Revisa la ortografa de la re

Extendiendo Emacs

Dado que Emacs es y ha sido utilizado por miles de programador


es a lo largo de varias
dcadas, la manera ms sencilla de extenderlo es investigar si esa ext
ensin deseada no fue
ya implementada por alguien ms. Utiliza un buscador de web para loc
alizar extensiones.
Una vez localizada la extensin o paquete, debemos decidir entre
realizar una instala
cin global (para todos los usuarios del sistema) o una instalacin pe
rsonal. Si este equipo
es utilizado por mucha gente, conviene hacerlo de manera global, p
ero despus, cuando
actualices tu sistema operativo, debes repetir todo el procedimien
to. En general, es ms
fcil y recomendable instalar extensiones a Emacs de manera personal
y aqu te mostramos
cmo hacerlo.
Preparatorios
Los siguientes pasos te servirn para instalar cualquier program
a para extender Emacs,
por lo que es importante realizarlos de una vez.
i. Crea el directorio /elisp (puedes usar otro nombre, pero ento
nces recuerda cambiar
elisp por el nombre que elegiste ms adelante).
La variable
ii. En tu /.emacs ahora agrega este directorio a la ruta de bsqued
a de Emacs. Esta
load path
ruta se parece mucho a la variable de ambiente PATH de Unix
y, en realidad, tienen
una funcin similar:
( addto l i s t loadpath ( expandf i l e name " / e l i
p / " ) )
y listo: a partir de ahora, cada vez que entres a Emacs, ste sabr qu
e todos los programas
(archivos que tienen extensiones .el o .elc dentro de el directori
o elisp son extensiones.

Instalando paquetes en 1, 2, 3
Aunque el procedimiento para instalar paquetes vara grandemente
de uno a otro, en
general tienes que seguir los siguientes pasos:

4.3 Emacs
75
1. Localizar el archivo y descargarlo de la red. Si est comprimido
, tienes que expan
dirlo.
2. Copiarlo o moverlo a tu directorio /elisp. Si es un archivo con
extensin .el, pasa
al siguiente paso; si es un directorio, tienes que agregar el
directorio a la ruta de
bsqueda. Por ejemplo, si el directorio se llama foo, agregas es
to a tu /.emacs:
% (add to list load path (expand le name "/elisp/foo"))
Usualmente cuando el paquete viene en un directorio, incluye i
nstrucciones espe
ciales para instalacin. Generalmente incluyen un archivo README
o INSTALL
con instrucciones. En estos casos puedes revisar el procedimie
nto explicado en el
Anexo B para instalar programas paso a paso.
3. Despus tienes que leer el archivo principal del paquete y copia
r las lneas de inicia
cin a tu /.emacs. Generalmente tienen la forma: (require foo), do
nde foo es el
nombre del archivo con extensin .el.
En los siguientes captulos de este libro utilizaremos este procedi
miento para instalar
algunas extensiones importantes de Emacs. A manera de ejemplo, sin e
mbargo, a continua
cin agregaremos una extensin muy sencilla para modi car los colores de E
macs.
Poniendo color a tu vida
Dependiendo del tipo de archivos que editas, Emacs reconoce dist
intas unidades sin
tcticas de esos archivos. Por ejemplo, cuando programas reconoce pala
bras reservadas,
cadenas, etc. Para activar los colores de manera global agrega lo si
guiente a /.emacs:
( r e q u i r e f o n t l o c k )
( addhook f o n t l o c k modehook t u r n onf a s t l o c k )
( g l o b a l f o n t l o c k mode 1 )
Qu puedes hacer si no te gustan los colores de Emacs? La respuesta
sencilla sera
cambiarlos. Por desgracia, la cantidad de variables que controlan lo
s colores en Emacs es
muy grande, por lo que esta tarea sera muy complicada.
Afortunadamente hay alternativas; por ejemplo, podemos instalar l
a extensin de Emacs,
color theme, que puedes obtener de la siguiente direccin:
http://download.gna.org/color theme/
Despus de instalar y compilar el programa, agrega esto a tu /.emacs:
( addto l i s t loadpath ( expandf i l e name "  / e l i s p / c
o l o r theme " ) )
( r e q u i r e c o l o r theme )
( c o l o r theme i n i t i a l i z e )

Ahora puedes ejecutar el comando Mx color theme select y color theme


crear un
nuevo buffer con una lista de los temas disponibles para darle color
y vida a tu Emacs.

76
Edicin
Puedes recorrer la lista y con Enter puedes seleccionar el tema en la lnea a
ctual. Cuando
seleccionas un tema, inmediatamente Emacs ajustar todos los colores.
Recorre la lista y selecciona el tema que ms te guste y, una vez que ten
gas tu favo
rito, agrega el comando que lo activa a tu /.emacs; as, cada vez que regreses
, Emacs
recordar tu tema predilecto. Por ejemplo:
( c o l o r themec h a r c o a l b l a c k )

Internet
5
5.1. Redes de computadoras
La palabra red, cuando se habla de computadoras, hace referencia a dos o
ms com
putadoras conectadas entre s. Las computadoras se conectan en red con el pro
psito de
compartir recursos.
Cuando las computadoras estn conectadas directamente (usando algn tipo de
cable),
el sistema se denomina red de rea local o LANa (por su nombre en ingls Local
Area
Network). Una LAN tpica se encuentra en un solo edi cio o en algunas ocasiones
en el
mismo piso. Sin embargo, la conectividad no tiene por qu terminar en una red
local. Varias
LAN estn conectadas a otras redes, formando lo que se denomina Red de rea Amp
lia o
WAN (Wide Area Network).
En varias organizaciones las computadoras estn conectadas entre s por red
es de rea
local. En ocasiones, estas LAN estn conectadas con un enlace de alta velocid
ad (deno
minado soporte principal o backbone) que rene a las LAN pequeas para formar u
na red
de rea amplia. Las organizaciones grandes, con muchos departamentos, pueden
tener ms
de un soporte principal. Esto signi ca, entre otras cosas, que es posible env
iar un correo
electrnico desde cualquier computadora dentro de la organizacin hacia cualqui
er otra
computadora (siempre y cuando estn conectadas por la red). De hecho, enviar
un mensa
je que atraviese todo el pas puede ser tan sencillo como enviar un mensaje h
acia el otro
extremo de un corredor.

78
Internet
5.1.1.

Relacin cliente servidor

En trminos propios de una red, cualquier programa que ofrezca un re


curso recibe el
nombre de servidor. Un programa que usa un recurso es un cliente.
Si un programa proporciona acceso a los archivos en una red, recib
e el nombre de
servidor de archivos; un programa que coordina la impresin de los datos
usando varias
impresoras se denomina servidor de impresin; en general, cualquier prog
rama que ofrece
un servicio y recibe solicitudes para el mismo recibe el nombre de ser
vidor1 .
Las redes de muchas organizaciones estn conectadas a redes regional
es y naciona
les muy grandes. Dentro de estos sistemas, ciertas computadoras, denom
inadas puertas o
puentes (gateway), actan como enlaces entre la red y el mundo exterior.
En todo el mundo las redes de rea amplia ms importantes estn conectad
as a un sis
tema conocido como Internet. Toda computadora en Internet puede conect
arse a cualquier
computadora que tambin se encuentre en Internet.
La mayora de los pases tienen redes nacionales grandes que estn conec
tadas a Inter
net mediante puertas. Con e ciencia, este sistema enlaza cientos de mile
s de computadoras,
formando una red mundial enorme. Esto signi ca que uno puede, con poco e
sfuerzo, enviar
correo electrnico y archivos de datos a todo el mundo. Existen incluso
puertas para redes
de cmputo comerciales. Por ejemplo, tambin se pueden intercambiar mensaj
es con per
sonas que usen Amrica Online, CompuServe, MCI, Mail, Delphi, Prodigy, A
T&T Mail,
entre otros prestadores de servicios.
Cuando una computadora da el servicio de servidor y permite, a su
vez, trabajo en ella,
a esta computadora se le conoce como an trin (host).
Son expertos los que con guran y administran las conexiones de red d
escritas ante
riormente. Estas conexiones, por lo general, usan cables o lneas telefni
cas rentadas. Las
conexiones a gran escala usan enlaces va satlite. Sin embargo, puede usa
rse una lnea
telefnica comn y hacer que una computadora llame por telfono directamente
a la com
putadora an trin o a un ruteador (router), establecindose la conexin. En trm
inos tcni
cos, la conversin de seales de computadora a seales telefnicas se llama mo
dulacin. El
proceso inverso se denomina demodulacin. Por tal motivo, el dispositivo
que se requiere
para conectarse a una computadora se llama mdem (modulador/demodulador)
.
Ahora bien, recuerda que la nica manera de trabajar con una computa

dora an trin
UNIX es mediante una terminal. Como la computadora que se tiene en cas
a no es una
terminal, el programa de comunicaciones que se utilice debe hacer que
la computadora
casera acte como una terminal. Se dice entonces que el programa est emul
ando una
terminal. Los sistemas UNIX pueden trabajar con muchas marcas y tipos
de terminales,
pero existe una que por costumbre es la que se emula cuando se trabaja
con una lnea
telefnica. Se trata de la terminal tipo VT100.
1
En ocasiones el nombre servidor se emplea para referirse a una c
omputadora y no a un programa.

5.1 Redes de computadoras


79
5.1.2.

TCP/IP

Internet es una coleccin de redes en todo el mundo que contiene


muchos tipos de
sistemas. Algo debe mantenerlos unidos. Ese algo es TCP/IP.
Los detalles de TCP/IP son altamente tcnicos y superan las expec
tativas de este mate
rial. Sin embargo, hablaremos de manera general sobre el tema.
TCP/IP es un nombre comn que se aplica a una coleccin de ms de cie
n protocolos
(un protocolo es un conjunto de reglas que permiten que diferentes mq
uinas y progra
mas se coordinen entre s). Los protocolos TCP/IP derivan de dos proto
colos bsicos: TCP
que es acrnimo de Transmition Control Protocol e IP que es acrnimo de
Internet Pro
tocol. En esencia, estos protocolos se utilizan en Internet (y en ot
ras redes) para conectar
computadoras, equipo de comunicaciones y programas. Cabe mencionar q
ue no todas las
computadoras en Internet ejecutan UNIX, pero lo que es seguro es que
todas usan TCP/IP.
Dentro de un sistema TCP/IP, los datos transmitidos se dividen
en pequeos paquetes.
Cada paquete contiene el domicilio de la computadora del receptor ju
nto con un nmero
de secuencia. Por ejemplo, el sistema puede dividir un mensaje en di
ez paquetes, cada uno
con su propio nmero de secuencia. Estos paquetes se envan por la red y
cada uno se
transporta individualmente hacia su destino. Cuando se han recibido
todos los paquetes,
el sistema destino usa los nmeros de secuencia para juntarlos. Si por
alguna razn uno
de dichos paquetes llega en mal estado, el sistema destino transmite
un mensaje al emisor
sealndole que debe volver a enviar determinado paquete.
Tiene varias ventajas dividir los datos en paquetes:
Las lneas de comunicacin se pueden compartir entre varios usua
rios.
Se pueden transmitir al mismo tiempo distintos tipos de paqu
etes, ya que se ordena
rn y combinarn hasta que lleguen a su destino.
Los datos no tienen que enviarse directamente entre dos comp
utadoras.
Cada paquete pasa de computadora en computadora hasta llegar
a su destino.
Rapidez, ya que slo se necesitan unos segundos para enviar un
archivo de gran
tamao de una mquina a otra, aunque estn separadas por miles de
kilmetros y
pese a que los datos tienen que pasar por mltiples computador
as. De esta forma,
si al enviar los paquetes algo sale mal con al menos uno de
ellos, slo es necesario
volver a transmitir ese paquete y no todo el mensaje.
Los paquetes no necesitan seguir la misma trayectoria.

La red puede llevar cada paquete de un lugar a otro y usar l


a conexin ms idnea que
se encuentre disponible en ese preciso momento. Esto implica
que no necesariamente
los paquetes deben viajar por la misma ruta y por supuesto,
tampoco tienen que llegar
todos al mismo tiempo a su destino.
El proceso que TCP sigue cuando se enva un mensaje es el sigu
iente:
i. TCP divide los datos en paquetes.

80
Internet
ii. Ordena stos en secuencia.
iii. Agrega cierta informacin para el control de errores.
iv. Y despus los distribuye.
El proceso en el otro extremo es:
i. TCP recibe los paquetes.
ii. Veri ca si hay errores.
iii. Y los vuelve a combinar para convertirlo en los datos origina
les.
iv. Si existe algn error, el programa TCP destino enva un mensaje so
licitando que
se vuelvan a enviar determinados paquetes.
La tarea de IP es llevar los datos a granel (es decir, los paquetes),
de un sitio a otro. Las
computadoras que encuentran las vas para llevar los datos de una red a otra
, ruteadores,
utilizan IP para trasladar los datos.
Si el usuario est interesado en ver la ruta que va desde su computadora
hasta otra,
puede usarse el comando traceroute. El problema es que este comando no se
encuentra
disponible en todos los sistemas. El comando se usa de la siguiente manera
:
% traceroute computadora

5.2. Web
Internet, como ya mencionamos, es una coleccin mundial de redes que tra
nsmiten da
tos usando el protocolo IP. Ahora la pregunta a resolver es qu se puede hace
r en Internet?
Son siete los servicios principales que Internet puede ofrecer:
Correo: Se pueden enviar y recibir mensajes.
Transferencia de archivos: Se pueden copiar archivos de una computadora a
otra.
Entrar a un sistema remoto: Podemos entrar a otra computadora y trabajar e
n ella como
si nuestra terminal estuviera conectada directamente a ella.
Grupos de inters (Usenet): Se pueden leer y escribir artculos en los miles d
e grupos
de inters de Usenet (tambin llamados foros).
Software compartido: Podemos obtener copias gratuitas de cualquier tipo de
software y
nosotros mismos podemos compartir nuestros programas con otras person
as.
Acceso a informacin: Se puede buscar y recuperar cualquier tipo de informac
in. Si no
se est seguro de dnde buscar, existen programas especiales que nos pued
en ayudar.
Comunicacin con otras personas: Se puede sostener una conversacin con otras
perso
nas usando el teclado y la pantalla (puede ser una sola persona o incl
uso un grupo).

5.3 Redes y direcciones


81
5.3. Redes y direcciones
Una vez que se nos asigna una cuenta UNIX, podemos comunicarnos
con todos los
integrantes de la comunidad UNIX y transferir datos a todo el mundo
. Lo nico que se
necesita es un domicilio y saber usar los programas en red.
5.3.1.

Domicilios estndar en Internet

La clave para poder usar el Internet consiste en entender qu son


los domicilios o correo
electrnico. Lo ms asombroso del esquema de los domicilios en Internet
es que cada
identi cador de usuario y cada computadora necesitan un solo domicili
o, sin importar el
servicio que utilicen.
Un domicilio en Internet consta de un identi cador de usuario, se
guido por el signo
@ y despus el nombre de la computadora (compuesto por el mismo nombr
e de la com
putadora y el de su dominio). De tal forma que el dominio estndar de
Internet luce as:
identi cador@computadora.dominio. Por ejemplo, el correo electrnico de
nuestro usuario
es Juan.Perez@ciencias.unam.mx.
En este ejemplo, el identi cador de usuario es Juan.Perez y el do
minio (el nombre o
domicilio de la computadora) es ciencias.unam.mx.
Las partes del dominio que estn separadas por puntos se llaman s
ubdominios. El domi
cilio anterior tienen tres subdominios: ciencias.unam.mx. El subdom
inio ms a la derecha
(en este caso, mx) se denomina dominio de jerarqua superior.
Para leer un domicilio, se examinan los dominios de derecha a i
zquierda. As vamos del
nombre ms general al ms particular2 .
5.3.2.

Nomenclatura antigua e internacional

Existen dos tipos de dominios de jerarqua superior: en nomenclatu


ra antigua y en no
menclatura internacional moderna. El formato antiguo se emplea prin
cipalmente en Esta
dos Unidos y Canad y consiste en siete dominios de jerarqua superior,
que son:

2
Nota: los domicilios de Internet no son sensibles a maysculas
y minsculas, por lo que es lo mismo
teclear una direccin con letras maysculas o con letras minsculas o con
una mezcla de ambas. Aunque es

una buena costumbre teclear cualquier direccin slo en minsculas.

82
Internet
Tabla 5.1

Dominios de jerarqua superior


Dominio
com
edu
gov
int
mil
net
org

Signi cado
Organizacin comercial
Institucin educativa
Institucin gubernamental
Organizacin internacional
Ejrcito
Organizacin de redes
Organizacin no lucrativa

Este tipo de domicilio se desarroll para la antigua red Arpanet,


ancestro de Internet, y
se dise slo para usarse en Estados Unidos.
Cuando Internet se expandi, fue claro que se necesitaba un mejor
sistema. La solucin
consisti en usar dominios de jerarqua superior que representaban a pas
es. Para la mayora
de los pases, el dominio de jerarqua superior es la abreviatura inter
nacional de dos letras.
Fuera de los Estados Unidos, virtualmente todos los sitios enla
zados con Internet usan la
nomenclatura de domicilios internacional moderna, donde el dominio
de jerarqua superior
muestra el cdigo del pas. Dentro de los Estados Unidos (y parte de Ca
nad), la mayora de
las computadoras en Internet an utilizan la antigua nomenclatura de
domicilios; es decir
el estilo con los dominios de jerarqua superior.
5.4. WWW
WWW signi ca World Wide Web o simplemente web. Es un proyecto des
arrollado por
Tim Berners. El web es una coleccin de documentos interconectados en
todo el mundo.
Los documentos en el web son usualmente conocidos como pginas we
b y poseen hi
pervnculos que enlazan una porcin de texto o una imagen a otro docume
nto, normalmente
relacionado con el texto o la imagen.
Para acceder al web debes utilizar un navegador (browser). El n
avegador lee documen
tos dispuestos en el web y puede buscar documentos de otras fuentes
. La informacin es
provista por los servidores de hipertexto de los cuales se pueden o
btener los documentos.
Los navegadores pueden tambin acceder a archivos va FTP, NNTP, y
otros protocolos
vlidos para Internet. Tambin permiten bsquedas en documentos y bases d
e datos. Los
documentos que los navegadores despliegan son documentos de hiperte
xto. El trmino hi
pertexto se de ne como texto con apuntadores a otros textos. Los nave
gadores tratan con
los apuntadores de manera transparente. La ventaja del hipertexto e
s que en un documento

5.4 WWW
83
en hipertexto, si quieres ms informacin acerca de un tema en particular
que fue mencio
nado, usualmente puedes hacer click sobre el tema para leer con ms det
alle. De hecho, los
documentos pueden estar ligados a otros documentos de autores complet
amente diferen
tes, mucho como las referencias al pie de pgina, pero puedes sumergirt
e en ella de forma
instantnea.
El trmino hipermedia es un super conjunto de hipertexto; esto es,
cualquier medio con
apuntadores a otro medio. Esto signi ca que los navegadores pueden desp
legar no slo
archivos de texto, sino imgenes, sonidos o animaciones.
Existen diferentes sitios donde todos los usuarios pueden encontr
ar todo tipo de infor
macin y hacer bsquedas en la red. Por ejemplo:
Google: www.google.com
Yahoo: www.yahoo.com
5.4.1.

URL: especi cacin de objetos en Internet


URL signi ca Uniform Resource Locator. Es un estndar para especi car u

n objeto en
Internet, tal como el nombre de un archivo. Los URL se ven como los q
ue ac siguen:
ftp://ftp.fciencias.unam.mx/pub/cursos/677/tarea.txt
http://www.fciencias.unam.mx/admin/directorio.html
La primera parte del URL, antes de los dos puntos, especi ca el mtod
o de acceso. La
parte del URL despus de las dos diagonales indica el nombre de la mquin
a y cada diago
nal separa la ubicacin del archivo dentro de dicha mquina; en el caso d
el primer ejemplo
mencionado anteriormente se lee como: dentro de la mquina ftp.fciencia
s.unam.mx, uti
lizando el protocolo FTP, en la ruta pub/cursos/677 encontrars el arch
ivo tarea.txt.
El mtodo de acceso http es acrnimo de HiperText Transfer Protocol y
es el mtodo
de acceso ms comn, por lo que si no aparece un mtodo de acceso explcitame
nte, la
mayora de los sistemas suponen que se trata de http.
5.4.2.

Navegadores

El primer navegador fue desarrollado por Tim Berners Lee en el CE


RN a nales de
1990 y principios de 1991. Despus surgi el navegador Mosaic, que funcio
naba inicial
mente en plataformas UNIX sobre X11; fue el primero que se extendi deb
ido a las versio
nes para Windows y Macintosh que haba. Despus entr al mercado Netscape N
avigator,
el cual super en capacidades y velocidad a Mosaic. Este navegador tien

e la ventaja de
funcionar en casi todos los UNIX, as como en ambientes Windows.
Microsoft poco despus sac el navegador Internet Explorer, desbancan
do as a Nets
cape Navigator. En aos recientes Netscape Communications Corporation l
iber el cdigo

84
Internet
fuente de su navegador y de esta manera naci el proyecto Mozilla. Sin embarg
o ste fue
reescrito desde cero tras decidirse a desarrollar y usar como base un nuevo
conjunto de
herramientas multiplataforma basado en XML llamado XUL.
A nales de 2004 apareci en el mercado Firefox, una rama de desarrollo de M
ozilla
que pretende hacerse con parte del mercado de Internet Explorer. Se trata d
e un navegador
ms ligero que Mozilla.
La comunicacin entre el servidor web y el navegador se realiza mediante
el protocolo
HTTP. Su funcin principal es mostrar documentos HTML en pantalla. En la actu
alidad,
no solamente se descargan este tipo de documentos sino tambin documentos con
im
genes, sonidos e incluso videos en diferentes formatos. Adems, permiten alma
cenar la
informacin en el disco o crear marcadores (bookmarks) de las pginas ms visitad
as.
Algunos de los navegadores web ms populares se incluyen en lo que se den
omina una
Suite. Estas Suites disponen de varios programas integrados para leer notic
ias de Usenet y
correo electrnico mediante los protocolos NNTP, IMAP y POP.
Actualmente existen diferentes navegadores y todos cumplen con el mismo
objetivo:
permitir al usuario recuperar y visualizar documentos de hipertexto, comnmen
te descritos
en HTML, desde servidores web de todo el mundo a travs de Internet. Algunos
de los ms
utilizados en el mundo Linux son:
Firefox: http://www.mozilla.com
Opera: http://www.opera.com/
Konqueror (integrado con KDE)
Galeon (integrado con Gnome)

Navegadores web basados en texto:


Lynx: http://lynx.browser.org/
w3m: http://w3m.sourceforge.net/
Ya hemos utilizado Konqueror con anterioridad, pero lo hicimos para
orrer el sistema
de archivos; ahora lo utilizaremos adems para navegar el web.
Konqueror te da la oportunidad de teclear un URL directamente en el
po location
(o en la ventana de dialogo de URL File|Open|Location). Al usar el URL,
scape traer
la pgina especi cada tal como si hubieses hecho click en la liga. Nota
etiqueta en
el campo location expresa la ubicacin despus de que trae la pgina, o
editas el

rec
cam
Net
que la
Go to si

campo.

5.4 WWW
85
Actividad 5.1
(a) Abre un navegador y visita la pgina de la Facultad de Ciencias
de la U.N.A.M.
ubicada en http://www.fciencias.unam.mx
(b) Localiza los servicios en lnea para estudiantes.
5.4.3.

Google
Google es una compaa cuyo principal producto es el motor de bsqueda

del mismo
nombre. Fue fundada el 27 de septiembre de 1998 por dos estudiantes
de doctorado de la
Universidad de Stanford, Larry Page y Sergey Brin. Aunque su princi
pal producto es el
buscador, la empresa tambin cuenta con otros servicios: un comparado
r de precios lla
mado Froogle, un motor de bsqueda para material almacenado en discos
locales llamado
Google Desktop Search y un servicio de correo electrnico gratuito ll
amado Gmail, que ha
revolucionado los sistemas de correo electrnico en el web.
A continuacin se listan algunos de los servicios que ofrece Googl
e actualmente:
Tabla 5.2

Servicios comunes de Google


Buscadores
Imgenes
Grupos
Directorio
Noticias

5.4.4.

Servicios
Gmail
Video
Maps
Calendar
Earth
Talk
Books

Wikipedia

La wikipedia es una enciclopedia gratuita a la cual todos los u


suarios de Internet te
nemos acceso. Est escrita por todos aquellos voluntarios que quieran
colaborar con sus
conocimientos y exponerlos en este medio. Actualmente existe mucha
gente que va mejo
rando la wikipedia, con cientos de ediciones por hora, que son regi
stradas espec camente
en el historial y generalmente en los cambios recientes del sitio.
Si alguna persona expone
sus ideas en forma inapropiada o simplemente escribe disparates, la
s personas encargadas
del contenido del sitio lo veri can y descartan este tipo de informac
in.
La wikipedia se encuentra disponible en varios idiomas, con dis
tintos niveles de avance,
ya que la traduccin de artculos y entradas de la enciclopedia la real
izan voluntarios. Entre

86
Internet
otros idiomas encontramos ingls (el de mayor cobertura), espaol, fran
cs y alemn.
La carcterstica principal de la wikipedia es la posibilidad de ed
itar los artculos de la
enciclopedia. En general, a los sitios web que permiten la edicin (e
n lnea y sin mayores
restricciones) de su contenido se les conoce como wikis.
El objetivo de la wikipedia es almacenar artculos sobre temas co
nsiderados enciclop
dicos; sin embargo dentro de sta puedes encontrar otros proyectos de
contenido diverso,
como:
Tabla 5.3 Otros servicios de la Wikipedia
Servicio
Wikinoticias
Wikiversidad
Wikilibros
Wikisource
Wikiquote
Meta Wiki
Wikiespecies

Descripcin
El noticiario libre
La universidad libre
La casa editorial libre
La biblioteca libre
Citas y frases famosas
Coordinacin de proyectos
Directorio de especies

Cada uno de estos sitios se rigen bajo la misma losofa, permitirl


e a los usuarios que
as lo deseen, colaborar con la ampliacin del contenido del mismo, par
a de esta forma
ampliar cada uno de estos proyectos en el web de manera gratuita. L
os temas ah descritos
son textos originales de dominio pblico.

5.5. Los programas de correo de Unix


Como ya habamos mencionado, Unix viene con un sistema de correo
incorporado. La
parte ms importante de este sistema es su interfaz de usuario, es de
cir el programa que se
utiliza para enviar y leer correo.
Originalmente haba en todo sistema Unix un programa sencillo lla
mado mail. Era ade
cuado aunque con limitaciones. Despus fue reemplazado por mailx y Ma
il, que en realidad
son bastante similares entre s.
Existen otros ms como pine, elm, mush, rmail, y algo que tienen
en comn estos sis
temas es que extienden de gran forma la funcionalidad de mail, ofre
ciendo carctersticas
adicionales. Sin embargo nosotros veremos VM como lector de correo.

5.6 Netiquete
87
5.6. Netiquete
La palabra netiquete se deriva de dos raices, Net, que signi c
a red y etiquete que se
re ere az las reglas de etiqueta para comportarse en un cierto mbit
o, por lo que el trmino
se re ere a la etiqueta que debemos seguir cuando usemos la red, e
s decir, son ciertas
reglas (de etiqueta) que sera deseable seguir cuando estemos util
izando cualquier forma
de comunicacin a travs de la red. Estas reglas no son obligatorias
pero si deseables. En
resumen Netiquete se re ere a la forma adecuada de comportarse en
Internet.
Antes de entrar en materia, es esencial que cada usuario en
la red reconozca su res
ponsabilidad, al tener acceso a servicios, sitios, sistemas vast
os y personas, pues es ste el
responsable por sus acciones al acceder a servicios de la red.
Internet, o la red, no es una simple red; es ms que eso: un grupo
de miles de
redes individuales que han escogido permitir pasar tr co entre ella
s. El tr co enviado a
Internet puede atravesar varias redes diferentes antes de llegar
a su destino. Por eso, los
usuarios involucrados en estas redes interconectadas deben de es
tar informados de la carga
que imponen en otras redes participantes.
Como un usuario de la red, se te permite acceder a otras red
es (y/o los sistemas de
computadora unidos a esas redes). Cada red o sistema tiene su pr
opio grupo de polticas
y procedimientos. Acciones que estn rutinariamente permitidas en
una red pueden estar
controladas, o igualmente prohibidas en otra red. Es responsabil
idad de los usuarios regirse
por las polticas y procedimientos de estas otras redes. Recuerda,
el hecho que un usuario
pueda ejecutar una accin particular no implica que deba tomar tal acc
in.
El uso de la red es un privilegio, no un derecho, que puede
temporalmente ser revocado
en cualquier momento, por conducta abusiva. Tal conducta incluira
el poner informacin
ilegal en un sistema; el uso abusivo o de, por otra parte, lengu
aje inaceptable tanto en
mensajes pblicos o privados; el envo de mensajes que den como resu
ltado la prdida de
trabajo del destinatario o de sus sistemas; el envo de artas caden
a"; o la "transmisin"de
mensajes a listas o individuos y cualesquiera otros tipos de uso
que causen congestin de
la red o que inter eran con el trabajo de otros.
5.6.1.

Algunos puntos del netiquete para comunicacin electrnica

stas son algunas de las reglas que todo usuario de Internet debera
cumplir:
El volumen y mantenimiento del buzn electrnico de un usuario
es responsabilidad
del propio usuario.
Cuando cites a otra persona, borra cualquier cosa que no s
ea directamente aplicable
a tu respuesta. No permitas que tu email o software de Use
net cite automticamente
todo el cuerpo de los mensajes que se responden cuando no
sea necesario. Tmate el

88
Internet
tiempo de editar lo citado a un mnimo como para proveer contexto a
la respuesta. A
nadie le gusta leer un mensaje largo citado tres o cuatro veces,
slo para ser seguido
por una lnea de respuesta como: "S, yo tambin".
Usa palabras en mayscula slo para destacar un punto importante o di
stinguir un
ttulo o cabecera. El usar palabras en mayscula que no sean ttulos su
ele ser consi
derado como GRITOS.
Nunca mandes cartas cadena por Internet. El hacerlo puede causarte
la prdida de
tu acceso a Internet.
S cuidadoso cuando uses sarcasmo y humor. Sin comunicaciones cara
a cara tu chis
te puede verse como una crtica. Cuando trates de ser gracioso, usa
emoticons para
expresar humor. (Voltea tu cabeza hacia la izquierda para ver el
emoticon sonrisa: : )
= carita de humor feliz).
Recuerda que algunas listas de discusin y grupos Usenet tienen mie
mbros de mu
chos pases.
No des por hecho que ellos van a entender una referencia a un
programa de TV,
pelculas, cultura popular o hechos actuales de tu propio pas.
Si debes usar la
referencia, por favor explcala.
No des por hecho que ellos van a entender referencias geogr cas q
ue son lo
cales o nacionales.
Si alguien enva un comentario o pregunta fuera del tema de la list
a, no respondas a
la lista y no mantengas el tema de fuera de la lista en la conver
sacin pblica.

Los 10 mandamientos de tica para la computadora


1. No debers usar una computadora para daar a otras personas.
2. No debers interferir con el trabajo de computadora de otras person
as.
3.
4.
5.
6.
7.

No
No
No
No
No

debers
debers
debers
debers
debers

entrometerte en los archivos de otras personas.


usar una computadora para robar.
usar una computadora para dar falso testimonio.
usar o copiar software de manera que violes su licencia.
usar recursos de computadora de otras personas sin autor

izacin.
8. No debers apropiarte del trabajo intelectual de otras personas.
9. Debers pensar acerca de las consecuencias sociales del programa qu
e escribes.
10. Debers usar una computadora en formas en que muestres consideracin
y respeto.

5.7 KMail: lector de correo electrnico


89
5.7. KMail: lector de correo electrnico
5.7.1.

Introduccin

KMail es un cliente de correo electrnico dentro del ambiente


de escritorio de KDE y
$ smart
parte del sistema Kontact. Soporta carpetas, ltrado, visualizacin
de correo con HTML
install KMail
y carcteres internacionales. Permite enviar correo a travs de un
servidor de correo va
SMTP o Sendmail y recibir correo por los protocolos POP3 o IMAP
. Tambin tiene com
patibilidad para ltrar mensajes de correo a travs de antivirus o
antispam que se encuentren
instalados en el sistema. En la gura 5.1 puedes ver la pantalla
de KMail.
Figura 5.1

5.7.2.

Ventana principal de KMail

Utilizando KMail

Seguramente ya habrs utilizado algn otro lector de correo, per


o aqu te presentaremos
algunas de las ventajas que tiene KMail:

90
Internet
Filtros de mensajes.
Muchas veces se tienen problemas para ordenar los nuevos mensajes cuando ll
egan a
la bandeja de entrada. Los ltros te permiten realizar ciertas tareas automtic
amente
sobre los mensajes entrantes y llevar a cabo acciones manualmente sobre los
mensajes
seleccionados en una carpeta.
Los ltros constan de criterios de ltrado, cuyas reglas determinan si un ltro a
plica a
un mensaje; y una lista de acciones de ltro, que describe qu hacer con el men
saje.
Los ltros se consideran uno despus de otro, comenzando por el primero de la l
ista. El
primero en el que coincida el patrn de bsqueda ser ejecutado.
Patrones de bsqueda: Los criterios por los que un ltro puede buscar:
Mensaje. Busca en todo el mensaje (es decir cabeceras, cuerpo y adjuntos,
si los hay).
Cuerpo. Busca en el cuerpo del mensaje (es decir, todo el mensaje salvo l
as cabece
ras).
Cualquier cabecera. Busca en las cabeceras del mensaje.
Destinatarios. Busca en los campos Para y CC del encabezado del mensaje.
Tamao en bytes. Establece los lmites inferiores o superiores del tamao del m
en
saje.
Edad en das. Establece los lmites superiores o inferiores de la antigedad de
l men
saje.
Estado. De ne las restricciones al estado del mensaje.
Cualquier otro nombre. Busca el campo de la cabera indicado por ese nombr
e.
Acciones de ltrado.
El uso ms frecuente de los ltros es el de ordenar los mensajes entrantes en
diferentes
carpetas. Las posibles acciones son:
Mover a carpeta. Esto mover el mensaje a otra carpeta, eliminndolo de su ca
rpeta
actual si fuera necesario.
Copiar en carpeta. Copiar el mensaje en otra carpeta.
De nir identidad. De nir la identidad que se va a usar si respondes al mensaje
.
Marcar. Esto permite marcar los mensajes como ledo, importante, reenviado
o con
testado.
Enviar MDN falso. Enviar un mensaje de noti cacin de disposicin falso (es deci
r
un recibo de lectura) al remitente del mensaje.
De nir transporte. Esto establecer el mtodo de transporte (por ejemplo SMTP)
que se va a usar si respondes al mensaje.
De nir Responder. Modi car el campo Responder a de este mensaje. Esto es til
para la listas de correo.
Reenviar. Reenviar el mensaje en la lnea a otras direcciones de correo elec
trnico.
Redirigir. Redirigir el mensaje como si hubiera sido para otra direccin de
correo
electrnico.

5.7 KMail: lector de correo electrnico


91
Con rmar entrega. Intentar devolver un mensaje al remitente indic
ando que el men
saje ha sido entregado correctamente, si es que el remitente
lo solicit.
Ejecutar orden. Ejecutar un programa, pero no modi car el mensaje.
Aqu se pue
den introducir lneas de comando complejas, ya que KMail hace u
so de un intrprete
de comandos para ejecutarlas.
A travs de tubera. Esto enviar el mensaje a un programa.
Eliminar cabecera. Eliminar todos los campos de la cabecera del
mensaje que con
tengan el nombre dado.
Aadir cabecera. Se aadir un nuevo campo de cabecera con el nombre
dado y el
valor para el mensaje.
Reescribir cabecera. Buscar el campo de cabecera dado, modi car su
contenido
y lo volver a escribir. La cadena de bsqueda se interpretar como
una expresin
regular sensible a las maysculas.
Reproducir sonido. Reproducir el sonido especi cado.
Optimizacin de ltrado.
El orden de los ltros tiene un impacto sobre la velocidad del p
roceso de ltrado.
Algunas formas de mejorar el ltrado son:
Detn el proceso de ltros tan pronto como sea posible.
Considera el costo de la evaluacin de las reglas de ltrado.
Comprueba el orden de tus ltros.
Firmar y cifrar mensajes con PGP o GnuPG.
Para con gurar y usar el soporte PGP de KMail, es necesario tener
PGP instalado y
con gurado adecuadamente.
Asimismo, es necesario generar un par de claves (clave secreta y
clave pblica) para
su identidad. Puedes hacer esto con la lnea de comandos pgp kg o g
pg gen key
respectivamente.
Para una mejor explicacion de este tema puedes revisar la seccio
n 5.10.
Entre las opciones para rmar y cifrar mensajes se encuentran:
Firmar mensajes. Edita tu mensaje como de costumbre en la ventan
a del editor de
KMail. Antes de enviar el mensaje, marca el icono Firmar mensa
je en la barra de
herramientas de la ventana del editor. Luego, puedes enviar el
mensaje.
Cifrar mensajes. Para enviar un mensaje cifrado a alguien del qu
e tienes una clave
pblica, simplemente edita el mensaje en la ventana del editor.
Antes de enviar el
mensaje, selecciona Cifrar mensaje en la barra de herramientas
de la ventana del
editor. Luego enva el mensaje.
Enviar tu clave pblica. Elije en el men de la ventana del editor e
l submen Adjunt
>Adjuntar clave pblica. Esto adjuntar la clave pblica que hayas d

e nido para la
identidad de ese mensaje.
Recibir un mensaje cifra. Selecciona el mensaje y escribe tu fra
se de paso. Luego,

92
Internet
KMail intentar descifrar el mensaje y lo mostrar en texto plano si ha conse
guido
descifrarlo con tu clave pblica.
Recibir una clave pblica. Puedes recibir una clave pblica como un adjunto, o
va
http o ftp, para cifrar un mensaje al propietario de la clave. Luego pued
es aadir esta
clave junto con el resto de claves pblicas tecleando
pgp ka nombre_archivo
en la lnea de rdenes (usando PGP) o tecleando
gpg import nombre_archivo
en la lnea de rdenes (usando GnuPG).
Anti correo basura.
KMail usa herramientas externas y especializadas para el correo basura. Alg
unas de las
herramientas admitidas son:
Bogo lter. Bogo lter es un ltro que detecta spam en la fase inicial de entrenami
ento.
SpamAssassin. SpamAssassin es una herramienta que no necesita entrenamiento
y
depende principalmente de su con guracin.
Filtro de correo de GMX. Usa el contenido del campo de encabezado del mensa
je para
determinar si es o no correo basura.
Antivirus.
KMail usa herramientas externas y especializadas para la deteccin de virus d
entro de
correos. La deteccin de mensajes que contienen virus se realiza de niendo acci
ones a
travs de una herramienta dentro de un ltro especial. Otro ltro tiene las regla
s para
veri car los mensajes con virus detectados y acciones para marcarlos.
Seguridad.
Las opciones de seguridad relativas a la lectura de mensajes son:
Convertir HTML a texto plano.
Permitir a los mensajes cargar referencias externas desde Internet.
Disponer de las noti caciones de mensajes.
No enviar MDNs en respuesta a los mensajes cifrados.
Importar automticamente las claves y los certi cados.
Las opciones de validacin S/MIME son:
Validar certi cados usando CRL.
Validar certi cados en lnea (OCSP).
Validar URL del OCSP.
Validar rma del OCSP.
Ignorar la URL para el servicio de certi cados.
No comprobar las polticas de certi cados.
No consultar nunca una CRL.
Obtener certi cados de los emisores que no se tengan.
No realizar ninguna peticin HTTP.
Ignorar puntos de distribucin de certi cados de CRL por http.

5.8 FTP
93
Usar el proxy HTTP del sistema.
Usar proxy para peticiones http.
No realizar ninguna peticin LDAP.
Ignorar los puntos de distribucin de certi cados de CRL por LDAP.
Validar la mquina principal para las peticiones LDAP.
Groupware.
Hace posible almacenar las entradas de las aplicaciones de Kontact
(KOrganizer, KAd
dressBook y KNotes).
5.8. FTP
FTP (File Transfer Protocol) se utiliza para transferir archivos
entre dos computadoras,
generalmente conectadas va Internet. Cuando usas FTP, lo que realmente
ests usando
es un programa llamado cliente, que se conecta con otra computadora q
ue mantiene los
archivos, llamada servidor.
5.8.1.

Qu es un FTP annimo?

Muchos sistemas de computadoras a travs de Internet ofrecen archiv


os por medio de
FTP annimos. Esto signi ca que puedes acceder a una mquina sin necesidad
de tener
una cuenta en esa mquina (es decir no tienes que ser un usuario o cial d
el sistema). Estos
servidores FTP annimos contienen software, archivos para con gurar redes
, imgenes,
canciones y todo tipo de informacin. Los archivos para las listas de c
orreo electrnico con
frecuencia tambin estn almacenadas y todo est disponible a travs de un FT
P annimo.
Una enorme cantidad de informacin est almacenada en estas mquinas y est l
ista para
cualquiera que la necesite.
5.8.2.

Comandos para FTP

Puedes usar los siguientes comandos para trasladar archivos. Alg


unos comandos de
FTP son los mismos para distintas computadoras, pero otros no. Tambin,
algunos sitios de
FTP ofrecen distintos comandos, por eso es importante leer los archiv
os README en el
sitio. Usualmente FTP lista los comandos si tecleas help o (?). Tambin l
os comandos de
ayuda de la computadora pueden tener informacin acerca del FTP. Trata
con cualquiera de
los siguientes comandos: % man FTP, % man ftpd, % help ftp, % ftp /?,
% fftp ?, o % ftp
/h .
Algunos comandos disponibles en el sistema se muestran en la tabla 5.
4

94
Internet
Tabla 5.4

Algunos comandos disponibles en el sistema


Comando
ascii
binary
cd

Descripcin
Cambia a modo ascii.
Cambia a modo binario.
Cambia de directorio en la computadora remot

a.
dir
n la computadora re

Lista los archivos en el directorio actual e

ls

mota.
Es parecido a dir, pero a veces muestra meno

get

Copia un archivo de la computadora remota a

s informacin.
la tuya.
help
n el programa ftp.
lcd
s por local).
lpwd
putadora.
mget
ta a la tuya.
pwd
ra remota.

Brinda ayuda sobre el uso de los comandos co


Cambia de directorio en tu computadora (la l e
Muestra el directorio actual (pwd) en tu com
Copia varios archivos de la computadora remo
Muestra el directorio actual de la computado

Un FTP annimo es un servicio que ofrecen muchas mquinas en Interne


t. Esto permite
que t ingreses en la mquina con un nombre de usuario annimo o seas un
usuario con
nombre ftp.
Los archivos residen en discos y estn identi cados por un
nombre
, como
NETDISK, y el archivo que est en ese disco se identi ca como
NETDISK:[FAQ.INTERNET]FTP.FAQ.
Puedes cambiar de directorio tecleando:
% cd netdisk:[faq.internet]
% cd [faq.internet]
% cd faq
seguido de
% cd internet
Para acceso annimo, teclea
% ftp.simtel.net
usando como tu login anonymous y como password tu direccin de correo
.

5.9 SSH: Secure Shell


95
Muchos sistemas brindan informacin acerca de cmo usar el sistem
a cuando entras
a l. Usualmente los archivos estn agrupados en grupos de archivos.
Los formatos ms
comunes para preparar archivos para traslado o almacenamiento ms e
conmico son tar y
zip.
Actividad 5.2
i. Haz un ftp annimo a la mquina que sea el servidor.
ii. Ya en la mquina servidor busca y baja los archivos foo.tgz y
bar.tgz, que se encuen
tran dentro del servidor.
iii. Gurdalos en un directorio llamado cosas_foo y brelos.

5.9. SSH: Secure Shell


Secure Shell (SSH) es el reemplazo para rsh, rlogin, rcp y ft
p. Encripta todo el tr co
$ smart
y proporciona varios niveles de autenticacin dependiendo de las ne
cesidades. Entre las
install ssh
principales caractersticas de Secure Shell se encuentran accesos r
emotos seguros a otra
mquina sobre una red, ejecucin de comandos en una mquina remota, mov
er y copiar
archivos de una mquina a otra. Proporciona una autenticacin fuerte
y comunicaciones
seguras sobre canales inseguros. Adicionalmente, SSH proporciona
conexiones seguras de
X y direccionamiento seguro de conecciones TCP arbitrarias.
Hay dos versiones principales del protocolo Secure Shell: SSH
1 y SSH2. La versin
vieja SSH1 est siendo reemplazada por SSH2 para alcanzar una exibil
idad mejorada,
mejor escalabilidad para organizaciones con cientos de usuarios y
mejor seguridad. Ac
tualmente hay funciones que se pueden encontrar en SSH1 que estn s
iendo trasladadas a
SSH2.
SSH trabaja cambiando y veri cando informacin y usando llaves pbl
icas y privadas
para identi car servidores y usuarios. Despus proporciona cifrado pa
ra la comunicacin
subsecuente, tambin usando criptografa de llaves pblicas y privadas.
Cada sistema tie
ne su propio par de llaves pblicas y privadas que identi can a otros
sistemas. Una llave
pblica de un sistema cliente puede colocarse en un archivo del ser
vidor para permitir al
servidor la autenticacin del cliente por medio de un intercambio d
e llaves.
5.9.1.

Accediendo a sistemas remotos


Para establecer una conexin interactiva a un sistema remoto de

bes usar el comando


ssh. Supongamos que eres el usuario Juan.Perez en el cliente beta
.fciencias.unam.mx
y quieres conectarte a lambda.fciencias.unam.mx; debes de usar el
comando ssh y como
nico parmetro el nombre del sistema remoto.

96
Internet
%
%
%
%

beta# ssh lambda.fciencias.unam.mx


Juan.Perez@lambda.fciencias.unam.mxs password:
Authentication successful.
lambda#
Ahora, si el nombre de tu cuenta en el sistema remoto di ere del que
usas en el sistema
local (desde donde te ests conectando) debes agregar al parmetro tu nomb
re en el siste
ma remoto seguido de una @, como en tu direccin electrnica. Por ejemplo,
supn que
el nombre en el sistema remoto es Juan.Perez. As, para conectarse a lam
bda como el
usuario Juan.Perez debemos usar:
%
beta# ssh Juan.Perez@lambda.fciencias.unam.mx
% Juan.Perez@lambda.fciencias.unam.mxs password:
% Authentication successful.
% lambda#
La sintaxis simpli cada para conexiones remotas con ssh es:
ssh [opciones] [usuario@]sistema_remoto
Actividad 5.3 Inicia una sesin remota en la mquina que tengas a tu lado
usando tu
mismo nombre de usuario.
Actividad 5.4 Inicia una sesin remota en el.servidor.temporal como el u
suario
guest.
5.9.2.

Copiando archivos entre sistemas

Puedes copiar archivos del sistema local a una mquina remota o vice
versa, o an entre
dos sistemas remotos usando el comando scp. Para especi car un archivo e
n un sistema
remoto simplemente hay que agregar como pre jo el nombre del sistema rem
oto seguido
de dos puntos (:).
La sintaxis simpli cada para copiar archivos a sistemas remotos de f
orma segura con
scp es:
scp [[usuario@]sistema_orig:]archivo [[usuario@]sistema_dest:]arch
ivo_o_dir
Si no tecleas el nombre del archivo donde se copiar o no especi cas u
n directorio,
se usar el nombre del origen. Una forma sencilla de obtener una copia d
e un archivo
remoto en el directorio actual es usando un punto como destino; por ej
emplo, para copiar
el archivo hola de la mquina beta al directorio donde estamos actualmen
te y usando el
mismo nombre de usuario, hacemos lo siguiente:

5.10 PGP: Pretty Good Privacy


97
% omega# scp @beta:hola .
foos password:
hola | 154B | 0.0 kB/s | TOC: 00:00:03 | 100
omega# ls
hola
Para copiar el archivo hola Mundo del usuario ivanx en la mquina
lambda al usuario
kar en la mquina beta usamos:
% kappa# scp ivanx@lambda:holaMundo kar@beta:
ivanx@lambdas password:
kar@betas password:
holaMundo | 34B | 0.0 kB/s | TOC: 00:00:01 | 100
Nota que la copia fue en dos mquinas remotas, pues la mquina local
es kappa.
Para copiar un directorio completo, tenemos que usar la bandera r
; por ejemplo, si
quiero copiar el directorio tarea1, tecleo:
% omega# scp r @beta:tarea1 .
ivanxs password:
Actividad 5.5
Copia un archivo de la mquina local a una mquina remota como el m
ismo usuario
y despus como un usuario diferente.
Copia un archivo de una mquina remota a la mquina local como el m
ismo usuario
y despus como un usuario diferente.
Copia un archivo entre dos mquinas remotas.
Copia un directorio entre cualesquiera dos mquinas.

5.10. PGP: Pretty Good Privacy


PGP (Pretty Good Privacy) es un sistema de autenticacin y cifrad
o basado en una
tecnologa llamada criptografa de llave pblica, escrito por Philip Zimm
ermann en 1991;
permite que nadie, excepto uno mismo y el destinatario o destinatar
ios a los que vaya
dirigido, pueda leer el mensaje, gracias a que los stos estn codi cados
. Asimismo puede
usarse para comprobar la autenticidad del mensaje asegurndonos que e
n verdad lo ha
escrito el remitente.
Tambin se utiliza para enviar archivos a travs de correo electrnic
o codi cados en
formato ASCII; resulta mucho mejor que otros sistemas como el uuenc
ode, ya que PGP
realiza una compresin zip al documento que va a codi car.

98
Internet
5.10.1.

Funcionamiento de PGP

El funcionamiento de PGP es muy sencillo: cada usuario tiene dos l


laves una pblica y
otra privada; la pblica es la que distribuyes a la gente y sirve para q
ue ellos puedan enviarte
un mensaje codi cado que slo t, mediante tu llave privada, podrs descifrar;
tambin
puede servir para rmar un mensaje poniendo una parte de tu llave privad
a (irreconocible
claro) dentro de una rma. Esto es como un certi cado de autenticidad, ya
que al recibir el
mensaje, PGP comprueba la rma y texto y lo compara con la llave pblica q
ue tenemos
del remitente, dando un error si se ha cambiado algo en el texto o la r
ma no corresponde
a la persona que nos enva el mensaje.
El cifrado de PGP utiliza la criptografa de llave pblica e incluye u
n sistema que asocia
las llaves pblicas con cada uno de los usuarios. El cifrado de correo e
lectrnico a travs de
PGP utiliza algoritmos de cifrado de llaves asimtricas: el remitente ut
iliza la llave pblica
del destinatario para cifrar una llave compartida; esta llave comparti
da se usa para cifrar
el mensaje; despus el destinatario que recibe el correo cifrado lo dese
ncripta (o descifra)
usando su llave privada.
Una estrategia similar se utiliza para detectar cuando un mensaje
ha sido alterado o para
autenticar que fue enviado realmente por la persona que dice ser el re
mitente. El remitente
utiliza el cifrado de PGP para crear una rma digital para el mensaje co
n algoritmos de
RSA o DSA. Para esto, PGP calcula un identi cador nico(hash) para el mens
aje y des
pus crea la rma digital de dicho identi cador, usando la llave privada del
remitente. El
destinatario del mensaje calcula el identi cador del mensaje recibido y
despus lo utiliza
junto con la llave pblica del remitente, dentro del algoritmo de la rma,
para crear su pro
pia rma digital del mensaje recibido. Si esta rma coincide con la rma que
contena el
mensaje recibido, entonces se puede decir que el mensaje recibido no h
a sido corrompido
deliberadamente o accidentalmente, puesto que fue rmado correctamente.

No existe un mtodo que pueda romper el cifrado PGP por medios cripto
gr cos o de
cmputo. Adems, en comparacin con otros protocolos de seguridad, como SSL
que slo
protegen la informacin momentneamente mientras estn en trnsito a su destin
o, PGP
puede ser utilizada para proteger la informacin en medios de almacenami
ento de larga
duracin como discos duros. La seguridad en el mtodo de cifrado PGP se ba
sa en el hecho
de que los algoritmos utilizados son inquebrantables con las tcnicas de
l criptoanlisis
moderno.

5.11 RSS: sistema de noticias


99
5.11. RSS: sistema de noticias
5.11.1.

Introduccin

RSS es parte de la familia de formatos XML (una especi cacin genric


a para formatos
de datos) desarrollado espec camente para sitios que se actualicen con
frecuencia y por
medio del cual se puede compartir la informacin y usarla en otros si
tios web o programas.
A esto se le conoce como redifusin o sindicacin.
El RSS no es otra cosa que un formato de datos que es utilizado
para difundir contenidos
de un sitio web. El formato permite distribuir contenido sin necesi
dad de un navegador. Las
iniciales RSS se usa para los siguientes estndares:
Rich Site Summary (RSS 0.91)
RDF Site Summary (RSS 0.9 y 1.0)
Really Simple Syndication (RSS 2.0)
Los programas que leen y presentan fuentes RSS de diferentes pr
ocedencias se deno
minan agregadores. Gracias a los agregadores o lectores de feeds (p
rogramas o sitios que
permiten leer fuentes RSS), se pueden obtener resmenes de todos los
sitios que se desee
desde tu correo electrnico o por medio de aplicaciones web que funci
onan como agrega
dores. No es necesario abrir el navegador y visitar decenas de pagi
nas web.
5.11.2.

Akregator

$ smart
Akregator es un lector de RSS como parte de la integracin de KDE
utilizado princi
install
palmente en sistemas UNIX. RSS contiene noticias y actualizaciones
de sitios Web y Web
Akregator
logs. Los fuentes de RSS pueden ordenarse dentro de categoras, se pu
eden hacer bsque
das incrementales para los ttulos de todas las entradas de la base d
e datos y Akregator
puede ser con gurado para que actualice los fuentes en intervalos reg
ulares de tiempo.
Provee integracin con Konqueror y un navegador interno para leer not
icias.
5.1 RSS
El lector de RSS en Gnome es blam, est escrito en C# para el proyect
o Mono y GTK#.

Utilizando Akregator
Una vez instalado, Akgregator se encuentra en en el men principa
l, dentro de la catego
ra de Internet; o puedes iniciarlo desde una terminal con el comando

akgregator. Akregator

5.12 Mensajera instantnea


101
Integracin
Dentro de las opciones de con guracin de Akregator, puedes estable
cer que el sistema
actualice todas las noticias en intervalos regulares de tiempo y qu
e cada vez que ha sido
descargada una noticia nueva el sistema te mande una noti cacin.
Akregator est integrado dentro de Konqueror en el sentido de que
permite agregar no
ticias RSS al sistema de Akregator desde un navegador Konqueror y v
iceversa, Konqueror
est integrado dentro de Akregator en el sentido en que estando dentr
o de Akregator es
posible navegar a travs de pginas web.
Si pensabas que no era posible tener mayor integracin dentro de
aplicaciones KDE, los
usuarios de Kontact estarn acostumbrados a tener todas sus aplicacio
nes de informacin
personal en un solo lugar y Akregator tambin permite tener un mdulo d
e Kontact de
forma que todas tus noticias de RSS estn disponibles dentro de tu co
rreo electrnico,
calendario y dems entretenimientos.
5.12. Mensajera instantnea
5.12.1.

Introduccin

La mensajera instantnea (IM) es una manera para comunicarse de ma


nera inmediata
con personas a travs de Internet. Te permite tener una conversacin ca
si tan natural como
en el telfono o cara a cara, tecleando mensajes en una ventana compa
rtida entre t y la
otra persona.
Adems permite ver el estado en que se encuentran las personas, e
sto es, si estn ac
tualmente conectadas al mismo tiempo que t, de manera que despliega
un mensaje IM en
la pantalla de la otra persona tan pronto como se enva. O se puede c
ambiar el estado si
pre eres no ser interrumpido, y as otros sabrn que no deben contactarte
.
5.12.2.

Kopete

$ smart
Kopete es un cliente de mensajera instantnea, desarrollado por y
para el ambiente
install
gr co de KDE. Te permite comunicarte con amigos utilizando varios serv
icios de men
kopete
sajera instantnea. Proviene de la palabra chilena copete utilizada pa
ra referirse a bebidas
alcohlicas.
Kopete soporta los siguientes protocolos:
AOL Instant Messenger

Gadu Gadu

102
Internet
ICQ
Internet Relay Chat
Jabber (XMPP)
MSN Messenger
Novell GroupWise
SMS
Skype (via Kopete Skype)
Yahoo! Messenger
Lotus Sametime
La idea es tener una nica herramienta que permita acceder a los difere
ntes sistemas
de mensajera instantnea de una manera fcil de utilizar. El sistema est integr
ado con
otras aplicaciones KDE de manera que te permite acceder a los contactos d
e la agenda
de direcciones y otras utileras proporcionadas. Tambin provee herramientas
para guar
dar conversaciones, cifrado de mensajes, ltrado de contactos e intercambio
de archivos;
adems es un sistema extensible al que se le pueden agregar fcilmente nuevos
accesorios
como protocolos de comunicacin, edicin en LATEX, traductores de texto, etc.
Kopete introduce la idea de metacontactos, que permite combinar las d
iferentes for
mas que tienes de contactar a alguien en una sola persona. Otras aplicaci
ones listan a una
misma persona con varias cuentas de mensajera de manera separada (como si
se tratara
de personas diferentes por tener diferentes cuentas de mensajera); un meta
contacto es una
persona y los contactos son las diferentes formas de comunicacin con sta. A
s, los con
tactos se reconocen fcilmente mediante iconos pequeos que representan el pr
otocolo de
comunicacin que puedes utilizar.

Empezando a utilizar Kopete


Probablemente ya cuentes con un servicio de mensajera instantnea, tant
o porque ya
uses IM, como porque necesitas usar el mismo servicio que tus amigos. Si
no es as, te re
comendamos utilizar un servicio de mensajera instantnea basado en estndares
abiertos,
porque stos estn diseados para ser usados con software libre. Los servicios
de mensaje
ra, basados en estndares abiertos que Kopete soporta son Jabber e IRC.
La siguiente seccin supone que ya ests registrado con un servicio de IM.
Puedes iniciar Kopete desde el men de KDE, eligiendo Internet y dentro de
este submen
Kopete; desde la barra de herramientas seleccionando el icono correspondi
ente, como se
muestra en la gura 5.3; o en una terminal con el comando kopete. Utilizand

o el men de
KDE localiza la seccin de internet, que mostrar todos los servicios de inte
rnet disponibles
en tu sistema y selecciona kopete.

5.12 Mensajera instantnea


105
Agregar contactos.
Renombrar contactos.
Eliminar contactos.
Salir de Kopete. Si solamente se cierra la ventana el pro
grama continuar ejecu
tndose en la bandeja de sistema de KDE.
Ventana de conversacin. La Ventana de conversacin es el lugar donde r
ealizas la con
versacin. Los mensajes aparecen en el orden en que se reciben, c
on los mensajes
anteriores en la parte superior de la vista.
Entre los aspectos que contiene la ventana de conversacin se enc
uentran:
Lista de miembros de conversacin. Algunos sistemas de IM permit
en conversar en
grupo.
rea de entrada. Aqu es donde se pueden teclear mensajes antes de
enviarlos.
Barra de estado. La barra de estado contiene mensajes temporal
es, la noti cacin de
que alguien ms est tecleando y el botn Enviar.
Pestaas. Kopete permite llevar mltiples conversaciones en una ve
ntana, colocando
cada una en su propia pestaa dentro de la ventana.

5.12.5.

Extensiones

Kopete ofrece extensiones que proveen funciones que no son esen


ciales para la mensa
jera, pero son tiles, entre las que se encuentran:
Auto reemplazo de texto, que permite corregir palabras mal esc
ritas o guardar palabras
usando abreviaturas.
Criptografa, que permite usar GnuPG para cifrar conversaciones.
Respuesta a mensajes particulares, como resaltar texto o repro
ducir sonidos.
Guardar conversaciones usando cualquier sistema de IM.
KopeteTex, que permite mantener conversaciones utilizando el l
enguaje de marcas
LaTeX.
Auto ausente por movimiento.
Permite a la gente con la que ests conversando en ese momento s
aber qu msica
ests escuchando.
Estadsticas con informacin sobre el patrn de actividad de tus con
tactos.
Efectos de texto.
Traductor que permite de nir un idioma para cada contacto.

106
Internet
5.13. Rdesktop: Remote Desktop Protocol Client
Rdesktop es un cliente RDP(Remote Desktop Protocol)3 para la mayora
de los sistemas
Unix, como son Linux o FreeBSD. Fue creado por Matthew Chapman. Es una
herramienta
libre y de cdigo abierto, escrita bajo la licencia de GNU (General Publ
ic License) que
permite al usuario interactuar con terminales Windows NT/2000.
5.13.1.

Utilizando Rdesktop

Rdesktop inicia indicndole al programa cul es la computadora Windows


a la que se
quiere conectar. Puedes iniciar el programa desde una terminal con el
comando
% rdesktop 192.168.1.10.
Esto lo que hace es arrancar el programa e iniciar una sesin en la
mquina indicada,
es decir, abre una ventana de autenticacin de Windows en la mquina con d
ireccin IP
192.168.1.10. El servidor utiliza por defecto el puerto TCP 3389.

5.3 rdesktop en Gnome


La interfaz gr ca dentro de Gnome para utilizar el cliente de Rdesktop es
grdesktop y
funciona de manera muy similar a krdc.
La manera ms comn de utilizar Rdesktop es dentro de aplicaciones linu
x distribuidas
sobre clientes delgados, de forma que los clientes delgados arrancan d
entro de una red y se
conectan a un servidor Windows utilizando Rdesktop.
5.14. Kontact, una suite de productividad en KDE
Kontact es un conjunto de programas para manejo de informacin perso
nal que ofrece
KDE. Est integrado a partir de varios componentes, de los cuales la may
ora son apli
caciones por s mismas, pero aparecen embebidas dentro de kontact. ste se
encarga de
integrarlos para tener un solo punto de acceso a ellos y permitir que
interacten entre s.
3
El protocolo RDP es un protocolo de aplicacin multi canal que perm
ite a los usuarios conectarse a
computadoras con sistemas operativos Windows; adems no se necesita tene
r un ancho de banda muy grande
(un modem de 56K es su ciente)

108
Internet
cmo con gurar cada una de ellas para realizar slo las operaciones ms sencil
las.
5.14.1.

Resumen

ste es un componente espec co de Kontact, donde se le presenta al usua


rio un resu
men de la informacin contenida en los dems aspectos de Kontact. Permite
que de forma
rpida te enteres de los eventos relevantes al da actual, como pueden ser
las ltimas noti
cias, fechas importantes (cumpleaos o aniversarios) o tal vez asuntos p
endientes.
5.14.2.

Correo, KMail

Kontact utiliza a KMail como el lector de correo. La con guracin y uso


de esta apli
cacin ya se revis en la seccin 5.7.
5.14.3.

Contactos, KAddressBook

Para poder mantener de forma organizada la lista de todas las pers


onas con las que
tratas, es necesario que lleves una libreta de direcciones. La aplicac
in que te permite hacer
eso en KDE es KAddressBook. Aqu puedes mantener toda la informacin de tu
s contactos
y hacer uso de ella con distintas aplicaciones de KDE como KMail o Kop
ete.
KAddressBook te permite organizar tus contactos en distintas agend
as. Esto es til si
quieres tener una agenda con tus contactos personales en tu computador
a, pero tambin
quieres tener acceso a una agenda con los contactos de tu trabajo. Si
esa agenda la exportan
mediante algn servidor de groupware, KAddressBook puede acceder a ella
y permitir que
el resto de tus aplicaciones KDE hagan uso de esa informacin. Lo primer
o que se necesita
para empezar a utilizar KAddressBook es tener una agenda, aun cuando t
e provee de una
por omisin. En la gura 5.6 se muestra la ventana inicial de KAddressBook
. En la seccin
1 se muestran los contactos pertenecientes a las agendas seleccionadas
. En la seccin 2 se
muestran las agendas que estn disponibles, y cuales estn seleccionadas.
En la seccin 3
se muestran los datos del contacto seleccionado.
Creando una nueva agenda
Cuando creamos una nueva agenda es necesario indicarle a KAddressB
ook en donde
se encuentra la informacin correspondiente a nuestros contactos, esta p
uede estar en la
misma computadora en la que se esta arrancando esta aplicacin o bien pu
ede estar en una

mquina remota. La ventaja de tener una agenda en una mquina remota radic
a en poder
compartir contactos con distintas personas, y poder acceder a esa info
rmacin desde dife
rentes computadoras. Existen varias formas para hacer eso, pero en est
e captulo veremos

122
Internet
5.15.1.

VM

5.1 Rmail y Gnus


Adems de VM, Emacs cuenta con varios subsistemas ms para leer y envia
r correo elec
trnico. Los ms importantes son Rmail y Gnus. El primero, Rmail, es un
lector de correo
muy sencillo, mientras que el segundo, Gnus, naci como un lector de
noticias (USENET)
al que le agregaron opciones de correo.
Gnus es un sistema tan grande y completo como VM y una excelente al
ternativa. Desafor
tunadamente ha cado un poco en desuso, por lo que no lo revisaremos.
$ smart
VM (siglas de View Mail, en ingls) es un subsistema de Emacs que
te permite ma
install vm nejar tu correo electrnico desde Emacs. Como la mayora de los lectore
s de correo, VM
te permite leer correos, contestarlos, reenviarlos y otras acciones
ms. Sin embargo, tam
bin tiene algunas funciones avanzadas como creacin de resmenes (digest
), el reenvo de
mensajes y la organizacin de los mismos de acuerdo a ciertos criteri
os.
Para iniciar VM basta que teclees el comando M x vm y aunque es
to funcionar y te
mostrar la cara de VM, no te lo recomendamos hasta concluir la sigui
ente seccin, donde
te ensearemos a con gurar VM para leer tu correo.
Iniciando con VM
VM es probablemente uno de los subsistemas ms grandes que cubrir
emos en este
libro probablemente con la excepcin de AUCTEX en la seccin 6.12 tanto
as que
por la cantidad de variables que puedes modi car, VM utiliza un archi
vo de con guracin
distinto del /.emacs, que se llama /.vm.
Despus de ejecutar vm, si hay mensajes en tu bandeja de entrada
VM selecciona el
primero de los mensajes no ledos y te muestra una vista previa. Esta
s vistas previas son la
manera de VM de mostrarte parte del mensaje y permitirte decidir si
quieres verlo completo
o no. Si deseas verlo completo, con Space (vm scroll forward) puede
s hacerlo. Nota que
este comando hace dos cosas distintas, primero te muestra el inicio
del mensaje y, si ste
es ms largo que la ventana actual, ejecuciones subsecuentes del coma
ndo (tecla Space )
paginan el contenido del mensaje.

Si no deseas ver el mensaje que VM muestra, con n (vm next mess


age) puedes
cambiarte al siguiente mensaje, si es que hay otro.
Puedes guardar el mensaje que ests viendo con s (vm save message
) o borrarlo
tecleando d (vm delete message); sin embargo, el mensaje no se borr
a inmediatamente,
sino que VM pone una marca en l para borrarlo ms tarde. Esto es impor
tante, porque

5.15 Emacs
123
si te arrepientes acerca de borrar el mensaje, puedes seleccion
arlo y presionar u (vm
undelete message) y rescatas el mensaje.
La accin de eliminar para siempre los mensajes borrados se c
onoce como expulsin y
se logra tecleando # # # (vm expunge folder).
Puedes utilizar h (vm summarize) para que VM te muestre una
ventana con un resu
men del contenido de la carpeta actual. En esta lista aparecen
los mensajes presentados por
nmero de mensaje, con el autor, fecha, tamao (en lneas y bytes) y
el asunto del mensaje.
Adems, a la izquierda de cada resumen, aparecen una serie de let
ras que te indican, entre
otros, si el mensaje es nuevo, no ledo o marcado para ser borrad
o.
Una vez que terminas de leer y manejar tu correo, debes gua
rdar la carpeta actual para
que la prxima vez que entres a VM, ste sepa cules ya fueron ledos,
cules ya contestas
te, etc. La tecla S (vm save folder) salva la carpeta. Puedes o
ptar por terminar la visita
de esta carpeta con q (vm quit), que salva la carpeta antes de
terminar su revisin.
En cualquier momento durante tu sesin de VM puedes utilizar
el comando g (vm
get new mail) para revisar si arribaron nuevos mensajes para es
ta carpeta. Si hay nuevos
mensajes, este comando los mover de la bandeja de entrada (en in
gls spool) a la carpeta
actual.
Tu carpeta de correo base
Por omisin VM intentar asociar tu buzn local con tu carpeta de
correo base, por
lo que si este comportamiento no es adecuado, y en la mayora de
los casos no lo ser,
debes indicarle dnde vive tu correo. Por ejemplo, nuestro viejo
amigo Juan Prez tiene lo
siguiente en su /.vm para indicarle a VM de dnde debe obtener el
correo nuevo:
1
( s e t q vmspool f i l e s
2
( ( "  / INBOX "
3
" imaps s l : g a l a d r i e l . f c i e n c
i a s . unam . mx: 9 9 3 :
4
i n b o x : l o g i n : Juan . Perez :
"
5
"  / INBOX .CRASH " ) )
6
)
Como puedes apreciar, la variable vm spool les recibe una lista
de listas. Esto signi ca
varias cosas. Primero, que VM puede manejar varias bandejas de
correo electrnico dis
tintas, sin importar si stas son bandejas locales o remotas. Seg
undo y menos obvio, que
puedes asociar en una misma carpeta correo proveniente de diver

sas fuentes. La sintaxis


para especi car cada una de las fuentes de correo, es decir cada
una de las listas internas
de esta variable, es utilizar tres cadenas que representen, en
este orden, una carpeta, una
bandeja de entrada de correo y una carpeta de recuperacin.
VM tiene por omisin una carpeta de entrada para correo llama
da /INBOX y, como
puedes ver en el ejemplo arriba (lnea 2), es la carpeta que util
iz Juan para con gurar su
correo. La carpeta de recuperacin (en este caso el valor por omi
sin es /INBOX.CRASH)
la utiliza VM para almacenar inicialmente todos los mensajes ex
trados de la bandeja de

124
Internet
entrada de correo; despus procesa todos los mensajes almacenados en la car
peta de recu
peracin y los mueve a la carpeta de entrada.
Gracias a esto ltimo, VM ofrece un excelente soporte para errores, ya
que si algo sale
mal durante el proceso de tu correo o se interrumpe la ejecucin de Emacs p
or cualquier
motivo, tu correo no se pierde y cuando ejecutes VM nuevamente, ste buscar
en la ban
deja de entrada y la carpeta de recuperacin, y procesar los mensajes que en
cuentre y los
mover a tu carpeta de inicio.
Finalmente, en las lneas 3 y 4 del ejemplo de con guracin arriba5 , Juan
le indica a
VM que para acceder a su correo tiene que utilizar estos parmetros:
Protocolo: El protocolo que soporta el servidor de correo donde Juan tien
e su cuenta es
IMAP y requiere cifrado con SSL. VM adems soporta los protocolos de
correo local
y POP3.
Servidor: El servidor es galadriel.fciencias.unam.mx.
Puerto: 993, que es el puerto estndar para IMAP sobre SSL. El puerto usual
para IMAP
es 143, para POP3 el 110 y para POP3 sobre SSL el 995.
Bandeja de entrada: La bandeja de entrada en el servidor es inbox.
Mecanismo de autenticacin: El mecanismo para que Juan se autentique con el
servidor que utiliza en este caso es login, pero VM tambin soporta
preauth y cram
md5, que son mecanismos comunes en muchos servidores IMAP sobre SS
L.
Direccin de correo: Juan adems le indica a VM que su cuenta de correo en el
ser
vidor tiene el identi cador Juan.Perez.
Contrasea: Finalmente, por razones de seguridad, Juan le indica a VM que l
a con
trasea para acceder al servidor deber solicitarla (utilizando el min
i buffer) cada vez
que l quiera acceder a su carpeta de inicio.
Una vez que VM recibe la contrasea y logra autenticarse exitosament
e con el servi
dor, almacena la contrasea por el resto de la sesin, por lo que Juan
solamente debe
teclear su contrasea una vez durante su sesin actual de Emacs.

Seleccin de mensajes
Para poder leer, borrar o realizar cualquier accin con un mensaje, pri
mero debes se
leccionarlo o, en terminologa VM, convertirlo en el mensaje actual. La may
ora de los
comandos de VM surten efecto sobre el mensaje actual.
5
En realidad estas dos lneas (3 y 4) deben aparecer como una sola, per
o la dividimos en dos por razones

de legibilidad.

5.15 Emacs
125
Tabla 5.5

Estos son los principales comandos para seleccionar mensajes en VM:


Emacs: comandos de seleccin de VM
Enlace

Comando/Descripcin
(vm next message) se mueve hacia adelant

e en la carpeta ac
n
tual. Salta mensajes marcados como borra
dos.
(vm prev message) se mueve hacia atrs en
la carpeta actual.
p
Salta mensajes marcados como borrados.
(vm goto message) te pedir un nmero de men
saje, N , y sal
Enter
tar a ese mensaje.
(vm goto message last seen) te llevar al l
timo mensaje
Tab
revisado.


(vm {next|prev} message no skip) selecciona




el mensaje si
N
arcado como ledo o

guiente (anterior), sin importar si est m

no.
(vm {next(prev)} unread message) se mueve ha

cia adelante
M n

M p
(atrs) hasta encontrar el siguiente (ante

rior) mensaje no ledo.


(vm isearch forward) funciona como la bsq
ueda incremen
M s
la bsqueda VM te

tal de Emacs, excepto que cuando termina


muestra el mensaje en el que termin el pu

nto.
Si deseas que los comandos bsicos n y p se salten tambin los mens
ajes ledos, de
bes asignar t a la variable vm skip read messages; y si adems deseas
que los mensajes
en la carpeta VM los recorra como en una lista circular, es decir q
ue al llegar al ltimo y
seleccionar el siguiente (con n ), VM te lleve al primer mensaje, t
ambin debes asignar t a
la variable vm circular folders.
Una vez seleccionado un mensaje VM te lo mostrar. Como ya mencio
namos anterior
mente, esto es un trabajo de dos pasos: vista previa y mensaje comp
leto.
La vista previa te muestra una pequea parte del mensaje para que
puedas decidir si
quieres o no verlo completo. Con Space accedes al mensaje completo
y puedes paginarlo.

Soporte en VM para MIME


VM tiene soporte para los dos mecanismos de codi cacin MIME (Multi
purpose In
ternet Mail Extensions) que son Quoted Printable y BASE64. En gener
al, MIME asegura
que la transmisin de los mensajes se realiza sin errores y de ne ciert
os tipos de contenidos
vlidos.

126
Internet
Existen variables en VM que te permiten controlar si deseas o n
o ver ciertos contenidos
MIME. Por ejemplo, vm auto displayed mime content types, cuyo valor
por omisin
es ("textimagemultipart") y que incluye algunos de los valores comu
nes para mensajes de
correo codi cados con MIME.
Enviando mensajes
Cuando envas mensajes desde VM utilizas el modo mayor Mail de Em
acs, ms algunas
extensiones con los siguientes enlaces:
Tabla 5.6 Emacs: comandos para manipular la composicin de correo en VM
Enlace
C c C y
eta padre al buf

Comando/Descripcin
(vm yank message) copia un mensaje de la carp
fer de composicin. Lee el nmero de mensaje dese

ado del mini


buffer. Por omisin, a cada lnea del mensaje cop
iado se le agrega
el valor de la variable vm included text pre x,
cuyo valor por
C c C a

omisin es " > ".


(vm mime attach le) anexa un archivo a la comp

osicin. Cuan
do enves el mensaje, VM insertar el archivo y l
o codi car utili
C c C m

zando MIME.
(vm mime attach message) anexa un mensaje de

correo a la
composicin. Te preguntar el nmero del mensaje qu
e anexar y
cuando enves tu correo, VM aadir el mensaje como
un digerido
C c C b

MIME.
(vm mime attach buffer) aade un buffer de Emac

C c C e

sicin.
(vm mime encode composition) codi ca el mensaje

s a la compo
elaborado
utilizando MIME, pero no lo enva. Esto es til s
i quieres

rmar el
mensaje con PGP antes de enviarlo. Despus de e

sto puedes enviar


C c C p
previa del men

el mensaje con C c C c .
(vm preview composition) Te muestra una vista
saje actual en elaboracin. En la vista previa

todos los comandos


tpicos de VM estn disponibles y con q continas l
a composi
cin.
La forma ms simple de iniciar un buffer de composicin es con el com
ando m (vm
mail).

En caso de que el mensaje sea rechazado y regresado por cualquier


motivo, puedes re

5.15 Emacs
127
enviar el mensaje utilizando M r (vm resend bounced message). Este
mensaje tendr
un nuevo encabezado Resent To donde debes poner la direccin correcta
del receptor que
fue rechazado.
Los comandos ms interesantes de Mail y que son heredados por VM
son:
Tabla 5.7 Emacs: comandos de Mail
Enlace
C c C s

Comando/Descripcin
(mail send) enva el mensaje y mant

C c C c

composicin seleccionado.
(mail send and exit) enva el mensa

iene el buffer de
je y selecciona
otro buffer. Este es el comando ms
comn para con
cluir la composicin de mensajes y
enviarlos.
C c C f C t

(mail to) mueve el punto al encab

C c C f C s

uno si no existe.
(mail subject) mueve el punto al

ezado To, creando


encabezado Subject,
C c C f C c

creando uno si no existe.


(mail cc) mueve el punto al encab

ezado Cc, creando


uno si no existe.
Iniciar una nueva composicin de correo es tan usual como contest
ar a un mensaje
recibido y VM hace muy sencillo lograrlo. Cuando contestas un mensa
je desde VM, ste
se encarga de llenar los encabezados de destinatario (To) y asunto
(Subject), anexando Re:
al asunto del mensaje, que es la forma estndar de indicar que es una
respuesta.
VM tambin puede ayudarte a citar material del mensaje al que con
testas y lo identi ca
anexando el valor de la variable vm included text pre x.
Los comandos para contestar son:
Tabla 5.8 Emacs: comandos para contestar correo en VM
Enlace
r

Comando/Descripcin
(vm reply) contesta al autor del mensaje actual

.
R
ensaje actual y cita el
f
el mensaje actual.
F
receptores del mensa

(vm reply include text) contesta al autor del m


cuerpo del mensaje.
(vm followup) contesta a todos los receptores d
(vm followup include text) contesta a todos los
je actual y cita el cuerpo del mensaje.

VM ofrece adems tres comandos para traspasar o enviar mensajes


que recibes a otros

128
Internet
Tabla 5.9

receptores. stos son:


Emacs: comandos para adelantar mensajes de VM
Enlace
z

Comando/Descripcin
(vm forward message) este comando te sita en un b

uffer de com
posicin, similar al comando m , pero el mensaje o
riginal aparece
@

en el buffer.
(vm send digest) funciona como z , excepto que t

odos los mensa


jes en el folder actual se concatenan en un dige
rido y puestos en el
B

cuerpo del buffer de composicin.


(vm resend message) si deseas traspasar un mensa

je recibido, pe
ro que no aparezca encapsulado (que es lo que ha
ce z ) entonces
debes utilizar este comando y VM iniciar un buffe
r de composicin
con una rplica del mensaje, pero agregar un encabe
zado Resent To
que debes llenar con la direccin deseada.
Marcas de mensajes
La mayora de los comandos mencionados para enviar, contestar y t
raspasar mensajes
reciben argumentos numricos pre jos (con C u N , donde N es un nmero) y
pueden
trabajar sobre mensajes marcados. VM provee marcas de propsito gener
al que pueden
aplicarse a cualquiera o a todos los mensajes dentro de un folder.
Para marcar el mensaje actual teclea M M (vm mark message). Si
le pasas un ar
gumento numrico N , marcar tambin los siguientes N 1 mensajes siguient
es; con un
argumento negativo, los N 1 previos. Un asterisco (*) aparecer a la
derecha de los nme
ros de mensaje marcados.
Para quitar la marca a un mensaje puedes utilizar M U (vm unmar
k message).
M m marca todos los mensajes en la carpeta actual y M u les quita
la marca.
Con guracin de correo saliente
VM intentar enviar los mensajes que compones utilizando el mtodo
de nido por Mail
de Emacs, esto es, por el valor de send mail function, el cual por
omisin intentar utilizar
el programa sendmail local.
Dependiendo de tu servicio y con guracin de acceso a la red, puede
ser que no cuentes
con un programa sendmail o con un equipo capaz de enviar directamen
te correo electr
nico. En estos casos es comn que tu servicio de correo incluya un se

rvidor de SMTP, que


es el protocolo de internet para transmisin de mensajes electrnicos.
Si es as, te conviene

5.15 Emacs
129
utilizar otro programa para enviar mensajes llamado smtpmail y po
ner algo similar a lo
que nuestro amigo Juan puso en su /.vm:
( s e t q vmmail headerfrom " Juan Perez <Juan . Perez@ciencias . un
am . mx>"
sendmail f u n c t i o n smtpmailsend i t
smtpmailsmtps e r v e r " g a l a d r i e l . f c i e n c i
a s . unam . mx"
smtpmaill o c a l domain " c i e n c i a s . unam . mx"
smtpmailsendtodomain " c i e n c i a s . unam . mx"
)

5.15.2.

BBDB

$ smart
BBDB es una base de datos para manejar contactos en Emacs. BBD
B viene de Insidious
install bbdb Big Brother Database y ofrece las siguientes caractersticas:
Integracin con distintos lectores de correo:
Despliega de manera sencilla la entrada correspondiente a
l remitente del mensaje
actual.
Permite la creacin automtica de entradas basado en el conte
nido del mensaje
actual.
Permite agregar de manera automtica datos a campos de la e
ntrada que corres
ponde al remitente del mensaje.
Muestra una lista de registros que casan con una expresin reg
ular.
Para activar BBDB debes poner lo siguiente en tu /.emacs:
( r e q u i r e bbdb )
( bbdb i n i t i a l i z e )
Con lo anterior tendrs una base funcional que te permite reali
zar bsquedas y mani
pular registros. Sin embargo, no est asociada con ninguno de los l
ectores de correo. Para
utilizarlo con VM (ver la Seccin 5.15.1) y poder enviar mensajes a
provechado tu base de
contactos, debes utilizar algo como esto:
( r e q u i r e bbdb )
( bbdb i n i t i a l i z e
vm)
Adems, para utilizarlo desde VM debes agregar lo siguiente a tu
/.vm.
( bbdbi n s i n u a t e vm)
Esta lnea agrega enlaces de teclas a VM y lo con gura para que l
e noti que a BBDB
cuando se carguen nuevos mensajes. Tambin agrega el enlace MTAB al
modo Mail con
el cul puedes completar direcciones que salen de tu base de contac
tos en BBDB.
Utilizando BBDB
Ahora que hemos instalado y activado BBDB, podemos utilizarla
para agregar, revisar

o editar nuestros contactos. Por omisin, el archivo donde se guard


an los contactos se llama

130
Internet
/.bbdb y puedes cambiarlo asignando un nuevo valor a la variable bbdb l
e.
La base de datos de BBDB consiste de un conjunto de registros y c
ada registro corres
ponde a una persona. Cada registro tiene varios campos y estos campos
pueden tener dis
tintos tipos; en la tabla 5.10 te mostramos los tipos prede nidos.
Tabla 5.10 Emacs: tipos vlidos para campos BBDB
Tipo
name

Descripcin
El nombre de la persona, o vaco si corresponde a un

company
AKA
net
adress
phone
notes

El nombre de la organizacin de la persona.


Lista de otros nombres o apodos para esta persona.
Lista de las direcciones electrnicas de la persona.
Lista de direcciones postales (fsicas).
Lista de telfonos de la persona.
Comentarios.

a organizacin.

Cuando ejecutas BBDB con el comando M x bbdb te pide una expresin


regular y te
muestra todos los registros que casan con esta expresin. La bsqueda la
realiza sobre todos
los campos de la base, aunque puedes realizar bsquedas ms limitadas uti
lizando otros
comandos, como bbdb name para buscar nicamente en el campo de nombre o
bbdb net
para el campo de direcciones electrnicas.
Una vez que BBDB te muestra algunos registros de tu base, ests en
el modo especial
*BBDB* y tienes varios comandos a tu disposicin para moverte, editar,
agregar o borrar
registros.
Tabla 5.11 Emacs: comandos de BBDB
Enlace
e

Comando/Descripcin
(bbdb edit current eld) edita el campo en la lnea actua

l.
;
comentarios.
d C k
la lnea ac

(bbdb edit notes) abreviatura para editar el campo de


(bbdb delete current eld or record) borra el campo en
tual. Si la lnea actual es la primera del registro, BB

DB te preguntar si
C o
istro actual.
n
p
en la siguiente pgina

deseas borrar el registro completo.


(bbdb insert new eld) inserta un nuevo campo en el reg
(bbdb next record) se mueve al siguiente registro.
(bbdb prev record) se mueve al registro anterior.
Contina

5.15 Emacs
131
Con
tina de la pgina anterior
Enlace
m

Comando/Descripcin
(bbdb send mail) inicia la composicin de un mensaje

de correo elec
s
r
actual con otro re

trnico dirigido a la persona.


(bbdb save db) salva la base actual al disco.
(bbdb re le record) integra el contenido del registro
gistro en la base. Esto es til porque es usual tener

varios registros con


informacin distinta, como, por ejemplo, distintos co
rreos electrnicos
c
datos con la informa

de la misma persona.
(bbdb create) crea un nuevo registro en la base de

cin que ingresas en el mini buffer.


(bbdb bury buffer) esconde el buffer *BBDB*. Nota q

no mata el buffer.
(bbdb add or remove mail alias) aade un nuevo alias

ue este comando
de correo para
persona.
Para crear tu primer registro, ejecuta M x bbdb create (o simpl
emente c dentro del
buffer *BBDB*). Inmediatamente despus de ejecutar este comando, BBDB
te preguntar,
utilizando el mini buffer para ello, los siguientes datos: Name, Or
ganization, Net, Address
(direccin postal en varias lneas), Phone y nalmente Notes. Nota que a
excepcin de los
primeros tres, puedes teclear Enter y BBDB dejar en blanco (y no des
plegar) ese campo.
En general, los comandos que acabamos de mencionar en la tabla
5.10, no los utilizars
frecuentemente, porque BBDB ofrece una interfaz ms e caz para manejar
tus contactos.
Adems, con las lneas que agregamos al /.emacs arriba, la mayora de las
modi cacio
nes a tu base de contactos se realizan de manera automtica cuando re
dactas nuevos correos
electrnicos o lees correo dirigido a ti.
De hecho, notars que cuando entras a VM y seleccionas un correo,
en el fondo de
la pantalla BBDB te mostrar el registro de tu base de contactos con
la informacin del
remitente. Si no existe ya un registro para ste, BBDB crear uno por t
i. De hecho, los
registros de la base cuentan con un nuevo campo llamado mail alias
que te permite asignar
nombres especiales, o simplemente alias, a ciertos contactos para e
nviar mensajes.
Por ejemplo, si agregamos (con el enlace a ) el campo mail alias
al registro de Eli

sa Viso que creamos arriba, podemos teclear mami y despus, durante l


a edicin de un
mensaje electrnico, puedes utilizar el alias en el campo To:.

132
Internet
5.15.3.

w3m

En sus inicios, W3 era el navegador ms popular para Emacs, pero er


a sumamente lento.
Por otro lado, w3m era un paginador con capacidades para navegar el w
eb, desarrollado por
$ smart
Akinori Ito. As que se desarroll esta interfaz para utilizar w3m desde
Emacs y el resultado
install
es un navegador e ciente.
w3m el
Para iniciar w3m debes poner la siguiente lnea en tu /.emacs:
( r e q u i r e w3ml o a d )
Al igual que VM, w3m pre ere tener su propio archivo de con guracin, en
este caso
/.emacs w3m, que es el valor por omisin de la variable w3m init

le.

Uso bsico de w3m


Existen tres formas bsicas para iniciar w3m, que se muestran en la tab
la 5.12.
Tabla 5.12 Emacs: iniciando w3m
Comando
w3m
de inicio. Esta pgina

Descripcin
Arranca emacs w3m y despliega la pgina
est especi cada por la variable w3m home

page.
w3m nd le
en el mini buffer y

Te solicitar el nombre de un archivo local


lo desplegar en emacs w3m.

w3m browse url


lo desplegar en

Te solicitar un URL en el mini buffer y


emacs w3m. Este comando es usualmente

invocado desde otros


programas.

5.15 Emacs
133
Moverte en un buffer de emacs w3m no es difcil, pues la mayora de las
teclas de Emacs
funcionan de la misma forma. Por ejemplo, C n , C v y C s (que usua
lmente sirven para
moverte una lnea hacia abajo, una pgina o buscar una palabra) tambin s
on operaciones
vlidas en los buffers de emacs w3m.
Para seguir una liga utiliza la tecla Enter . Debes mover el pu
nto a la liga, lo cual es
sencillo pues las ligas se destacan del texto normal ya sea que estn
subrayadas o tengan un
color distinto. Aqu est una lista de enlaces para navegar dentro de u
n buffer emacs w3m:
Tabla 5.13 Emacs: siguiendo ligas con w3m
Enlace
Enter
l punto. El com

Comando/Descripcin
(w3m view this url) despliega la pgina sealada con e
portamiento exacto de este comando depende de las

propiedades de la
liga en cuestin.
g
r y har que emacs

(w3m goto url) te solicitar un URL en el mini buffe


w3m despliegue la pgina.

G
l mini buffer y

(w3m goto url new session) te solicitar un URL en e


desplegar la pgina en una nueva sesin.

c
mostrada en el

(w3m print current url)despliega el URL de la pgina


rea de eco y la pone en el anillo de la muerte.

u
a pgina objetivo del

(w3m print this url) despliega, en el rea de eco, l


URL marcado con el punto.

R
to es particular

(w3m reload this page) vuelve a cargar la pgina. Es


mente til si ests leyendo las noticias o el diario d

e una persona, que


pudieron ser actualizados desde el momento en que
fue cargada la pgi
na.
Probablemente la posibilidad de moverte dentro de una pgina, com
o lo puedes hacer
en cualquier buffer de Emacs, te tiene fascinado. Y, aunque no lo c
reas, an hay ms y
resulta que emacs w3m agrega una gran cantidad de enlaces para logr
ar que navegues a
velocidades nunca antes vistas.
Las teclas fueron seleccionadas de manera tal que avanzar la pgi

na se logra con secuen


cias muy cortas. Ms an, dado que no puedes escribir en cualquier part
e de una pgina,
muchas de las teclas no ejecutan ms el comando self insert command.

134
Internet
Tabla 5.14

Emacs: navegando con w3m

Enlace
Space
bajo. Si utilizas

Comando/Descripcin
(w3m scroll up or next url) recorre la pgina hacia a
VM ya debes estar acostumbrado a este comportamient

o, pues as fun
delete

ciona la lectura de mensajes en VM.


(w3m scroll down or previous url) recorre la pgina h

>

(w3m scroll left) recorre la pgina hacia la izquierd

<

(w3m scroll right) recorre la pgina hacia la derecha

/

(w3m shift left) se mueve (una posicin) hacia la izqui

/,

(w3m shift right) se mueve (una posicin) hacia la de

M l

(w3m horizontal recenter) recorre la pgina horizonta

acia arriba.
a.
.
erda.
recha.
lmente hasta
que la posicin actual quede en el centro.
El modo mayor de emacs w3m, w3m mode, de ne adems una serie de coma
ndos
para moverse entre distintos objetos, tales como ligas, formas o img
enes.
Tabla 5.15 Emacs: puntos de inters en la pgina ala w3m
Enlace
Tab

Comando/Descripcin
(w3m next anchor) mueve el punto a la siguiente l

M Tab

el idioma de emacs w3m).


(w3m previous anchor) mueve el punto al ancla ant

(w3m next form) mueve el punto a la siguiente for

(w3m previous form) mueve el punto a la forma pre

(w3m next image) mueve el punto a la siguiente im

(w3m previous image) mueve el punto a la imagen p

iga (o ancla, en
erior.
ma.
via.
agen.
revia.
Por ejemplo, si ests viendo la pgina http://www.google.com, (s, la
del afamado
buscador), puedes realizar los siguientes pasos: ] , Enter , (tecle
a lo que sea que quieras
buscar en google) y nalmente C c C c para localizar lo deado.
Ahora que ya sabes moverte dentro de una pgina, resta revisar lo
s mecanismos que
ofrece emacs w3m para movernos entre pginas. Dado que estas pginas so
n buffers de
Emacs, bien podramos utilizar los mecanismos ya provistos por Emacs,
tales como C c C b .
Sin embargo, esto sera muy lento; por ello contamos con las siguient
es formas de hacerlo:

5.15 Emacs
135
Tabla 5.16 Emacs: movimiento entre pginas con w3m
Enlace
B

Comando/Descripcin
(w3m view preview page) se mueve una pgina atrs en la his

toria. Con un
N

argumento numrico se mueve hacia atrs N pginas.


(w3m view previous page) se mueve hacia adelante una pgi

na en la histo
H
ar la pgina de

ria. Por supuesto, esto funciona si utilizaste B


(w3m gohome) se mueve a la pgina de inicio. Puedes cambi
inicio cambiando el valor de la variable w3m home page.
(w3m view parent page) intentar moverse al directorio padr

e de la p
gina desplegada. Por ejemplo, intentar moverse a http://
foo/ cuando
http://foo/bar/ sea la pgina actual. Esto tiene sentido
porque es comn que
busques algo en el sitio que no se encuentra ah, la pgina
ya no existe u otros
a al

Space
nal de buffer

problemas similares.
(w3m scroll up or next url) cuando el punto se encuentr
y no puedes avanzar hacia adelante, entonces la tecla S

pace te llevar a la
siguiente pgina donde la siguiente pgina es aqulla de nida p
or el encabe
zado especial next en la pgina actual. Este comando no t
iene relacin alguna
con la historia.
Por ejemplo, si continuamos con la bsqueda que realizamo
s en google arri
ba, notars que al llegar al

nal de la primera pgina de res

ultados y teclear
Del
cuentra al inicio

Space , te lleva a la segunda pgina de resultados.


(w3m scroll down or previous url) cuando el punto se en
del buffer y no puedes moverte hacia arriba, puedes tec

lear Del y esto te


llevar a la pgina previa. Al igual que Space , esto funci
ona si la pgina
contiene el encabezado especial previous.
Regresa a tu vida ordinaria
Una vez que inicias este recorrido por los subsistemas de Emacs
, como emacs w3m,
es fcil perderse y olvidar que existe un mundo fuera de Emacs, que t
ienes una vida, un
trabajo, responsabilidades. Probablemente iniciaste tu sesin pensand
o terminar ese pro
grama de tarea, aquella poesa que completar tu obra maestra o tal vez
las formas que te
permitirn defender mejor a tu cliente en corte. Sin embargo, a la mi
tad de tu trabajo, tenas
la necesidad de buscar informacin en el web y pudiste hacer eso desd
e Emacs: increble.

Sin embargo, es momento de continuar tu trabajo y dejar emacs w


3m, para lo cual
tienes dos opciones. Teclea q si piensas regresar a emacs w3m ms tar
de o Q si no
piensas regresar en un buen rato.

136
Internet
La primera opcin, q , ejecuta el comando w3m close window que esco
nde la venta
na de emacs w3m y selecciona otro buffer, mientras que la segunda, Q
, ejecuta w3m quit,
que salva la historia de navegacin al disco y termina la ejecucin de em
acs w3m.
Imgenes y ms
Por omisin, emacs w3m no mostrar las imgenes de las pginas; sin embar
go, la
mayora de encarnaciones de Emacs modernas soportan mostrar imgenes en b
uffers. Con
el comando T puedes cambiar la opcin para mostrar o no imgenes en emacs
w3m.
Si deseas que emacs w3m despliegue siempre las imgenes, debes asig
nar t a la variable
w3m default display inline images.
Adems de esto, emacs w3m te permite agrandar o achicar las imgenes,
guardarlas al
disco o verlas con un visor externo. Aqu estn los comandos ms relevantes
:
Tabla 5.17 Emacs: manejo de imgenes en w3m
Enlace Comando/Descripcin
T
(w3m toggle inline images) cambia entre mostrar o no imgenes
en los buf
I

fers de emacs w3m.


(w3m view image) utiliza un visor externo para ver la image

M i
M [
M ]

(w3m save image) salva la imagen actual a un archivo.


(w3m zoom out image) agranda la imagen actual.
(w3m zoom in image) achica la imagen actual.

n actual.

Favoritos
Emacs w3m tambin soporta listas de ligas favoritas o bookmarks y,
para no variar, te
ofrece varias formas de indicarle qu ligas quieres conservar y cmo quie
res referirte a
ellas. As, tenemos las opciones que se listan en la tabla 5.18 de la s
iguiente pgina.
Una vez que tienes ligas favoritas almacenadas, puedes acceder a
ellas con el coman
do v (w3m bookmark view) desde cualquier buffer de emacs w3m. Otra po
sibilidad es
visitar el URL especial: about://bookmark/. En esta pgina vers tus liga
s favoritas orga
nizadas por seccin.
Emacs w3m tiene muchas ms acarctersticas que, por cuestiones de espa
cio, no po
demos explicar aqu. Por ejemplo puedes interactuar con tu buscador de
web favorito con
una sola tecla, S (w3m search) o puedes acumular varios URLs y abrirl
os todos con un
solo movimiento. Pero todas estas caractersticas las dejaremos como ej
ercicio al lector.

5.15 Emacs
137
Tabla 5.18 Emacs: ligas favoritas en w3m
Enlace
a
tegrar la pgina ac

Comando/Descripcin
(w3m bookmark add current url) te permite in
tual a tu lista de favoritos. Si lo llamas c

on un argumento pre jo, en


tonces te pedir el URL a utilizar. Adems, util
izar el mini buffer
para preguntarte si quieres editar el ttulo y
el URL.
M a

(w3m bookmark add this url) aade el URL marca

do con el pun
to a los favoritos.
5.15.4.

ERC

5.2 ZenIRC
ZenIRC es otra alternativa popular para acceder a servidores de IR
C. Al igual que
ERC, ZenIRC no es parte estndar de Emacs y puedes encontrarlo en la
direccin
http://www.zenirc.org/.
$ smart
ERC es un cliente de IRC6 para Emacs. ERC es poderoso, modular
y extensible. Por
install erc omisin ofrece las siguientes caractersticas:
Control de inundacin (detecta y detiene ataques electrnicos).
Fechas.
Puede conectarte a ciertos canales de manera automtica.
Convierte en botones (ligas) a los URLs, nombres de usuario
s, etc.
Rompe lneas muy largas para facilitar su lectura.
Completa nombres de usuario y comandos.
Mantiene una historia de tus entradas.
Te informa de actividades en el canal utilizando la lnea de
modo.
Utilizando ERC
Una vez instalado ERC, que como ya dijimos no es parte estndar d
e Emacs, debes
agregar lo siguiente a tu /.emacs:
6
IRC son siglas del protocolo de Internet Internet Relay Chat (
RFC 1459), que especi ca una red inter
nacional para conectarse y charlar en tiempo real.

138
Internet
( r e q u i r e erc )
( r e q u i r e ercs p e l l i n g )
Y para iniciar el programa debes utilizar el comando M x erc selec
t, quien te pregun
tar por el nombre del servidor al que debe conectarse. Una vez en un bu
ffer de ERC tienes
los siguientes comandos a tu disposicin:
Tabla 5.19 Emacs: comandos de ERC

ea o al

Enlace
C a
nal del prompt.
Enter

Comando/Descripcin
(erc bol) te lleva al inicio de la ln
(erc send current line) enva la lnea a

ctual.
Tab
mpt, completa la pa

(erc complete word) si ests en un pro


labra actual. En cualquier otro caso

, se mueve a la siguiente
M Tab
alabra actual utilizan
C c C b
ffer de ERC al que te
C c C c
va/desactiva el intrpre

liga o botn.
(ispell complete word) completa la p
do ispell.
(erc iswitchb) te pregunta por un bu
quieres cambiar.
(erc toggle interpret controls) acti
te de secuencias como comandos en lo

s mensajes.
C c C d
tiva, ingresa una accin
C c Tab
canal en uno por invita
C c C j
ar a un canal. Si el punto

(erc input action) de manera interac


de usuario y la enva al IRC.
(erc invite only mode) convierte el
cin (+i).
(erc join channel) te permite ingres
est al inicio del nombre de un canal,

utiliza ese nombre.


C c C n
channel en el canal
C c C p
sirve para salir del
C c C q
servidor despus de pre
C c C t
tema del canal.
C c C u
al utilizando erc bol se

(erc channel names) ejecuta /names #


actual.
(erc part from channel) este comando
canal actual.
(erc quit server) te desconecta del
guntarte la razn.
(erc set topic) te pregunta el nuevo
(erc kill input) elimina la lnea actu
guido de kill line.

5.15 Emacs
139
Mdulos
ERC viene con una manera poco estndar de agregar funcionalidad q
ue involucra la
utilizacin de mdulos. Hay mdulos de muchos tipos y para muy diversas f
unciones; para
activarlos debes asignar los deseados a la variable erc modules y a
continuacin ejecutar
erc update modules.
Aqu est una lista de los mdulos disponibles:
Tabla 5.20 Emacs: mdulos para extender ERC
Mdulo
autoaway

Descripcin
Asigna el estado de ausente (away) de manera au

autojoin

Te registra a ciertos canales de manera automtic

tomtica.
a.
bbdb
seccin 5.15.2).
button
textos interesantes.
ll
log
match
notify
tos usuarios.
pcomplete
readonly
replace
ring
scrolltobottom
smiley
spell
stamp
track
a lnea de modo.
truncate
unmorse

Integracin con la base de contactos BBDB (ver la


Convierte en botones a los URL, nombres y otros
Rompe lneas muy largas.
Guarda el contenido de los buffers en bitcoras.
Resalta amigos, tontos y otras palabras clave.
Te avisa cuando cambia el estado en lnea de cier
Completa nombres de usuarios y comandos.
Convierte las lneas mostradas en slo de lectura.
Reemplaza texto en mensajes.
Activa la historia de la entrada.
Mueve la vista al nal del buffer.
Convierte los emoticones en iconos.
Revisa tu ortografa.
Aade la hora a tus mensajes.
Rastrea toda actividad en el canal utilizando l
Trunca el tamao de los buffers a cierto tamao.
Traduce el cdigo morse en los mensajes.

Y listo; ahora puedes iniciarte en el arte de perder el tiempo


en lnea. Hay muchos
servidores de IRC en el mundo; los hay de muchos tipos y con todo t
ipo de temas para
conversar. Nosotros te recomendamos irc.freenode.net.

140
Internet
5.15.5.

TRAMP

TRAMP es un paquete para editar archivos remotos en Emacs y son si


glas de la frase
en ingls Transparent Remote ( le) Access, Multiple Protocol.
TRAMP se distribuye con versiones recientes de Emacs y, una vez ca
rgado, te permitir
el acceso a un sistema de archivos remoto para editar archivos, contro
l de versiones y dired
(ver la seccin 3.6.3).
El acceso al sistema remoto se puede lograr con distintos programa
s como rsh, rlogin,
telnet o con cualquiera que tenga un mtodo similar de acceso. TRAMP sop
orta conexio
nes utilizando ssh y es el mecanismo recomendado.
Para hacer su trabajo, TRAMP requiere tener acceso al sistema remo
to y hacer una
copia local para trabajar. La transferencia se puede realizar en una v
ariedad de formas.
Los mecanismos ms e cientes para transferir archivos grandes son rcp,
scp y rsync.
Los otros mecanismos requieren de herramientas adicionales para codi car
y transferir los
archivos en lnea, tales como mimencode o uuencode.
Para activar TRAMP debes agregar lo siguiente a tu /.emacs:
( r e q u i r e tramp )

Utilizando TRAMP
Aunque hasta el momento todo lo que hemos dicho de TRAMP suena com
plicado, te
sorprender lo sencillo que es utilizarlo. Imagina que deseas abrir el a
rchivo UNARCHIVO
en la mquina remota MAQUINA; entonces necesitas visitar el archivo, s, c
on el comando
C x C f ( nd le) y le das la siguiente ruta: /MAQUINA:UNARCHIVO. El mtodo
de
acceso por omisin es ssh; si deseas cambiarlo debes asignar el nuevo va
lor a la variable
tramp default method, por ejemplo con la lnea que aparece a continuacin:
( s e t q trampd e f a u l t method " scp " )
Aqu estn algunos ejemplos de las rutas para distintos archivos en sitios
remotos:
/moria.fciencias.unam.mx:.emacs, para editar tu /.emacs en tu dire
ctorio raz en
la mquina moria.fciencias.unam.mx.
/moria.fciencias.unam.mx:/.emacs, para editar el mismo archivo, ya
que se
expande a tu directorio raz.
/ada.fciencias.unam.mx:/etc/issue, para editar el archivo /etc/is
sue en el servidor
ada.fciencias.unam.mx.
Lo anterior supone que tu nombre de usuario en la mquina local es i
dntico al de la

remota. Si ste no es el caso, puedes indicarle a TRAMP el nombre en el


servidor remoto
en la misma lnea: /USUARIO@MAQUINA:MIARCHIVO.

5.15 Emacs
141
Tambin puedes especi car el mtodo de conexin para abrir cierto archi
vo, como
en: /ssh:juan@galadriel.fciencias.unam.mx:/home/juan/miarchivo.txt,
que se conec
tar utilizando ssh al servidor galadriel.fciencias.unam.mx como el u
suario juan.
5.15.6.

Diccionario

Adems de revisar la ortografa de tus documentos (ver la seccin 4.


3.17), puedes re
querir un diccionario. Aqu te mostramos cmo integrar y utilizar un cl
iente para un servi
cio de diccionarios en lnea, conocido como DICT o RFC 2229. Los ser
vidores de diccio
narios, aunque existen para muchos idiomas, manejan exclusivamente
ingls.
$ smart
La extensin que nos ocupa se llama Dictionary y ofrece una exce
lente interfaz, amiga
install
ble y navegable, para acceder a de niciones de palabras en uno o var
ios servidores. Sobre
dictionary el todo en computacin, cuntas veces te encuentras con palabras para las
que desearas tener
un diccionario a mano? Con este cliente y Emacs no tienes un dicci
onario, sino muchos.
Para activar este subsistema de Emacs debes agregar lo siguiente a
tu /.emacs:
( load " d i c t i o n a r y i n i t " )
Adems te recomendamos agregar tambin las siguientes dos lneas que
agregan enla
ces de teclas para dos de los comandos ms intersantes de dictionary:
( g l o b a l setkey [ ( c o n t r o l c ) ?s ] d i c t i o n a
r y search )
( g l o b a l setkey [ ( c o n t r o l c ) ?m]
d i c t i o n a
r y matchwords )

Utilizando dictionary
Puedes ejecutar el comando dictionary o utilizar alguno de los
enlaces de tecla que
de nimos arriba, C c s o C c m , para acceder al diccionario.. Todos
estos comandos
te llevarn a un nuevo buffer, con el modo mayor Dictionary.
Este buffer de dictionary est dividido en dos partes. La primer
a es la seccin de boto
nes que te permiten navegar las de niciones, buscar nuevamente, selec
cionar diccionarios
o salir del diccionario. La siguiente es la seccin de de niciones. Una
vez que dictionary
localiza una o varias de niciones solicitadas, las muestra en esta se
ccin.
Notars que en las de niciones aparecen palabras resaltadas con ot
ro color. stas son
referencias cruzadas y funcionan como hipertexto, es decir, son lig
as que puedes seguir y

dictionary te llevar a su de nicin.


La forma ms usual para interactuar con dictionary es con el com
ando dictionary search
que te pide en el mini buffer una palabra a buscar, pero utiliza co
mo propuesta inicial la
palabra ms cercana al punto. Por la frecuencia de su uso te recomend
amos asociar este
comando al enlace C c s , porque as puedes acceder a l rpidamente.
Dentro del buffer de dictionary tienes a tu disposicin los sigu
ientes comandos:

142
Internet
Tabla 5.21

Emacs: comandos de dictionary


Enlace

Comando/Descripcin

(dictionary close) cierra el buffer de dictio

(dictionary help) despliega la ayuda en lnea d

(dictionary search) te pregunta por una nueva

buscarla en los diccionarios.


(dictionary lookup de nition) busca la de nicin de

nary.
e dictionary.
palabra para
la pala
n o Tab
la siguiente liga.
p o Shift
la liga anterior.
m
y lista todas
Enter

bra cercana al punto.


(dictionary next link) posiciona el punto en
Tab

(dictionary prev link) posiciona el punto en


(dictionary match words) pregunta por un patrn
las palabras que casan con l.
Visita la liga.

LATEX
6
6.1. Introduccin
Una de las aplicaciones ms importantes de la computadora hoy en da es la
preparacin
de texto, sea ste para notas, una carta, un libro, reporte, artculo, tarea,
etc.
Un procesador de texto es un paquete al que le tecleas texto, con algu
nas observacio
nes y el paquete procede a formatear el texto. Entre las operaciones que de
seamos haga
con el texto estn las siguientes:
1. Armar los renglones de tal manera que quede el texto bien repartido.
2. Armar pginas de tal manera que se vayan numerando y que tengan todas el
mismo
tamao.
3. Facilitar el cambio de tipo de letra y proveer distintos tipos de letr
as como itlicas,
negritas, etc..
4. Facilitar la edicin de tablas de distintos tipos.
5. Facilitar la construccin de ecuaciones matemticas.
6. Facilitar la insercin de guras en el texto.
Muchos de los procesadores de texto pretenden hacer mucho trabajo por
ti. Por ejem
plo, al escribir una carta proveen maneras directas y fciles de formar la c
arta, pidiendo
nicamente el destinatario, el remitente, la rma, etc..
Hay fundamentalmente dos tipos de procesadores de texto, aquellos que
van mostran
do el resultado de la edicin en la misma pantalla, conforme se va escribien
do como es
el caso de Word y aquellos que funcionan con comandos de control y que eje
cutan un

144
LATEX
programa para poder ver cmo queda el texto ya formateado. LATEX es de este l
timo tipo.
Llamemos a los primeros de tipo intrprete, porque van interpretando conform
e van reci
biendo el texto, y a los segundos de tipo compilador, porque primero recib
en todo el texto
y despus lo transforman a las pginas correspondientes.
Cada uno de estos tipos de procesadores tiene sus ventajas y sus desve
ntajas. La prin
cipal ventaja del intrprete es que es ms fcil de usar y detectas inmediatamen
te cuando
algo no es como lo quieres. La principal desventaja es que supone demasiad
os parmetros
respecto a cmo quieres el texto, y toma muchas decisiones que son difciles d
e deshacer.
La principal ventaja de los compiladores es que te da un manejo ms preciso
del formato
que quieres, permitiendo de esta manera una edicin ms rpida. La principal des
ventaja
es que requiere un nivel de abstraccin mayor, ya que como no ests viendo1 el
resultado
de lo que haces, y tienes que compilarlo para verlo, trabajas ms a ciegas.
Se eligi LATEX para trabajar ac por varias razones, entre ellas:
(a) Es un paquete de distribucin gratuita, disponible en prcticamente todos
los sistemas
Unix y que est ampliamente documentado.
(b) La documentacin viene con LATEX, por lo que est accesible.
(c) Cuenta con un gran nmero de gente trabajando continuamente en el proye
cto, por lo
que hay muchos paquetes adicionales para casi cualquier cosa que se t
e pueda ocurrir,
como gra cacin, msica, animacin, entre otros.
(d) Es el ms usado en el medio de Ciencias de la Computacin y Matemticas par
a la
elaboracin de trabajos.
En suma, aun cuando no logres ver ms que una pequea parte, la estructura
de LATEX
es tal que el resto de los paquetes los podrs aprender a manejar por su cue
nta, conforme
los vayas requiriendo.
6.2. Componentes de un texto
Muchos se re eren a los procesadores de texto como procesadores de palab
ra, reco
nociendo con esto que el componente bsico de un texto son las palabras. Sin
embargo,
es en la forma de agrupar palabras donde realmente se formatea texto. Veam
os algunos
componentes importantes de un texto:
palabras
oraciones
prrafos
subsubsecciones subsecciones secciones
captulos
partes
documento
A partir de las subsubsecciones puedes poner ttulos y subttulos.
1
Esto, en realidad, ya no es del todo cierto, pues LATEX cuenta ya con i

ntrpretes que permiten ir viendo


cmo queda el texto conforme lo vas escribiendo.

6.3 Ambientes para formato


145
6.3. Ambientes para formato
Por el tipo de procesador que es LATEX, debes indicarle en qu ti
po de ambiente quieres
elaborar el documento. Los ambientes de nen los mrgenes que quieres (a
rriba, abajo,
derecho, izquierdo), qu componentes se vale que tenga el documento (
captulos, secciones,
partes), el tamao del rengln, la separacin entre prrafos, la sangra. LAT
EX cuenta, entre
otros, con las siguientes clases de documentos:
Tabla 6.1 LATEX: ambientes
Ambiente Nombre Descripcin
Reporte
report
Se utiliza para textos menos formales
que un libro o un artculo.
No tiene captulos, sino que agrupa a pa
rtir de secciones.
Artculo
article
Es, tal vez, el ambiente que ms seguido u
tilizarn para la en
trega de tareas, elaboracin de pequeos m
anuales, etc. Permite
escribir en dos columnas fcilmente.
Libro
book
Da toda la infraestructura para la pub
licacin de un libro, con
partes, captulos, secciones, etc. Permi
te preparar las pginas
para imprimir algo por los dos lados.
Acetatos
seminar
Supone un tamao de letra de cuatro vece
s el normal, con lo que
permite armar acetatos.
Cartas
letter
Permite elaborar cartas que acomodan d
e manera fcil el remi
tente, la rma, etc.
Cada una de las clases de documento supone un distinto ambiente.
El ambiente es lo
primero que le debes dar al compilador de LATEX .
Un archivo fuente de texto para LATEX consiste de:
Una especi cacin de ambiente
\ documentclass { r e p o r t }
El prembulo, donde especi cas algunos modi cadores para este ambien
te, como pue
den ser paquetes adicionales que quieras usar.
\ usepackage [ spanish ] { babel }
\ usepackage { ucs }
\ usepackage [ u t f 8 x ] { i n p u t e n c }
\ usepackage { amsmath }
Tambin en el prembulo puedes cambiar de manera explcita algunos d
e los parme
tros de la hoja.
\ setcounter { chapter } { 5 }

146
LATEX
\ a d d t o l e n g t h { v o f f s e t } { 2cm}
O, en general, establecer propiedades de los objetos con que vas a tr
abajar o incluir
de niciones:
\ input { definiciones }
\ i n c l u d e o n l y { segundo }
El documento propiamente dicho que empieza con
\ begin { document }
y termina con
\ end { document }
y entre estas dos marcas puede haber texto;
s t e es un documento que t r a e conceptos b s i c o s
comandos de LATEX;
\ begin { c e n t e r }
...
\ end { c e n t e r }
o, en general, comandos que insertan en ese lugar texto de otros arch
ivos:
\ include { primero }
\ i n c l u d e { segundo }
Actividad 6.1 En esta primera prctica de LATEX escribirs las observaciones e
n un ar
chivo de texto simple. Para ello, utilizando Emacs, debers abrir un archivo
nuevo donde
vayas escribiendo.
Actividad 6.2 Carga en tu Emacs el archivo template1.tex que se encuentra
en el subdi
rectorio indicado en la pgina 3.1.
Actividad 6.3 Compila el archivo fuente. Para hacerlo, vas a llevar a cabo
el siguiente
dilogo en la ventana de comandos. Irs anotando lnea por lnea la interaccin. Deb
er
estar subrayado lo que Emacs escribe y sin subrayar las respuestas.
Cc Cc
para invocar al compilador de LATEX.
Save le /home/usuario/template1.tex?(y/n)
pregunta si se desea actualizar la copia del archivo en el disco. La respu
esta deber ser s
(y) para que LATEX trabaje con la ltima versin.
Command: (Default LATEX )

6.3 Ambientes para formato


147
Invoca al compilador de LATEX para que trabaje sobre el archivo fuen
te. Se oprime la tecla
Enter . En este momento, el compilador mandar un mensaje:
Type teclaCc teclaCl to display results of compilation
Si tecleas en este momento Cc Cl , el compilador de LATEX ir mostrando,
conforme
va revisando el archivo, el resultado de la compilacin. Al terminar,
indicar si hubo o no
errores. Si no los hubo, aparecer un mensaje de que termin bien:
LATEX succesfully compiled (3) pages
donde dice, entre parntesis, el nmero de hojas que pudo armar con el t
exto dado. Tambin
aparece el mensaje en la otra mitad de la pantalla que dir que LATEX
termin o que tuvo
errores.
Para ver cmo quedaron las pginas compiladas, vuelve a teclear Cc Cc
y el
mensaje que aparecer es si deseas ver (View) cmo qued. Si oprimes la te
cla Enter se
abrir una ventana nueva que mostrar el resultado de la compilacin, util
izando para
ello el paquete xdvi. El archivo generado tiene el mismo nombre, per
o su extensin es dvi.
Si es que hubo algn error, LATEX te pedir que oprimas Cc  . (aunque
el mensaje
pide, en realidad, que teclee nada ms Cc y el acento grave (), en algun
os casos y
que tienen que ver conque tienes Emacs para que ponga acentos para e
l espaol, debers
repetir esta ltima tecla, o bien teclearla en combinacin con la tecla
Alt de la parte
derecha del teclado). En seguida, LATEX te llevar a donde se encuentr
a el error en el texto.

6.3.1.

Posibles errores

En este primer ejercicio realmente tendrs pocos errores que repor


tar. Generalmente
sern aqullos ocasionados por errores de dedo. Nta que LATEX tiene vario
s tipos de co
mandos:
i. Aquellos que estn entre \begin {...} y \end {...} , donde lo qu
e va entre llaves se repite.
Veamos algunos ejemplos:
\ begin { document }
....

\ end { document }

148
LATEX
\
\
\
\

begin { compactenum }
item . . . .
item . . . .
end { compactenum }

\ begin { c e n t e r }
...
\ end { c e n t e r }
A estos comandos les llamamos de ambiente porque delimitan a un texto pa
ra que
se les apliquen determinadas reglas.
ii. Tambin tenemos comandos que marcan el inicio y nal de un cierto tipo de
datos;
por ejemplo, carcteres matemticos. Para esto, cuando quieres que la frmul
a vaya
insertada entre el texto, puedes usar cualquiera de los dos ambientes
que siguen.
$
.... $
\(
. . . . \)
y cuando quieres que aparezca en un prrafo separado, tienes para ello cu
alquiera de
los dos ambientes que siguen.
$$
....
$$
\[
....
\]
iii. Aquellos que marcan lo que sigue, y que aparecen nicamente como comand
os de
control. A estos les llamamos comandos de estado, porque cambian el e
stado del am
biente:
Ejemplos:
\ bf
\ large
Estos comandos funcionan hasta nuevo aviso. Puedes delimitar tambin su ran
go de
accin si colocas entre llaves al comando y a todo a lo que quieres que s
e aplique:


\ l a r g e Esta es una prueba
y entonces el comando se referir nicamente a lo que est en las llaves ms i
nternas.
iv. Aquellos comandos que actan sobre sus parmetros:
\ s e c t i o n { Primera }
\ setcounter { section } { 4 }
v. Y por ltimo, aquellos comandos que simplemente se usan como abreviaturas
conve
nientes o para denotar smbolos especiales. Siempre empiezan con \
\ cdot
\ uparrow

6.4 Formato general de un documento


149
En el primero, segundo y tercer tipo de comandos es usual que se
te olvide cerrar un
ambiente, y entonces el compilador reportar que se encontr el nal del d
ocumento antes
de lo esperado, o algn mensaje donde indique que lo que sigue no tien
e sentido donde
est.
Es frecuente que tengas errores al teclear y LATEX no reconozca
el comando. En esos
casos sealar exactamente el lugar donde no est entendiendo.
En el ltimo tipo de comandos, adems del primer tipo de error, como
pudiera ser el
de teclear mal el nombre del comando, puedes tambin darle menos parmet
ros de los que
espera, o de distintos tipos. Por ejemplo, el comando
\ setcounter { section } { 4 }
espera una nmero entero en su segundo parmetro, por lo que si le diera
s otra cadena
protestara.
Muchas veces es necesario tener en el documento texto que no qu
ieres que aparezca en
la versin nal. Tambin pudiera suceder que tengas problemas con un coman
do particular
y quieras ver qu pasa si lo quitas, pero sin quitarlo realmente del a
rchivo. Lo que conviene
en esos casos es usar comentarios.
LATEX tiene dos tipos de comentarios. El primero, y el ms sencil
lo de usar, es el que
simplemente comenta el resto de una lnea. Para ello se usa el carcter
% (porciento), y
desde el punto en el que aparece hasta el n de lnea (en la pantalla, a
unque la lnea se haya
doblado) el compilador de LATEX no va a considerar eso para compilar y
no aparecer en
el trabajo nal.
La segunda manera es introduciendo el ambiente de comentario mediant
e
\ begin { comment }
...
\ end { comment }
y todo lo que quede en este ambiente quedar excluido de la compilacin
de LATEX. Para que
puedas usar esta forma de comentario, debes incluir el paquete comme
nt en el prembulo
de tu documento:
\ usepackage { comment }
Esta manera de incluir comentarios tambin puede ser muy til si ests
trabajando con
un archivo de texto muy grande y deseas compilar por pedazos.
6.4. Formato general de un documento
LATEX procesa los espacios en blanco de manera especial. Por ejem

plo, entre dos pala


bras un espacio en blanco es lo mismo que 25 o que un cambio de reng
ln; similarmente,
un rengln en blanco es equivalente a diez. En general, no respeta de
manera estricta el
formato que trae el documento fuente, pues su trabajo consiste, prec
isamente, en acomodar

150
LATEX
adecuadamente el texto de acuerdo a los comandos que recibe. Distin
gue una palabra de
otra por al menos un espacio en blanco, y un prrafo de otro por al m
enos un rengln en
blanco. La forma como aparece el texto fuente, en ausencia de separ
aciones de palabras o
prrafos, no tiene nada que ver con el formato nal, ni en el tamao del
rengln, ni en la
manera en que silabea.
LATEX se encarga de generar espacios entre los prrafos cuando en
cuentra dos cambios
de rengln seguidos (al menos un rengln en blanco). Tambin, cada vez qu
e empieza un
captulo, seccin, subseccin, etc. genera espacios verticales en blanco.
LATEX ofrece la posibilidad de manipular directamente los espac
ios que se dejan entre
prrafos o el cambio de rengln. En los comandos que siguen, <num> repr
esenta a un entero
positivo o negativo y <mdda> representa una unidad de medida, que p
uede ser pt, in, cm,
mm, ex, em o cualquier variable de longitud ex representa la altura
de una x mientras
que em representa el ancho de la letra m . Los comandos con que cue
ntas para manipular
los espacios se muestran en la tabla 6.2.
Tabla 6.2

LATEX: comandos para modi car espacios


Comando
\

Descripcin
Indica que se deje incondicionalmente un

espacio en blan
co; puede ser necesario cuando LATEX ge
nera algn cdigo
o que el compi

y suprime los blancos que lo separan.


Produce tambin un espacio en blanco, per
lador no puede usar para cambiar de lnea

.
\\

Cambia de rengln y el siguiente rengln em

\\[< num><mdda>]

margen izquierdo.
Da un cambio de rengln, pero salta, adems

pieza en el
de al rengln
\\ [< num><mdda>]
l nmero es negati

siguiente, tanto como se le indique. Si e


vo, retrocede en la hoja. El

a continua

cin de \\\\ es para


forzar a que se d el espacio; de otra ma
nera, LATEX decide
\vspace{<num><mdda>}

si aplica el espacio o no.


Da un espacio vertical del tamao especi ca

\vspace {<num><mdda>}
es

ro es negativo, retrocede en la pgina. Nue

do. Si el nme
vamente, el

para forzar a LaTeX a que recorra el es


pacio especi cado.
\smallskip

Permiten el desplazamiento vertical del

texto en un cuarto
\medskip
ip), media lnea ba
\ bigskip
saltos relativos

del tamao de la lnea base ( \\ baselinesk


se y una completa. Es muy til porque son
al tamao de letra que ests usando.
Conti

na en la siguiente pgina

6.4 Formato general de un documento


151
Tabla 6.2 LATEX: comandos para modi car espacios
Contina de la pgina anterior
Comando
\noindent
ece en el margen iz

Descripcin
Hace que un prrafo o rengln empi
quierdo de la hoja, en lugar d

e hacerlo con sangra.


\indent
zontal igual al de la sangra
\hspace{<num><mdda>}
o por el nmero. Si el n
\hspace {<num><mdda>}
a lnea. LATEX puede decidir

Obliga a dejar un espacio hori


de prrafos.
Deja un espacio horizontal dad
mero es negativo, retrocede en l
que el espacio no es adecuado

en ese punto y no obedecer.


Nuevamente, el

fuerza a LaTeX

a obedecer la instruccin.
Tanto \vspace como \hspace pudieran ser inhibidos por LATEX si
es que el compilador
considera que no se vera bien. Por ejemplo, si el desplazamiento ver
tical toca a principio
de una pgina, decide no hacerlo.
Todo documento, menos las cartas, deben tener un ttulo, autor(es
) y la fecha en que
fue impreso. Algunas veces se agrega una nota de agradecimiento. En
general, a esto se le
llama el ttulo. En el prembulo (antes de que empiece el documento pro
piamente dicho)
debes colocar los datos para que LATEX pueda armar el ttulo que se d
esea. Los comandos a
LATEX son:
\ t i t l e { E j e r c i c i o s de Latex }
Este es un comando con un parmetro que le indica a LATEX que el ttulo
del documento es
Ejercicios de Latex. Nota que el argumento debe ir entre llaves.
\ a u t h o r { E l Chapuln Colorado \ and Pepe G r i l l o }
Si se trata de ms de un autor, los nombres de los autores irn separad
os por la palabra
\and.
\ date { E l da ms b e l l o d e l p l a n e t a \ \
\ today }
En la fecha puedes poner lo que quieras, aunque se espera una fecha
. Las dos diagonales
inversas \\ sirven para cambiar de rengln, y las puedes utilizar en
casi cualquier momento.
El comando \today sirve para que LATEX inserte la fecha de hoy.
\ thanks { Gracias a l o s v o l u n t a r i o s de e s t e
t a l l e r }
Sirve para agregar, al pie de la pgina, algn comentario que se desee.
Este comando deber
aparecer una vez iniciado el documento propiamente dicho.
Como ya mencionamos, dependiendo de la clase de documento LATEX
se comportar de
manera diferente al compilar el texto fuente (la especi cacin de \docu

mentcl ass).
Actividad 6.4 Agrega encabezado al documento. Ponte t como autor, ju
nto con tus mejo
res amigos, el ttulo que a t ms te parezca y algn comentario respecto a
la fecha. Agrega

152
LATEX
un prrafo de agradecimiento tan grande como quieras. Recuerda nada ms qu
e debe ir
despus de \begin{document}. Compila y ve el efecto.
Actividad 6.5 El objetivo ahora es ver el efecto que tienen las distin
tas clases de docu
mento sobre lo que se imprime. En todas las acciones que siguen, haz e
l cambio, compila
y ve el resultado. Anota cul es el efecto del cambio. Convierte en come
ntarios (ya sea con
% o con \begin{comment} ... \end{comment} para conseguir que compile b
ien. Comenta tus
observaciones y qu es lo que tuviste que quitar para que compilara bien.
Cada vez que
cambies a un nuevo tipo de documento, quita los comentarios que hayas
puesto.
Actividad 6.6 Cambia el tipo de documento a article . Vuelve a compila
r y reporta lo que
observas, en cuanto al formato de la hoja.
Actividad 6.7 Haz lo mismo que en la actividad anterior, pero con la c
lase book.
6.4.1.

Cartas

Para escribir cartas, todo indica que el formato que le tiene que
dar LATEX es muy distinto
al de los documentos que hemos visto hasta ahora. Puedes meter en un m
ismo documento
varias cartas, ya que se espera que el remitente y la rma sean los mism
os para todas las
cartas incluidas en el documento. Por ello, una vez iniciado el docume
nto, debes especi car
estos dos parmetros. Veamos primero el remitente:
Remitente: Se re ere a lo que normalmente aparece en el tope de la carta
y que es la
direccin de aqul quien rma la carta:
\ address { Dra . Genoveva B i e n v i s t a \ \
Cub c u l o 003. E d i f . de Matem t i c a s \ \
F a c u l t a d de Ciencias , UNAM}
Puede consistir de uno o ms renglones. Si deseas ms de un rengln en e
l remitente,
separas los renglones con \\.
Firma: Para la rma se especi ca de manera similar al remitente:
\ s i g n a t u r e { Dra . Genoveva B i e n v i s t a \ \
P r o f e s o r T i t u l a r B}
Una vez que tienes de nidos estos parmetros, se procede a escribir ca
da una de las
cartas. Se delimita cada una de stas por
\ begin { l e t t e r }
. . .
\ end { l e t t e r }

Dentro de cada carta colocars los parmetros que se re eren a cada una de
ellas. Vea
mos cmo se hace:

6.5 Tipos y tamaos de letras


153
Destinatario: A continuacin de \begin{ letter } colocars entre llaves
los datos del desti
natario:
\ begin { l e t t e r } { D i s t i n g u i d o e s t u
d i a n t e de C i e n c i a s
de l a Computacin \ \
Primer I n g r e s o \ \
Generacin 2007}
Con esto, aparecer el texto inmediatamente antes de la carta.
Introduccin: Llamamos introduccin a la frase con la que se saluda o i
nicia la carta.
Tambin se relaciona nicamente con la carta en cuestin:
\ opening { Muy q u e r i d o e s t u d i a n t e : }
y este rengln aparecer al inicio de la carta.
Despedida: Esta es la frase que aparecer antes de que aparezca la rma
y jalar a la
rma a continuacin. Aparecer dondequiera que coloques el comando, p
or lo que lo
deber colocar inmediatamente antes del n de la carta ( \end{ lett
er } ).
\ c l o s i n g { Quedo de Uds . atentamente , }
Copias: Muchas veces quieres poner al pie de la carta la lista de l
as personas a las que
pretendes entregarle una copia de la carta. Esto se logra con e
l comando:
\ cc { Mis mejores amigos \ \
Mis estimados colegas \ \
Primer i n g r e s o en g e n e r a l }
Tambin este comando, como el de despedida, aparecer en donde lo
coloques, por lo
que lo debers colocar tambin al nal de la carta y despus de la de
spedida.
Actividad 6.8 Ahora cambia a la clase letter y modi ca el texto fuent
e para que parezca,
en efecto, una carta (o edita un archivo propio para ello). Observa
los resultados.

6.5. Tipos y tamaos de letras


Si revisas estas notas, hechas con LATEX, vers que existen una g
ran cantidad de tipos
de letras y tamaos que puedes usar dentro de tu documento. Para camb
iar el tamao de las
letras cuentas con comandos de estado, por lo que el que uno de ell
os aparezca se referir
a todo el ambiente en el que estn. Es conveniente, por ello, escribi
rlos entre llaves:
{ \ l a r g e e s t e es . . . . . . . }

154
LATEX
Veamos una lista de tamaos de letras con sus nombres en la tabla 6.3
.
Tabla 6.3

Tamaos disponibles para letras


Nombre
Descripcin del tamao
tiny

esta es una muestra diminuta

scriptsize

un poco menos pequea

footnotesize

creciendo un poco

small

esta es una muestra pequea

normalsize

este es el tamao normal

large
una muestra agrandada un poco
Large
Agrandamos la muestra un poco ms
LARGE
Muy grande
huge
Mucho muy grande
Huge
Sper extra grande!
HUGE
Sper dper extra grande!
Como se ve, tienes a tu disposicin siete tamaos distintos de letr
as (aunque en realidad
no hay casi diferencia entre huge, Huge y Huge. En cualquier lugar
donde puede aparecer
texto, ste puede aparecer agrandado o empequeecido. Sin embargo, cuan
do se est usan
do ambiente matemtico estos comandos no tendrn efecto alguno dentro d
el ambiente y
pueden causar un mensaje de aviso.
Actividad 6.9 Vuelve a cargar el archivo CalcProp.tex para que vuel
vas a tener la versin
original.
Actividad 6.10 Localiza en el documento fuente aquellos renglones q
ue estn precedidos
por la palabra \item. A cada uno de ellos, ponle uno de los tamaos d
e letra listados ante
riormente, encerrando el comando y el texto correspondiente entre l
laves. Compila y ve el
resultado.
Actividad 6.11 Quita las llaves que delimitan el texto. Compila y v
e el resultado.
Actividad 6.12 Haz que la primera letra de cada prrafo empiece en ca
da uno de los
tamaos especi cados. Compila y ve el resultado.

6.5 Tipos y tamaos de letras


155
Veamos ahora cules son los tipos de letra que provee LATEX (se le
s denomina fonts).
Vienen tanto como comandos de cambio de estado como con un argument
o, que es el texto
que se va a cambiar.
Tabla 6.4 LATEX: comandos para cambios de tipo de letra
Decl.
\mdseries

Abr.

Comando
\textmd {...}

Descripcin
Medium Series, se re e

\ bfseries

\ bf

\ textbf {...}

Boldface Series, se

\rmfamily

\rm

\textrm {...}

Roman Family, un tip

\ sffamily

\ sf

\ textsf {...}

Sans Serif Family, l

\ ttfamily

\ tt

\ texttt {...}

Typewriter Family, l

re a tipo normal
re ere a negritas
o de letra
etras simples
etra
como de mquina de esc
ribir
\upshape
\itshape
\slshape

\ it
\ sl

\textup {...}
\ textit {...}
\ textsl {...}

Letras sin inclinacin


Texto en itlicas
Texto ligeramente in

\scshape

\sc

\ textsc {...}

T EXTO EN MAYSCULAS E

\textnormal {...}

Texto normal

clinado
S C A L A DAS
\normalfont

Todas las abreviaturas funcionan como cambios de estado, por lo


que si deseas que
nicamente se apliquen a un pedazo de texto, encerrars el comando junt
o con el texto
entre llaves, la que abre precediendo al comando.
Puedes utilizar otro tipo de texto, conocido como enfatizado, q
ue simplemente implica
un cambio de tipo de letra, que depende de la instalacin de LATEX. S
u abreviatura, es \em
y su comando es \emph{. . . }. Funcionan de manera similar al resto
de los cambios de tipo
de letra. Tiene la propiedad de que si est en modo enfatizado y se e
ncuentra un comando,
cambia a modo normal y viceversa:
{ \ em Veamos cmo f u n c i o n a e s t e comando cuando tenemos
{ \ em uno d e n t r o de o t r o } }

Veamos cmo funciona este comando cuando tenemos uno dentro de


otro

El ltimo comando, \textnormal, lo usas para escapar a algn tipo que


hayas dado
para todo un prrafo o una seccin:

156
LATEX
\ t e x t b f { Quieres que aparezca en n e g r i t a s , excepto
\ textnormal { este t e x t o } }
Quieres que aparezca en negritas, excepto este texto
Actividad 6.13 Modi ca el archivo CalcProp.ltx para que las primeras dos pa
labras de
cada prrafo sean con un tipo de letra distinto y un tamao distinto. Usa tod
os los tipos
listados, aunque repitas.
Actividad 6.14 Compila y reporta tus resultados.
A veces puedes combinar dos o ms tipos y tamaos de letras. Por ejemplo,
puedes
querer tener negritas de itlicas:
Negritas itlicas
Este tipo de combinaciones las consigues utilizando los comandos que
corresponden a
la declaracin, cuyo uso es de comando de estado:
{ \ b f s e r i e s \ i t s h a p e N e g r i t a s i t l i c a s
} } comparadas
con \ t e x t i t { I t l i c a s }
que produce
Negritas itlicas comparadas con itlicas
Si se utilizan los dos comandos de abreviatura
{ \ i t \ b f I t l i c a s n e g r i t a s } comparadas con \ t
e x t b f { n e g r i t a s }
nicamente se veri car el ltimo (ms interno) cambio de estado que se haya solici
tado:
Itlicas negritas comparadas con negritas
Lo mismo suceder con cualquier combinacin que se desee de dos tipos de letr
as: debers
combinar usando una como cambio de estado y la otra como comando con argu
mento
aunque la e cacia de esto depende del orden o las dos en modo de declaracin.
6.6. Listas de enunciados o prrafos
Un prrafo es un conjunto de oraciones que empiezan y terminan con dobl
e Enter .
En el documento fuente puedes observar un rengln en blanco para nalizar cad
a prrafo.
El aspecto en el documento formateado depender de los parmetros que tenga L
ATEX para
compilar ese texto aunque se pueden modi car, no lo haremos por el momento.
LATEX provee mecanismos para presentar listas de prrafos, ya sean nume
rados, etique
tados o con una marca separndolos entre s. En general, tienen el siguiente
formato:

6.6 Listas de enunciados o prrafos


157
\
\
\
\
\

begin { <tipo de lista >}


i t e m <prrafo>
i t e m <prrafo>
item . . .
end { <tipo de lista >}

Cada prrafo que desees marcar (numerar) deber ir precedido del co


mando \item.
Entre un \item y el siguiente, o entre \item y el nal de la lista pu
ede haber ms de un
prrafo.
Los <tipo de lista> que vas a manejar por lo pronto son los siguien
tes:
\ begin { enumerate }
<enumeracin de prrafos>
\ end { enumerate }
\ begin { i t e m i z e }
<listado de prrafos>
\ end { i t e m i z e }
\ begin { d e s c r i p t i o n }
<descripcin de prrafos>
\ end { d e s c r i p t i o n }
Cada uno de stos puede aparecer anidado en el otro, o anidado en
s mismo. Veamos
primero las numeraciones.
6.6.1.

Numeraciones

Empezaremos por el tema de incisos numerados. Veamos un anidamiento


de numeracin:
\ begin { enumerate }
\ i t e m Este es e l p r i m e r p r r a f o en e l p r i m e r n
i v e l
\ begin { enumerate }
\ i t e m Queremos v e r qu pasa a l a n i d a r en e l segu
ndo n i v e l
\ begin { enumerate }
\ i t e m Anidamos una vez ms para e l t e r c e r n i
v e l
\ i t e m Otro i n c i s o para que se vea qu pasa en
e l t e r c e r n i v e l
\ begin { enumerate }
\ i t e m Numeracin en e l c u a r t o n i v e l
\ end { enumerate }
\ end { enumerate }
\ i t e m Otro i n c i s o en e l segundo n i v e l de nume
racin
\ end { enumerate }
\ i t e m Otro i n c i s o en e l p r i m e r n i v e l de numera
cin
\ end { enumerate }
que produce el texto:

158
LATEX
1. Este es el primer prrafo en el primer nivel
a) Queremos ver qu pasa al anidar en el segundo nivel
1) Anidamos una vez ms para el tercer nivel
2) Otro inciso para que se vea qu pasa en el tercer nivel
a Numeracin en el cuarto nivel
b) Otro inciso en el segundo nivel de numeracin
2. Otro inciso en el primer nivel de numeracin

Como puedes observar, cada nivel lleva su propio contador y usa sus pr
opios mtodos
de numeracin. Los valores por omisin, como acabas de ver, son los nmeros arbig
os
seguidos de un punto para el primer nivel; las letras minsculas seguidas de
un parnte
sis para el segundo nivel; nuevamente nmeros arbigos, pero seguidos de un pa
rntesis
para el tercer nivel; y nuevamente letras maysculas, pero seguidas de un aps
trofo para
el cuarto nivel. LATEX admite nicamente cuatro niveles de anidamiento para
las nume
raciones. Las numeraciones tambin tienen de nidas espacio entre los distintos
niveles y
sangras para los mismos. Puedes de nir qu tipo de numeracin utilice. La manera
ms
fcil es incluyendo el paquete para numeraciones en el prembulo de tu documen
to fuente,
\usepackage{enumerate} y entonces podrs marcar qu tipo de numeracin deseas, c
olocan
do el que correspondera al primero de la lista:
\ begin { enumerate } [ ( a ) ]
\ i t e m Es un paquete de d i s t r i b u c i n g r a t u i t a , d i s p
o n i b l e
en p r c t i c a m e n t e todos l o s sistemas Unix , y que
e s t
ampliamente documentado .
\ i t e m La documentacin v i e n e con \ t e x t n o r m a l { \ LaTeX {
} } ,
por l o que e s t a c c e s i b l e .
\ end { enumerate }
Con esta opcin, produces la numeracin con las etiquetas que deseas:
(a) Es un paquete de distribucin gratuita, disponible en prcticamente todos
los sistemas
Unix, y que est ampliamente documentado.
(b) La documentacin viene con LATEX, por lo que est accesible.

6.6 Listas de enunciados o prrafos


159
Mientras que
\ begin { enumerate } [ I . ]
\ i t e m Es un paquete de d i s t r i b u c i n g r a t u i t a ,
d i s p o n i b l e en
p r c t i c a m e n t e todos l o s sistemas Unix , y q
ue e s t
ampliamente documentado .
\ i t e m La documentacin v i e n e con \ t e x t n o r m a l { \
LaTeX { } } ,
por l o que e s t a c c e s i b l e .
\ end { enumerate }
produce
I. Es un paquete de distribucin gratuita, disponible en prcticamen
te todos los sistemas
Unix, y que est ampliamente documentado.
II. La documentacin viene con LATEX, por lo que est accesible.
Adems del tipo de nmero a usar, indicas tambin una cierta manera de
editarlo. Por
ejemplo, en el caso anterior, cuando usas minsculas las colocas entr
e parntesis, mientras
que cuando usas nmeros romanos en mayscula, al nmero lo haces seguir p
or un punto.
Las maneras que tienes de numerar presentan al tipo de letra que
va a ir, precedido y/o
seguido de algn separador, como ):, :
Arbigos. El valor por omisin para el primer nivel. [1.]
Letras minsculas. [a]
Letras maysculas. [A:]
Nmeros romanos en minscula. [ i .]
Nmeros romanos en mayscula. [ I .]
Si aparece entre los corchetes algo que no sea identi cado como e
l primer nmero
de cierto tipo, LATEX simplemente repetir esa cadena frente a cada u
no de los prrafos
marcados con \item. Si deseas, por ejemplo, agregar un texto antes
del nmero, como Nota
1, lo que debes hacer es encerrar entre llaves lo que no correspond
e al nmero.
\ begi
\ item
\ item
\ end {
Nota 1. Primera nota.
Nota 2. Segunda nota.
Cabe aclarar que la sustitucin que hagas para el tipo de numerac
in afecta nicamente
al nivel en el que aparece. Los niveles anidados seguirn la convencin

por omisin descrita


arriba.

160
LATEX
6.6.2.

Listas marcadas
Cuando simplemente quieres marcar a cada prrafo con algn carcter, co

mo un guin,
un punto o algo similar, puedes utilizar las listas de prrafos:
\ begin { i t e m i z e }
\ item . . .
\ item . . .
. . .
\ end { i t e m i z e }

Tambin estas listas las puedes anidar entre s hasta cuatro niveles
de profundidad,
cambiando el carcter que marca a los distintos prrafos. Observa el sig
uiente ejemplo, con
el cdigo de LATEX a la izquierda y el resultado a la derecha.
\ begin { i t e m i z e }
\ i t e m Primero d e l p r i
ro del primer nivel
\ begin { i t e m i z e
\ i t e m Primero d e l
mero del segundo nivel
\ begin { i t e m
Primero del tercer nivel
\ i t e m Primero

m e r n i v e l
}
segundo n i v e l
i z e }
d e l t e r c e r n i v e l

Prime
Pri

Primero del cuarto nivel


\ begin { i t e m i z e }
\ i t e m Primero d e l c u a r t o n i v e l

Segundo del cuarto nivel


\ i t e m Segundo d e l c u a r t o n i v e l
Segundo del tercer nivel
\ end { i t
undo del segundo nivel
\ i t e m Segundo
\ end { i t e m i
do del primer nivel
\ i t e m Segundo d e l
\ end { i t e m i z e }
\ i t e m Segundo d e l p r i
\ end { i t e m i z e }

e m i z e }
d e l t e r c e r n i v e l
z e }

Seg
Segun

segundo n i v e l
m e r n i v e l

Al igual que en las numeraciones, no puedes tener ms de cuatro ani


damientos del
mismo tipo de listas.
Puedes modi car el carcter que quieras que use como marca en la lis
ta, colocando
el carcter deseado entre corchetes a continuacin de \item en el prrafo
seleccionado. El
cdigo se encuentra a la izquierda y el resultado a la derecha.

6.6 Listas de enunciados o prrafos


161

\ begin { i t e m i z e }
Primero del primer nivel
\ \ i t e m [
\ begin
+ Primero del segundo
\ i t e

] Primero d e l p r i m e r n i v e l
{ i t e m i z e }
nivel
m [ + ] Primero d e l segundo n i v e l

: Primero del tercer nivel


\ begin { i t e m i z e }
> Primero del cuarto nivel
\ i t e m [ : ] Primero d e l t e r c e r n i v e l
\ begin { i t e m i z e }

Segundo del cuarto nivel


\ i t e m [ > ] Primero
Segundo del tercer nivel
\ i t e m Segundo d e l
Segundo del segundo nivel
\ end { i t e m i z e }
\ i t e m Segundo d e l t e r
Segundo del primer nivel
\ end { i t e m i z e }
\ i t e m Segundo d e l segundo n i
\ end { i t e m i z e }
\ i t e m Segundo d e l p r i m e r n i v
\ end { i t e m i z e }

d e l c u a r t o n i v e l
c u a r t o n i v e l
c e r n i v e l
v e l
e l

Como puedes observar, a diferencia de las numeraciones, nicamen


te cambia el prrafo
de la lista que hayas marcado. El resto de las marcas se mantiene
igual. Hay manera de
cambiar la marca para todos los elementos del nivel de anidamiento
, de la misma manera
que se hizo con las numeraciones.

6.6.3.

Descripciones
El formato para las descripciones es:
\ begin { d e s c r i p t i o n }
. . .
prrafos marcados
. . .
\ end { d e s c r i p t i o n }

donde cada prrafo marcado lleva inmediatamente despus de \item, entr


e corchetes, el
ttulo que quieres aparezca para la descripcin. Este ttulo aparecer con
otro tipo de letra
que el normal, para destacarlo. El resto del prrafo se alinear dejan
do una pequea sangra.
Sigue un ejemplo en el siguiente cdigo.

162
LATEX
\ begin { d e s c r i p t i o n }
\ i t e m [ enumerate : ] Cada n i v e l se va numerando manteniendo un
c o n t a d o r para t a l e f e c t o .
\ begin { d e s c r i p t i o n }
\ i t e m [ segundo n i v e l ] Es una prueba para v e r s i t i e
n e s e n t i d o
meter o t r o n i v e l ms en d e s c r i p c i o n e s .
\ begin { d e s c r i p t i o n }
\ i t e m [ t e r c e r n i v e l ] Otra p r u e b i t a ms d
e l asunto
\ begin { d e s c r i p t i o n }
\ i t e m [ c u a r t o n i v e l ] Y an hay ms
\ begin { d e s c r i p t i o n }
\ i t e m [ q u i n t o n i v e l ] A v e r s i e
n e s t e t i p o de l i s t a s
s se v a l e
\ end { d e s c r i p t i o n }
\ end { d e s c r i p t i o n }
\ end { d e s c r i p t i o n }
\ end { d e s c r i p t i o n }
\ i t e m [ i t e m i z e : ] Cada p r r a f o se marca con un determinado
c a r c t e r ,
dependiendo d e l n i v e l de anidamiento .
\ i t e m [ d e s c r i p t i o n : ] S i r v e para poner e x p l i c a
c i o n e s o d e f i n i c i o n e s .
\ end { d e s c r i p t i o n }
que produce el siguiente texto:
enumerate: Cada nivel se va numerando manteniendo un contador para tal efe
cto.
segundo nivel Es una prueba para ver si tiene sentido meter otro niv
el ms en des
cripciones.
tercer nivel Otra pruebita ms del asunto
cuarto nivel Y an hay ms
quinto nivel A ver si en este tipo de listas s se vale
itemize: Cada prrafo se marca con un determinado carcter, dependiendo del ni
vel de
anidamiento.
description: Sirve para poner explicaciones o de niciones.
Es importante que notes que en el caso de las descripciones puedes ani
dar tantas veces
como lo desees.
Vamos a crear un archivo nuevo para escribir algunas preguntas y respu
estas respecto a
las listas de prrafos que te acabamos de presentar. Para ello:
Actividad 6.15 Crea un archivo con clase de documento article y que use lo
s mismos
paquetes que usa CalcProp.tex.

6.6 Listas de enunciados o prrafos


163
Actividad 6.16 Ponle como ttulo tu nombre y el nmero de actividad.
Actividad 6.17 A continuacin, escribe en el archivo el nombre de cad
a paquete que usas
y una breve descripcin de para qu lo usas (los nombres de los paquete
s te deben dar una
idea).
Ahora que ya tienes ms comandos que teclear, veremos algunas tar
eas que Emacs te
facilita:
1. Aparear bien los ambientes en
\ begin { . . . }
...
\ end { . . . } +
Esto se consigue tecleando C c C e y en la lnea de comando de E
macs aparecer
Environment t y p e ( d e f a u l t . . . )
Generalmente, el valor por omisin es el del ltimo ambiente elegi
do o itemize, si
es la primera vez en la sesin que lo solicitas. Si tecleas Ente
r , proceder a crear la
pareja \begin {..} \end {..} , dejando el cursor entre ellos p
ara que procedas a escribir. Si
el ambiente que elegiste es alguna lista, coloca el primer \it
em. Si la lista elegida es
description , pregunta por la primera etiqueta.
Este comando de Emacs va guardando los ambientes que le vas so
licitando. Puedes
recorrer la lista de comandos usados con la echa vertical. Cuan
do es la primera vez
que vas a usar un ambiente dado, simplemente tecleas el nombre
del ambiente (por
ejemplo, enumerate, description) para que lo meta a la lista d
e ambientes disponi
bles.
2. Cerrar algn ambiente que est abierto: C c ] . Con este comando,
Emacs coloca el
\end {..} del \begin {..} ms cercano que no haya sido cerrado.
Actividad 6.18 Haz una lista de invitados a una boda, donde separes
los invitados de los
padres del novio, los padres de la novia, los invitados del novio y
los invitados de la novia.
Esta lista deber aparecer en el archivo que acabas de crear. La list
a deber facilitar sacar
el total de invitados a la boda.
6.6.4.

Listas ms compactas

Como puedes observar de los ejemplos que mostramos, muchas vece


s el espacio entre
los incisos en cada tipo de lista es excesivo. LATEX cuenta con un
paquete de LATEX que
te permite acortar estos espacios, el paquete paralist . Este paque
te, adems de acortar los

espacios verticales, asume las funciones del paquete enumerate perm


itiendo modi car las
etiquetas de las distintas listas. Para poder hacer esto ltimo, pasa
s como opciones al cargar
el paquete newenum y newitem de la siguiente manera:

164
LATEX
\ usepackage [ newenum , newitem ] { p a r a l i s t }
Si usas este paquete, es conveniente ya no cargar el paquete enumerate
. Proporciona los
siguientes ambientes:
\ begin { compactenum }
...
\ end { compactenum }
\ begin { compactitem }
...
\ end { compactitem }
\ begin { compactdesc }
...
\ end { compactdesc }
Estos tres ambientes resultan muy cmodos para compactar un poco el text
o que se est
produciendo. En este libro es ms comn que usemos estos ambientes que los ori
ginales de
LATEX. paralist tiene adems listas corridas en un nico rengln, pero no las revi
saremos
en este momento.
6.7. Tablas
En general, LATEX provee comandos para de nir tablas de los tipos ms varia
dos. Vere
mos ac nicamente las ms sencillas, aunque no por eso poco poderosas.
Una tabla es un conjunto de renglones alineados por columnas. Por ello,
para que LATEX
vaya acomodando las columnas le debes dar el nmero de columnas y el formato
de de
cada una de ellas. El formato general de una tabla de texto es el siguient
e:
\ begin { t a b u l a r } [ <pos> ] { <cols> }
<renglones>
\ end { t a b u l a r }
Es necesario aclarar que una tabla puede aparecer en cualquier posicin
donde aparezca
una palabra. Por ello, es conveniente en la inmensa mayora de los casos pre
ceder y suceder
a la tabla con un rengln en blanco.
El argumento que va entre corchetes, <pos> se re ere al caso en que dese
es que la tabla
aparezca a continuacin de una palabra, si la queremos alineada desde arriba (
[ t ] ), desde
abajo ( [b]) o centrada [c] , que es el valor por omisin. Este parmetro no t
endr sentido si
se deja, como acabamos de mencionar, un rengln en blanco antes y despus de l
a tabla.
El argumento <cols> se re ere al formato que debern tener las columnas de
la tabla,
y que ser aplicado a cada uno de los renglones. Debes especi car el formato p
ara cada

una de las columnas que deseas tener en la tabla. Tambin especi cas si se deb
e colocar

6.7 Tablas
165
algo entre las columnas. De esto, <cols> corresponde a una lista de
especi cadores, que
se re eren a la sucesin de columnas e intercolumnas:
Tabla 6.5

Modi cadores para la de nicin de columnas


Especi cacin
Descripcin
l

Especi ca que el contenido de esta columna se colo

car pegado a la
izquierda, y ocupar tanto espacio como requiera p
ara quedar conte
r
c
p{<ancho>}

nido en un rengln.
Similar al anterior, pero pegado a la derecha.
Similar al anterior, pero centrado.
Da un ancho jo para la columna. LATEX acomodar el

texto como si
fuera un prrafo, ocupando tantos renglones como s
ea necesario.
m{<ancho>}
un nmero distinto

Igual que p, excepto que si hay columnas que dan


de lneas para el mismo rengln, centra verticalment

e el contenido de
las columna.
Para estas dos opciones, el {<ancho>} deber estar dado en:
in
pulgadas
cm
centmetros
mm
milmetros
pt
puntos
em
ancho de carcter
Algn nombre de longitud
|
Una lnea vertical que separa columnas.
||
Dos lneas verticales separando las columnas.
En los primeros tres casos, el tamao

nal de la columna ser el mximo

de todos los
renglones de la tabla. Si es que va a haber mucho texto en cada col
umna, te recomendamos
usar la cuarta o quinta descripcin, para que el rengln se doble y se co
nforme un prrafo.
Los renglones se componen de material que quieres en cada column
a. Cada vez que
deseas cambiar de columna, debes insertar un carcter & y cada vez qu
e quieras cambiar de
rengln debers agregar al nal del rengln \\.
Puedes colocar lneas entre cada dos renglones con el comando \hli
ne. Cuando no es el
primero de los renglones, debe venir a continuacin de un cambio de r
engln. Veamos un
ejemplo sencillo a continuacin.

166
LATEX
\ begin { t a b u l a r } [ t ] { cccc }
l e t r a s y smbolos \ \
palabras & oraciones
& p r r a f o s & subsecciones \ \
secciones & cap t u l o s
& p a r t e s & documento
\ end { t a b u l a r }
Se tiene una tabla con cuatro columnas y dos renglones y se usa & p
ara separar las
columnas entre s. Se utilizan \\ para separar los renglones. La tabla q
ueda de la siguiente
manera:
letras
pa
sec
Es importante que notes que lo que corresponde a un rengln formado
no forzosamente
tiene que aparecer en el mismo rengln en el cdigo. Slo en el caso en que
la especi
cacin de la columna sea p o m, el introducir un rengln en blanco ser inter
pretado
como cambio de prrafo, que lo realiza dentro del mismo rengln de la tabl
a y en la misma
columna.
Actividad 6.19 Crea un archivo Tablas.tex y copia el prembulo de CalcPr
op.tex. Copia
la de nicin de la tabla anterior, compila y ve el resultado.
Actividad 6.20 Modi ca la tabla anterior para que quede de la siguiente
manera:
letras y smbolos
prrafos
captulos

palabras
subsecciones
partes

oraciones
secciones
documento

don
de la primera columna est justi cada a la izquierda, la segunda centrada
y la tercera a la
derecha. La tabla tiene tres columnas en lugar de cuatro.
6.7.1.

Multicolumnas

En la tabla anterior, el texto letras y smbolos ocupa mucho ms espac


io que el resto
de los textos en esa columna. Por ello, se toma la decisin de que este
texto ocupe dos
columnas. Si lo separas a pie queda mal distribuido, pues interviene el
espacio entre
columnas:
letras
palab

seccio

6.7 Tablas
167

Para que se centre en dos columnas puedes utilizar el comando


\ m u l t i c o l u m n { <nm> } { < c o l s > } { < t e x t o
> }
donde {<nm>} es el nmero de columnas de la tabla original que va a oc
upar; {#<cols>} es
la manera de acomodar esa columna, con sus posibles carcteres entre
columnas; y {<texto>}
es lo que queremos que aparezca en esa nueva columna. Un \multicolu
mn puede aparecer
en cualquier lugar donde pueda aparecer el contenido de una columna
, al inicio de un
rengln o inmediatamente a continuacin de un &. Debes tener cuidado de
que el nmero
de columnas que se coloca en {<nm>} no exceda el nmero de columnas qu
e quedan
disponibles en el rengln, a partir de la columna donde se est colocan
do el comando. La
tabla queda como sigue:

\ begin { t a b u l a r } [ t ] { cccc }
\ m u l t i c o l u m n { 2 } { c } { l e t r a s y smbolos
} \ \
palabras
& o r a c i o n e s & p r r a f o s & subsecciones \ \
secciones & cap t u l o s & p a r t e s & documento
\ end { t a b u l a r }

y se forma como sigue:


letras y smbolos
palabras oraciones
secciones captulos

prrafos
partes

subsecciones
documento

Puedes usar el comando de \multicolumn tambin para modi car exclus


ivamente el con
tenido de una columna en un determinado rengln. Por ejemplo, si dese
as que para esa
columna en ese rengln en lugar de estar centrado est justi cado a la de
recha, o que no
tenga separadores entre columnas. Puedes hacer esto para lograr, si
n juntar columnas, casi
el mismo efecto que lograste uniendo dos columnas:

168
LATEX
\ begin { t a b u l a r } [ t ] { cccc }
\ m u l t i c o l u m n { 1 } { r } { l e t r a s y }&
\ m u l t i c o l u m n { 1 } { l } { smbolos } \ \
palabras
& o r a c i o n e s & p r r a f o s & subsecciones \ \
secciones & cap t u l o s & p a r t e s & documento
\ end { t a b u l a r }
El texto formado queda como se muestra a continuacin. Nota que, aho
ra s, desapare
ci el espacio de ms entre y y smbolos.
letras y smbolos
palabras oraciones
prrafos
subsecciones
secciones captulos
partes
documento
Tambin puedes aprovechar las multicolumnas para poner ttulos a la tab
la o pies de
pgina:
Componentes de un documento de LaTeX
letras y smbolos
palabras oraciones
secciones captulos

prrafos
partes

subsecciones
documento

Se puede numerar a partir de subsecciones


En general puedes agregarle modi cadores a las columnas para que el
texto de esa co
lumna tenga un tamao o tipo particular. Por ejemplo, para el ttulo de la
tabla agregas al
principio del texto el modi cador \ bf y para el ltimo rengln cambias el t
amao del ca
rcter a \ footnotesize. Estos cambios se aplican nicamente a esa columna
y en ese rengln.
Asimismo, puedes saltar lneas en blanco entre renglones, simplemente ag
regando cambios
de lnea ( \\ ) al nal del rengln.
Actividad 6.21 Repite la tabla que construiste y modifcala para agregar
le el ttulo y el
ltimo rengln.
6.7.2.

Separacin de renglones y columnas

Como mencionamos al decir qu puede ir en {<cols>}, dijimos que puede


s tener una o
dos lneas verticales que separan a las columnas. Tambin puedes tener lnea
s horizontales
que separen a los renglones. Veamos la siguiente tabla que incluye sep
aradores de columna
y de rengln.

6.7 Tablas
169
Ambiente
Reporte
s que un libro o un art

Nombre
report

Descripcin
Se utiliza para cosas menos formale
culo. No tiene captulos, sino que ag

rupa a partir de seccio


Artculo
o utilizars para la

article

nes.
Es, tal vez, el ambiente que ms seguid
entrega de tareas, elaboracin de peq

ueos manuales, etc.


Permite escribir en dos columnas fci
lmente.
que fue producida por el siguiente cdigo:
\ begin { t a b u l a r } [ t ] { | l | l | p { 8cm } | }
\ hline
Ambiente& Nombre& D e s c r i p c i n \ \
\ hline
Reporte& r e p o r t &Se u t i l i z a para cosas menos f
o r m a l e s
que un l i b r o o un a r t
c u l o . No
t i e n e cap t u l o s , s i
n o que agrupa
a p a r t i r de secciones .
\ \
\ hline
A r t c u l o& a r t i c l e &Es , t a l vez , e l ambient
e que ms seguido
u t i l i z a r s para l a e
n t r e g a
de t a r e a s , e l a b o r
a c i n de pequeos
manuales , e t c . Permite e
s c r i b i r en dos
columnas f c i l m e n t e .
\ \
\ hline
\ end { t a b u l a r }
Observa que antes de cada \ hline , excepto el primero, debe ha
ber un cambio de rengln.
En cambio, despus del \ hline no es necesario un cambio de rengln. Co
mo ya vimos, pue
des modi car el tipo y/o tamao de cualquiera de los contenidos de una
columna en un
determinado rengln. Por ejemplo, se acostumbra que los ttulos vayan e
n negritas. Tam
bin deseas lneas dobles horizontales entre los ttulos y el contenido d
e la tabla. Juguemos
un poco con eso. Para no ocupar tanto espacio nada ms mostraremos el
rengln o ren
glones que estemos modi cando. Lo primero que haremos es separar a lo

s encabezados de
columnas con lneas dobles y ponerlos en negritas, de la siguiente ma
nera:
\ hline \ hline
\ b f Ambiente& \ Large \ t e x t b f { Nombre } & \ sc D e
s c r i p c i n \ \
\ hline \ hline
Integrados estos cambios, la tabla se ve como sigue:

170
LATEX

Ambiente
Reporte
s que un li

Nombre
report

D ESCRIPCIN
Se utiliza para cosas menos formale
bro o un artculo. No tiene captulos,

sino que
Artculo

article

agrupa a partir de secciones.


Es, tal vez, el ambiente que ms seguid

o uti
lizarn para la entrega de tareas, el
aboracin de
pequeos manuales, etc. Permite escri
bir en dos
columnas fcilmente.
Supongamos que le agregas dos renglones ms, pero que por el momento no t
ienes
decidido qu escribir en la descripcin:
A c e t a t o s&seminar \ \ \ h l i n e
Cartas& l e t t e r \ \ \ h l i n e
Y veamos cmo se ve la tabla:
Ambiente
Reporte
s que un li

Nombre
report

D ESCRIPCIN
Se utiliza para cosas menos formale
bro o un artculo. No tiene captulos,

sino que
Artculo

article

agrupa a partir de secciones.


Es, tal vez, el ambiente que ms seguid

o utili
zars para la entrega de tareas, elab
oracin de
pequeos manuales, etc. Te permite es
cribir en
dos columnas fcilmente.
Acetatos
Cartas

seminar
letter

Nota que falta la lnea vertical al nal. Esto es porque no especi caste nad
a para la
tercera columna. Cuando tienes lneas verticales para separar columnas, debe
s completar
todas las columnas en cada rengln. Los renglones agregados debieron tener l
a siguiente
forma:
A c e t a t o s &seminar & \ \ \ h l i n e
Cartas & l e t t e r & \ \ \ h l i n e
Veamos cmo queda la tabla, que se muestra a continuacin.

6.7 Tablas
171
Ambiente
Reporte

Nombre
report

D ESCRIPCIN
Se utiliza para cosas menos f

ormales que un li
bro o un artculo. No tiene capt
ulos, sino que
Artculo

article

agrupa a partir de secciones.


Es, tal vez, el ambiente que ms

seguido utili
zars para la entrega de tareas
, elaboracin de
pequeos manuales, etc. Te perm
ite escribir en
dos columnas fcilmente.
Acetatos
Cartas

seminar
letter

Supongamos ahora que quieres agregarle a la tabla un ttulo, que


quede dentro de la
tabla en el primer rengln. Para eso puedes utilizar nuevamente el co
mando \multicolumn.
Debes tener cuidado si es que las columnas originales tienen separa
cin por columnas,
porque debes especi car explcitamente las nuevas separaciones. Quieres
el ttulo centrado,
pero de ancho mayor que el resto de los renglones. Para lograrlo po
nes un rengln en blanco
antes y despus. Veamos cmo funciona en la tabla que estamos usando co
mo ejemplo:
\ multicolumn { 3 } { | c | } { } \ \
\ m u l t i c o l u m n { 3 } { | c | } { \ Large \ t e x
t b f { Clases de documentos
en \ t e x t n o r m a l { \ LaTeX { } } } } \ \
\ multicolumn { 3 } { | c | } { } \ \ \ h l i n e

Ambiente
Reporte

Clases de documentos en LATEX


Nombre
D ESCRIPCIN
report
Se utiliza para cosas menos f

ormales que un li
bro o un artculo. No tiene capt
ulos, sino que
Artculo

article

agrupa a partir de secciones.


Es, tal vez, el ambiente que ms

seguido uti
lizarn para la entrega de tare
as, elaboracin de
pequeos manuales, etc. Permite
escribir en dos
columnas fcilmente.
De los ejemplos anteriores, es claro que cuando colocas carctere
s entre las columnas,
dejar renglones en blanco no es trivial.
Al igual que cuando no tienes lneas entre las columnas, puedes u
tilizar \multicolumn

para quitar las lneas de una determinada columna en un cierto rengln.


La manera como
se asocian las separaciones de columnas son:
La primera columna tiene asociadas la lnea a su izquierda y a su
derecha.

172
LATEX
A partir de la segunda columna, cada columna debe rede nir su lnea dere
cha.
Actividad 6.22 Codi ca la siguiente tabla, que es una nueva versin de la
tabla anterior.
Ten cuidado con las lneas que separan las columnas. Observa que puedes
trabajar a partir
de la tabla ya codi cada.

Tema:
Ambiente
Reporte
formales que un li

Nombre
report

Clases de documentos en LATEX


D ESCRIPCIN
Se utiliza para cosas menos
bro o un artculo. No tiene c

aptulos, sino que


agrupa a partir de seccione
s.
Artculo
ms seguido utili

article

Es, tal vez, el ambiente que


zars para la entrega de tare

as, elaboracin de
pequeos manuales, etc. Te pe
rmite escribir en
dos columnas fcilmente.
** La lista no es exhaustiva

6.7.3.

Lneas incompletas verticales y horizontales

Veamos la tabla que se encuentra a continuacin a la izquierda. Entre el


segundo y tercer
rengln no quieres una lnea completa, sino nicamente una que cubra la segu
nda y tercera
columna. Esto se consigue con el comando \cline{ci cf}, donde ci es el
nmero de la
columna inicial y cf es el nmero de la columna nal. A su lado se muestra
la codi cacin
de la tabla, donde puedes ver en la cuarta lnea de la codi cacin el uso de
l comando
\ cline{23}, que indica que la lnea parcial empieza en la columna 2 y te
rmina en la 3.
\ begin { t a b u l a r } { | c
| c | c | | c | }
Veri cador de Paridad
\ hline
Sigma
\ m u l t i c o l u m n { 4 }
{ | c | } { \ b f V e r i f i c a d o r \ de \
Paridad } \ \ \ h l i n e
\ h l i n e
Q
0
1
F
&\ m u l t i c o l u m n { 2
} { c | | } { \ b f Sigma }
PAR PAR NON 1
& \ \ \ c l i n e {2 3}

NON NON PAR 0

\ bf Q & 0 & 1 & F \ \ \ hlin

e
PAR & PAR & NON & 1 \ \ \ h l
i n e
NON & NON & PAR & 0 \ \ \ h l
i n e
\ end { t a b u l a r }
Tienes tambin el comando \vline que introduce una lnea de separacin de
columna,

6.7 Tablas
173
que cubre toda la columna. Se codi c como se muestra a la derecha de
la tabla formada.
\ begin { t a
b u l a r } { | c | l | }
\ hline
Esta es &
una prueba \ \
Esta es
Para mostrar la divisin
a r \ v l i n e \
la

una prueba
arti cial

\ hline
Para m o s t r
d i v i

s i n & a r t i f i c i a l \ \ \
\ hline
\ end { t a b
u l a r }
Como se puede ver, en la cuarta lnea del cdigo aparece, a mitad
de la columna, el
comando \vline. Va seguido de la secuencia \ que obliga a dejar un
espacio en blanco
entre el comando y lo que sigue. Tambin hay que recordar que el for
mato del cdigo no
in uye en el de la tabla, por lo que puedes partir renglones arbitra
riamente en el cdigo.

6.7.4.

Espacio entre los renglones


Para terminar con esta seccin hablaremos un poco de cmo estirar el

espacio entre
renglones de una tabla, forzando a que las separaciones de columna
se mantengan. Esto
es deseable cuando quieres que haya ms separacin entre renglones que
la normal, pero
no tanto espacio como lo da un rengln en blanco. Puedes modi car la d
istancia dada
por el cambio del rengln colocando un argumento a continuacin de \\
con el formato
[< num > < medida >]. Veamos un ejemplo, en el que agregamos 4 y 1
0 puntos al
cambio de rengln. El cdigo se encuentra a la derecha y la tabla form
ada a la izquierda.
\ begin { t a b u l
a r } { | c | l | }
\ hline
Esta es & una pr
ueba \ \ [ 4 p t ]
Esta es
una prueba
\ hline
Para mostrar la divisin arti cial
Para m o s t r a r \
v l i n e \
la
d i v i s i n
&
a r t i f i

c i a l \ \ [ 1 0 pt ]
\ hline
\ end { t a b u l a
r }
Observa que las lneas verticales que separan a las columnas se
extienden para cubrir
toda la columna.
< num > puede ser negativo tambin, forzando a que haya un retroc
eso. El cdigo
se encuentra a la derecha de la tabla formada:

174
LATEX
\ begin { t a b u l a
r } { | c | l | }
\ hline
Esta es & una pru
eba \ \ [ 6 p t ]
Esta es
r \ v l i n e \

una prueba

\ hline
Para m o s t r a

arti cial

d i v i s i n
& a r t i f i c i a l

la

Para mostrar la divisin


\ \ [ 1 0 pt ]

Ac mostramos el efecto de subir la raya


{ 2 } { | l | } { Ac

\ hline
\ m u l t i c o l u m n
mostramos \

v l i n e \
e l e f e c
t o de s u b i r
l a raya }
\ \ [ 6 p t ]
\ hline
\ end { t a b u l a r
}
Actividad 6.23 Codi ca la siguiente tabla:

Ao
1971
72
73

Bonetera Cient ca, S. A.


Precio
bajo alto
Comentarios
97 245
Mal ao.
245 245
Poco comercio debido a
un invierno crudo.
245 2001 Ningn gnus fue buen
gnus este ao.

6.8. Frmulas matemticas y smbolos especiales


Hasta ahora has escrito texto que si bien te permite escribir, por ej
emplo, una novela,
no te sirve de mucho para cuando quieres escribir texto un poco ms especia
lizado. En
estas notas han aparecido muchos carcteres especiales. En general, deseas
poder escribir
carcteres especiales y, en particular, frmulas matemticas.
Para algunos carcteres especiales, como pudieran ser las vocales acent
uadas del es
paol, las diresis en la u o la tilde en la n, hemos logrado que Emacs se co
mporte como
mquina de escribir y haga que el apstrofo (), la tilde () y las comillas ("
) se comporten
lo que se conoce como smbolos sordos, esto es, que no escuchen hasta que se te
clee

el siguiente carcter o bien est con gurado el teclado para que la combinacin d
e tecla
con Alt produzca los carcteres acentuados . Sin embargo, pudiera ser que no
estuviera

6.8 Matemticas en LATEX


175
Emacs habilitado de esta manera. En general, LATEX provee mecanismo
s para que se im
priman una gran cantidad de smbolos que no aparecen en el ingls, pero
que se usan en
idiomas como el francs, el espaol y el alemn. Casi todos empiezan con
una diagonal
inversa \ y siguen con el cdigo especial dado a ese carcter. LATEX lo
s llama smbolos.
Veamos a continuacin una lista de los ms usados:
Tabla 6.6

Acentos
\{o}

\{o}
\{o}

\={o} o

\.{o}
o

\v{o} o

\c{o} o

\H{o} o

\d{o} o.

\^{o}

\b{o} o

\"{o}

\u{o}

o
\t{oo} o o

\{\i}

En todas estas combinaciones puede aparecer cualquier carcter al


fabtico. En el caso
de que lo que siga a la \ sea un smbolo especial, no es necesario po
ner al argumento entre
llaves: \a y \^d d.
Los smbolos que siguen no tienen argumentos, sino que se sustitu
yen tal cual se espe
ci can.
Tabla 6.7

Smbolos no ingleses
\ae

\oe

\aa

\AA

\OE

\O

\l

\L

\o 

\ss

\AE
?

Se tienen algunos smbolos de puntuacin que resultan tiles. Se incl


uyen ac tambin
los smbolos que tienen algn signi cado especial en LATEX.
Tabla 6.8

Smbolos de puntuacin y especiales


\dag

\S

\copyright
c

\P
\ddag

\pounds

\#

\%

\&

\_ \&

\$ $
{ }+

&

_ &&verb+

{}
Finalmente, cuando se trate de que un smbolo aparezca tal cual, si

n que sea interpretado por LATEX (por ejemplo, la diagonal inversa \) simplemen
te usas el comando

\verb+texto+ y todo el texto que aparece entre los smbolos + no ser int
erpretado y
aparecer en la pgina tal cual lo tecleaste2 .
2
Usando este comando es como se han escrito algunos de los com
andos en todo este texto.

176
LATEX
Actividad 6.24 Crea un archivo nuevo copiando el prembulo que hemos vis
to hasta ahora.
Actividad 6.25 Construye una tabla de cinco columnas en las que veas e
l resultado de
aplicar seis de los tipos de acentos a las cinco vocales.
6.8.1.

Frmulas matemticas

El tipo de texto que hemos escrito hasta ahora es lo que LATEX de


nomina texto LR
(left to right) y que consiste fundamentalmente de prrafos que se acomo
dan en la hoja
como vienen. Cuando quieres escribir frmulas matemticas, stas contienen sm
bolos que
obligan al compilador a realizar un formato tambin vertical, no nada ms
en el rengln
correspondiente. Para lograrlo debers introducir un ambiente matemtico. Ti
enes dos
tipos de ambientes matemticos:
i. En la lnea, donde lo que buscas es poder intercalar una frmula o u
n carcter (i =
2 3 ). Esto se logr, de culquier de ls siguientes mners:
Se escrie:
Se form:
=2
3
i = 2 3
\(\ lph_i=2\cdot\et^3\)
i = 2 3
\egin{mth}\lph_i=2\cdot\et^3\end{mth}
i = 2 3
n m-

ii. En un recudro que contiene  l frmul mtemtic. Introduces tmin u

iente que dejr espcio en lnco entre el prrfo nterior y el si


guiente. Dentro de
ese prrfo puedes escriir ls frmuls. Pr mostrr est modlidd
, se mostrr del
ldo izquierdo el texto fuente y del derecho el texto formdo:
\ [ \ lph =2\ c
i = 2 3
\ egin { d i s p
\  l
i = 2 3
\ end { d i s p

d o t \ et ^ 3 \ ]
l  y m  t h }
p h  _ i =2\ c d o t \ et ^3
l  y m  t h }

L diferenci fundmentl entre el modo de despliegue (prrfo) y el


de lne es el
tmo de los trminos. Mientrs que en el modo de lne se just el tmo 
l ltur
norml de un lne, en el modo de prrfo ocup tnto espcio verticl co
mo requier.
Compr estos dos modos en el siguiente esquem.

n
1}\]

n
\(2\ frc {n}{n +1\}\)
2
n+1

2 n+1

\[2\ frc {n}{n+

6.8 Mtemtics en LATEX


177
Cundo ests en modo mtemtico, y se de lne o de recudro, los es
pcios en lnco
nicmente tendrn sentido pr seprr comndos. No precern en ls frmu
ls que
escris como tles,  menos que utilices un lnco precedido por l
digonl invers. El
texto que escris se formr con un tipo precido l de ls itlics, y
si escries vris
plrs, precern sin los espcios. Compr el modo mtemtico con el
tipo itlico en
los siguientes renglones.
e
e

\( Est\ es\ un\ prue\)

Est es un pru

{\ it Est es un prue}

Est es un pru

Not que el lugr que ocup cd crcter es ligermente myor en


el modo mtemtico.

temtics.

Revisemos hor cules son los componentes principles de ls frmuls m

Exponentes

Un de ls cciones ms comunes que quieres relizr es l de pone


r exponentes. Esto
se logr fcilmente si donde quieres deses un exponente colocs el sm
olo ^ seguido de
un slo smolo, pr que ese smolo prezc como exponente; o ien segu
ido de vrios
smolos, todos ellos entre llves. No se permiten secuencis de ms de
un comincin
de ^ con el exponente. Siguen lgunos ejemplos:
$^m ^n c^{n+m}$
$x^{y^2}$
$x^{2y}$
$x^2y$

m n cn+m
2
xy
2y
x
x2 y

En el segundo ejemplo nos vimos forzdos  encerrr el segundo expon


ente entre llves
pr que no se infringier l regl de que huier ms de uno seguido.
De est mner, el
exponente de x es, simplemente, otr expresin con exponente.
Como puedes oservr en todos estos ejemplos, ls llves sirven
pr indicr dnde
empiez y termin el exponente. Es clro, por ejemplo en el ltimo cs
o, que en usenci
de llves LATEX considerr nicmente l primer crcter que sigue  ^.
Actividd 6.26 Codi c en LATEX ls siguientes frmuls:
3x2 + 4xy + 2y 2 = 0

b + (b2 4ac)1/2 /(2a)


an! bm! c(n+m)!
(x y)2 (x2 y 2 )(x + y)2

178
LATEX
Subndices
Funcionan de la misma manera que los exponentes, excepto que se usa el
smbolo _ de
subrayado en lugar del ^. Las mismas reglas aplican para subndices que par
a exponentes.
Siguen algunos ejemplos:
$a_m b_n c_{n+m}$
$x_{y_2}$
$x_{2y}$
$x_2y$

am bn cn+m
x y2
x2y
x2 y

Actividad 6.27 Codi ca en LATEX las siguientes expresiones:


Pi log2 Pi
(xi1 yi1 ) + (x2i2 yi22 ) + (x3i3 yi33 )
(x21 + y12 )1/2
(Xmax Xmin )2 /(Ymax Ymin )2

6.9. Emacs y LATEX


En este momento ya conoces una buena cantidad de herramientas LATEX,
has incursiona
do incluso en matemticas en LATEX. ste es un buen momento para que revises
qu puede
hacer Emacs por ti. Mejor dicho, qu puede hacer AUCTEX, el modo mayor para
editar
LATEX en Emacs por ti.
En la seccin 6.12.1, en la pgina 238, explicamos con detalle qu comandos
de AUCTEX
ejecutan las secuencias C c Ce y otras que hemos mencionado en este captulo
. Tam
bin agregamos informacin sobre el modo para ingresar smbolos matemticos de ma
nera
rpida y un buen nmero de detalles ms.
AUCTEX, desgraciadamente, no es parte estndar de todas las distribucio
nes de Emacs.
Por ello, en la seccin 6.12.1 te explicamos cmo obtener, instalar y con gurar
AUCTEX.
Letras griegas
Para que se imprima una letra griega haces preceder el nombre de la m
isma (en ingls)
por la diagonal inversa. En la tabla 6.9 se muestran las letras griegas d
isponibles:

6.9 Emacs y LATEX


179
Tabla 6.9

Smbolos griegos

\thet

\be a

\vartheta

\gamma

\io a

\delta

\ka

\e
silon


\lamb a

on

Minsculas

\alpha

\vareps lon

\pi

\varrho

\mu

\sigma

\varigma

\zeta

\nu

\eta

\xi

\Gamma

\Lambda

\Dlta

\Xi

\Ups lon

\Tta

\Pi

\h

\tau

\u
sil
\ph

\rho

\varp

\va
h
\chi

\pi
\omega

Mayslas
\S gma

\Psi
\Omga

edes ver qe no para todas las letras gr egas hay la vers n en
maysla. S no
aparee en esta l sta es porqe no la hay. Tamb n e ste, para algn
as de ellas, la vers n
para var able.
At v dad 6.28 Haz na tabla qe ontenga n amente las letras gr eg
as para las ales
hay mayslas, y aqllas para las ales hay vers n en var. En la pr m
era olmna de
la tabla deber apareer el nombre de la letra en m nsla; en la segnd
a olmna
deber mpr m rse el smbolo; en la terera olmna, s es qe hay, el
smbolo para la
maysla; y en la arta olmna, s es qe hay, el smbolo para la va
r able.
Smbolos on

ehas
En matemt as, y en ompta n en general, se san my reentem

ente d st ntos
t pos de

ehas. resentamos algnos en la tabla 6.10.

180

Tabla 6.10

ATE
Smbolos on

ehas

\ letarrow

\ongletarrow
\longr ghtarrow

\R ghtarrow
\ leftrightarrow

\ longleftrightarrow
Longleftrightarrow
\uparrow
\downarrow

\Downarrow
\Updownarrow

\mapsto
eftarrow

\hookrightarrow
\rightharpoonup
!
\leftharpoondown
\ rightleftharpoons

\leadsto
\searrow

\swarrow
etarrow

\ longletarrow

\

\ r ghtarrow

\Longrightarrow

\ Leftrightarrow

\Uparrow

\updownarrow


\longmapsto

\hookl

\leftharpoonup
"

\rightharpoondown

\nearrow


\nwarrow


Operadores
En la tabla 6.11 te mostramos smbolos comnmente usados en matemtica
s como
operadores y smbolos relacionales.
Tabla 6.11 Operadores y smbolos relacionales
\pm
d

\cap

\diamon

\oplus

\mp

\cup

\ bigtriangleup 
\times

\ominus
\uplus


\ div

\sqcap

\oslash

\as

\bigt

riangledown !
\otimes

#
\ triangleleft $
t
\sqcup


\ triangleright %

\odot

\ star

&

\vee

\ bigcirc
\wedge
\rhd


\dagger

\setminus

\unlhd

\cdot

\wr

\amalg

\leq

\geq

\quiv

\modls

|=

\prc

\succ

\sim

\prp

\prcq

\succq

\si


\ circ
t

\ bulle

ger

d


mq

\ld

la siguint pgina

\ddag

(

\unrh

Contina n

6.9 Emacs y LATEX


181
Tabla 6.11 Opradors y smbolos rlacionals
na d la pgina antrior

Conti

\mid

%$

=
(

\gg

\asymp

\ paralll

\subst

\supst

\approx

\bowti

\substq

\supstq

\cong

\sqsubst

<

\sqsupst

=
=

\ ll

\Join

\nq

<=

\smil

'

\sqsubstq

\sqsupstq

>

\dotq

.
=

\frown

\ ni

\ notin

\vdash

\dashv

\ in

/
\propto

C
At v dad 6.29 Cod a en ATE las s g entes rmlas:

 (y )i log[fX (yi )i ]
6 X i

(k)
62 fX dX

mk (tij ) = i(k tij + k )


Actividad 6.30 Codi ca n LATEX las siguints frmulas:
p 1 p q
(p q) (p q)
6 X j 62 6 X i 62 , i C
d(xi , yi ) = xi yj

mbolos varios
Notars qu a psar d qu mos dado ya mucsimos smbolos matmticos
, todava
nos faltan algunos qu ya conocs como l para todo. En la tabla 6.12
ponemos algnos
smbolos ms qe te van a ser de t l dad.

182

ATE
Smbolos var os

Tabla 6.12

\aleph

\ nty

\hbar 

\Bo

\D amond

\ tr angle
\ lbs t
\d amonds t
\ hearts t
\spades t

\pr me

\ orall

\ e sts

\emptyset

\ math

\nabla

\jmath j

\srd

\ ell +

\top

\ natral

\wp

\bot

\sharp

\Re

\|

\baslash \

\Im

\angle

\neg

at

\ part al

\mho 0

At v dad 6.31 Cod a en ATE las s g entes


na tabla tablar
para aomodar las gras):

gras (p sta: t l za 

4
Nombres de n ones omnes
ATE propor ona var os nombres de n ones omnes para qe l
as esr bas de ma
nera espe al, y no s mplemente omo adenas. stas se presentan en l
a tabla 6.13.
Tabla 6.13 Nombres de n ones omnes
\aros ar os
ep
\er
er
sinh
\ arcsin arcsin
\gcd
gcd
\ lg
lg
\sup
sup
\arctan arctan
\ep

\sinh

\os
\l msp
\cosh

os
lm sup
cosh

\ ln

ln

\cot

cot

\s s
\min mn
\deg deg
\Pr

Pr

\det det

\hom

hom
\ lim
tan
\arg

\tan
\ inf

lm
arg
nf

Contina en la siguiente pgina

\log
\coth

log
coth

\sec sec
\dim dim

6.9 Emacs y LATEX


183
Tabla 6.13 Nombres de funciones comunes
Contina de la pgina anterior
\ liminf
\tanh

lm inf

\max

max

\ sin

sin

tanh
a \mod b

a mod b

\pmod{b}

(mod b)
Nota que como estamos trabajando en espaol (paquete babel) aquell
as abreviaturas
que lo requieren llevan acento.
Fracciones
En el modo matemtico tienes dos maneras de escribir fracciones.
La primera de ellas
es con la diagonal, como en
$3/4$
3/4
$1/(n+1)$
1/(n + 1)
Tambin se puede usar el comando \frac{numerador}{denominador} qu
e es
cribe la fraccin de la siguiente forma:
$\ frac {3}{4} $

3
4

3
\[\ frac {3}{4}\]
4

$\ frac {1}{ n+1}$

1
n+1

1
\[\ frac {1}{ n+1}\]

n+1
Si \ frac usas en el modo matemtico en lnea, LATEX va a tratar de
ajustar la frmula al
alto de un rengln, mientras que si usas el modo matemtico de recuadro
, ocupar tanto
espacio vertical como requiera.
Actividad 6.32 Codi ca en LATEX las siguientes frmulas:
xn + xn1 xn xn1
zn = xn yn = xn
=
2
2
2Xmax /M
fX (x) log
i
c (x)
Racs
nindol como

La ra d una frmula o xprsin s logra con l comando \ sqrt y po


argumnto ntr llavs a la xprsin qu quirs cubra la ra.
\ frac {x+y}{1+\sqrt {\ frac {y}{+1}}}
x+y

y
1 + +1

184
LATEX
Puds tambin ponr valor n l radical, agrgando s valor ntr
corcts como
primr argumnto d \ sqrt :
\ frac {x+y}{1+\sqrt[n ]{\ frac {y}{+1}}}
x+y

y
1 + n +1
Actividad 6.33 Codi ca n LATEX las siguints frmulas:

2
b b2 a c
2a

1
1
3 () = ( 2
)

( + 1)2
Smbolos agrandables
Tenemos en matemt as mhos smbolos, omo el de la ntegral o las
ser es, qe
deben tomar el tamao dado por todo lo qe est a s dereha. Como v mos
en el ejer  o
anter or, la raz adrada, por ejemplo, ree al tamao qe toma s arg
mento. Esto lo
hae atomt amente. os smbolos en la tabla 6.14 son on los qe ent
a ATE para
el modo matemt o. El tamao amenta n amente ando aparee en el modo
en qe
aomoda a la rmla en n prrao, no en na lnea.
Tabla 6.14 Smbolos agrandables

\sm

\b godot


\b gap

\b got mes


\b gopls

\prod

\b gp

\oprod

\b gsqp


\ nt

\b gpls

\ o nt
Cando pones sbnd e
E los aomo
dar de tal manera qe se
\ [ \ sm_{ \ n  t y
) \ ]


|Y ( |yj

\b gvee
\b gwedge

o eponente a alq era de estos smbolos, AT


vean b en. or ejemplo,
}  \ n  t y  _ { | Y } (  _ | y _ j

6.9 Emas y ATE

|yj )
g(y)2 .

185

\ [ \ n t _ 0 n  (  )  2 g ( y )  2 \ ]

n
 ()2 g(y)2
0
M entras qe s los pones en modo de lnea, apareern omo s ge:

$\sm_{\ nty}\ nty _{|Y}(_ | y_j)$ se orma
|Y (
n
se orma a 0  ()2

$\ nt_0n  ()2g(y)2$

Otra manera de agrandar algnos de los smbolos, sobre todo aqel


los qe orman pa
rejas omo los parntes s, los orhetes o las llaves, es alarando qe
vas a tener n
del m tador zq erdo y no dereho para n determ nado pedazo de r
mla, sando los
omandos \ let y \ r ght , y oloando nmed atamente a ont na n
el smbolo qe se va
a sar. En el ejemplo qe d mos para las raes, los parntes s no re
eron al tamao de la
rmla qe parent zan. ara lograrlo haes lo s g ente:
\ [ \ S gma_3 ( \  h ) = \ s q r t { \ l e  t ( \  r a  {
1 } { \ appa 2} \  r a  { 1 }
{ ( \ appa + 1 )  2 } \ r g h t ) \  h { \ appa } } \
]



1
1
3 () =

2 ( + 1)2

edes qerer n amente el smbolo de la zq erda o el de la dere


ha. En ese aso,
omo smbolo a agrandar sas n pnto (.). Veamos n ejemplo:
\ [  (  ) = \ l e  t \ { \  r a  { 2+y  2 } { \ s q r t
{ ( 2y  2 )  2 } } \ r g h t . \ ]

2 + y 2

 () =
(2 y 2 )2
At v dad 6.34 Cod a en ATE las s g entes rmlas:
  t

Ey
Lx,yk (s) () s
0

N


M

yn =

ai xni +

bi yni

i=0

i=1
M 


bi
(k)

D(k) =
(

(x yi )2 fX (x) x

i=1

bi1 k)

Equivalen e a \ lef y \ ih enemos mane a e


e i is in os
amaos e elimi a o es
on las siuien es
a ejas, lis a as e meno a mayo . El oman o s
e hae seui
o un
nio smbolo.

186
LATEX
\
\
\
\

bil
Bil
bil
Bil

\
\
\
\

bi
Bi
bi
Bi

Po ejem
lo, la siuien e f mula
\ [ \ B i   l \ { \ b i   l [ \ B i  l ( \ b i  l |
ueba \
b i  | \ B i  ) \ b i   ] \ B i   \ } \ ]
se fo ma e la siuien e mane a:





 ueba
La lis a e los smbolos que
ue es usa omo elimi a o es y que se
a an an se
enuen a en la abla 6.15.
Tabla 6.15 Delimi a o es
ow

\u
a ow
\Downa ow

{
\{
\U
owna ow

S
\ l oo
\ eil

owna ow
l
\ anle

/
|

mous ahe
ve

\U
a ow

"
6

\ lanle

|
\lmous ahe

\  ou

\A owve

\
6

\}
\ oo

\ owna
\u


U

\ lei

\bakslash
\|
\l ou

\a ow

\b aeve

A ivi a 6.35 Co i a en LATEX la siuien e f mula:


 &  '
(1
)
(m/k)/Um/kV
.
1<mn
1k<m

Pun os sus
ensivos (eli
ses)
Cuan o en mo o ma em io (o e ex o) eseas
one
un os sus
ensi
vos, el elea lo
i e amen e en LATEX omo es
un os seui os no a el efe o esea
o, ya que ae a

muho en e s a los
un os. Po ello uen as on os mane as e
one

un os sus
ensivos:

6.9 Emas y LATEX

187

\ [ \ e x { v a l o e s
a a } x_1 , \ l o s , x_n \ ]
valo es
a a x1 , . . . , xn
on e los
un os sus
ensivos se oloan alinea os on la
a e infe
io e la lnea ( \ l o s );
o bien, alinea os on la
a e en al e la lnea ( \ o s):
\ [ 1 + \ f a  { 1 } { x ^2}+\ f a  { 1 } { x ^4}+\  o s +\
f a  { 1 } { x ^{2^ n } } \ ]
1
1
1
1+ 2
+ 4 + + 2n
x
x
x
on e los
un os sus
ensivos se alinean on el o
e a o
a a a le
on inui a . Tambin
.
.
uen as on
un os sus
ensivos ve iales, \v o s:(..) y iaonales
, \ o s ( . . ).
A ivi a 6.36 Co i a en LATEX las siuien es f mulas:
F () = a + a 1 1 + + a1 1 + a0 0







n
f () = d
+ d1
+ + 0
dn
d1n
n
Camb os de t pos y tamaos de letras
En el modo para matemt as no van a n onar
mb an el t po o
tamao de letra. Tampoo vas a poder t l zar las
los smbolos qe no
son del d oma ngls. ara nteralar n smbolo
matemt o lo
debes oloar omo argmento de n omando \mbo.
:
(qo, a)

y m a h }
box { \ b { o } } , a )

y m a h }

los omandos qe a


letras aentadas o
de stos en n amb ente
Veamos n ejemplo

\ bein { i s
l a
\ e l a ( q \ m
\ en { i s
l a

En el mo o ma em io am
oo van a funiona las ne i as u o o
s ambios en el i
o
e le a. El mo o ma em io iene sus
o
ios i
os, que se mues an
en la abla 6.16.
Tabla 6.16 Ti
os e le as en mo o ma em io
$\ma hal{ABCDEF...}$
ABCDEF...
$\ma hi { i \au e{a}lias \ o 2^{ f }\ Psi \lo [\
si

]} $
i alicas  2 ft log[]
$\mathrm{roma a \cdot 2^{ft}\Pi \!og [\ pi ]} $
roma a 2ft !og[]
Co ti a e !a iguie te pgi a

188
LATEX
Ta!a 6.16

Tipo de !etra e modo matemtico


Co ti a de !a pgi a a terior
$\mathf{ egrita \cdot 2^{ ft }\ Pi \!og [\ pi ]} $
egrita 2ft !og[]
$\mathf{a \ erif \cdot 2^{ ft }\ Pi \!og [\ pi ]} $

g [\ pi ]} $

a  erif 2ft !og[]


$\mathtt{m\acute{a}"ui a\ de\ ecriir \cdot 2^{ ft }\ Pi \!o

maquina de escribir  2ft log[]


$\math{BLACKBOARD CON BORDES DOBLES}$

BLACKBOARD C

ON BORDES DOBLES
Dee otar "ue todo eto tipo de !etra ma tie e a! texto e
modo matemtico.
Tami e importa te repetir "ue para eparar pa!ara dee tec!ear
u epacio \ ,
pue i o e! modo matemtico o repeta epacio e !a co.
E! primer # !timo tipo ( \mathca! # math icame te !o puede u
ar co ma#cu!a.
Cua do pide egrita e modo matemtico co \mathf ha# mo!o "
ue o e imprime e egrita. Oerva "ue e e! cuarto ejemp!o, !o mo!o co
rrepo die te a
!og[] o a!iero ocurecido. Para "ue a!ga ocurecido dee u
ar e! coma do
\ o!d#mo! { . . .
}

"ue !ogra po er e egrita tami a !o mo!o matemtico. Motramo


ama opcioe ju ta para "ue e ote !a difere cia:
\ [ \ mathf { e g r i t a  \ c d o t 2 ^ { f t } \ P  i \
! o g [ \ p  i ] } \ ]
egrita 2ft !og[]
\ [ \ mathf { e g r i t a  \ c d o t 2 ^ { f t } \ o!d#mo!
{ \ P  i \ ! o g [ \ p  i ] } } \ ]
egrita 2ft !og[]
Otra ma era de !ograr "ue todo e! texto matemtico e ecria e
egrita e media te
e! coma do de camio de etado \o!dmath ( \u o!dmath), "ue a part
ir de! mome to e "ue
aparece pre de (apaga) !a egrita e modo matemtico. Veamo u eje
mp!o:
\ hpace
{ 4em } \ o!dmath \ ( a+ \ Box c \ )
\ u o!dmath \ ""uad \ ( a+ ) \ Box c \ )
a + 2c
a + 2c
Cae hacer !a ac!araci "ue eto coma do !o tie e "ue po er
a te de "ue e tre
a! modo matemtico, para "ue te ga efecto.

Actividad 6.37 Codi ca e LATEX !a iguie te frmu!a, cuida do e! tipo


de !etra # !a
egrita:
Sea x <= #  N, y y 

6.9 Emas y ATE

189

Insertar teto en modo matemt o


Es neesar o mhas vees ntrod r en n readro o lnea mate
mt a teto qe
q eres apareza en modo normal. Nota qe esto no es lo m smo qe h
 mos ando am
b amos el t po de letra para los smbolos matemt os. ara ello se pe
de sar el omando
\ tet {...} pon endo entre llaves el teto qe deseas apareza. Ta
mb n pedes t l zar, en
general, alq era de los omandos \ tet  qe v mos al n  o d
e esta se n para mo
d ar t po de teto (donde  es no de b, s, tt, et.).
Este omando preserva los espa os entre palabras:

a } \ ]

\ [  = \  r a  {b \pm \ s q r t { b24a } } { 2 a } \ \
\ t e  t { Da l a s o l   n de e   a  n adr t 

=

b2 4a

Da la sol n de ea n adrt 

2a
Tablas de rmlas
Hay dos maneras de organ zar var as rmlas en na tabla. a pr
mera de ellas es
on n tablar y oloando en ada elda el modo matemt o en lnea ($
\(... $\) ). a
otra manera es delarando n amb ente de lnea o readro y oloando
all n arreglo
matemt o, \beg n{array }...\ end{array}. Es mportante ns st r en
qe n array slo pede
estar en n amb ente matemt o. as delara ones de olmnas y reng
lones las haes
eatamente gal qe on tablar , eepto qe el onten do es nt
erpretado omo rmlas.
a eep n es ando para desr b r la olmna d ste p{<nm><mdda>}
, pes en ese aso
atomt amente esa olmna qedar en modo teto.
Este mean smo se t l za tamb n para mpr m r matr es o, en ge
neral, tablas qe en
s mayora van a ontener rmlas matemt as.
\ [ \ beg n { a r r a y } { l l  l }
a_ {11}& a_ { 1 2 } & \ l d o t s &a_ { 1m } \ \
a11

a12

a21

a22

...

a1m
a_ {21}& a_ { 2 2 } & \ l d o t s &\ l d o t s \ \
... ...
\  d o t s &\  d o t s &\ l d o t s &\ l d o t s \ \
... ...
a_ { n1}&a_ { n2 } & \  d o t s
&a_ {nm}

an1

an2

anm
\ end { a r r a y } \ ]

S empre qe t enes na rmla qe opa ms de n rengln, pedes po


nerle algn a
rter a la zq erda y otro a la dereha qe rezan tanto omo la r
mla en est n. Esto
lo haes marando la rmla on \ let y \ r ght a s zq erda y de
reha respet vamente,
y pon endo el smbolo qe q eras. or ejemplo, la matr z anter or po
dra qedar:

190

ATE

\ [ \ l e  t [ \ beg n { a r r a y } { l l  l }
a11 a12 . . . a1m

a_ {11}& a_ { 1 2 } & \ l d o t s &a_ { 1m } \ \

21 a22 . . . . . .

a_ {21}& a_ { 2 2 } & \ l d o t s &\ l d o t s \ \

...
...

\  d o t s &\  d o t s &\ l d o t s &\ l d o t s \ \

a_ { n1}&a_ { n2 } & \  d o t s&a_ {nm}

an1 an2 anm


\ end { a r r a y } \ r g h t ] \ ]

S deseas om t r ya sea el smbolo de la zq erda o el de la dereha,


pones n pnto (.)
en lgar del arter. No t enen porq ser arteres orrespond entes al n 
o y al nal.
En general, se san aqellos qe lo son, pero no es orzoso:
\ [ \ l e  t \ | \ beg n { a r r a y } { l l  l }

0
0
0

a_ {11}& a_ { 1 2 } & \ l d o t s &a_ { 1m } \ \


a11 a12 . . . a1m

0
0

... ...
a21 a 22

0
0

a_ {21}& a_ { 2 2 } & \ l o s &\ l o s \ \

\  o s &\  o s &\ l o s &\ l o s \ \


... ...

a_ { n1}&a_ { n2 } & \  o s&a_ {nm}

an1 an2

\ en { a a y } \ i  h \ } \ ]
a
nm

Tambin
ue es ene un a ay en el mo o lnea,
$\bein{a ay }[ ]{ l }a+b\\ab\en {a ay}$,
que que a a + b . Debes no a que usa an os enlones omo neesi e, o
iien o el
ab
siuien e enln
a a que no se enime.
Las lneas en e olumnas y en e los enlones se u ilizan exa amen e
iual que en
el aso e las ablas no num ias ( abula ). Tambin hab s no a o que la e
s i
in e
las olumnas se hae ambin e la misma mane a que en un abula . Tambin s
e
ue en
e e ni las olumnas.
A ivi a 6.38 Co i a en LATEX la siuien e abla:
(a + b)2 = a2 + 2ab + b2
Suma e ua a os
a2 b2 = (a + b)(a b)
Dife enia e ua a os
(a + b)n = an + 2an1 b + + bn Ex
ansin binomial
Ma ies y ombinaiones
Si bien
ue es a ma ma ies usan o a ays, LATEX
ovee oman os es

eiales
a a
ello. Po ejem
lo, es muy omn que quie as e ni una funin
o asos omo la
que
siue:

6.9 Emas y LATEX

191
\ [ P_

{ j }=

bein { ases }


0&\ e x { s i j es im
a } , \ \
0
! ( 1 ) ^ { ( j ) / 2 }
P j =
&\ e x { s i j es
a } .
!(1)( j)/2

si j es im
a ,

si j es
a .

en { ases }

\
\]

Si es o lo hiie as on un a ay, lo ha a omo siue:


{ j } = \ l e f \ {

\ [ P_

\ bein { a a y } { l l }
0&\ e x { s i j es im
a } , \ \
3
! ( 1 ) ^ { ( j ) / 2 }
0
si j es im
a ,
P j =
&\ e x { s i j es
a } .
!(1)( j)/2 si j es
a .
{ a a y }

\ en
\

ih .

\]

que
ue es o obo a en la
a e izquie a que fo ma exa amen e l
a misma euain. Po
ello, el ambien e e asos es, sim
lemen e, un a ajo
a a o i a es
e i
o e ablas.
O o a ajo omn es el que se usa
a a ma ies. LATEX e ne va ios
ambien es es
e
os
a a ma ies, e
en ien o e los elimi a o es que quie as ene
:
n {
m a i x }
f \ \

{
m a i x } \ ]
v m a i x }


\ [ \ bein

a&b
e f
&
 h
\ en {


\ [ \ bei

{ m a i x }
\ \

a b

e&

&h
\ en

m a i x } \ ]

\ [ \ bein { b m a i x }



\ [ \ bein {

i j
m n 
i&j \ \

&n \ \

&

{ v m a i x }

k& l
 o

\ en { b m a i x } \ ]
\ [ \ bein { V m a i x }
q& \ \
s&
\ en { V m a i x } \ ]

k l

o
\ en

0
0
0q 0
0
0
0s 0

Como
ue es ve , lo que e aho as al usa es os ambien es es l
a es
ei ain e los
elimi a o es y e las olumnas e a a ma iz.

A ivi a 6.39 Co i a a a una e las ma ies an e io es usan o a


ay y elimi a o es.

192
LATEX
A ivi a 6.40 Co i a la siuien e f mula:


n!
!(n )!
6.9.1.

Ano aiones en los smbolos

Es f euen e que quie as ano a a us va iables on is in os smbol


os, que van es e

ima has a ve o es. Tambin


u ieses hae lo abajo e la va iable o e
x
esin. Veamos
alunos ejem
los:

\ove se {\ ih a ow }{ a}
a
\un e se {i =1}{\u
}

i=1
Como
ue es no a , aun uan o es emos en mo o e lnea, aomo a el
ex o que le
in iques on e le in iques. El
ime
a me o LATEX lo es ibe on un
amao meno y
lo oloa enima (ove ) o ebajo (un e ) el seun o a umen o. El se
un o a umen o
niamen e
ue e se un smbolo. El
ime a umen o, omo ya vimos,
ue
e se ual
quie osa. Pa a aquellos smbolos que son muy omunes, enemos e ni os
oman os
que oloan e e mina o a  e . s os se enuen an en la abla 6.17.
Tabla 6.17 Aen os en mo o ma em io
a
\hat{a}
\bar{a}
a
\dot{a}
a
\check{a}
\vec{a}
a
\ddot{a}
a
\breve{a}

\acute{a}

\grave{a}

3a

\ tilde {a}

Muchas veces quieres poner una echa, raya, llave, encima de toda u
na expresin que
tiene ms de un smbolo. Para ello tenemos los siguientes smbolos que se e
xtienden para
cubrir a ms de un smbolo:
\ [ \ o v e r l i n e { a+b+c } = \ u n d e r l i n e { a+b+c } \
]
a+b+c=a+b+c
\ [ \ overbrace { a+b+c } = \ underbrace { a+b+c } \ ]
" 45 !
a+b+c=a5 +!"
b + 4c
\ [ \ o v e r r i g h t a r r o w { a+b+c } = \ u n d e r r i g h
t a r r o w { a+b+c } \ ]

a+b+c=a+b+c

6.9 Emacs y LATEX


193
\ [ \ o v e r l e f t a r
f t a r r o w { a+b+c } \ ]

a+b+c=a+b+c

\ [ \ o v e r l e f t r i
d e r l e f t r i g h t a r r o w { a+b+c } \

a+b+c=a+b+c

Por supuesto que puedes anidar


s de la manera que
desees.

r o w { a+b+c } = \ u n d e r l e

g h t a r r o w { a+b+c } = \ u n
]

todos estos comandos y combinarlo

Actividad 6.41 Codi ca en LATEX la siguiente expresin:

si A B
si B A

AB =

A B

6.9.2.

si A y B son ajenos
por la ley de De Morgan

Arreglos de frmulas

Seguramente ests pensando en escribir frmulas (o ecuaciones) en m


odo prrafo. Has
ta ahora has utilizado para ello el ambiente displaymath. Sin embar
go, si deseas numerar las
ecuaciones o algo por el estilo, debes usar el ambiente equation.
\ begin { e q u a t i o n } \ l a b e l { eq : dia3 1}
1 
M
R= \ f r a c { 1 } {M} \ sum_ { k =1}^M R_k
R=

Rk
\ end { e q u a t i o n }
M k=1

(6.1)

Nota que el nmero de la ecuacin aparece en el extremo derecho de


la lnea donde se
encuentra la misma. Esto se puede cambiar, as como la forma de numer
acin3 . El contador
de ecuaciones se va incrementando progresivamente dentro del captulo

.
Si quieres colocar varias frmulas alineadas, un array tiene el pr
oblema de que no im
porta si est en modo lnea o prrafo, nos dar modo lnea para cada rengln de
l arreglo.
3
Consulta alguno de los manuales de LATEX que se mencionan en
la bibliografa si as lo deseas.

194
LATEX
\ [ \ begin { a r r a y } [ t ] { l l }
x_1 = \ sum_ { k =1}^ n a_ky ^ k
n
x1
=

k=1
n

ak y k primer valor
&\ t e x t { p r i m e r v a l o r } \ \ [ 1 0 p t ]

k
x_2 = \ sum_ { k =1}^ n b_ky ^ k
k=1 bk y
segundo valor
&\ t e x t { segundo v a l o r }
\ end { a r r a y }
\]

x2

Si quieres varias lneas, pero cada una de ellas en modo prrafo, tienes que
usar el
ambiente de arreglos de ecuaciones \eqnarray.
\ begin { eqnarray }


n
x1 =

y k

Primer valor
(6.2)
x_1 = \ sum_ { k =1}^ n a_ky ^ k
&\ t e x t { Primer v a l o r } \ \
x_2 = \ sum_ { k =1}^ n b_ky ^ k

ak
k=1

n

x2 =

bk

y k segundo valor
(6.3)
&\ t e x t { segundo v a l o r }
k=1
\ end { eqnarray }
Nota que el modo matemtico se introduce junto con el ambiente eqnarray,
lo mismo que
sucede con equation. Si deseas eliminar el nmero de la(s) ecuacin(es) usa lo
s ambientes
eqnarray y equation respectivamente:
\ begin { eqnarray


n
x_1 = \ sum_ { k =1}^ n a_ky ^ k
ak y k
Primer valor
&\ t e x t { Primer v a l o r } \ \

x1 =
k=1


x_2 = \ sum_ { k =1}^ n b_ky ^ k


&\ t e x t { segundo v a l o r }

n
x2 =

bk y k segundo valor
\ end { eqnarray
}
k=1

Las ecuaciones que aparecen dentro de ambientes sin numeracin no increme


ntan el
contador de ecuaciones.
Sucede a veces que no cabe una ecuacin en una sola lnea, por lo que tien
es que
repartirla en varios renglones. Esto lo logras con el ambiente split dentr
o de un ambiente
equation. Este comando es muy til cuando, por ejemplo, quieres mostrar proc
esos por los
que pasa una expresin. Nota que de esta manera se asigna un nico nmero a la e
cuacin,
en atencin a que es una sola.

6.9 Emacs y LATEX


195
\ begin { e q u a t i o n
\ begin { s p l i t }
\ begin { b m a t r
\ Theta_1 \ \
\ Theta_2
\ end { b m a t r i
&+\ f r a c { 1 } {
\ begin { b m a t r
1&1\\
1&1

}
i x }
x }
\ s q r t { 2 } }
i x }

\ end {  m  t r i x }
(6.4)

\ egin {  m  t r i x }
\ lph \ \
\ lph

\ nd { b m a t r
&\ bgin { b m a
\ s q r t { 2
0
\ nd { b m a t r
\ nd { s p l i t }
\ nd {  q u a t i o n

 
1


 
1 1 1

+
2

2 1 1


2

i x } \ \ [ 1 0 p t ]
t r i x }
} \ alpa \ \
i x }
}

Puds consguir un fcto similar, pro asignando un nmro a ca


da rngln, si usa
mos l arrglo d cuacions, como s mustra a continuacin dl ambi
nt split , qu
comntamos n la sgunda vrsin. En los ambints d matrics, cuac
ions y arrglos
t aorras spci car nmro d columnas y tipo d columnas, ya qu st
os ambints los
toman d los lmntos qu aparcn n las mismas.
\ bgin { qnarray }
% \ bgin { s p l i t }
\ bgin { b m a t r i x }
\ Tta_1 \ \
\ Tta_2
\ nd { b m a t r i x }
&+\ f r a c { 1 } { \ s q r t { 2 } }
\ bgin { b m a t r i x }
 

 
1&1\\
1
1 1
1&1
+ 12
(6.5)
2
1 1
\ end {  m  t r i x }
\ egin {  m  t r i x }


\ lph \ \
2
\ lph

(6.6)
0
\ nd { b m a t r i x } \ \ [ 1 0 p t ]
&\ bgin { b m a t r i x }

\ s q r t { 2 } \ alpa \ \
0
\ nd { b m a t r i x }
% \ nd { s p l i t }
\ nd { qnarray }

196
LATEX
Existn otros ambints ms para matmticas. i los quirs rvisar,
consulta alguno
d los libros d LATEX.
Espacios n frmulas matmticas
En l modo d matmticas s mucas vcs ncsario acomodar d man
ra spc ca
algunos smbolos, movindolos acia la iquirda o acia la drca. En l
a tabla 6.18 v
mos los distintos tipos d spacios qu puds tnr. Estn divididos 
ntr positivos (acia
la drca) y ngativos (d rtrocso).
Tabla 6.18 Comandos d spacio n modo matmtico
Espacio positivo
Abr
Complto

ormal

mu
\,
x

\mspac{1mu}
\tinspac

Ejmplo

xx
x \, x

xx

\:

\mdspac

\;

\tickspac

x \; x

xx

\nskip

x\nskip x

x x

\quad

x\quad x

x x

\qquad

x\qquad x

x
x
x

x\mdspac x

xx
xx

x
x

x
Espacio ngativo
Abr
Complto

ormal

\!
x
x
x

\ngtinspac

Ejmplo
x \! x

N
xx

\ngmdspac x\ngmdspac x xx

\ngtickspac x\ngtickspac x xx

Es ncsario aclarar qu stos spacios s pudn utiliar tambin f


ura dl ntorno
matmtico, n l modo d txto, xcpto por \mspac{} qu s usa nicam
nt n modo
matmtico.
Actividad 6.42 Codi ca n LATEX la siguint cuacin:
1
N
GT C = 
(6.7)

N 1
2
i=0 i


N 1 2 N1
i=0 i

6.10 Imge e # gura


197
Actividad 6.43 Codi ca e LATEX !a iguie te ecuaci :
(6.8)

<=  1

= sn2

M1

= 0.4

<= sn2

M2

= 0.9

sn

<= sn1

sn

= sn1

<= sn2

M3

= 1.5

sn

= sn1

= sn2

M4

= 2.0

(6.9)
(6.10)
(6.11)
Actividad 6.44 Codi ca n
8
9
x01 x01
1
=
x10 x11
2

LATEX la siguint cuacin:


8
98
98
9
1 1
00 01 1 1
1 1 10 11 1 1
8

9
00 + 01 + 10 + 11 00 01 + 10 11
)
=
=

00 + 01 10 11 00 01 10 + 11
00 0,0 + 01 0,1 + 10 1,0 + 11 1,1

Mrcos lrededor de expresiones


El comndo \ox{ ... } sirve pr enmrcr un expresin. Vemos un e
jemplo:

\ [ \ egin { p m  t r i x }


c
\ e n s k i p \ oxed { }&  &c \ \

d &\ oxed { e}& f \ \


d
e
f
g&h &\ oxed { i } \ e n s k i p \
g
h
i
\ end { p m  t r i x }
\]
Con esto dmos por termind l prte correspondiente  frmuls
mtemtics. Por
supuesto que esto no got el mteril relevnte, pues por cuestion
es de tiempo dejmos
fuer muchsims crcterstics y posiiliddes que tiene LATEX. Sin e
mrgo, creemos
que con est introduccin, podrs seguir delnte de mner independien
te, de existir el
inters en ti.
6.10. Imgenes y
6.10.1.

Tls,

gurs
gurs, etc.

Hrs notdo  lo lrgo de este liro que precen gurs o tls

que se vn numerndo. Ms n, l numercin de ls tls, por ejemplo, es independient
e de l de ls

198
LATEX
gr cs o, en generl, gurs que quermos incluir. Esto se hce medinte
lo que LATEX
llm otntes. Les llm s porque le puedes indicr l compildor que
ls comode no
forzosmente donde precen, sino en l primer pgin en l que no oc
sionen que se deje
espcio en lnco innecesrio. Por supuesto que tmin le puedes indi
cr que ls coloque
exctmente donde precen, sin importr el rmdo de ls pgins que
ls preceden, o
hciendo t el rmdo  pie.
Ls otntes que vmos  revisr c son nicmente dos:
Figurs ( gure )
Tls ( tle )
Ams otntes tienen los mismos rgumentos, que tienen que ver fu
ndmentlmente
con dnde se dese que se les comode; ms proveen un espcio con l
posiilidd de
ponerles un ttulo ( \cption)4 . De nen un miente donde los cmios d
e tipo de letr o
tmo sern efectivos nicmente dentro de ese miente. En generl, el 
miente tle
se us pr mteril que se present en form de tl o list, mien
trs que el de gure se
us pr mteril gr co. L sintxis de estos mientes es l siguiente
:
Pr gurs:
Pr tls (o cudr
os):
\ egin { f i g u r e } [ posiciondor ]
\ egin
{ t   l e } [ posiciondor ]
Contenido
Co
ntenido
\ c  p t i o n { Ttulo de l gur }
\ c 
p t i o n { Ttulo de l tl }
\ end { f i g u r e }
\ end {
t   l e }
Si el contenido
el ttulo precer
jo de l gur.
gln despus de que
empiez l gur o
 puede ser:
Tl 6.19 Posiciones posiles
letr
t

in disponile.

 pgin donde quep.


ue pued.

prece.
rio, porque l

de l

gur o tl v ntes de \cption, entonces

Si v despus, esto es que \cption se el primer ren


tl, el ttulo ir rri. L posicin de l
pr los

gur o tl

otntes

signi cdo
top: Lo coloc en l prte superior de l primer pg

ottom: Lo coloc en l prte inferior de l primer

pge: Lo coloc en un pgin de

here: Lo coloc, si es que puede, en el punto donde

Here: Incondicionlmente donde prece. Si es neces

otntes, l primer q

coloc en l

gur no quep en es pgin, dej pgin en lnco y lo


siguiente pgin.

Contin en l siguiente pgin


4
Tmin hy l posiilidd de mrcrls con un etiquet pr pod
er hcer referencis  ells, pero ddo
lo poco del tiempo no entrremos en eso en est ocsin.

6.10 Imgenes y

gurs

199

Tl 6.19 Posiciones posiles pr los


ntin de l pgin nterior

tl don-

letr
!

otntes

Co

signi cdo
Try hrder: Intent de mner ms

rme comodr l

gur o

de se especi c con los posiciondores que siguen  ! .

Pr comodr un gur o tl procedes  dr tus preferencis,


que son cominciones de ls primers tres letrs. LATEX trtr de comodr l gur, co
locndol en l mism
pgin o posponindol, procurndo dejr poco espcio en lnco. Si no
se especi c, el
vlor por omisin es tp. LATEX podr no comodr ls gurs como le ind
ics porque tiene
prmetros que le indicn, por ejemplo, cunts gurs pueden ir en un m
ism pgin o
qu porcentje del totl de l pgin pueden ocupr. No entrremos en e
stos detlles por
flt de tiempo. En l myor de los csos, y sore todo en un princ
ipio, puedes trjr
con los vlores por omisin, excepto posilemente pr el posicionmi
ento. Te recomendmos, en generl, poner H y si no se form onito, proceder  comod
r l gur o tl
 pie. Vemos lgunos ejemplos sencillos, con el cdigo de LATEX que
los produce.

Tl 6.20 Conversin de grdos Frenheit  Centgrdos


h ]
ersin de F  r e n h e i t
Fhr

\ c  p t i o n { Conv
Cent

r } [ t ] { | r | r | }
32

40

4.5

80

27

f Cent \ \ \ h l i n e

l i n e
}

\ egin { t   l e } [ !

 Centgrdos }
\ egin { t   u l 
\ hline
\  f Fhr & \ 
32 & 0 \ \
40 & 4 . 5 \ \
80 & 2 7 \ \ \ h
\ end { t   u l  r
\ end { t   l e }

Puedes cmir vrios spectos de est tl. Si, como y dijim


os, quieres que l co-

mode en l prte superior de un pgin, conseguirs que coloque prime


ro el texto que
dimos como cdigo y despus l tl mism. Sin emrgo, es poco recome
ndle dr
un nic posicin como opcin, porque entonces si LATEX no puede comod
r  l tl
o gur en l siguiente pgin, lo ms seguro es que y no l coloque en
ningn lugr
y l perdmos. Oserv cmo l tl 6.21 que ests colocndo inmedit
mente despus
de ests lnes, qued comodd de mner prentemente ritrri (es
t comodd
utilizndo slo l mitd del ncho de l pgin).

200
LATEX
Tl 6.21

Conversin de Frenheit  Centgrdos

el siguiente
Ls lnes

L tl 6.21 fue generd con


Fhr

Cent

32

40
80

4.5
27

encezdo: \egin{tle }[ H].


\ egin { c e n t e r

...
\ end { c e n t e r }
se pueden usr pr centrr cu

lquier prrfo,

lne, gur o tl.

Cundo dejs que LATEX comode  l tl o gur donde mejor pued
 en usenci
de H deer her un rengln en lnco ntes y despus de l tl, pr
evitr que se
encimen o mezclen renglones que pusimos en prrfos seprdos.
En un otnte de tl puede colocr uno o ms rry, cuidndo nd
ms de declrr
un miente mtemtico dentro.
Actividd 6.45 Codi c en LATEX l tl 6.22 en l siguiente pgin. P
on el posicionmiento pr que prezc exctmente donde se tecle.
Tl 6.22 Representciones numrics
Deciml
1
2
3
5
7
8
15
16

Binrio
1
10
11
101
111
1000
1111
10000

Octl
1
2
3
5
7
10
17
20

Hexdeciml
1
2
3
5
7
8
F
10

Todo lo que dijimos de ls tls se plic  ls gurs. El cont


dor de tls es independiente del de gurs. LATEX provee un mecnismo sencillo pr in
cluir imgenes o
gurs generds desde fuer y que estn codi cds en postscript o imgene
s .png. Esto se hce con el comndo \includegrphics {...} que tom como rgu
mento un rchivo en
el que se encuentre l imgen o gur que se dese incluir. En el rc
hivo dummy.ps se
encuentr un gur (hech en x g ) que desemos incorporr en nuestro
documento. Pr
hcerlo, tenemos que incluir el uso del pquete grphics en el prem

ulo del documento:

6.10 Imgenes y

gurs

201

\usepckge{grphics}. Este pquete cuent con los mecnismos pr


poder mnipulr l gur:
Figur 6.1 Gr co introducido con includegrphics

que fue incluid con el siguiente cdigo:


\ egin { f i g u r e } [ H ]
\ lel { fig :1}
\ c  p t i o n { Gr f i c o i n t r o d u c i d o con \ t e x t
t t { i n c l u d e g r  p h i c s } }
\ i n c l u d e g r  p h i c s [ w i d t h = . . 5 \ t e x t w
i d t h ] { l  t e x / dummy}
\ end { f i g u r e }
El pquete grphics contiene dems comndos que permiten girr
y esclr un imgen,
prrfo, tl, smolo, etc. Tienes dos mners de esclr un ojeto:
de mner reltiv,
diciendo el fctor de escl, como se muestr en l gur 6.3 ( \sc
leox{.25}); o indicndo
l proporcin en l escl horizontl entre llves y con l escl ve
rticl entre corchetes:
\scleox{.2}[.3], como en 6.3 ( \scleox {.25}[.5] ). Tmin pued
es dr medids
soluts, como en l gur 6.3c ( \resizeox{8cm}{2cm}) o ien, util
izr un escl reltiv,
donde omitimos el fctor verticl, y se sumir el mismo que el horiz
ontl, por ejemplo 6.3d
( \resizeox{2cm}{!}). En l escl solut se deen dr ls dos m
edids. Culquier de ells
puede ser sustituid por ! .

202
LATEX
Figur 6.2

Esclndo ojetos con grphics.

int horizontl que


verticl

cl reltiv

() Dist
() Mism horizontl y verticl

(c) Escl solut

(d) Es

Otrs dos posiiliddes que tienes con ojetos es l de rotrlos


o espejerlos. En l gur 6.3 puedes ver rotciones de 45 grdos 6.4 ( \rotteox{45}),
de 180 6.4 ( \rotteox{180})
y un gur y su re ejo 6.4c ( \ re ectox ). En cd un de ells se mr
c l lne se como
un lne punted, y que lguns de ls gurs (como l rotd) fuero
n suids pr
que no quedr desproporciond l gur.
Se puede oservr tmin que ests gurs pueden precer mezclds
con el texto,
como qu
sin necesidd de incluir en un gur o tl, dond
e lo nico que se hizo
fue insertr \ re ectox {\ scleox {.1}{\ includegrphics{dummy.ps}
}} entre ls plrs qu
y sin.
Es importnte insistir en que ests operciones de esclr, rot
r y re ejr ls puedes
plicr  culquier ojeto: texto, frmuls mtemtics (siempre y cun
do estn en modo
mtemtico .. o \(.. \) ), tls complets, gurs, etc.

6.10 Imgenes y

gurs
203

Figur 6.3 Rotciones y re ejos con grphics

) Rotcin de 180

() Rotcin de 45

(c) Figur y su re ejo

Si por ejemplo quieres el re ejo de lgo pero  lo lrgo del eje h


orizontl, lo puedes
conseguir con el cdigo que sigue
\ scleox { 2 } { r e f l e j o h o r i z o n t  l \ r o t  t e
 o x {180}{ %
\ reflectox { reflejo horizont
l } } }
y que produce
re ejo horizontlre ejo horizontl
Dees notr que lo que ps l texto jo de l lne se es l r
otd, y que tom
l esquin inferior izquierd como punto de rotcin.
Actividd 6.46 Codi c en LATEX lo siguiente:

204
LATEX
Tl 6.23

Comprcin de tmos

1 
d

Entrd

r
nt
E

q1
0
Edo 0

q1
do
q0
E

q0
q0
q0

q0

q1

q1

q0

q1

q1

Actividd 6.47 Codi c en LATEX l siguiente expresin:


= 2 4ac = 2 4ac
Actividad 6.48 Importa a un arcivo d LATEX qu us l paqut gra
pics alguna d las
gr cas qu laborast con x g (la dl rbol gnalgico, por jmplo). La d
bs tnr
guardada n tu cunta, por lo qu si no la xportast, abr otra v
ntana y jcuta x g para
xportarla n postscript.
6.10.2.

Cortando

guras

Puds mostrar nicamnt part d una gura utiliando l modo \in


dl
comando (agrgando un astrisco al nombr dl comando) y dndol parm
tros opcionals
ntr corcts. La primra parja l indica la posicin d la squin
a infrior iquirda y la
sgunda parja la posicin d la squina suprior drca. Puds obs
rvar l rsultado n
la gura 6.4.
Figura 6.4 Tomando pdaos d guras
cludgrapics

i n c l u d  g r a p  i c s
t ] \ { dummy . ps \ }

[100 pt ,130 p t ] [ 2 2 0 pt ,260 p

6.10 Imgns y

o ms laro.
6.10.3.

guras
205
En la

gura 6.4 colocamos un marco alrddor dl rcort para haerl

Ese maro no aparee omo resltado del omando.


Colores

En el onteto de generar arh vos pd, t l zaremos para olor


ear dos paqetes, olor y
t z. Anqe el pr mero es laro s objet vo, el segndo, t z, es
n paqete de ATE mho
my poderoso para gra a n y qe nlye n s stema de olores a ems 
om
ila an o
on
a ex omo on la ex . Es inlui o en o el
aque e
f aunqu
e a
o a una
in e faz ms senilla que la que so
o a
f. Es an  an e y
o e os
o que es ivi i o en
va ios
aque es
a a que elijas niamen e aquellos que va a usa . En
la abla 6.24 amos
una lis a e los que vamos a eque i ,
o lo
on o,
a a ene a
olo es. Cabe ala a
que
a a u iliza ikz es neesa io a a ambin alunos
aque es q
ue nos si ven omo
so
o e, que lis amos ambin a on inuain5 .
Tabla 6.24 Paque es e
f
a a olo es y ibujos

an e e
f, ya

Nomb e
ikz

Uso
\use
akae{ ikz}

que a una in e faz sen

illa e usa
a a  a

a . Inluye ambin un sis

ema
a a olo es
olo es
ini
ales.
xkeyval
e
a me os el

que
e mi e ombina los
\use
akae{xkeyval} Pe mi e asoia nomb es

aque e on los valo es

o es
on ien es. Se

equie e ambin
a a o o

s
aque es.

ifon
bajo nivel
a a las

e e ikz.

a a
o e  ea
ema
a a hae lo.

Des i
in
s e es el
aque e ms im
o

olo

use
akae{
ifon }

Se ena a el manejo e

 as. Lo equie e el
aqu
\use
akae{olo }

P o
o iona una in e faz
nuevos olo es y un sis

Veamos en ones alunas mani


ulaiones que involu an olo 6 .
Po ejem
lo, si quie
es ambia el olo e lo que es amos haien o enemos el oman o
\  o l o { e }
y es e ese momen o en a elan e, en el ano el ambien e en el
que es , o o se
es ibi en ojo. Los olo es bsios on los que on amos se enuen
an en la abla 6.25.

.
5
ein

aloue.h ml

To os es os
aque es
ue en ob ene se  a ui amen e e la i
h
://www. ex.a.uk/ ex a hive/hel
/Ca aloue/a

que es una exelen e fuen e e


aque es jun o on su oumen ain
6
Si ienes una im
eso a en blano y ne o, es o a
a ee en i
s in os onos e  ises,
e o en la
an alla
lo ve s al ual

206
LATEX
Tabla 6.25

o
e
w

Colo es bsios on los que se uen a


C io

Resul a

\ olo {blak}blak
\olo box{ ay }{\ olo {whi e}whi e}

blak
whi

\ olo { e } e
\ olo {yellow}yellow

e
yello

\
\
\
\

olo
olo
olo
olo

{yan}yan
{blue}blue
{ een} een
{maen a}maen a

yan
blue
 een
maen

y a ems enemos los siuien es onos e  ises


e e ni os:

ay
 ay

\ olo {blak}blak
\ olo { a k ay} a k ay

blak
a k

\ olo { ay} ay
\ olo { lih  ay } lih  ay

 ay
lih

\ olo {whi e}whi e

whi e

Como oloamos o o en un abula , el efe o el ambio e ol


o es niamen e en o
e la el a en que es es i o.
Tenemos la
osibili a e ambia niamen e el ex o esea o on
el siuien e  io:
Vamos ambia e \ e x  o l o { e } { o j o }
Vamos ambia e ojo a
a  o l o \ e x  o l o { yan } { a z u l }
olo azul
El
aque e olo ambin nos of ee la
osibili a e onfo ma 
ajas on el fon o e
ie os olo es
a a ealza alunos ex os:
\  o l o b o x { e } { \ e x  o l o { b l u e }{ %
Es a es una
ueba } }
Es a es una
ueba
A ivi a 6.49 Telea en un a hivo fuen e e LATEX on e uses el

aque e olo y  a
his,
las lneas o es
on ien es a olo y ve en la
an alla mo que an ( e
safo una amen e
la im
esin no mues a el olo , sino niamen e is in os niveles e
 ises,
e o en la

an alla s lo
ue es a
eia ).

6.10 Imenes y u as
207
6.10.4.

Dibujan o obje os eom ios

Hay va ios
aque es que e
e mi en ibuja obje os eom ios 
omo lneas,  ulos,
a os, e . U iliza emos a TikZ el sub
aque e sha
es y a ows , que
nos of ee una  an
ve sa ili a . No ve emos a ms que alunos obje os, ya que es e
aque
e es sumamen e
ex enso.
Pa a
o e usa oman os e ikz enemos que es a en o e un
ambien e e es e

aque e. ikz iene os i


os e ambien e, el e lnea y el e
afo:
\ ikz<[mo i a o es]>{<oman os>}
Am
bien e e lnea.
\ bein { i k z
i  u e } <[mo i a o es]>
bien e e
afo.
...
\ en { i k z
i  u e }

Am

Los mo i a o es van en e o he es y ienen que ve on as


e o
s ene ales e las
u as que eseamos ons ui . Ambos ambien es
esu
onen un amao, ya
sea e lneas
o e
afo, a o en la uni a e me i a que se es
ei que. La uni a
e me i a
o
omisin es en en me os,
e o se
ue e ambia . P  iamen e o o lo q
ue eseemos
ibuja va a ene im
li as oo ena as y loni u es, que es a n a
as im
li amen e
en la uni a e me i a.
Pa a eno a a es as uni a es e me i a, ikz u iliza ve o es
en el eje e las x, e las
ys y de las zs. Es onven ente asegrarnos on q n dad de med da est
amos trabajando.
a pedes de n r en m lmetros, plgadas, entmetros o pntos. reer mo
s trabajar on
pntos, ya qe sta es na n dad qe se sa en mhos otros lgares.
ara estableer al
pnto omo n dad de med da en los omandos de t z t l zamos el s
g ente mod ador:
\ t  z [ =1 pt , y=1 pt , z=1 p t ] { . . . }
\ beg n { t  z p  t  r e } [ =1 pt , y=1 pt , z=1 p t ]
...
\ end { t  z p  t  r e }
y a part r de ese momento y dentro del amb ente delarado, la n da
d de med da ser 1
pnto (1pt). S se delara otro amb ente en otro lgar, habr qe ha
er lo m smo, o b en
trabajar en entmetros.
6.10.5.

neas

El omando qe perm te d bjar lneas es \draw y hay qe darle om
o argmentos las
oordenadas de los pntos por los qe q eres qe pase. El ormato
ms s mple del oman
do es el s g ente:

208

ATE
\ draw ( <oord n  al> ) ( <siuien e oo ena a> ) . . . ;

on e los
un os suesivos in ian que
ue es
one an as oo ena as om
o esees. Las
oo ena as se
ue en a omo
un os ela ivos on la uni a e loni u
el ambien e;
o bien
ue e se aln obje o e ique a o7 ; ambin
ue e a
a ee all una oo
ena a on
una uni a e me i a es
e a. Si se a a e oo ena as, onsis e e una
a
eja on
los elemen os se
a a os en e s
o oma, on e el
ime elemen o e la
a
eja es el
es
lazamien o sob e el eje x y el seun o sob e el eje y. Tambin es im
o
an e no a que
los oman os e ikz en su mayo a e minan on
un o y oma (;).
Es im
o an e meniona que el ex o seui inme ia amen e es
us el
u
n o que el
oman o onsi e e que equie e. Veamos alunos ejem
los:
o a

\ ikz [x=1
,y=1
]\ aw(0,0) (20,30) (30,0)

ve ialmen e
a a a lua al azo y el ex o
l es
aio ou

a o. Si eseamos que el ex o se aomo e enima


ae lo a
ie
eo in onos haia a iba y haia la izquie a
hs
ae.
\ vs
ae {30
} % E l mximo e l a
% e l nea .

l
a a

. No a mo el enln se aom

on ina a
a i el nal e
el ibujo, enemos que h
on oman os e \vs
ae y \
seun a oo ena a y e l ambio

\ i k z [ x=1
, y=1
] { \ aw (0 ,0)
\ hs
ae {30
} %
\ i k z [ x=1
, y=1
] { \ aw (0 ,0)
y l a s l neas se aomo a omo se e s
y las lneas se aomo an omo se es obse van o.
Veamos ms ejem
los e alunas u as. Una mane a e

aomo a alunas e
\ i k z [ x=1

(60 ,15) %
(
\ i k z [ x=1

9 0 , 8 0 )
(

(20 ,30) (30 ,0);}


(20 ,30) (30 ,0);} %
obse van o

eja es
aio ve ia

las u as es on \vs


ae. Obse va:
, y=1
] { \ aw ( 0 , 0 ) ( 3 0 , 5 ) ( 2 0 , 1 0 )
7 0 , 5 0 ) ( 5 0 , 1 0 0 ) ( 1 2 0 , 1 0 0 ) ; }
, y=1
] { \ aw ( 1 4 0 , 4 0 ) ( 1 9 0 , 4 0 ) ( 1
1 4 0 , 8 0 ) ( 1 4 0 , 4 0 ) ; }

Pue es ambia el anho e la lnea ambin on un mo i a o , line wi h y


el amao e la
lnea se
ue e a en ualquie uni a e me i a:
7
Ve emos ms a elan e mo e ique a obje os
a a usa los en un ibujo.

6.10 Imenes y u as

209

\ bein {
\ aw
\ aw
\ aw
\ aw
\ aw
\ en {

i
[ l
[ l
[ l
(70
[ l
i k

k z
i  u e } [ x=1
, y=1
]
i n e w i h =2
] ( 0 , 0 ) ( 3 0 , 2 0 ) ;
i n e w i h =.13 i n ] (30 ,20) ( 5 0 , 0 ) ;
i n e w i h =.15m ] (50 ,0) ( 7 0 , 2 0 ) ;
,20) ( 9 0 , 0 ) ;
i n e w i h =1
] (90 ,0) ( 1 1 0 , 2 0 ) ;
z
i  u e }

Tambin se
ue e a el anho e lnea
a a o o un ambien e,
onin o
lo e mo i a o e
ambien e:
\ bein { i k z
i  u e } [ x=1
, y=1
, %
l i n e w i h =2
]
\ aw ( 0 , 0 ) ( 3 0 , 2 0 ) (30 ,20) %
( 5 0 , 0 ) (50 ,0) (70 ,20) %
(70 ,20) ( 9 0 , 0 ) (90 ,0) %
( 1 1 0 , 2 0 ) ;
\ en { i k z
i  u e }

El oman o \ aw es fun amen al en ikz ya que se vi ambin


a a
aomo a obje os y
ibuja u as. Po ejem
lo,
a a ibuja un e nulo ombinamos \ a
w on esa fo ma:

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ aw ( 0 , 0 ) e  a n  l e ( 1 4 0 , 1 2 0 ) ;
\ en { i k z
i  u e }

Siem
e que in o ues un ambien e ikz, ebes
ensa que ese
vas un es
aio e anula a o

o lo que ibujas e. Ese es


aio lo a on ene o os los obje os
que hayas aomo a o o ibuja o
en ese ambien e. El (0,0) es la esquina infe io izquie a (aunque
es o lo
ue es mo i a ) y la
esquina su
e io e eha es a a
o lo que hayas heho en o el
ambien e.
A ivi a 6.50 Es ibe el  io neesa io
a a que se ibuje lo que
siue (el amao ela ivo es
lo que im
o a).

210
LATEX

Como ya menionamos, ikz


ovee va ias u as eom ias on las que
ue
es abaja usan
o la biblio ea sha
es e es e
aque e. Y omo las u as son ie o i
o
e obje os,
ue es
aomo a los ambin en la e ula me ian e aw. A ems el e nulo, on amos
on  ulos
(i le), iaman es ( iamon ) y eli
ses (elli
se). El fo ma o
a a a a un
a e es as u as es el
siuien e: una vez que se ubia el
un o on e se va a oloa la u a me i
an e aw, a a una
e las u as iene sus
o
ios
a me os. Quisi amos an es meniona un mo i a
o ms que
al e a la fo ma e los
un os e quieb e
a a e on ea los y que es oun e
o ne s. Obse va el
efe o que iene en el e nulo que hiimos a iba:

\ bein { i k z
i  u e } %[x=1
, y=1
]
\ aw [ x=1
, y=1
, oun e  o n e s ]
(0 ,0) e anle (140 ,120);
\ en { i k z
i  u e }

Pue es jua on qu an e on ea as es n las esquinas, a en ole el e o


n eo en minos
e una uni a e me i a a on inuain el sino =. La me i a se e e e a la
is ania e lo que
se a la esquina sin e on ea a la e on ea a, me i o ve ialmen e.

o ne s

oun e
o ne s

oun e o ne s oun e o ne s oun e 


=4

que se onsiui on el siuien e  io:

=8

=16

6.10 Imenes y u as

211

\ bein { i k z

\ aw [ oun e
( 4 0 , 1 2 0 ) ;
\ aw [ oun e
n  l e ( 1 2 0 , 1 2 0 ) ;
\ aw [ oun e
a n  l e ( 2 0 0 , 1 2 0 ) ;
\ aw [ oun e
a n  l e ( 2 8 0 , 1 2 0 ) ;
\ en { i k z
i

i  u e } [ x=1
, y=1
]
 o n e s ] ( 0 , 6 0 ) e  a n  l e

 o n e s =4
] ( 8 0 , 6 0 ) e  a
 o n e s =8
] ( 1 6 0 , 6 0 ) e 
 o n e s =16
] ( 2 4 0 , 6 0 ) e 
 u e }

O os e los mo i a o es que
ue es
one a \ aw son el olo
e las mismas blue, e ,
yellow, yan,  een, maen a ; el i
o e lnea [ loosely | ensely]{so
li | o e | ashe } . Es os
l imos
a me os no llevan sino = o i en i a o uan o a
a een en el
on ex o e un oman o
\ aw y
ue es usa los on u as, lneas o a os. Hay que meniona a
mbin que el e on eo e
esquinas
ue e a
lia se niamen e a un semen o e la aye o ia

in a a, si se oloa an es e
las oo ena as a
a i e la ual ebe a
a ee . Veamos un
equeo
ejem
lo:

\ bein { i k z
\ aw ( 0 , 0

\ en { i k z

i  u e } [ x=1

) [ blue , oun e  o
( 3 0 , 5 0 ) ( 8 0 ,
sha
 o n e s ]
( 0 , 0 ) ;
i  u e }

,
n
2
(

y
e
5
7

=1.5
]
s =10
]
)
5 , 75)

Como es muy omn que e e mina en la oo ena a en la que se e


m
ez (e a un
olono),
ikz
o
o iona la me a oo ena a yle que, on e a
a eza, e
esa la
ime
un o a o en la
aye o ia, omo
o ejem
lo en el siuien e ibujo, en que ambas
vees e esa la oo ena a
(0,0) .

\ bein { i k z
\ aw ( 0 , 0

\ en { i k z

i  u e } [ x=1

) [ blue , oun e  o
( 3 0 , 5 0 ) ( 8 0 ,
sha
 o n e s ]
 y  l e ( 2 7 , 1 2
i  u e }

,
n
2
(
)

y =1.5
]
e s =10
]
5 )
7 5 , 75)
( 3 5 , 8 0 )  y  l e ;

En la abla 6.26, < im> se e e e siem


e a una an i a e me i a
, omo mm, m, in,
,

em, ex, mien as que <num> es un nme o que


ue e o no se un en e o,
y en alunos asos
ue e
se nea ivo. Es os mo i a o es
ue en a
a ee en el ambien e o en
el oman o.

212
LATEX
Mo i a o es
a a el azo e lneas y

Tabla 6.26

va a
in a

Pa me o
Po omisin
olo =<olo >
olo : blak

 amen e el
x=< im>
im: 1m
y=< im>

os ejes.
bonjun o

z=< im>
line wi h=< im>
im: 1

ve y hik

as que se

hik
ve y hin
hin

a e n=
a n
es ilo: soli

n ese

a e n olo =<olo >


blak

os que om

ein se ha
s on un o

a,

oun e o ne s
sha
o ne s
oun e o ne s= im
sha
o ne s
ll

no

lo , el elle

ll = < olo >

Des i
in
Es
ei a el olo en que se
la lnea. Pue e a
a ee i e

olo na a ms.
Uni a es
a a a a uno e l
Son o
ionales ualquie su

e ellos.
Es
ei a el  oso e las lne

ibujan (ve abla 6.27.

Rellena la u a o el
olono o

a n8 .
Dei e el olo e los az

onen al
a n.
In ia si los ambios e i
en e on ea os o no, y si
e on eo.
In ia que la u a ebe se sli

ellena a. Si se in ia el o
no ebe se e ese < olo

> ve

u a 6.5 on e se ejem
li a e

s a o

as que se van a

u as

ashe
loosely ashe
ensely ashe
o e
soli
loosely o e
ensely o e
soli

in .

Da el i
o o es ilo e line

ibuja (ve abla 6.27).

8
ual e TikZ.

Pa a ve los i
os e
a ones is
onibles, onsul a el man

6.10 Imenes y u as

213

Tabla 6.27 O
iones e  oso y es ilos e lneas

ensely o e

ensely o e

ensely o e

ensely o e

ensely o e

he

ensely ashe

he

ensely ashe

he

ensely ashe

he

ensely ashe

he

ensely ashe

ve y hin

loosely o e

hin

loosely o e

no mal

loosely o e

hik

loosely o e

ve y hik

loosely o e

ve y hin

loosely ashe

as

hin

loosely ashe

as

no mal

loosely ashe

as

hik

loosely ashe

as

ve y hik

loosely ashe

as

Fiu a 6.5 Ejem


lo e o
iones
a a ibuja
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ aw [ f i l l ] ( 0 , 0 ) [ blue , oun e  o n e s =10

]
( 3 0 , 5 0 ) ( 8 0 , 2 5 ) [ sha
 o n e
s ]
( 7 5 , 75)  y  l e ( 2 7 , 1 2 )
( 3 5 , 8 0 )  y  l e ;
\ en { i k z
i  u e }

Pasemos ya a ve las is in as u as que


ue es ibuja on el 
oman o \ aw. Las mos amos
en la abla 6.28.

214
LATEX
Tabla 6.28 Ejem
los e

u as en TikZ

Coman o
Fiu a
\ ikz [x=1
,y=1
]{\ aw(25,10) elli
se (20
an 10
);}

e \ aw a el en o

o ho izon al y la

Como
ue es obse va , la oo ena a a a a on inuain

e la eli
se, mien as que la
ime a imensin a el ime
seun a el ve ial.

\ ikz [x=1
,y=1
]{\ aw (25,10) i le (12.5
);}

o el  ulo, mien

En es e aso, ambin la
ime a oo ena a nos a el en

as que la imensin nos a el ime o.

\ ikz [x=1
,y=1
]{\ aw (25,10) a  (90:0:25
);}

el  ulo om
le o,
en e
a n esis
el eje oo ena o on
ue em
ieza el a o; el
en el sen i o e

Iual que an es, la


ime a oo ena a e a el en o
aunque niamen e vayas a
in a un a o. Los es nme os

ienen el siuien e sini a o:


ue es ve al i ulo en
el en o en (0,0); el
ime nume o a el nulo en el q
seun o a el nulo en el que e mina, movin ose siem
e

las maneillas el eloj; el e e nume o a el a io


el  ulo el que el a o
fo ma
a e.
(40,0);}

\ ikz [x=1
,y=1
]{\ aw (5,0) .. on ols (15,15) an (30,15) ..

zosamen e a os e
a a ibuja el bezie :
es anen e a la u va;

Es a ons uin e
e mi e ibuja u vas que no son fo

 ulos. Las oo ena as e on ol e


esen an
un os

en e el o ien y el
ime
un o la e a que los une
simila men e
a a el seun o
un o.

A ems e las va iaiones en la fo ma y el i


o e lnea, ambin
ue es

e i que la lnea sea


oble, omo lo ejem
li amos en la abla 6.29.
Tabla 6.29 Lneas obles

0,0);

\ aw[ve y hik , ouble](0,0) (50,0);


\ aw[ hin, ouble](0,0) (50,0);
\ aw[ve y hik , ouble is ane=2
](0,0) (5
\ aw[ hin, ouble is ane=2
](0,0) (50,0);

Realmen e el nme o e va iaiones sob e es os ua o sim


les oman
os es muy  an e, as
que e eomen amos onsul a el manual e TikZ
a a
o e usa o as
ellas.

6.10 Imenes y u as

215

En el aso e las lneas y los


olonos,
ue es ene el l imo sem
en o ome o no la fo ma
e eha. Los i
os e ehas que enemos is
onibles se enuen an en
las ablas 6.30 y se onsi
uen
onien o omo mo i a o e la lnea el i
o e eha que eseas. Vi
enen en el
aque e e
biblio ea e ehas e TikZ que se invoa on la siuien e lnea en el

embulo el oumen o.
\ u s e i k z l i b a y { a ows }
Alunas
un as e ehas vienen
o omisin en TikZ. Los es ilos e
l ue
o e la eha

ue en se ualesquie a e los lis a os an e io men e,


o lo que l
os ejem
los los a emos on lnea
sli a
a a ejem
li a na a ms las
un as. Los is in os i
os e
un a
s e ehas se enuen an
en la abla 6.30.
Tabla 6.30

Ti
os e
un as e

ehas en TikZ
\ aw [a ows=>] (0,0) (50,0);
\ aw [a ows=>>] (0,0) (50,0);
\ aw [a ows=|>] (0,0) (50,0);

,0);
;
,0);
,0);
,0);

\ aw [a ows=| iamon ] (0,0) (50


\ aw [a ows=la ex] (0,0) (50,0)
\ aw [a ows=anle 45] (0,0) (50
\ aw [a ows=anle 60] (0,0) (50
\ aw [a ows=anle 90] (0,0) (50

Como
ue es obse va hay bas an e jueo on el i
o e eha y el
o ien el semen o. Pa a
ms info main, onsul a el manual e TikZ.
O o as
e o boni o e TikZ es que
ue es a is in os
a one
s
a a el elleno e u as. Es o
se lo a a an o el
aque e e biblio ea
a e ns en el
embulo
el oumen o.
\ u s e i k z l i b a y {
a e ns }
En el manual e TikZ viene una lis a e
a ones in e esan es que

ue es esea usa .
En las ablas 6.31 y 6.32 a emos ejem
los e is in os obje os
eom ios que
ue es
in a
on TikZ. Es im
o an e que eue es que las oo ena as que se a
n su
onen que el oman o
iniia en (0,0), y a
a i e ah se alula la
osiin el ibujo. S

in emba o, el aomo o e las


u as se hizo on meanismos que se a n a on inuain. Asimismo se hi
ie on alunos uos

a a que la al u a el enln fue a la a eua a


a a a a u a. Debe s
oma en uen a la sein
que siue on e ensea emos a aomo a e mejo mane a las u as.

216
LATEX
Tabla 6.31

Fiu as eom ias que se


ue en lo a en TikZ

\ bein { i k z
i  u e } [ x=1
, y=1
, l i n e
w i h =3
] %
\ useasboun inbox ( 0 , 0 ) e  a n  l e
(140 ,60);
\ aw[ l a e x , oun e  o n e s] %
(100 ,50) (0 ,20) ( 5 0 , 0 ) ;
\ en { i k z
i  u e }

\ bein { i k z
i  u e } [ x=1
, y=3
]
\ useasboun inbox ( 0 , 0 )
e anle (170 ,70);
\ aw [ h i  k ] ( 0 , 6 0 ) ( 7 0 , 1 0 )
(70 ,60) (0 ,10)
yle ;
\ aw [ h i  k , f i l l = e ] ( 9 0 , 6 0 )
(160 ,10) (160 ,60)
(90 ,10) yle ;
\ en { i k z
i  u e }

;
) ;

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 ) e  a n  l e ( 1 7 0 , 7 0 )
\ aw [ f i l l ] ( 1 0 , 1 0 ) e  a n  l e ( 8 0 , 6 0

\ aw [ f i l l = w h i e ] ( 2 0 , 2 0 ) e  a n  l e
( 4 0 , 4 0 ) ;
\ en { i k z
i  u e }

) ;
(20
) ;

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox (0 , 10) e  a n  l e ( 1 4 0 , 6 0 ) ;
\ aw [ v e y h i  k ] ( 3 0 , 3 0 )  i  l e (20

\ aw [ v e y h i  k , e ] ( 1 0 0 , 3 0 )  i  l e
\ en { i k z
i  u e }
Con ina en la
ina siuien e

6.10 Imenes y u as

217

Tabla 6.31 Fiu as eom ias que se


ue en lo a en TikZ
Con ina e la
ina an e io
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 )
e anle (140 ,70);
\ aw [ v e y h i  k ] ( 2 0 , 3 8 ) ( 1 0 , 0 )
(50 ,0) a  (0:76:40
) ;
\ aw [ f i l l ] ( 1 0 0 , 3 8 ) ( 9 0 , 0 )
(130 ,0) a  (0:76:40
) ;
\ en { i k z
i  u e }
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 )
e anle (140 ,70);
\ aw [ v e y h i  k , e ] ( 7 0 , 3 0 )
e l l i
s e (50
an 20
) ;
\ en { i k z
i  u e }

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 )
e anle (140 ,70);
\ aw [ v e y h i  k , s e
=5mm, e ,

a e n= f i v e
o i n s a s ,

a e n  o l o = e ] \
( 7 0 , 3 0 ) e l l i
s e (50
an 20
)
\ en { i k z
i  u e }

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox (0 , 50)
e anle (170 ,100);
\ aw ( 8 0 , 6 0 ) a  ( 5 0 : 9 0 : 1 0 0
) ;
\ aw [ f i l l ] ( 1 6 0 , 6 0 )
a  (50:90:100
) ;
\ aw [ v e y h i n , l o o s e l y ashe ]
( 1 6 0 , 6 0 ) (95 , 50)
(140 , 50) (95 , 50)
( 9 5 , 8 3 ) ;
\ en { i k z
i  u e }
O o as
e o que es f euen e que quie as ene en un oumen o
es la  a ain e funiones.
TikZ
o
o iona alunas funiones
ias que
ue es que e  a a , 
omo lo son la
a bola, el
 ulo, seno y oseno. Pa a o as funiones se en n que
e
a a la
s ablas en un a hivo a
a e,

218
LATEX
Tabla 6.32

e o se
ue en  a a . Veamos
ime o es as ua o en la abla 6.32.
G a ain e funiones omunes en TikZ
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 )
e anle (140 ,70);
\ aw [ h i  k ] ( 4 5 , 5 0 )
a  (60:360:20
) ;
\ aw [ h i  k , f i l l ] ( 1 1 5 , 5 0 )
a  (60:360:20
) ;
\ en { i k z
i  u e }

]
0);

]
30);

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 )
e anle (100 ,50);
\ aw ( 0 , 0 )

a a b o l a [
a a b o l a h e i  h =30

(30 ,
\ aw ( 5 0 , 3 0 )

a a b o l a [
a a b o l a h e i  h =30

(90 ,
\ en { i k z
i  u e }

Pue es ob ene
e azos e
a bola si as omo seun a oo ena a al
o que no sea la
imaen el
un o e o ien, o bien on mo i a o es:
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 0 , 0 )
e anle (140 ,60);
\ aw ( 0 , 0 )
a a b o l a ( 3 0 , 4 5 ) ;
\ aw ( 5 0 , 0 )

a a b o l a [ ben a en ]
(80 ,45);
\ aw ( 1 0 0 , 0 )

a a b o l a ben
(122.5 ,52.25) (130 ,45);
\ en { i k z
i  u e }
Con ina en la siuien e
ina

6.10 Imenes y u as

219

Tabla 6.32 G a ain e funiones omunes en TikZ


Con ina e la
ina an e io
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox (0 , 30)
e anle (140 ,40);
\ aw ( 0 , 0 ) s i n ( 2 0 , 2 0 )
s i n (60 , 20)
os ( 8 0 , 0 )
sin (100 ,20);
\ en { i k z
i  u e }
in e valo

a a
in a la a

Tan o el seno omo el oseno niamen e es n e ni os


a a el
(0, 2 ),
o lo que es neesa io ombina ambas funiones

ye o ia om
le a
O o meanismo ambin muy im
o an e
a a  a a funiones es el
e
o e a le una lis a
e
un os y que vaya ma n olos on aln smbolo. Pa a ma a los
un o
s on smbolos equie
es e la biblio ea
lo ma ks me ian e el oman o
\ u s e i k z l i b a y {
lo ma ks }
Una vez a a a la biblio ea e ma as,
ue es elei en e las
que se enuen an en la a
bla 6.33.
Tabla 6.33 Smbolos
a a ma a u vas que se  a an

i
in

iones

ba as ve iales

 ulos hueos

as e isos

es ellas
ina en la
ina siuien e

Ma a

I en i ain

Des

ma k=

u

ma k=|

ma k=o

ma k=as e isk

ma k=s a
Con

220
LATEX
Tabla 6.33 Smbolos
a a ma a u vas que se  a an
ina e la
ina an e io
Ma a

uma

o u o

u o

a me os.

Con

I en i ain

Des i
in

ma k=o
lus

 ulos on s

ma k=o
lus

 ulos on sum

ma k=o imes

 ulos on

ma k=o imes

 ulos on
o

ma k=squa e

ua a o

ma k=squa e

ua a o sli o

ma k= ianle

inulo

ma k= ianle

inulo sli o

ma k= iamon

iaman e

ma k= iamon

iaman e sli o

ma k=
en aon

en ono

ma k=
en aon

en ono sli o

Pa a  a a funiones usamos ambin el oman o \ aw on mo i a o es y

6.10 Imenes y u as

221

Fiu a 6.6 G a ain e funiones a bi a ias


\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox (0 , 2) e  a n  l e ( 2 0 0 , 2 0 0 ) ;
\ aw ( 0 , 0 )
l o [ ma k=x , smoo h ]
 o o i n a e s{ %
(30 ,5)
(60 ,20)
(90 ,45)
(120 ,80)
(150 ,125)
(180 ,180)
(200 ,220)};
\ aw [ e ] ( 0 , 0 )
l o [ ma k=o , smoo h ]
oo ina es {(30 ,1)
(60 ,8)
(90 ,27)
(120 ,64)
(150 ,125)
(166 ,220)
};
\ en { i k z
i  u e }

Ma as un
un o iniial y a on inuain ies que quie es  a a
una funin (
lo ). A es a
l ima o
in le a
lias mo i a o es, omo el smbolo
a a las ma as,
os
iblemen e si quie es o
no la u va suave (smoo h) y el olo e las ma as, que
ue e no s
e el mismo que el e la u va.
Sin emba o, las  as que
in amos en la u a 6.6 son ealmen e mu
y
ob es. Quisi a
mos
o e ibuja los ejes a esianos y oloa in iaiones es
e
 o a los valo es en es os ejes.
Tenemos os fo mas e hae lo.
Usan o el oman o \ aw on el a umen o  i , uya sin axis
es:
\ aw <esq. inf. izquie a>  i [ <mo i a o es> ] <e
sq. su
. e eha>;
La
a e el [ < in e valo > ] o es
on e a que an e a a
quie es la ejilla
a a las oo
ena as. Sin emba o, on es a o
in no enemos o ava los ejes
o las ano aiones en los
mismos. Veamos mo que a en la u a 6.7.
Sin emba o, on es a o
in ebemos
one los ejes y las ma a
s a
ie. Los ejes no es ninn

oblema
ues lo haemos sim
lemen e u ilizan o \ aw, omo s
e mues a en la u a 6.8.
La o a fo ma e
in a la e ula es a
ie . Afo una amen e, 
omo el
in a las lneas se
a a e una a ea e
e i iva,
ue es usa la ons uin \fo
eah que
o
o iona TikZ. Es a
es una ons uin muy
o e osa que funiona omo sus i uin e
ma os,
o lo que se

ue e in o ui en asi ualquie enunia o. Da emos el ejem


lo en la u a 6.9 y es
us
analiza emos su fo ma o.

222

LATEX

Fiu a 6.7

Im
esin e la e ula

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox (0 , 2)
e anle (200 ,250);
\ aw [ o e ] ( 0 , 0 )
 i [ x s e
=15 , y s e
= 1 2 . 5 ]
(210 ,225);
\ aw ( 0 , 0 )
...
...
\ en { i k z
i  u e }

Fiu a 6.8 Coloain e los ejes


\ bein { i k z
i  u e } [ x=1
, y=1
\ useasboun inbox (0 , 2)
e anle (200 ,220);
\ aw [ o e ] ( 0 , 0 )
 i [ x s e
=15 , y s e

(210 ,225);
\ aw [ v e y h i  k , l a e x ]
( 0 , 0 ) ( 0 , 2 2 5 ) ;
\ aw [ v e y h i  k , l a e x ]
( 0 , 0 ) ( 2 1 0 , 0 ) ;
\ aw ( 0 , 0 )

l o [ ma k=x , smoo h ]
...
...
\ en { i k z
i  u e }

= 1 2 . 5 ) ]
%e j e y
%e j e x

6.10 Imenes y u as

223

El enunia o \fo eah iene las siuien es


a es:
Las va iables el fo eah que van se
a a as en e s
o una
iaonal y que onsis en e ia
onal inve sa y un i en i a o . Se eomien a que los i en
i a o es onsis an niamen e
e le as,
o que a vees, e
en ien o el on ex o, al su
s i ui se
ue en a
oblemas ines

e a os. En los os ejem


los an e io es, la lis a e va ia
bles onsis e e una va iable a las que
llamamos \x y y en el
ime o y seun o fo , es
e ivame
n e.
Una lis a e valo es que eben oma las va iables. Ca a e
lemen o e la lis a onsis e e un
valo
o a a va iable enunia a, se
a a os los elemen os
en e s
o omas y los valo es e
un mismo elemen o
o iaonales. Es a lis a va en e llav
es.
Po l imo enemos una lis a e enunia os on e
ue en o no
a
a ee las va iables el fo .

Fiu a 6.9
Seun a fo ma e
in a la e ula
\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox (0 , 2)
e anle (200 ,220);
\ fo eah \ x i n {15 ,30 ,45 ,60 ,75 ,
90 ,105 ,120 ,135 ,
150 ,165 ,180 ,195 ,
210} {
\ aw [ l i n e w i h =.3
, o e ]
( \ x , 0 ) ( \ x , 2 2 5 ) ;
}
\ fo eah \ y i n {12.5 ,25 ,37.5 ,50 ,
62.5 ,75 ,87.5 ,100 ,
112.5 ,125 ,137.5 ,
150 ,162.5 ,175 ,
187.5 ,200 ,212.5 ,
225} {
\ aw [ l i n e w i h =.3
, o e ]
( 0 , \ y ) ( 2 1 0 , \ y ) ;
}
\ aw ( 0 , 0 )
...
...
\ en { i k z
i  u e }

Ambos ejem
los ienen una sola va iable y las lneas que se
i
n an es n a in e valos ons an es.
En ene al, uan o se an es as os on iiones
ue es eem
laza
a
a e o o a la lis a
o una
lis a on e se in e en los
un os que fal an y que iene la siuien

e fo ma:
,
, . . . ,

seun o valo
l imo valo

ime valo

224
LATEX
Los os \fo eah que enemos los
o amos habe es i o e las fo m
as que se mues an en el
lis a o 6.1.
C io 6.1
,135 ,
) ( \ x ,

) ( 2 1 0

) ( \ x ,

) ( 2 1 0

Fo mas e hae e ulas


\ f o e a  h \ x i n {1 5 , 3 0 , 4 5 ,60 ,75 ,90 ,105 ,120
150 ,165
\ aw [ l i n e w i
2 2 5 ) ;
}
\ fo eah \ y in {12.5 ,25
112.5 ,125
187.5 ,200
\ aw [ l i n e w i
, \ y ) ;
}
\ fo eah \ x in { 1 5 , 3
\ aw [ l i n e w i
2 2 5 ) ;
}
\ fo eah \ y in { %
12.5 ,25 ,37.5
\ aw [ l i n e w i
, \ y ) ;
}

,180 ,195 ,210} {


h =.3
, o e ] ( \ x , 0
,37.5 ,50 ,62.5 ,75 ,87.5 ,100 ,
,137.5 ,150 ,162.5 ,175 ,
,212.5 ,225} {
h =.3
, o e ] ( 0 , \ y
0 , . . . , 2 1 0 } {
h =.3
, o e ] ( \ x , 0

,... ,225} {
h =.3
, o e ] ( 0 , \ y

Aunque a
a en emen e el oloa los nme os sob e los ejes
a e
e senillo, no sabemos 
mo oloa obje os uan o abajamos on TikZ, y no se lo a sim
l
emen e on un \ aw uyo
obje ivo es
in a lneas. En la siuien e sein esolve emos es e

oblema. An es e aban ona


es a sein quisi amos hae e no a que hay o a fo ma e alimen a
le oo ena as a \ aw y
que es me ian e un a hivo on las mismas, que
u o se ene a o

o una u ile a e linux. Pa a


el le o in e esa o le eomen amos que vea el manual e TikZ. Te
minamos es a sein on un
ive imen o en la u a 6.10 que usa niamen e los one
os que hem
os a o has a aho a.
Fiu a 6.10 Dive imen o on slo azo e lneas

Los oman os e TikZ que lo an el ibujo an e io se enuen an e


n el lis a o 6.2.

6.10 Imenes y u as
C io 6.2

8 0 ) ;

225

Dibujos a bi a ios

(1/2)

\ bein { i k z
i  u e } [ x=1
, y=1
]
\ useasboun inbox ( 3 0 , 3 0 ) e  a n  l e ( 3 5 0 , 1
% ojos
\ fo eah \ x / \ y i n { %
50/160 ,100/160 , 140/90 ,190/90 ,310/100 ,280/150} { %
\ aw ( \ x , \ y )  i  l e (12
) ;
\ aw [ f i l l ] ( \ x , \ y )  i  l e ( 3
) ;
}

bb i n { %

% ejas
\ f o e a  h \ x / \ y / \ xx / \ yy / \ a / \ b / \ aa / \

30/170/70/170/40/140/50/130 ,
80/170/120/170/40/140/50/130 ,
120/100/160/100/40/140/50/130 ,
170/100/210/100/40/140/50/130 ,
280/170/295/135/20/0/40/0 ,
310/120/325/85/20/0/40/0} {
\ aw ( \ x , \ y ) . .  o n o l s + ( \ a : 2 0

) an + ( \ b : 2 0
) . .
( \ xx , \ yy ) ;
\ aw ( \ x , \ y ) . .  o n o l s + ( \ aa : 3 0

) an + ( \ bb : 3 0
) . .
( \ xx , \ yy ) ;
}
% na iz
\ fo eah \ x / \ y i n {0/75 ,90/0} { %
\
 f
u a { \
 f x y ( \ x , \ y )}{ %
\ aw [ oun e  o n e s ] ( 7 5 , 8 0 ) ( 7 0 , 6
5 ) ( 6 5 , 6 0 )
( 7 0 , 5 5 ) ( 8 0 , 5 5 ) ;
\ f o e a  h \ xx i n { 7 0 , 7 4 } { %
\ aw [ f i l l ] ( \ xx , 6 0 )  i  l e ( 1

) ;
}

an +(220:20
) . .
an +(220:30
) . .

% boa
\ aw ( 4 0 , 4 5 ) . .  o n o l s +(320:20
)
(110 ,45);
\ aw ( 4 0 , 4 5 ) . .  o n o l s +(320:30
)

(110 ,45);
} %\
 f
u a
} %f o e a  h

226
LATEX
C io 6.2

0 , 6 5 )

) ;

Dibujos a bi a ios
(2/2)
% Te e a a a
\
 f
u a { \
 f x y ( 40 ,50)}{ %
\ aw [ oun e  o n e s ] ( 3 3 0 , 7 0 ) ( 3 1
( 3 0 5 , 6 0 ) ( 3 1 0 , 5 0 ) ;
\ fo eah \ x / \ y in {310/58 ,312/52}
\ aw [ f i l l ] ( \ x , \ y )  i  l e ( 1

% boa
\ aw ( 2 7 0 , 7 0 ) . .  o n o l s + ( 0 : 3 0

) an +(80:30
) . .
(310 ,0);
\ aw ( 2 7 0 , 7 0 ) . .  o n o l s +(340:10
)
an +(70:10
) . .
(309 ,0);
} %
 f
u a
\ en { i k z
i  u e }

El nio oman o nuevo en el lis a o an e io es el e


f
u a qu
e lo que hae es oma las
oo ena as en o e su alane (en e las llaves) ela ivas al

ime
a me o ( \
fxy(x,y) ).
A ivi a 6.51 Es ibe los oman os neesa ios en TikZ
a a ibuja
lo siuien e:

6.10.6.

Aomo an o obje os

El
o e
in a una e ula e la su
e ie que usamos
a a ibuja
suele se il no na a ms

a a  a a funiones, sino ambin


a a ibuja y oloa obje os. En
ene al, asoiamos obje os
que
ue en se le e os, ibujos,
un os, e . a no os. Un no o ie
ne las siuien es a a e s ias:
Ou
a una ie a
osiin, a a
o una
a eja (x,y).
Tiene aluna fo ma que
ue e se i le , e anle, iamon ,
elli
se .
Pue e ene un i en i a o asoia o.
Pue e ibuja se o no su on o no on ualquie i
o e lnea.
Pue e ellena se o no on is in os
a ones y en olo es iv
e sos.
El fo ma o ene al
a a oloa un no o es el siuien e:
\ no e ( e ique a

) [
]
) {
} ;

mo if ia o es
a (
osiion
contenido

6.10 Imgenes y

guras
227

Por ejemplo, puedes marcar algunas posiciones en el espacio e


n el que gra cas las funciones
para colocar all una descripcin de las mismas.
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 p t ]
\ useasboundingbox ( 0 , 0 ) r e c t a n g l e ( 2 0 0 , 2 2 0 ) ;
% r e t cula
\ foreach \ x i n {15 ,30 ,45 ,60 ,75 ,90 ,
......
f (x) = x3
% nodos
\ node ( x2 ) % e t i q u e t a
[ i n n e r sep=0 pt , o u t e r sep=0 p t ]
% modif .
a t ( 9 5 , 5 0 ) % dnde
{ } ; % contenido
\ node ( l e t x 2 )
[ r e c t a n g l e , draw , f i l l = w h i t e ]
f (x
) = x2
a t ( 4 0 , 1 0 0 ) { f (x) = x2 } ;
\ draw[ l a t e x ] ( l e t x 2 ) ( x2 ) ;
% l nea e n t r e dos nodos
\ node ( x3 )
[ i n n e r sep=0 pt , o u t e r sep=0 p t ]
at (161 ,175) { } ;
\ node ( l e t x 3 )
[ red , r e c t a n g l e , draw , f i l l = w h i t e ]
a t ( 8 0 , 2 0 0 ) { f (x) = x3 } ;
\ draw[ l a t e x , red ] ( l e t x 3 ) ( x3 ) ;
\ end { t i k z p i c t u r e }
Puedes pensar en acomodar los nodos con un
n este caso slo son en realidad
dos objetos (tres lneas que se repiten casi
ametrizar de la siguiente
manera:
......
e \ f o r e a c h \ e t i q/ %
f (x) = x3
\ xe / \ ye / \ l e t r / \ x l / \ y l / \ c o n
i n { x2 / 9 5 / 5 0 / l e t r x 2 / 4 0 /
100/f (x) = x2 / black ,
x3 / 1 6 1 / 1 7 5 / l e t x 3 /
8 0 / 2 0 0 / f (x) = x3 / red } {
\ node ( \ e t i q) %
[ i n n e r sep=0 pt , o u t e r sep=0 p t ]
a t ( \ xe , \ ye ) { } ;
(x) = x2
\ node ( \ l e t r ) %
[ \ c l o r , diamond , draw , f i l l = w h
at ( \ xl , \ y l )
{ \ cont } ;
\ draw[ l a t e x , \ c l o r ]
( \ l e t r ) ( \ e t i q ) ;
}
......

\foreach. Aunque e
dos veces), puedes par

t / \ c l o r

f
i t e ]

228
LATEX
Explicamos ahora algunos de los modi cadores.
La forma (shape) puede ser cualquiera de las que se encuentr
an en la biblioteca shapes de
TikZ, que se carga mediante el comando
\ u s e t i k z l i b r a r y { shapes }
colocado en el prembulo del documento. En este caso, en el ej
emplo no parametrizado utili
zamos rectangle, mientras que en el parametrizado utilizamos
diamond. La forma por omisin
es rectangle.
En algunos casos no deseas separacin entre la posicin del nodo
y su exterior. Esta separacin
se da por omisin alrededor del texto contenido en el nodo, au
n cuando no haya texto. Por eso
tienes que aclarar que la separacin entre el texto y el borde
(inner sep) y la separacin entre
el borde y el entorno (outer sep) es de cero puntos. Este mo
di cador lo utilizamos para marcar
que quieres colocarte exactamente sobre la lnea de la funcin.
Hay otra manera de hacer esto,
que veremos un poco ms adelante.
La opcin de dibujar o no contorno est dada por draw, que indic
a que s se haga. La opcin
por omisin es no pintar contorno.
Ya vimos la opcin de rellenar el nodo ( ll ). Para darle un co
lor al relleno y un patrn se
hace exactamente igual que con el comando \draw. El valor po
r omisin es transparente, por
lo que deja ver lo que sea que se haya pintado abajo; para que
no se viera la retcula abajo
de nuestras etiquetas es que rellenamos de blanco.
Por ltimo, el contenido de un nodo puede ser cualquier cosa,
entre otros, un arreglo, un
dibujo, otra retcula, ecuaciones (como lo hicimos nosotros). s
ta es una de las caractersticas
principales por las que nos gusta usar TikZ: te permite tras
plantar el podero y lo no de LATEX
a cualquier dibujo o gr ca.
Para colocar los nmeros a lo largo de los ejes haremos uso de l
a construccin \foreach y del
enunciado \node.
200
f (x) = x3
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 p t ]
\ useasboundingbox ( 0 , 0 )
rectangle (200 ,220);
...
\ foreach \ x i n {15 ,30 ,45 ,60 ,
...
\ foreach \ x / \ e t i q i n { %
30/1 ,60/2 ,90/3 ,120/4 ,
150/5 ,180/6 ,210/7} {

175
150
125

100
) = x2

f (x

\ node a t ( \ x , 5 ) { \ t i n y \ e t i q } ;
75
}
\ foreach \ y i n { %
50
25 ,50 ,... ,200} {
\ node [ l e f t ] a t ( 0 , \ y ) { \ t i n y \ y } ;
} ......

25

\ end { t i k z p i c t u r e }
1
2

6.10 Imgenes y

guras
229

Al acomodar los nmeros en el eje x tienes que utilizar posicin y


etiqueta, pues stas no
coinciden. En el eje de las y, en cambio, como coinciden la posicin
y la etiqueta, puedes utilizar la
misma variable para ambas.
Al colocar las etiquetas en el eje de las y utilizamos un nuevo
modi cador en el nodo nota
que no utilizamos nombre para el nodo pues no es necesario que acom
oda al contenido del nodo
respecto a la posicin del mismo. En este caso deseamos que los nmeros
se alineen a la derecha,
por lo que indicamos que el contenido se extienda hacia la izquierd
a (left). Tenemos las siguientes
posibilidades para este modi cador:
above
above
above
left
right
below
below
below

anchor=north
anchor=north
anchor=north
anchor=west
anchor=east
anchor=south
anchor=south
anchor=south

left
right

left
right

west
east

west
east

En los modi cadores a la izquierda en la tabla puedes agregar un


desplazamiento, usando por
ejemplo left =2pt.
Tambin puedes usar el \foreach para repetir guras . Por ejemplo,
si deseas dibujar una gr
ca, puedes colocar nodos y despus unirlos con lneas, como se puede ap
reciar en la gura 6.11 que
se hizo con el cdigo del listado 6.3.
Figura 6.11 Dibujo de una gr ca en LATEX
0
c

1
0
a

b
1

230
LATEX
Cdigo 6.3

Dibujo de una gr ca
\ begin { t i k z p i c t u r e } [ x=1 pt ,
% C o l o c a c i n de l o
\ f o r e a c h \ name / \ e t i q / \ x /
a / a/10/40 ,b / b/110/40 ,
c / c /10/120 ,d / d/110/120} {
\ node [ c i r c l e , draw ] ( \ name

y=1 p t ]
s nodos
\ y i n {
) a t ( \ x , \ y ) {

\ e t i q } ;
}
\ f o
a
d
\

% d i b u j o de l o s arcos r e c t o s
r e a c h \ f f r / \ t t o / \ e t i q / \ pos i n {
/ b / 0 / above , b / d / 1 / r i g h t ,
/ c / 0 / above , c / a / 0 / l e f t } {
draw[ angle 6 0 ] ( \ f f r ) node [ \ pos ] { \ e t i q } (

\ t t o ) ;
}
% d i b u j o de l o s arcos curveados
\ f o r e a c h \ f f r / \ t t o / \ e t i q / \ pos / \ s a l
e / \ e n t r a i n {
b / a / 1 / above / 2 7 0 / 2 7 0 ,
d/b/0/ right /0/0}
{
\ draw[ angle 6 0 ] ( \ f f r ) . . c o n t r o l s + ( \ s a
l e : 4 0 p t )
and + ( \ e n t r a : 4 0 p t ) . . node [ \ p
os ] { \ e t i q } ( \ t t o ) ;
}
\ end { t i k z p i c t u r e }

De entre lo que no revisamos antes est el signo de + al frente d


e las coordenadas de controls .
Esto se re ere a que el ngulo, que corresponde a la primera coordenada
, sea tomado en relacin
al centro del nodo al que se re ere; la segunda coordenada indica la
distancia del centro del nodo a
la parte ms alta de la curva (un bezier). Tambin es nueva la colocacin
de etiquetas, que se hace
tambin colocando un nodo sobre la trayectoria, antes del destino de
la lnea.
Este tipo de dibujos pueden alcanzar muchsima complejidad en Tik
Z, por lo que no seguimos
con el tema. Recomendamos nuevamente al lector interesado que consu
lte el manual de TikZ.
Actividad 6.52 Codi ca los dibujos de la

gura 6.12 en LATEX.

Actividad 6.53 Haz el cdigo necesario para dibujar una cara similar
a la que se us en esta
seccin.
Con esto damos por terminada la parte de dibujar con LATEX. Sob

re todo en el paquete TikZ


hay una casi in nidad de posibilidades. Nos falt, por ejemplo, cmo dibu
jar rboles o gr cas de
manera ms directa, pero se supone que este material lo que debe hace
r es abrirles el apetito y no
emparcharlos, as que por lo pronto ac dejamos este tema.

6.11 Referencias e ndices


231
Figura 6.12 Actividad 6.52

Yo

Ellos

T
6.11. Refe enias e n ies
Un oumen o ien o o, en ene al, un oumen o
ofesional o
mo un a ulo, un lib o, un
e
o e, equie e, a ems el on eni o, una se ie e elemen os es i
os y e ayu a muy im
o an
es
a a el le o e la ob a. Es os elemen os inluyen: i
os e
le as, sus amaos, la nume ain e
los a
ulos, seiones, f mulas, ua os o ablas, as omo una se ie
e elemen os (o
ionales)
omo ablas e on eni o, e u as, n ies. Al onjun o e es os ele
men os se les onoe omo
i
o afa.
La i
o afa e una ob a, en ene al, la ja y a ien e el e i o
, sob e o o en uan o a ues iones
es ias. Los n ies y la biblio afa o efe enias son, neesa iamen
e,
ovis as
o el au o . En
muhos e los asos, en s que a ua omo ambos: au o y e i o
e us abajos.
LATEX es i eal
a a ayu a e en la e niin e la i
o afa, inl
uyen o los elemen os o
io
nales. En es e a
ulo hemos evisa o ya
 iamen e o o lo que ne
esi as
a a ealiza ou
men os om
lejos,
o lo que nos es a ala a mo ealiza alunos
e los elemen os o
ionales
que menionamos en el
afo an e io .
6.11.1.

Refe enias biblio as

Como ya isu imos, la


esenia e efe enias biblio as en
us abajos e
e mi e in
u siona en ms emas que onsi e es in e esan es. Es o sini a que
las efe enias eben se

eisas y i ii al le o e u ob a on el meno esfue zo


osi
ble.

232
LATEX
Hay va ias fo mas e a le fo ma o a las biblio afas; e heho, en la
mayo a e los asos e
enon a s siuien o las elas que
a a al efe o i e la e i o ial. P
o an o, una e las a eas ms
im
o an es uan o envas un lib o, a ulo o ualquie o o abajo es i
o
a a su
ubliain, es
ene a la lis a e efe enias biblio as siuien o ihas elas.
En la
ehis o ia e la om
u a o a
En la
e his o ia e las om
u a o as, es ei hae una vein ena e
aos, enamos que om

one a mano la lis a e biblio afas. Po ejem


lo, enamos que elea es
o:
\ bein { h e b i b l i o  a
h y } { alunae n a a }
\ b i b i e m [ e i q u e a 1 ] { l l a v e 1 } I n f o m a  i n s
ob e l a e n a a b i b l i o  f i  a
\ b i b i e m [ e i q u e a 2 ] { l l a v e 2 } I n f o m a  i n s
ob e l a e n a a b i b l i o  f i  a
. . .
\ en { h e b i b l i o  a
h y }
Pa a i a esas efe enias usamos el oman o \ i e y usamos la ll
ave a
o
ia a,
o ejem
lo,
\ i e { llave1 } .
Alunos e los
oblemas on es a fo ma a iional e in esa bibl
io afa en nues os aba
jos son:
1. Es muy ifil man ene la onsis enia en las i as,
a iula men e
en un oumen o on
on ibuiones e va ios au o es. En e las i ul a es ms omunes, e
non amos, ewn e
o os, va iaiones en el uso e ab evia u as o nomb es om
le os,
el uso e i lias o omillas

a a los ulos.
2. Si ya ienes una lis a biblio a o ena a e aue o a ie o es ilo
,
o ejem
lo alfab i
o
o au o y ao, es ex ema amen e ifil e onve i a o o es i
lo,
o ejem
lo usan o
nme os e aue o al o en e i a.
3. Es vi ualmen e im
osible man ene una  an base e efe enias bib
lio as que
ue a se
eu iliza a en is in os oumen os.
BIBTEX

A on inuain es ibi emos una


osible fo ma e esolve el
oblem
a e las lis as e bi
blio afas. Es basa o en LATEX y su
o ama he mano BIBTEX. Es im
o an
e hae no a que
BIBTEX ha es a o en i ulain
o muhos aos y,
o lo an o, exis en mu
hos es ilos que hoy

o amos llama es n a y que es n a nues a is


osiin,
o lo que es muy f
il enon a el
es ilo a eua o
a a u abajo.
La es u u a bsia e una en a a BIBTEX ienes es
a es bsias:
(a) El i
o e la en a a (book, a ile, in
oee ins y o os). N ese

que el i
o siem
e va en
inls.
(b) Una llave elei a
o el usua io que i en i a la
ubliain. Es a lla
ve es la que ebe usa se
omo
a me o
a a el oman o \ i e .
() Una se ie e am
os se
a a os en e s
o omas, on e a a am
o o
nsis e e un i en i
a o e am
o y sus a os en e omillas o llaves,
o ejem
lo:

6.11 Refe enias e n ies

233

a u h o =" F u l a n i o Lab a o " ,


j o u n a l = " Las b i  i  l e a s " ,
i l e = { Los
aseos
o l a iu a } ,
Exis en va ios esquemas
a a asoia onvenien emen e las llav
es on sus es
e ivas en a as
en la base. Un esquema
o
ula es el onoi o omo Ha va , on e
omamos el a
elli o el
au o (en minsulas) y el ao e la
ubliain y los ombinamos
a a 
ea la llave usan o os

un os. Po ejem
lo, smi h:1987. BIBTEX lee las en a as el a hi
vo e biblio afas, on ex ensin
.bib, y al fo ma o que se le a a las en a as lo on ola un a h
ivo e es ilo, on ex ensin .bs .
Po azones e es
aio, no isu i emos en es e abajo los oman
os que
ue en usa se en los
a hivos e es ilo, a ems e que, omo ya hemos meniona o, hay mu
hos es ilos ya e ni os

o
e sonas o
o o anizaiones,
o ejem
lo
o la Soie a Ma
em ia Ame iana (AMS,
o
sus silas en inls),
o la Assoia ion fo Com
u in Mahine y (A
CM), evis as e
es iio,
asas e i o iales. A on inuain es ibimos alunos es ilos muy us
a os y que no es n asoia os
a ninuna asoiain o asa e i o ial. Es im
o an e no a que no ne
esi as ob ene una o
ia e los
a hivos e es ilo (.bs ) e los que usamos aqu omo ejem
los, ya q
ue se inluyen on o as las
is ibuiones e LATEX.

lain El es ilo es n a e BIBTEX. Las en a as son o ena as alfab


iamen e on e ique as nu
m ias.
uns Simila al an e io ,
e o las en a as son im
esas en el o
en en que fue on i a as en el
oumen o. U iliza e ique as num ias.
al
ha Simila a
lain,
e o las e ique as e las en a as son fo m
a as a
a i el nomb e el au o
y el ao e
ubliain.
abb v Simila a
lain,
e o las en a as son ms om
a as, a o que
los nomb es e
ila, los
meses y los nomb es e las evis as son ab evia os.
am Usa o
a a las
ubliaiones e la Assoia ion fo Com
u in M
ahine y. Tiene el nomb e
el au o (a
elli o y lueo nomb e) en maysulas
equeas y usa nm
e os omo e ique as.
Aho a e vamos a mos a el efe o e usa BIBTEX en un oume
n o y lueo e mos a emos qu
fil es ambia el es ilo y los am ios ambios que ene an es os
ambios en la sali a. Nues os
a hivos fuen e se n: ejem
lo. ex, nues o oumen o LATEX y bejem

lo.bib, nues a base


e a os e biblio afas. En las u as 6.13 y 6.15
ue es ve es os
oumen os.

Fiu a 6.13

Ejem
lo e LATEX usan o BIBTEX
(1/2)
\
\
\
\
\

oumen lass { a i  l e }
use
akae [ l a i n 1 ] { i n
u e n  }

a  e s y l e { em
y }
bein { oumen }
s e  i o n { Ejem
lo e  i a s }

234
LATEX
Fiu a 6.13 Ejem
lo e LATEX usan o BIBTEX
(2/2)
I n i  i a m o s on l a  i a e un l i b o ~ \  i e { no
naka95 : _knowl_ ea _om
an }
y una e s i s o  o a l a  o n i n u a  i n ~ \  i e
{ van96 : _im
a_kbs } .
n n i  o
n

Tambin q u i e e s  i a un a  u l o e s  i o
o u
a u o ~ \  i e { boehm88 } y lueo o o on e hay ms e u

a u o ~ \  i e { boehm89 : _ heo _w } . Tambin q u i e e s


i n e n a ,
o
su
ues o , hae una  i a a unos
oee ins e una
 o n f e e n  i a ~ \  i e { 0 1 : _
o _web_hih_level_la
nua } y
a a e m i n a
vamos a hae una  i a m l i
l e , on e l a
i m e e n
a a es a un
a  u l o
u b l i  a o en e l Web~ \  i e { wa le how ,
boehm89 : _ heo _w } .
\ biblio a
hys yle {
lain }
\ b i b l i o  a
h y { bejem
lo }
\ en { oumen }
Lo
ime o que ebes en en e es mo funionan LATEX y BIBTEX j
un os:
ime o o es el
oman o la ex on el a hivo fuen e omo a umen o ( u a 6.14); es

us o es el oman o
bib ex on el mismo a umen o y lueo ebe s ejeu a la ex os ve
es
a a que LATEX
ue a
esolve o as las efe enias. El esul a o,
ue es a
eia lo en
la u a 6.16, on e lo hemos

ues o usan o an o el es ilo


lain omo el es ilo am.
Fiu a 6.14
n o BIBTEX

page 1
e  n e d

Sali a e LATEX al ejeu a lo


o
ime a vez sob e el a hivo usa
% l a e x ejem
lo
T h i s i s TeX , V e s i o n 3.14159 (Web2C 7 . 4 . 5 )
LaTeX Wa nin : C i a i o n nonaka95 : _knowl_ ea _om
an on

 n d e  n e d on n p  t l n e 6 .
aTe Warn ng : C t a t o n van96 : _ mpa_bs on page 1  n d

on n p  t l n e 7 .
aTe Warn ng : C t a t o n boehm88 on page 1  n d e  n e
d on n p  t
l n e 10.
aTe Warn ng : C t a t o n boehm89 : _theor_w on page 1  n d
e  n e d
on n p  t l n e 1 1 .
aTe Warn ng : C t a t o n 0 1 : _progr_web_h gh_level_langa

g on
d on
e  n e d

page 1  n d e  n e d on n p  t l n e 1 3 .
aTe Warn ng : C t a t o n wadlerhow on page 1  n d e  n e

n p  t l n e 15.
aTe Warn ng : C t a t o n boehm89 : _theor_w on page 1  n d
on n p  t l n e 1 5 .
No  l e ejemplo . b b l .

6.11 Reeren as e nd es

235

$ gra 6.15 Ejemplo de na base de datos BIBTE


@Boo{ nonaa95 : _nowl_reat_ompan ,
athor =
{ Nonaa , I . and Taeh , H . } ,
t tle =
{ The KnowledgeC r e a t n g Company } ,
pbl sher =
{ Oord Un v ress } ,
year =
1995 ,
address =
{New Yor } }

 r e o 

@hdThes s { van96 : _ mpa_bs ,


athor =
{ Van Wegen , B } ,
t tle =
{ Impats o  KBS on  o s t and s t r   t
shool =
year =

p r o  d   t o n proesses } ,
{ U n v e r s e t van Amsterdan } ,
1996}

@ A r t  l e { boehm88 ,
athor =
{ Boehm , B . } ,
t tle =
{ A s p r a l model o  s o  t w a
r e development and
enhanement } ,
jornal =
{ IEEE Compters } ,
year =
1988 ,
pages =
{61 62}}
@ A r t  l e { boehm89 : _theor_w ,
athor =
{ Boehm , B . and Ross , R . } ,
t tle =
{ TheoryW s o  t w a r e p r o j e 
t management : p r n  p l e s
and eamples } ,
jornal =
{ IEEE Trans . Sotw . Eng . } ,
year =
1989 ,
volme =
15 ,
nmber =
7,
pages =
{902 916}}
@roeed ngs { 0 1 : _progr_web_h gh_level_langag ,
t tle =
{ rogramm ng t h e Web w t h H gh e
v e l angages } ,
year =
2001 ,
volme =
2028 ,
ser es =
{  e  t  r e Notes n Compter S
ene } ,
month =
{ Apr l } ,
o r g a n z a t o n = {10 t h Eropean Sympos m on rogramm
ng ,
ESO 2001} ,
pbl sher =
{ Spr nger Verlag } }

t h o  t
l " }

@m s { wadlerhow ,
a  t h o r = "  h l p Wadler " ,
t t l e = {How t o Add az ness t o a S t r  t angage W
Even Be ng Odd } ,
 r l = "  t e s e e r . n j . ne . om/ 1 0 2 1 7 2 . h t m

236

ATE

$ gra 6.16 Ejemplo sando los est los BIBTE: am (arr ba) y pla n (abajo)
1
Ejemplo de  tas
In  amos on la  ta de n l bro [4] y na tes s dotoral a ont n
a on [5].
Tambien queremos citar un artculo escrito por un unico autor [2] y
luego
otro donde hay mas de un autor [3]. Tambien queremos intentar, por su
puesto,
hacer una cita a unos proceedings de una conferencia [1] y para ter
minar vamos
a hacer una cita multiple, donde la primer entrada es a un artculo pub
licado
en el Web [6, 3].
References
[1] 10th European Symposium on Programming, ESOP 2001. Programming
the
Web with High Level Languages, volume 2028 of Lecture Notes in
Computer
Science. Springer Verlag, April 2001.
[2] B. Boehm. A spiral model of software development and enhancemen
t. IEEE
Computers, pages 6162, 1988.
[3] B. Boehm and R. Ross. Theory w software project management: pri
nciples
and examples. IEEE Trans. Softw. Eng., 15(7):902916, 1989.
[4] I. Nonaka and H. Takeuchi. The Knowledge Creating Company.
Oxford
Univ Press, New York, 1995.
[5] B Van Wegen. Impacts of KBS on cost and structure of prouductio
n pro
cesses. PhD thesis, Universeit van Amsterdan, 1996.
[6] Philip Wadler. How to add laziness to a strict language without
even being
odd.
1
Ejemplo de citas
Iniciamos con la cita de un libro [4] y una tesis doctoral a contin
uacion [5].
Tambien queremos citar un artculo escrito por un unico autor [2] y
luego
otro donde hay mas de un autor [3]. Tambien queremos intentar, por su
puesto,
hacer una cita a unos proceedings de una conferencia [1] y para ter
minar vamos
a hacer una cita multiple, donde la primer entrada es a un artculo pub
licado
en el Web [6, 3].
References
[1] 10th European Symposium on Programming, ESOP 2001. Program
ming the Web with High Level Languages (April 2001), vol. 2028
of Lecture
Notes in Computer Science, Springer Verlag.
[2] Boehm, B. A spiral model of software development and enhancemen

t. IEEE
Computers (1988), 6162.
[3] Boehm, B., and Ross, R. Theory w software project management: p
rin
ciples and examples. IEEE Trans. Softw. Eng. 15, 7 (1989), 90291
6.
[4] Nonaka, I., and Takeuchi, H. The Knowledge Creating Company. Ox
ford Univ Press, New York, 1995.
[5] Van Wegen, B. Impacts of KBS on cost and structure of prouducti
on
processes. PhD thesis, Universeit van Amsterdan, 1996.
[6] Wadler, P. How to add laziness to a strict language without eve
n being
odd.

6.12 Emacs
237
6.11.2.

ndices

Para encontrar un tema de inters en un documento grande, el lec


tor tiene dos alternativas, usar
la tabla de contenidos o el ndice. En general, el ndice es la forma d
e acceso ms comn a un
documento tcnico y, por tanto, una parte esencial del documento.
Al igual que las referencias bibliogr cas, para generar un ndice r
equerimos de la combinacin
de LATEX y otro programa externo llamado MakeIndex. En tu documento
LATEX debes usar el coman
do \index para indicar una nueva entrada en el ndice del documento.
Cuando ejecutes latex en tu
documento, se crea un nuevo archivo con extensin .idx en el que apar
ecen las entradas selecciona
das por \index y las pginas en que stas aparecen. Despus de esto, cuan
do ejecutes el comando
makeindex, al igual que como suceda con bibtex, leer un archivo de es
tilo (con extensin .ist) y
crear el archivo con extensin .ind que tiene la versin con formato del
ndice de tu documento.
Crear un buen ndice no es una tarea sencilla y discutir el tema
escapa de los alcances de este
documento. Sin embargo, te podemos recomendar crear el ndice conform
e avances en el desarrollo
de tu documento. Debes tomar en cuenta a quin va dirigido el documen
to, qu es importante y
organizar el ndice de manera tal que el lector pueda encontrar fcilme
nte lo que busca.
El comando \index soporta hasta tres niveles de entradas en el n
dice. Para acceder a los sub
y subsub niveles, el argumento de \index debe contener la entrada p
rincipal y las sub entradas
separadas por el carcter !. Por ejemplo:
Pgina
Pgina
Pgina
Pgina
Pgina
Pgina

3: \index{funciones ! par&\a&metros ! paso de}


4: \index{funciones ! recursivas}
5: \index{cerradura ! funcional}
6: \index{cerradura ! con ambientes}
10: \index{paradigma}
11: \index{paradigma ! tipos de}

6.12. Emacs
Como ya sabes, editar un archivo LATEX es simplemente editar u
n archivo de texto con comandos
especiales que interpreta el comando latex o pd atex . En este sentid
o, con lo revisado de Emacs en
la seccin 4.3, puedes editar cmodamente tus documentos LATEX.
Sin embargo y como una muestra ms de la versatilidad y podero de
Emacs, te mostraremos
algunos paquetes que extienden Emacs y lo convierten en un poderoso

editor especializado para


LATEX.

238
LATEX
6.12.1.

AUCTEX

AUCTEX es un ambiente integrado para editar archivos LATEX y T


EX e incluye una gran cantidad
de herramientas que iremos revisando a lo largo de esta seccin.
Una pregunta que es sano hacernos es qu puede hacer AUCTEX que n
o podamos hacer slo
con la ayuda de Emacs? Varias cosas: te permite ejecutar TEX/LATEX
y dems comandos y herra
mientas relacionados con el proceso de documentos, como visores de
DVI, Postscript o PDF. En
particular, la habilidad de ejecutar LATEX desde AUCTEX es interes
ante porque te permite navegar
los errores y te ofrece documentacin sobre cada tipo de error.
AUCTEX tambin nos ayuda a indentar nuestro cdigo fuente y tiene
un par de herramientas pa
ra ver una vista preliminar, un esquema de tu documento. Adems, al
estar ntimamente relacionado
con Emacs, AUCTEX ofrece una gran cantidad de macros y funciones a
uxiliares que te permiten
insertar comandos y editar tus documentos rpida y fcilmente.
Instalando AUCTEX
$ smart
AUCTEX es un programa escrito en Emacs Lisp y es parte estndar d
e varias distribuciones
install
mayores de Emacs, incluyendo XEmacs. Desgraciadamente AUCTEX no vie
ne con Emacs por omi
emacs auctex sin; sin embargo existen paquetes pre compilados para la mayora de la
s distribuciones de Linux.
En caso de que no encuentres paquetes para tu distribucin de Li
nux, no hay nada de qu
preocuparse, pues ya sabes lo fcil que es instalar paquetes en Emac
s (ver la seccin 4.3.18). En la
siguiente direccin puedes obtener la versin ms reciente de AUCTEX:
http://www.gnu.org/software/auctex/.
Para indicarle a Emacs que vas a utilizar AUCTEX, debes poner lo s
iguiente en tu /.emacs:
( r e q u i r e texs i t e )
( require tex )
( require latex )

Sangras y formato
AUCTEX puede indentar tu cdigo automticamente conforme lo escrib
es. Si presionas C j
en lugar de Enter funcionar exactamente igual. Si presionas tab la
lnea actual es indentada
y el cursor permanece donde est. Incluso el comando format paragrap
h de Emacs, Mq , es
re implementado por AUCTEX para que haga lo correcto con tu docume
nto LATEX. Finalmente, la
funcin LaTeX ll buffer (que puedes ejecutar con Mx ) indenta todo tu
documento, lo cul es
particularmente til cuando alguien te mand un documento sin formato.

En LATEX es comn tener documentos que ocupen ms de un archivo; p


or ejemplo, para libros
y tesis es comn utilizar un archivo por cada captulo o seccin. AUCTEX
es capaz de entender
documentos que ocupan varios archivos y ayudarte en su edicin y man
ejo, para lo cual debes poner
en tu /.emacs lo siguiente:
( s e t q TeXautosave t )

6.12 Emacs
239
( s e t q TeXparses e l f t )
( setqd e f a u l t TeXmaster n i l )

Edicin de documentos
AUCTEX estudia el comando \documentclass de tu documento y en f
uncin de eso te ayu
da a completar comandos de LATEX, lo cual tiene dos aplicaciones im
portantes y que a la postre
agradecers in nitamente.
1. Te permite completar comandos parcialmente escritos. Por ejemp
lo, puedes escribir \renewc
y presionar Mtab (TeX complete symbol) y AUCTEX hace el resto,
es decir, completar el
comando \renewcommand por ti. Si ms de un comando casa con el p
re jo, entonces AUCTEX
te ofrece una lista de los posibles comandos para que escojas.
2. Te ayuda a insertar ambientes, esto es pares de la forma \begi
n \end.
Un nmero importante de macros acompaan a AUCTEX y estn aqu para ayu
darte a editar
rpidamente. Las ms importantes son las siguientes:
Tabla 6.34 Emacs: comandos de AUCTEX
Comando
LaTeX environment
orma \begin \end.
C c C e
LaTeX section
r, \section, . . .
C c C s
TeX font
m{} , \ textit {} , \ textbf {} ,
C c C f seguido de
C r , C i , C b , . . .
LaTeX insert item
en un ambiente. Esto es til
MEnter
AUCTEX propone el forma
TeX insert macro
s insertar un macro en tu
( C c enter )
preguntar por los argu

Descripcin
Inserta un par de la f
Inserta uno de \chapte
Insertan uno de \textr
...
Inserta un nuevo item
en todo tipo de listas,
to adecuado.
Con este comando puede
documento y AUCTEX te
mentos del mismo.

AUCTEX provee varios comandos ms, pero en la mayora de los docume


ntos LATEX estndar,
con los que listamos arriba puedes avanzar rpidamente en la edicin. Ms
adelante veremos algunos
comandos y utileras para hacer matemticas en un modo especial que AUC
TEX provee para tal
efecto.
Para lograr que AUCTEX te pregunte por los ttulos de las seccion

es, captulos y otras subpar


tes del documento que insertas y te proponga nombres inteligentes p
ara etiquetas, es conveniente

240
LATEX
agregar a tu /.emacs lo siguiente:
( s e t q LaTeXs e c t i o n hook
( LaTeXs e c t i o n heading
LaTeXs e c t i o n t i t l e
LaTeXs e c t i o n t o c
LaTeXs e c t i o n s e c t i o n
LaTeXs e c t i o n l a b e l )
)

Cmo ejecutar LATEX


AUCTEX provee un comando que, dependiendo del contexto en que se use,
ofrece varias alter
nativas para ejecutar comandos sobre tu documento fuente.
El comando TeX command master ( C c C c ) o su hermano TeX command re
gion ( C c
C r ) ejecuta LATEX en todo el documento o en la regin especi cada, respect
ivamente.
Cuando ejecutamos LATEX de esta forma, la vista de Emacs se divide en
dos y la salida de la
ejecucin se despliega en la segunda mitad para que puedas editar y ver el
resultado de la ejecucin
simultneamente. Si LATEX encuentra errores, entonces puedes llamar a la fu
ncin TeX next error
( C c ) que mover el cursor al primer error y desplegar un texto explicativ
o junto con el mensaje
que arroj LATEX. Puedes repetir la ejecucin de este comando hasta que no en
cuentres ms errores.
Una vez que hayas concluido con el formato de tu documento exitosamen
te, puedes volver a in
vocar el comando TeX command master y te ofrecer una alternativa para visu
alizar el resultado.

Modo para matemticas


AUCTEX incluye un modo para facilitar la edicin de matemticas y, aunqu
e sigue siendo el
mismo AUCTEX, se comporta tan distinto que lo tratamos por separado.
Ya te dijimos que TEX fue escrito por un matemtico? En caso de que no
lo hayamos hecho,
s, TEX fue escrito por un matemtico e histricamente siempre ha ofrecido un s
oporte inigualable
para escribir matemticas. Fiel a esta tradicin, AUCTEX te ofrece un modo me
nor especial para
escribir smbolos matemticos rpidamente. Para entrar a este modo, debes tecle
ar C c , que
es el comando LaTeX math mode tambin se usa para salir del modo matemtico d
e AUCTEX.
Este modo menor agrega un comando, LaTeX math abbrev pref x o simpleme
nte y una vez
que llamas este comando (i.e. presionas ) AUCTEX leer un carcter del teclad
o y luego insertar
un smbolo matemtico asociado. La lista de asociacin entre carcteres y smbolos
se encuentra

en la variable LaTeX math list y, por supuesto, puede con gurarse. As, por e
jemplo, estando en
modo matemtico la secuencia de teclas a inserta .
Not: pr nosotros, hispno prlntes, escriir centos es muy importnt
e y, en generl, sirve
pr poner centos invertidos, lo cul di cult el cceso l modo mtemtico
de AUCTEX. Por lo
tnto tienes dos opciones, presionr dos veces y luego l letr desed o
ien cmir el pre jo
utilizdo por AUCTEX.

6.12 Emcs
6.12.2.

241
RefTEX

RefTEX es un pquete pr mnejr etiquets, referencis, cits


e ndices desde Emcs en documentos TEX o LATEX. No es necesrio usr AUCTEX y RefTEX juntos,
pero hy pocs coss que
cominn mejor, con l notle excepcin de tcos y cervez.
RefTEX es otro progrm escrito, l igul que AUCTEX, en EmcsLisp y es un producto de
softwre complejo y grnde, pero te dremos un reve introduccin 
su uso y te podemos grntizr que un vez que te costumres  RefTEX te preguntrs cmo pudiste
vivir sin l (nosotros nos
preguntmos eso con csi todos los productos de softwre, pliccio
nes y pquetes que incluimos
en este liro, por ello es que hor ls promovemos incnslemente
.)
Pr crgr RefTEX en Emcs, greg lo siguiente  tu /.emcs:
( require reftex )

Tl de contenidos
L tl de contenidos de un documento LATEX es lgo muy impor
tnte y te puede dr un visin
glol de l estructur de tu trjo. Sin emrgo, l tl de con
tenidos existe hst que compils tu
documento fuente y exclusivmente en el documento generdo como sl
id (DVI, PostScript, PDF,
etc.). Qu hrs y cmo provechrs el poder tener un tl de contenido
s generd dentro de
tu editor? Qu hrs con ell si dems est tl fuer nvegle?
El comndo reftex-toc ( C-c =) hce justo eso, te muestr secc
iones, etiquets y entrds de
ndice de nidos en tu documento y ms n, te permite sltr  culquier d
e estos puntos rpidmente.
Etiquets y referencis
Crer etiquets pr los distintos elementos de tus documentos
como gurs, tls y frmuls
es usulmente un tre tedios y poco grti cnte. L gente se h in
ventdo frmuls y tcnics
pr signr etiquets ordendmente pr despus recordrls fcilment
e y hcer referenci  sts
sin tener que uscr en todo el documento. Los resultdos vrn much
o, pero en generl puedes
segurr que es un ml ide y no funcion ien.
RefTEX te yud  crer etiquets nics y  encontrr l etiquet
 decud cundo quieres
hcer un referenci rpidmente. RefTEX distingue entre etiquets p
r distintos mientes, conoce
todos los mientes estndr ( gure, eqution, tle) y puedes con gurrl
o pr que entiend n
ms tipos de etiquets cmindo el vlor de l vrile reftex-lel
-list.

Crer etiquets: El comndo reftex-lel ( C-c ( ) insert un etiq


uet en el punto. Cundo
uss este comndo RefTEX relizr un de ls siguientes cciones
:
Derivr un etiquet del contexto (por omisin us un pr
 seccin).
Pedir que le des un cden descriptiv pr l etiquet
(esto lo hce pr gurs y
tls).

242
LATEX

r todos los dems


s y cmo.

Insertr un etiquet simple hech con un pre jo y un nmero (p

mientes).
L vrile reftex-insert-lel- gs control qu etiquets son cred

Referir etiquets: Pr hcer un referenci us el comndo reftex-ref


erence ( C-c ) ). Esto te
muestr un vist (outline) de tu documento con tods ls etiquet
s de un cierto tipo ( gure,
eqution, etc.) y lgo de contexto pr cd etiquet pr que pu
eds reconocerls fcilmente.
Al seleccionr un etiquet de est vist, RefTEX insert \ ref {
LABEL} en el uffer originl.
Cits

El comndo reftex-cittion ( C-c [ ) te permite especi cr un expre


sin regulr o ptrn
pr uscr en el rchivo de se de dtos de BIBTEX pr el documento
(tl y como se especi c en
el comndo \ iliogrphy ). Tods ls entrds que concuerden con el
ptrn de squed te sern
mostrds pr que elijs l propid. L list prece con formto y
ordend.
Un vez que seleccions un entrd, precer en tu documento fuent
e un referenci de l
form \ cite {KEY}.
Soporte pr l genercin de ndices
RefTEX tmin te yud  generr entrds pr el ndice de tu docume
nto. Ms n, te permite
incluso compilr ls entrds existentes lfticmente y te ls presen
t en un uffer pr que
pueds editrls.
Pr crer un entrd de ndice utiliz reftex-index-selection-of-w
ord ( C-c / ) y pr desplegr y editr el ndice, reftex-disply-index ( C-c > ).
RefTEX puede hcer muchs coss ms, pero pr efectos prcticos lo qu
e hemos cuierto es
lo ms importnte y til del progrm y su uso. Estmos seguros te trer gr
ts sorpress y un
incremento considerle de productividd cient c.
6.12.3.

Preview

El pquete preview-LATEX se distriuye como prte estndr de AUCTEX


y extiende tnto 
Emcs como  LATEX. Esto es porque incluye un estilo pr LATEX y cdigo
en Emcs-Lisp pr
provechr este estilo y yudrte en l edicin de documentos.
Pr los usurios de TEX/LATEX siempre h sido un prolem serio l
 discusin sore tener
editores que te muestren lo que ests escriiendo (por sus sigls en ing
ls, WYSIWYG), que como

y ses es lgo que no sucede con LATEX. Sin emrgo, l intencin del
pquete preview pr Emcs
no es exctmente st.
Con preview se usc un lnce entre elementos gr cos y texto. Utili
z l slid gr c pr
cierts construcciones (con gurle); hce esto cundo se le solicit y
lo hce h mismo, dentro del
cdigo fuente. Cmir entre l versin gr c y el cdigo fuente es fcil y ntur
l y puede hcerse
pr cd imgen de mner independiente.

6.12 Emcs

243
Pr ctivr preview dees poner lo siguiente en tu /.emcs:
( l o  d " previewl a t  x .  l " n i l t t )

%so bsico d prviw


%na v activado y cuando sts ditando un arcivo d LATEX, pu
ds utiliar l comando
prviw documnt ( C c C p C d ). En st momnto s comnarn a gn
rar vistas pr
liminars para distintos objtos n tu documnto. Nota important:
mintras s gnran las vistas
prliminars, puds navgar tu documnto n l buffr; sin mbargo
no s rcomndabl qu dits
algo porqu l rsultado d las vistas podra trminar n lugars rrn
os.
En caso d qurr ditar l buffr mintras s stn gnrando la
s vistas prliminars, t convi
n dtnr todos los procsos jcutndos n l fondo con l comando
TX kill job ( C c C k ).
Figura 6.17 Ejmplo d prviw n la dicin d st captulo

Para vr/ditar l cdigo LATEX para un objto spc co, qu s prob
ablmnt ms til, puds
jcutar l comando prviw at point ( C c C p C p ) o bin prsion
ar l botn dl mdio dl
ratn sobr la vista prvia. Aora puds ditar l cdigo y gnrar un
a nuva vista prliminar con
C c C p C p nuvamnt.

Lnguajs d
marcado
7
Los lnguajs d marcado (markup languags) utilian txto comn y corrint
combinado con
informacin adicional qu sirv para d nir su smntica o su prsntacin (a vcs amba
s). En
palabras sncillas: sta informacin adicional nos dic qu signi ca l txto o cmo s
prsnta
al usuario. La informacin adicional sul star intrcalada n l mismo txto uti
liando marcas
spcials; d a l nombr d lnguajs d marcado.
Los lnguajs d marcado tinn sus orgns n la industria ditorial, muco
ants d la cra
cin d computadoras digitals: cuando un manuscrito s prparaba para imprsin, un
spcialista
(coloquialmnt conocido como marcador) esr ba en los mrgenes anota ones espe ale
s (mar
as) qe servan de ga a los qe transr ban el teto en s orma nal ya l sta para
mpr m rse.
Estas maras eran n lengaje de marado pr m t vo (no haba neesar amente n estn
dar, n tenan
na s nta s ormalmente de n da), qe serva para epl ar la presenta n del teto:
el tamao de
la ente, el t po, el est lo, et.
Con la llegada de las omptadoras, los lengajes de marado ganaron adems l
a apa dad de
obtener atomt amente norma n semnt a: por ejemplo, s en nestro lengaje de
marado
de n mos la mara AUTOR: para qe on ella dent qemos al ator del domento, es
tr v al
haer n programa qe atomt amente obtenga el ator o atores de todos los do
mentos d spo
n bles y haga na rela n entre ellos.
Anqe hay mhs mos lengajes de marado atalmente (TE y ostSr pt son
lengajes
de marado proedrales), de espe al mportan a es SGM, el engaje de Marad
o Estndar
General zado (Standard General zed Marp angage). SGM es n meta lengaje pa
ra de n r
lengajes de marado, y de ah se der van los dos lengajes de marado probablemen
te ms amosos
y sados en la atal dad: M y HTM. Nos entraremos en estos lt mos drante el
resto del
aptlo.

246

engajes de marado

7.1. M
SGM es n metalengaje grande y omplejo. Implementar n progr
ama (o s stema de progra
mas) qe peda l d ar on alq er lengaje de n do on SGM tendr q
e ser galmente grande
y omplejo. a mayor parte de los programas qe se t l zan para ma
nejar lengajes de n dos on
SGM, en la prt a slo soportan n sbonjnto de todas las op ones
qe oree.
En gran med da por este mot vo, y las nees dades espe ales q
e presentan las apl a ones
qe nees tan omn arse por Internet (SGM preede por var os aos
a Internet), e qe se re
M, el engaje de Marado Epand ble (Epans ble Marp angage)
. M es n sbon
jnto s mpl ado de SGM, lo qe hae el esr b r programas qe lo m
anejen mho ms  l, y
adems est pensado para ompart r norma n, espe almente a travs de l
a red.
M es nmensamente poplar y e sten mhs mos lengajes de n dos
on M qe se san
hoy en da; por nombrar slo algnos: RSS (para not  as), MathM (para
representar rmlas
matemt as omplejas), HTM (el sesor de ato de HTM), Salable
Vetor Graph s (para
gr os esalares), Ms M (para nota n ms al) y m les ms. M tamb n
es t l zado
por mhos programas para gardar ss arh vos, espe almente en el
mndo del sotware l bre:
OpenO e, Ab Word, Gnmer  y KO en san M para gardar ss dome
ntos, por nombrar
nos antos.
Un domento M presenta s norma n en na estrtra jerrq
a, qe podemos ver o
mo n rbol. Todo domento M t ene n elemento raz, qe a s vez p
ede tener ms elementos
y/o teto omn y orr ente. Cada elemento a s vez pede tener ms ele
mentos y/o teto y as
ses vamente. Adems, ada elemento pede tener atr btos. Veamos n
ejemplo en el l stado 7.1

Cd go 7.1

Domento en M

a < / a  t o r >

(1/2)

<? ml v e r s o n = " 1 . 0 " e n  o d n g ="UT$8"?>


<l bro >
<t tlo >
E l n g e n o s o h d a l g o don
Q  j o t e de l a Manha
</ t t  l o >
< a  t o r > M g  e l de C e r v a n t e s S a a v e d r

j e r   o
nha

< p a r t e nmero ="1" >


<  a p t  l o nmero ="1" >
< resmen >
Qe t r a t a de l a  o n d  &o a   t e ; n y e
d e l amoso h d a l g o don Q  j o t e de l a Ma
</ resmen >

7.1 M
Cd go 7.1

p o qe

247
Domento en M
(2/2)
<parrao >
En n l  g a r de l a Manha , de yo nombre no
q  e r o a  o r d a r m e , no ha mho t e m
v v& a   t e ; a n h d a l g o de l o s de l

a n z a en

& a   t e ; n  l a  o

a s t l l e r o , a d a r g a a n t g  a , r o

y galgo orredor .
<parrao >
...
</  a p t  l o >
...
</ p a r t e >
...
</ l b r o >

a pr mera lnea es la delara n M, qe s rver para de n r q ver


s n del estndar estamos
sando (generalmente la 1.0) y el onjnto de arteres en qe est el d
omento (generalmente
UT$ 8).
El ejemplo obv amente es de n l bro: l bro es el elemento raz,
t tlo, ator, parte, ap tlo,
etrato y parrao son elementos, m entras qe nmero es n atr bt
o qe poseen parte y ap
tlo. Como estamos de n endo n domento M qe t l za el onjnto
de arteres UT$ 8,
sera peretamente legal de n r a los elementos omo ttlo, apto, prra
o, pero no es lo qe
sele aostmbrarse. De gal orma, podran t l zarse aentos (o ees
o d res s), pero t l zamos
&oate; en lgar de para epl ar lo qe son las ent dades.
as ent dades son sadas para poder esr b r arteres en M q
e de otra orma sera om
pl ado haerlo. or ejemplo, el smbolo de menor qe (<) no es vl do de
ntro de n domento
M porqe es el t l zado para de n r ndo emp eza na et qeta de
n  o o nal: entones se
t l za la ent dad &lt; (por less than, en ngls). De gal orma, par
a sar el smbolo de amper
sand (&) se t l za la ent dad &amp;. En todo domento M estn de n
das las s g entes  no
ent dades:
lo

Ent dad

Smbo

&amp;
&gt;
&lt;
&apos;
&qot;

&
>
<
"

pero se peden de n r ms ent dades y veremos mo ms adelante. Adems, todo


smbolo en UT$
8 pede t l zarse sando s nmero dent ador; por ejemplo, en lgar
de &oate; para la ,
podramos sar &#268;, porqe 268 es el nmero qe le orresponde a en UT
$ 8.
El domento de este ejemplo est b en ormado; esto q ere de r
qe todos ss elementos
t enen et qetas de n  o y nales (por ejemplo <parte> y < /parte>)
estn b en an dados (todo

248

engajes de marado

elemento, eepto el raz, est ompletamente onten do dentro de otro)


y los valores de los atr btos
estn entre om llas (tamb n podran estar entre om llas s mples, omo
en 3).
ara qe n domento M sea orreto, debe estar b en ormado
; pero eso no es s  ente;
adems, el domento debe ser vl do. Un domento M vl do es aqel q
e mple on n
esqema part lar. Un esqema nos d e la estrtra qe debe seg
r n domento M; hay
var as ormas de de n r esqemas.
a orma ms v eja de de n r esqemas v ene de t empos de SGM y se
llama DTD, De n  n
de T po de Domento (Doment Type De n t on). El DTD para los M d
e l bros ser omo se
ve en el ejemplo del l stado 7.2.

Cd go 7.2

+ ) >

DTD para arh vo en M


<? ml v e r s o n = " 1 . 0 " e n  o d n g ="UT$8"?>
<!ENTITY a   t e "&#262;" >
<!ENTITY o a   t e "&#268;" >
...
<!EEMENT l b r o ( t t  l o , a  t o r + , p a r t e
<!EEMENT
<!EEMENT
<!EEMENT
<!ATTIST
<!EEMENT
<!ATTIST
<!EEMENT
<!EEMENT

t
a
p
p


r
p



a
a
a
a
e
a

t
t
r
r
p
p
s
r


o
t
t



r

l
r
e
e
t
t
m
a

o ( #CDATA) >
( #CDATA) >
(  a p t  l o + >)
nmero CDATA #REQUIRED >
 l o ( resmen , p a r r a  o + ) >
 l o nmero CDATA #REQUIRED >
e n ( #CDATA ) >
 o ( #CDATA ) >

El DTD sen llamente nos d e q pede ontener ada elemento y


q atr btos pede tener;
tamb n pede de n r las ent dades vl das en el domento. El elemento l
bro t ene n t tlo, no
o ms atores (ator+) y na o ms partes (part+). El DTD tamb n nos d 
e s n atr bto es
obl gator o (#REQUIRED)  op onal.
El problema on los DTDs es qe son poo e bles y qe no soport
an var as araterst as es
pe as de M qe SGM no t ene (omo espa os de nombres). S n embar
go, para domentos
on estrtras sen llas, los DTDs mplen razonablemente el traba
jo.
Otra orma de de n r esqemas es on M Shema. S n embargo, los
esqemas de este est lo
son algo ms omplejos qe los DTDs; por razones de espa o no los ve
remos aq.
Una gran ventaja qe oree M para man plar norma n, es q

e ya e sten las herram en


tas neesar as para manejar los domentos, en as alq er leng
aje de programa n e stente.
Comprobar qe n domento M est b en ormado y sea vl do es my se
n llo, por lo qe
el programador ya slo nees ta enargarse de etraer y man plar la
norma n onten da en el
domento. ara esto lt mo tamb n ya e sten las herram entas neesar
as.

7.2 HTM

249

7.2. HTM
HTM na as al m smo t empo qe la World W de Web, de la nees
dad de poder presentar
norma n en la red de orma rp da y sen lla. SGM era my omplejo
omo para lo qe se
reqera y M todava no se nventaba; as qe HTM e el resltado de q
erer resolver n
problema my onreto de la orma ms sen lla pos ble. Se t l z na e
strtra s m lar a la de n
lengaje SGM, pero mho menos estr to y on mha toleran a a a
llos.
Eso, anado a qe al n  o no haba n estndar prop amente s no slo
na ser e de reglas no
my laramente espe adas, h zo qe HTM term nara s endo n lengaj
e poo ons stente y
demas ado perm s vo en s manejo de errores (en general los navegado
res desplegaban na pg na
no mportaba ntos errores tv era el domento HTM).
Con la nda n del Consor o de la World W de Web (World W de We
b Consort m), o W3C,
se empezaron a orreg r mhos de los problemas qe n  almente tena
HTM; anqe ahora el
estndar de HTM es bastante estr to y ormalmente de n do, todava e s
ten m les de pg nas
en la red qe s gen sando (o absando) de las vers ones n  ales
de HTM.
El estndar atal es el de HTM 1.0 y 1.1 y es en se en el qe no
s entraremos aq.

7.2.1.

HTM

HTM es bs amente na l mp eza de HTM para qe se omporte o


mo n domento
M b en ormado y qe sea vl do, t l zando no de los tres DTDs qe
la W3C espe a para
HTM.
a W3C oree 3 DTD d st ntos para poder tener no qe oreza
ompat b l dad on vers ones
anter ores de HTM; n DTD es el llamado estr to y es el qe debera
sarse para pg nas nevas
s se pede garant zar qe q enes las vean tendrn navegadores razona
blemente modernos qe
pedan desplegarlas s n problemas. El segndo es el trans  onal y e
s n poo ms e ble qe el
estr to; es el qe hay qe sar s se q ere onvert r palat namen
te pg nas esr tas antes de qe
se de n era HTM o para onservar ompat b l dad para navegadores ya
algo v ejos. El terero es
para t l zar maros. or razones de espa o aq slo veremos HTM est
r to.
Un domento HTM mn mo podra ser el qe se ve en el l stado 7.3.
Una vez ms, podramos t l zar d retamente en lgar de &eate;, po
rqe el domento

t l za el onjnto de arteres UT$ 8, pero samos la ent dad para r


ealar qe en HTM as
todas las letras aentadas t enen de n da na ent dad, as omo mhos
smbolos de otros d omas
(por ejemplo, &alpha; despl ega ).
Ddo que un documento en XHTML es un documento XML tmin, empie
z con l declrcin XML. Despus viene el tipo de documento, donde le decimos que utili
ce l versin estrict del
estndr XHTML 1.0. El elemento rz de un documento XHTML es html y ste
 su vez tiene los
elementos de cez (hed) y cuerpo (ody). En este ejemplo slo ponem
os el ttulo de l pgin
en l cez y un encezdo de nivel 1 (h1) y un prrfo (p) en el cu
erpo.

250
Cdigo 7.3

c t / / EN"

Lengujes de mrcdo
Documento en XHTML
<? xml v e r s i o n = " 1 . 0 " e n c o d i n g ="UTF8"?>
<!DOCTPE  t m l P%BLIC " / /W3C / / DTD XHTML 1 . 0  t r i

"  t t p : / / www. w3 . o r g / TR / x  t m
l 1 /DTD/ xtml1 s t r i c t . d t d " >
<  t m l xmlns ="  t t p : / / www. w3 . o r g / 1 9 9 9 /
x  t m l " xml : l a n g =" n " >
<ad >
< t i t l  >P&a a c u t  ; g i n a P  r s o n a l d F
u l a n o d Tal < / t i t l  >
</ ad >
<body >
<1 >P&a a c u t  ; g i n a P  r s o n a l d F u l a n
o d Tal < / 1 >
<p>
Hola , yo s o y F u l a n o d T a l y & a c u t  ; s
t a
 s mi p&a a c u t  ; g i n a p  r s o n a l .
</ p>
</ body >
</ tml >

Todos los lmntos d nidos n XHTML cumpln una funcin smntica,


no d prsntacin.
Aunqu por omisin cirtos lmntos s dspligan con caractrsticas
spcials (por jmplo,
los ncabados d nivl 1 tinn una funt d mayor tamao qu los
d nivl 2), sto s slo por
convncin y tratando d mular cmo funcionaba HTML originalmnt. XHT
ML ralmnt no
dic casi nada acrca d cmo db vrs un documnto; la prsntacin
dl mismo s indpndint
d su contnido.
Para modi car la prsntacin d un documnto XHTML s utilian oj
as d stilo, qu s lo
qu vrmos a continuacin.
7.3. C

Las Hojas d Estilo n Cascada (Cascading tyl ts) s l m


dio a partir dl cual s mo
di ca cmo s v un documnto XHTML; pro tambin s pudn utiliar para
documntos XML
arbitrarios o para documntos HTML aunqu no san ncsariamnt XH
TML.
Vamos cmo funcionan siguindo l jmplo n l listado 7.4.
Cdigo 7.4

c t / / EN"

Hoja d stilo n cascada

(1/2)

<? xml v  r s i o n = " 1 . 0 "  n c o d i n g ="%TF8"?>


<!DOCTPE  t m l P%BLIC " / /W3C / / DTD XHTML 1 . 0  t r i

" 
l 1 /DTD/ xtml1 s t r i c t . d t
<  t m l xmlns ="
x  t m l " xml : l a n g =" n " >
<ad >
< t i t l  > P
</ ad >

t t p : / / www. w3 . o r g / TR / x  t m
d " >
 t t p : / / www. w3 . o r g / 1 9 9 9 /
r u  b a s d C < / t i t l  >

7.3 C

253

Para qu l documnto XHTML us la oja d stilo, s utilia 


l lmnto link n la caba dl
mismo:

Documnto n XHTML con link

Cdigo 7.6

i c t / / EN"

<? xml v  r s i o n = " 1 . 0 "  n c o d i n g ="%TF8"?>


<!DOCTPE  t m l P%BLIC " / /W3C / / DTD XHTML 1 . 0  t r

"  t t p : / / www. w3 . o r g / TR / x  t
m l 1 /DTD/ xtml1 s t r i c t . d t d " >
<  t m l xmlns ="  t t p : / / www. w3 . o r g / 1 9 9 9
/ x  t m l " xml : l a n g =" n " >
<ad >
< t i t l  > P r u  b a s d C < / t i t l  >
< l i n k r  l =" s t y l  s    t "  r  f ="  x
a m p l  . c s s " t y p  =" t  x t / c s s " / >
</ ad >

in importar qu tan bin o mal s va la pgina, lo rlvant 


s qu su aparincia s complta
mnt indpndint d su contnido. El qu lo primro sa ortogon
al a lo sgundo, prmit a los
cradors dl contnido concntrars slo n la informacin y djarl
la prsntacin a disadors
gr cos o a alguin qu s ncargu xclusivamnt d so (y as vitar
qu las pginas s van
como n l jmplo).
Las ojas d stilo tambin sirvn para podr dtrminar cmo s
rprsntar una pgina n
distintos mdios.  pud utiliar una oja d stilo para prsn
tarla n un navgador normal;
otra spcialmnt ca pnsando n imprsoras; una ms para lctor
s d pantalla (para usuarios
cigos o con visin limitada).

7.3.1.

Javascript

Javacript (qu no tin casi nada qu vr con l lnguaj d


programacin Java) s un lnguaj
d programacin qu s usa principalmnt dntro d un navgador. Da
do qu s posibl accdr
al contnido d una pgina a travs d Javacript, s una opcin muy sn
cilla para crar contnido
dinmico y darl la posibilidad al usuario d intractuar con la pgin
a sin ncsidad d comunicars
todo l timpo con l srvidor (porqu l cdigo Javacript s jcu
ta n l clint, n l navgador).

Todo l contnido d una pgina st disponibl a travs dl Modlo


d Objto dl Documn
to (Documnt Objct Modl o DOM), qu s bsicamnt una rprsntac
in n mmoria d la
jrarqua tipo rbol qu tin un documnto HTML o XML.
Por jmplo, si tnmos la pgina n l listado 7.7,

254
Cdigo 7.7

Lnguajs d marcado
Documnto n XML

i c t / / EN"

<? xml v  r s i o n = " 1 . 0 "  n c o d i n g ="%TF8"?>


<!DOCTPE  t m l P%BLIC " / /W3C / / DTD XHTML 1 . 0  t r

"  t t p : / / www. w3 . o r g / TR / x  t
m l 1 /DTD/ xtml1 s t r i c t . d t d " >
<  t m l xmlns ="  t t p : / / www. w3 . o r g / 1 9 9 9 /
x  t m l " xml : l a n g =" n " >
<ad >
< t i t l  > Javacript </ t i t l  >
< s c r i p t t y p  =" t  x t / j a v a s c r i p t "
s r c =" j a v a s c r i p t . j s " / >
</ ad >
<body >
<1 > J a v a  c r i p t < / 1 >
< t a b l  i d =" myTabl " >
<tr >
< t d >< s t r o n g > E l  m  n t o s < / s t r
o n g > </ t d >
< t d >< s t r o n g >N&u a c u t  ; mro < / s t
r o n g > </ t d >
</ t r >
</ t a b l  >
< i n p u t t y p  =" b u t t o n " v a l u  =" A g
r  g a r r  n g l&o a c u t  ; n "
o n c l i c k =" add
Row ( documnt ) ; " / >
< i n p u t t y p  =" b u t t o n " v a l u  =" B o
r r a r r  n g l&o a c u t  ; n "
o n c l i c k =" dl
Row ( documnt ) ; " / >
</ body >
</ tml >

.8.
Cdigo 7.8

t
h
(
(
(

y l arcivo javascript.js tin d nidas las funcions dl listado 7

Documnto n XML

f u n c t i o n addRow ( documnt )
{
var t a b l  = documnt . g  t E l  m  n
B y I d ( myTable ) ;
v a r nmRows = t a b l e . rows . l e n g t
;
v a r newRow = t a b l e . n s e r t R o w
nmRows ) ;
var  e l l 1 = newRow . n s e r t C e l l
0 ) ;
var  e l l 2 = newRow . n s e r t C e l l
1 ) ;

 e l l 1 . nnerHTM = Nevo Elemento ;

 e l l 2 . nnerHTM = nmRows ;
}
  n  t o n delRow ( doment )
{
var t a b l e
= doment . g e t E l e
m e n t B y I d ( myTable ) ;
v a r nmRows = t a b l e . rows . l e n g t
h ;
 ( nmRows > 1 )
t a b l e . d e l e t e R o w ( n
mRows 1 ) ;
}

7.4 Emas

255

Entones ada vez qe se haga l  en el botn Agregar rengln, n nevo


rengln apareer en
la tabla; y ada vez qe se haga l  en Borrar rengln, se le q tar n
rengln a la tabla.
El pr mer botn de la pg na t ene de n do (sando el atr bto onl 
) qe ada vez qe se le
haga l , se mande llamar a la n n addRow on el parmetro domen
t. En JavaSr pt, doment
es na var able qe representa a todo el domento HTM o M. El se
gndo botn t ene de n do
de orma anloga qe se mande llamar la n n delRow.
a n n addRow hae lo s g ente: pr mero obt ene el objeto de
la tabla sando la n n
getElementById. sta es na n n del DOM y nos perm te obtener alq
er elemento, s empre y
ando tengamos s dent ador (en la pg na, al de n r la tabla samos e
l atr bto d ).
Desps, obt ene ntos renglones t ene la pg na e nserta n nevo
rengln al nal; los ren
glones se nmeran a part r del 0, por lo qe s hay n renglones estn
nmerados de 0 a n 1.
Desps aade dos eldas al rengln y de ne el d go HTM de ada na de ella
s.
a n n delRow tamb n obt ene el objeto de la tabla; s hay al
menos dos renglones borra el
lt mo (esto es para no qedarnos on na tabla s n renglones).
Este ejemplo tan sen llo perm te ver el poder qe t ene JavaS
r pt: nos perm te mod ar d n
m amente el domento HTM y M, y de esta orma nteratar on e
l sar o s n nees dad
de omn arnos on el serv dor, porqe todo orre del lado del l
ente (el navegador).
7.4. Emas

Emas t ene soporte para man plar HTM, M y HTM, nlyendo
val da n t l zando
el DTD. S planeas t l zar HTM, slo t enes qe aad r lo s g ente a
l arh vo /.emas:
( addt o l s t a  t o mode a l s t ( " \ \ . h t m l \
\ " . mlmode ) )
Al abr r n domento on etens n .html, el modo M se argar atomt
amente. ara argar
el DTD de n do en el t po de domento, slo hay qe opr m r C C
; lo va
li as usan o el
oman o C Cv . Pa a e ni el
o ama ex e no
a a vali a
ue es aa i
lo siuien e al
a hivo /.macs:

%s %s " )

( customs  t v a r i a b l  s
( sgmlmlv a l d a t e ommand "  m l l n t v a l d n o o
)

Aq se t l za el programa mll nt, pero se pede t l zar alq


er programa qe val de n

s se ena

domento M ontra s DTD.


S ests ed tando n domento M, on C Ce aa es un elemen o y Ema

a e slo mos a los elemen os vli os ( e aue o al DTD). Con el om


an o C / e a
ualquie e ique a e iniio que sia abie a.

He amien as
a a
esa ollo
8
8.1. Con ol e ve siones
El on ol e ve siones es el manejo e ambios a la info main. Des
e siem
e es e manejo ha
si o  io
a a los
o ama o es, ya que buena
a e el esa ollo e
sis emas involu a ealiza

equeos ambios y, al siuien e a, eshae ihos ambios. El on ol e


ve siones, sin emba o,
va ms all el mun o el esa ollo e sof wa e y iene a
liain en ualqui
e si uain on e se
u ilien om
u a o as
a a maneja info main e amne a ole iva y que 
ambia ons an emen e.
Exis en muhos sis emas e on ol e ve siones, alunos
o
ie a i
os y o os lib es. Uno e
los
ime os sis emas e on ol e ve siones y, sin lua a u as, el ms
u iliza o es CVS.
Es e lib o,
o ejem
lo, fu es i o u ilizan o el sis ema e on ol
e ve siones subve sion, que
evisa emos en es a sein.
8.1.1. subve sion
subve sion es un sis ema e on ol e ve siones abie o y lib e. Es
o sini a que subve sion
maneja a hivos y i e o ios a avs el iem
o. Su fo ma e o
e a invo
lu a un bol e a hivos
en un e
osi o io en al. Es e e
osi o io funiona omo un se vi o e
a hivos o ina io, exe
o
que eue a a a ambio que se ealiza a los a hivos y i e o ios. Es
o e
e mi e eu
e a
ve siones an e io es e los a os o examina la his o ia e mo s os fue o
n ambian o.
subve sion
ue e ae e a sus e
osi o ios a avs e e es, lo que
le
e mi e se u iliza o

8.1 Con ol e ve siones

257

en is in as om
u a o as. En es e sen i o, la habili a e ene v
a ias
e sonas mo i an o y
abajan o sob e el mismo onjun o e a os, es e sus es
e ivos
lua es, mejo a las
osibili a es
e olabo ain. Ca a miemb o el equi
o a
o a al
oye o e mane a
i e a, sin in e me ia ios
y, a o que o o es e ique a o
o ve siones, no se o e el ieso
e sa i a ali a al no ene
un l o e ali a , ya que si aln ambio eien e es ino e o, sub
ve sion
e mi e eha a s
los ambios ealiza os.
subve sion es una a qui e u a lien e se vi o . Da o que la i
ns alain y on u ain e se
viios e e esa
a el alane e es e lib o, aqu habla emos b evem
en e e los as
e os ela ivos
al lien e.

8.1 Clien es  os


a a subve sion
Exis en va ios lien es  os
a a maneja u o
ia loal e subve si
on
a a KDE. En e
los ms onoi os enon amos:
k esvn Es una in e faz
a a subve sion y, a ife enia e o as he
amien as, u iliza i e
amen e un API en C esa olla o
o Ra
i SVN,
o lo que no
evisa la sali a el
lien e e subve sion svn, sino que im
lemen a un lien e e s
ubve sion.
ksvn Es una ex ensin
a a Konque o que le
e mi e maneja o
ias e
abajo e sub
ve sion.
8.1.2.

In o uin a subve sion

subve sion, CVS y o os sis emas e on ol e ve siones u iliz


an un mo elo onoi o omo
o
ia mo i a in e ala . En es e mo elo, a a lien e e usua io 
on a a al e
osi o io en al
y  ea una o
ia e abajo, que es un e ejo e los a hivos y i e
o ios en el e
osi o io en al.
Los usua ios abajan en
a alelo, mo i an o sus o
ias
iva as y, n
almen e, in e alan sus
o
ias en una ve sin nal nueva. El sis ema e on ol usualmen e asis
e el
oeso e in e ala o,

e o al nal el a es un humano el ena a o e que es o ou a o e


 amen e.
Exis en o os mo elos ms senillos en el
a
el,
e o on  an es
esven ajas a la o
lazo. El
mo elo e o
ia mo i a in e ala
ue e sona un an o a io,
e o
en la
 ia funiona
muy bien. In emen a la
o u ivi a , ya que los usua ios
ue en
abaja en
a alelo, sin es
e a
a los o os. Cuan o abajan en los mismos a hivos, en ene al, lo
s ambios no se eniman y los
on i os son
oo f euen es y oma
oo iem
o a ela los.

A on inuain e a emos una ua el ilo usual e esa ollo u


an o u ilizas un sis ema e
on ol e ve siones.
Tu o
ia e abajo
Usualmen e omienzas a u iliza subve sion haien o una o
ia l
oal el
oye o (hekou ).
Es a o
ia on iene la l ima evisin e subve sion, llama a HEAD.Ob i
enes ls o
ia on una
lnea omo s a:

258
ien as
a a esa ollo

He am

% svn hekou h
://svn.ollab.ne / e
os/svn/ unk
Obviamen e la lia ambia
a a e eja el e
osi o io e u
oye o y
exis en ive sos
o o
olos
a a es
ei a lo. Pue e se va h
, omo en el ejem
lo, o va el sis e
ma e a hivos loal
o a avs e ssh. En es e ejem
lo, ex aemos el i e o io unk el
oye
 o, que ene almen e
inluye o os los a hivos y i e o ios,
e o
ue es seleiona u as ms
e alla as
a a ob ene
ie as
a es el
oye o.
Una vez que ienes una o
ia e abajo, no ienes na a ms que es
e a
. Pue es omenza a
mo i a esos a hivos y i e o ios e iniia el ilo
io e abajo.
Cilo e abajo on subve sion
subve sion iene muhas a a e s ias y o
iones,
e o en ene al e
enon a s siuien o el
siuien e ilo e abajo:
1. A ualiza u o
ia e abajo:
svn u
a e
2. Realiza alunos ambios:
svn a
svn ele e
svn o
y
svn move
3. Revisa us ambios:
svn s a us
svn iff
svn eve
4. In e ala los ambios e o os on u o
ia:
svn u
a e
svn esolve
5. Finalmen e, om
ome e us ambios al e
osi o io en al. No olvi e
s aom
aa los on un
omen a io in elien e.
svn ommi
En la abla 8.1 ex
liamos qu haen los oman os ms omunes e subve si
on:

8.2 Emas

259

Tabla 8.1 subve sion: oman os ms im


o an es
Coman o
Des i
in
svn a
Usualmen e a eas i e o ios y a hivos a u o
ia
loal, ealizas u abajo
e e iin y even ualmen e se los
esen as a subve si
on on es e oman o.
svn u
a e
Con es e oman o
ones u o
ia loal al a y subve s
ion e avisa e ambios,
uno
o lnea. Ca a lnea iniia on una le a que e in
ia alo:
A Un nuevo a hivo en u o
ia.
U Un a hivo no sin oniza o en u o
ia,
e o subve
sion lo a ualiz en ella,
no e
eou
es.
D Un a hivo fue elimina o e u o
ia.
G Una a hivo no sin oniza o en u o
ia,
o que l
o e i as e en u o
ia
loal.
C Un a hivo no sin oniza o en u o
ia,
e o subve
sion no
ue e a uali
za lo
o que hay on i os que equie en u in e
venin.
svn ele e
Si un a hivo o i e o io ya no si ve, as lo bo as
y avisas a subve sion.
svn o
y
Si el nomb e e un a hivo es esafo una o, on es
e oman o
ue es ambia
el nomb e el a hivo sin
e e su his o ia.
svn move
Con es e oman o
ue es move un a hivo o i e o i
o a o o lua en u o
ia
loal y subve sion se ena a e aom
aa lo on su hi
s o ia.
svn s a us
Te mues a o os los ambios ealiza os en u o
ia
loal on es
e o a la
evisin e la misma.
svn iff
Te mues a las ife enias ex uales en uno o va ios
a hivos on es
e o a la
evisin e u o
ia loal.
svn eve
Te
e mi e e oe e a o a ve sin e un mismo a hi
vo o i e o io. Usual
men e u ilizas es e oman o uan o quie es esa a
los ambios que ealizas e
en u o
ia loal.
svn u
a e
Sin oniza u o
ia loal on la ve sin es
ei a a (
o
omisin, la ms e
ien e o HEAD) el e
osi o io en al. Es e oman o
equie e que
ue as o
ne a e al se vi o e subve sion.
svn esolve Una vez que has a ela o un on i o, on es e oman o
se lo in ias a sub
ve sion.
svn ommi
Una vez que e minas u abajo e e iin, has in e 
ala o us ambios y e
suel o los on i os, on es e oman o le in ias a su
bve sion que in e e o os
us ambios.
Cuan o envas us ambios ienes que aom
aa los e un

mensaje que es iba


es que a ea la ban e a

us ambios. Si lo haes en la lnea e oman os, ien


m seui a el mensaje en e omillas.

Como ya menionamos, subve sion of ee una


l o a e oman os y o

iones ms,
e o el
ilo que hemos
esen a o es el ms omn.

260
He amien as
a a esa ollo
8.2. Emas

Ya menionamos que Emas es un e i o


a a
o ama o es heho

o
o ama o es? En
es a sein e emos amos
o qu es o es ie o, ya que evisa emos
uno e los ms so s ia os
mo os
a a
o ama en Java que exis en, JDEE, que son silas en
inls e Java Develo
men
Envi onmen fo Emas .
8.2.1.

JDEE

Aunque haemos una obe u a


a ial e JDEE, es a sein su
on
e que es s familia iza o
an o on Emas omo on el lenuaje e
o amain Java.
JDEE
e mi e one a a Emas on a
liaiones
a a esa ollo
e e e os, ales omo las que

ovee Sun Mi osys ems omo


a e e JDK. El esul a o es un ambi
en e in e a o e esa ollo,
ambin onoi o omo IDE,
o sus silas en inls. Exis en en el me
a o muhos IDE ome
iales
a a esa olla en Java, omo Ne beans o Eli
se; JDEE es
a la al u a e s os. En e sus
a a e s ias ms im
o an es se enuen an:
E i a  io on esal a o e sin axis y san as au om ias.
Com
le a e mane a au om ia am
os y m o os e lases.
Com
ila on b inos au om ios e mensajes e e o a la lnea
e  io es
onsable.
Gene a esquele os e lases y m o os e mane a au om ia.
Ejeu a a
liaiones java en un buffe e Emas e mane a in
e a iva.
In e a un e
u a o on un buffe
a a oman os in e a ivo
s y es
lea e mane a au o
m ia el a hivo/lnea mien as eo es el  io.
Posibili a e navea la oumen ain e JDK u ilizan o el na
vea o e u elein.
Navea a avs el  io u ilizan o las he amien as e as e
Emas o bien las es u u as
e bol
ovis as
o o a ex ensin e Emas, s
ee ba .
Ins alan o JDEE
$ sma
An es e
o e u iliza JDEE on Emas ebes ins ala una se i
e e ex ensiones y a
liaiones.
ins all
A ems,
o su
ues o, ebes on a en u sis ema on una im
lemen a
in e Java; aqu su
onemos
sun java5 j k que ya es ins ala o JDK.
JDEE no es
a e es n a e Emas y u iliza o as he amien as
que no lo son am
oo. Es as
he amien as son:
CEDET: en inls, Colle ion of Emas Develo
men Envi omnen Tools,
que es un
oye o que
inluye va ios
aque es in ivi uales:
EIEIO a
a CLOS
a a Emas Lis
.

8.2 Emas

261

Seman i
Inf aes u u a
a a
a sea en Emas.
S
ee ba
Navea o e. . . ualquie osa.
EDE
Maneja o e a hivos y ene a o e Make le.
COGRE
Conne e G a
h E i o .
Una vez que ob ienes e ins alas la l ima ve sin, ebes a ea lo
siuien e a u /.macs:
( l o a d f i l  "  /  l i s p / c  d  t / common /
c  d  t .  l " )
( s  m a n t i c l o a d  n a b l  cod  l p  r s )

igo para:
tndar.
cs stndar.
uffr.

ELIB: Es una bibliotca stndar para programar n Emacs Lisp. Tin cd


Estructuras d datos (colas, pilas, rbols AVL y otras).
Funcions para manjo d cadnas no incluidas n Emacs s
Funcions para manjo dl mini buffr no incluidas n Ema
Rutinas para manjar listas d galltas (cookis) n un b

%na v qu obtins  instalas la ltima vrsin, dbs agrgar lo


siguint a tu /.macs
para qu JDEE lo ncuntr:
( addt o l i s t
l o a d p a t h ( epand l e name "  /
e l s p / e l b " ) )

JDEE: $ nalmente estamos l stos para JDEE, qe s ge na rta s m la
r a las etens ones anter ores
y debes poner lo s g ente en t /.emas
( addt o l s t l o a d p a t h ( epand l e name "  / e l
s p / j d e / l s p " ) )
( req re jde )
A part r de este momento ada vez qe v s tes n arh vo rela on
ado on n proyeto o pro
grama Java, JDEE proveer ss ontroles para apoyarte en t ses n de de
sarrollo.
Reg stro y sele n de JDK
JDEE desansa en herram entas de desarrollo Java qe n onen e
n la lnea de omandos,
omo las qe oree Sn M rosystems omo parte del Java 2 Sotware
Development K t (SDK),
tamb n ono do omo Java Development K t (JDK). As qe antes qe ped
as t l zar JDEE para
omp lar, deprar o ejetar apl a ones, debes nd arle dnde v ven
las herram entas adeadas.
or om s n JDEE spone qe el omp lador, deprador y mq na v rt
al de java se llaman
java, jdb y java respet vamente y qe estn en n d retor o de la v
ar able de amb ente ATH. En
la mayora de los s stemas  n modernos, las nstala ones de Java s
e loal zan en s t os estndar,
por lo qe JDEE debe n onar peretamente.

En aso de qe tengas var as vers ones de JDK nstaladas y q er


as reg strarlas, t enes qe
real zar los s g entes pasos:
1. M  stom ze var able;
2. telea jde jd reg stry;
3. haz l  en el botn INS;

262

alado;
ema;

ba;

Herram entas para desarrollo


4. telea el nmero de vers n de JDK y la rta al d retor o donde est nst
5. rep te este proed m ento para todas las vers ones de JDK en t s st
6. haz l  en el botn State; y
7. a ont na n sele ona Save or $tre Sess ons.
A ont na n debes sele onar n JDK:
1. M  stom ze var able;
2. telea jde jd y vers n ber on todos los JDK qe reg straste arr
3.
4.
5.
6.

haz l  en el botn jnto a la vers n qe deseas t l zar;


haz l  en el botn State;
y a ont na n sele ona Save or $tre Sess ons;
sele ona el botn $ n sh para deshaerte del ber.

Ed tando arh vos ente de Java


ara ed tar n arh vo e stente on d go Java, arga en n ber de
Emas el arh vo on
C  C  . Al haer esto, Emas as gnar el modo jde mode al ber de ed 
n. Este modo
et ende los modos estndar de Emas: java mode y  mode, agregando na se
r e de omandos
para omp lar, onstr r, ejetar y deprar arh vos ente de Java.
Adems de esto, JDEE provee n soporte ompleto para generar domenta
n en ormato
HTM para las lases java, a part r de omentar os en el d go ente.
ara nsertar el esqeleto de n omentar o javado para na lase o
mtodo en t programa
ente, pos  ona el pnto en la pr mera lnea del mtodo o lase y ejeta e
l omando: C  C v j
(jde javado atodo at l ne). or ejemplo, spongamos qe tenemos na l
ase qe le as:
p  b l   l a s s M Clase
e  t e n d s M S  p e r C l a s e m p l e m e n t s Rnnable
, j a v a . o . S e r a l z a b l e
{
...
y el pnto est jsto antes de la palabra reservada pbl . Cando ejetas
C  C v j , JDEE
nsertar lo s g ente:
/
D e s  r b e  l a s s <ode > M Clase < / ode > h e r e .
@athor <a h r e  =" m a l t o : J  a n . D o e @  e n  a s
. nam . m" > J  a n Doe < / a >
@vers on 1 . 0
/
p  b l   l a s s M Clase
e  t e n d s M S  p e r C l a s e m p l e m e n t s Rnnab
le , j a v a . o . S e r a l z a b l e
{
...

ara generar la domenta n del proyeto atal pedes abr r alq e


r arh vo ente del

proyeto y ejetar M  jde javado mae, lo qe ejeta el omando javad


o de JDK para
generar la domenta n.

8.2 Emas

263

Abrev atras

JDEE te perm te t l zar abrev atras para algnas palabras lav


e y estrtras de ontrol de
java. A ont na n te mostramos omo t l zarlas.
Cando esr bes na de las abrev atras de n das, seg das de n e
spa o en blano, JDEE las
epande en el ber, s empre y ando el modo de abrev atras est a
t vado. ara at var/desat var
este modo debes amb ar el valor de la var able jdeenableabbrevmode.
Esta etens n de JDEE est basada en abbrev mode de Emas, qe es 
n s stema para generar
abrev atras generales.
Dentro de las abrev atras ms omnes enontrars las qe t enen q
e ver on estrtras de
ontrol, por ejemplo,  then else. Cando esr bes na de estas abr
ev atras seg da de espa o,
JDEE la epande al esqeleto de la estrtra de ontrol orrespond
ente.
or ejemplo, e se epande a  () { } else { }. Aq estn algnas
ms de las abrev atras
prede n das:
Tabla 8.2 JDEE: abrev atras de estrtras de ontrol

);)

Abrev atra

e
or
or ter

Enn ado
 then
 then else
or ( nt I=0;I<U;I++)
or (Iterator = . terator(); .hasNet(

ma n
try

ma n method
try nally

Completar epres ones, mtodos y ampos


Emas provee omandos para ompletar epres ones nompletas q
e n onan para alq er
epres n, pero slo s stas e sten en n ber ab erto. JDEE provee o
mandos para ompletar
omandos y n ona en alq er mtodo Java o nombre de ampo qe e
sta en el jde global
lasspath.
JDEE oree d st ntos omandos para ompletar; todos ellos dete
rm nan n onjnto de pos
b l dades para el nombre del ampo o mtodo nompleto en el pnto. a
d eren a entre ellos,
s n embargo, rad a en mo te presentan esas pos b l dades. os oman
dos se enentran en la
tabla 8.3.
or om s n, JDEE t l za jde omplete men. ara sele onar otr
a n n debes as gnar el
valor de la n n deseada a la var able jdeompletent on.
Adems de aydarte a ompletar, JDEE tamb n nlye n modo para l
ograr qe la tela Enter
 erre las llaves al nal de la lnea. ara hab l tar este modo debes a
mb ar el valor de la var able
jde eletr  retrn p.

264
rram entas para desarrollo

He

Tabla 8.3 JDEE: ormas para ompletar ampos y mtodos


Desr p n
( C Cv  ) s e es el oman o es n a e

Comando
jde omplete
JDEE y le eja

la a ea e om
le a a o o e los 

oman os
a a om
le a .
j e om
le e in line
ime a o
in que

( C Cv . ). Es e oman o u iliza la

enuen a
a a om
le a . Si hay ms e

una o
in, e
e mi e

eo e las, a a una e s as sus i uy

e a la an e io en el buffe .
j e om
le e menu
bili a es en un men e

Es e oman o es
liea o as las
osi
in o ue al buffe la que seleion

es.

j e om
le e minibuf
a a es
lea las
osibili

Es e oman o u iliza el mini buffe

a es e in o ue al buffe la que s

eleiones.

Gene ain e  io


JDEE
ovee meanismos
a a ene ain e  io. Los hay e os i
o
s: wiza s y basa os
en
a ones. Tambin of ee oman os
a a ex
an i
aque es (j e im
o
ex
an im
o s).
Tabla 8.4 JDEE: enunia os im
o
Enlae
im
o
a a la lase
C  C v C z
a el buffe .
son eque i as en el buffe
C  C v z

Des i
in
(j e im
o n an im
o ) ene a un enunia o
en el
un o. Inse a el enunia o en la abez
(j e im
o all) im
o a o as las lases que
a ual.

Los oman os
a a im
o a e
e mi en onve i un enunia o omo:
im
o java . io .
en los siuien es:
im
o java . io . Buffe e Rea e ;
im
o java . io . In
u S eamRea e ;
im
o java . io . IOExe
ion ;
y vieve sa (j e im
o olla
se im
o s). JDEE a ems inluye el oman
o j e im
o o anize
que aumula los enunia os im
o el buffe en os bloques, uno que
on iene o os los java y

javax y es
us e una linea en blano, o os los ems. Den o e a a b
loque o ena alfab ia
men e,
o ejem
lo:

8.2 Emas

265
im
o
im
o
im
o
im
o

java . io . In
u S eamRea e ;
java . u i l . Hash able ;
j a v a x . s w i n  . JF ame ;
j a v a x . swin . J P a n e l ;

im
o jma h . Linea Sys em ;
im
o jma h . Tes ;
Finalmen e, on j e im
o kill ex a im
o s bo as los im
o
que no son neesa ios.
JDEE inluye a ems una se ie e ene a o es e  io o wiza s, q
ue se mues an en la
abla 8.5.
Tabla 8.5 JDEE: ene a o es e  io, wiza s
Wiza
Sob ea a e o
e a o es
o que sob ea a o o

un o.

In e faz

lemen ain e una in e


un o.
ase es
e a.

Delea o

Clase abs a a
os e una lase abs a a
o.

Ge /Se
e y se
a a los am
os
al
un o.

Des i
in
(j e wiz ove i e me ho ). Un m o
he e a o
o la lase on e es el
(j e wiz im
lemen in e fae). Im
faz en la lase que on iene al

M o os que elean a eas a una l


Im
lemen ain e los m o os he e a

o la lase que on iene al


un
(j e wiz e se me ho s) M o os 

iva os e la lase que on iene

Exis en o as mane as e ene a  io, omo lases


a n vaas,

e o s as no ienen un
nio oman o asoia o y ebes ejeu a las es e el men e JDE. Po ej
em
lo,
a a  ea un
buffe on una lase
blia en ia e Java,
ue es u iliza Files JD
E New Class.
Compilando programas Java
Para compilar debes ejecutar C c C v C c (jde compile), lo que
ejecutar el comando
javac en el buffer actual y el resultado aparecer en un nuevo buffer
de compilacin.
Si ya exista un buffer de compilacin, el comando reutilizar el buf
fer; si no, crear uno nuevo.
Por omisin, si no existen errores en la compilacin, JDEE borra el buf
fer de compilacin dos (2)
segundos despus de terminada la compilacin.
El modo mayor de este buffer es compilation mode, que te permit
e moverte rpidamente a la
fuente de cada error, simplemente haciendo click o presionando Ente

r en el buffer de compilacin.
JDEE utiliza una serie de variables para controlar la manera de
compilar tu programa; para
cambiar la forma estndar debes utilizar la secuencia de mens y submens
de JDEE: JDE
Options Compile.
Si utilizas JDE Build, entonces JDEE llamar un programa para con
struir tu aplicacin. Por

266
Herramientas para desarrollo
omisin utiliza el comando make de Linux, pero puedes con gurarlo para que ut
ilice la herramienta
de compilacin Ant, del grupo Apache, o una funcin especial que t de nas. Las f
unciones pre
de nidas son: jde make y jde ant build y, para utilizar Ant, utiliza lo sig
uiente en tu /.emacs:
( s e t q j d e b u i l d f u n c t i o n ( j d e a n t b u i l d ) )
Existen muchas variables para controlar el comportamiento tanto de ma
ke, como de Ant, aun
que en la mayora de las distribuciones de Linux no debe ser necesario que
cambies los valores por
omisin de estas variables.
Ejecucin de aplicacin Java
JDEE te permite ejecutar tus aplicaciones Java desde un subproceso d
e Emacs. Puedes ejecutar
varias aplicaciones de manera concurrente, pero slo un ejemplar de cada ap
licacin en un momento
dado. JDEE te mostrar tanto la salida como el error estndar de tu aplicacin
en un buffer de Emacs
y, a travs de estos buffers, puedes interactuar con la aplicacin si sta es i
nteractiva.
Para ejecutar la aplicacin utiliza C c C v C r (jde run).
Por omisin en JDEE, el comando para ejecutar aplicaciones supone que
la clase en el buffer
actual contiene el mtodo main de tu programa. Si ste no es el caso, tienes
que indicarle cul es la
clase principal, asignando el nombre adecuado a la variable jderunapplicati
onclass.
Con la variable jderunworkingdirectory puedes indicarle un directorio d
istinto al actual para
ejecutar tu aplicacin.
Navegando excepciones
Si ocurren excepciones durante la ejecucin de tu programa, la mquina vi
rtual entrega como
salida un registro de excepcin. Este registro aparece en el buffer de ejec
ucin. Para ver la lnea de
cdigo correspondiente a un punto en el registro de excepcin, puedes hacerlo
con el botn derecho
del ratn.
Para navegar el registro de excepcin hay dos combinaciones de teclas: C c
C v C [ y C c C v C ] .
JDEE ofrece un excelente soporte para trabajar con applets, pero por
razones de espacio no lo
cubriremos en este libro.
Depurando aplicaciones
JDEE ofrece dos opciones para depurar aplicaciones Java:
Una interfaz en Emacs para jdb, el depurador en lnea de comandos que
se distribuye con JDK.
JDEbug, un depurador desarrollado espec camente para ser utilizado con
JDE.

JDEbug ofrece mejores caractersticas para depurar, pero requiere JDK 1


.2 o ms reciente, por
lo que si tu aplicacin utiliza una versin anterior, slo podrs utilizar jdb. E
n este trabajo revisamos
exclusivamente JDEbug.
JDEbug te permite ejecutar un programa Java paso por paso y despliega
y modi ca el estado
interno del programa. Entre sus caractersticas principales contamos:

8.2 Emacs
267
Depuracin a nivel de fuente. JDEbug mantiene un apuntador a la l
inea de cdigo que se est
ejecutando conforme avanzas. Te permite adems asignar puntos de
evaluacin en los buffers
fuente.
Despliega de manera automticas el valor de las variables.
Navegador de objetos. Puedes expandir el despliegue de la varia
ble local para mostrar los
campos del objeto a cualquier nivel de profundidad.
Te permite navegar la pila de ejecucin.
Puedes depurar varios procesos simultneamente en la misma sesin.
Evaluacin de expresiones. Puedes evaluar cualquier expresin que s
ea vlida en el punto
actual de suspensin.
Por omisin JDEE est con gurado para ofrecerte una interfaz de jdb, p
or lo que debes indicarle
que deseas utilizar JDEbug. Esto lo logramos asignando el valor JDEb
ug a la variable jdedebugger:
( s e t q j d e d e b u g g e r ( " \ command{ JDEbug } " ) )
JDEbug se apoya en la biblioteca JPDA, que en Linux se distribuy
e como parte de JDK, por lo
que no es necesario hacer nada ms.
Iniciando el depurador
Para iniciar el depurador selecciona Processes Debugger del men d
e JDEbug, con lo
que se inicia la ejecucin del depurador. Para depurar una aplicacin de
bes:
Iniciar la aplicacin dentro del depurador. Adelante te decimos cm
o.
Aadir el depurador a tu aplicacin si es que sta fue ejecutada fuer
a del depurador.
Poner el depurador en modo de escucha e iniciar la aplicacin fue
ra de ste.
Es muy importante que cuando hayas terminado de utilizar el depu
rador, termines su ejecu
cin seleccionando Exit Debugger del men JDEbug. De otra manera, aun cu
ando termines la
ejecucin de Emacs, pueden quedarse procesos (mquinas virtuales) hurfano
s ejecutados por el
depurador.
Iniciando procesos
JDEbug provee dos comandos para iniciar procesos:
1. JDEbug Processes Launch Process, que ejecuta un ejemplar de la
aplicacin sea
lada por jde run application class y, en caso de que su valor s
ea nil , la aplicacin corres
pondiente a la del buffer actual de java.
2. JDE Debug App; este comando realiza las siguientes acciones:
a) Inicia el depurador de ser necesario.
b) Lanza la aplicacin.
c) Asigna todos los puntos de revisin que hayas especi cado co
n anterioridad.

d)

Ejecuta la aplicacin.

268
Herramientas para desarrollo
Nota: si no asignaste ningn punto de revisin, la aplicacin ser eje
cutada sin interrupcin
hasta terminar.
Cualquiera de estos comandos que ejecutes, dividir la pantalla
de Emacs en dos y desplegar
una nueva ventana para las variables locales.
La pantalla superior de Emacs muestra el cdigo fuente, la sigui
ente muestra el buffer fuente o
el archivo donde pusiste puntos de revisin y, nalmente, la ventana de
l fondo muestra los mensajes
del depurador para el proceso recin lanzado.
En este momento, si el proceso fu iniciado exitosamente y no se
se ha ejecutado hasta terminar,
puedes depurar la aplicacin.
8.2.2. psvn

8.1 PCL CVS frente para CVS


Otro modo muy importante para controlar versiones es PCL CVS, que e
s parte estndar de
Emacs. Este modo sirve como frente para manejar proyectos a travs de
CVS.
CVS es el sistema controlador de versiones por omisin. Fue uno de lo
s primeros sistemas
utilizados y, probablemente, aun hoy da sea el ms utilizado en el mun
do del software
libre. Sin embargo, en nuestra opinin, subversion es un sistema ms ve
rstil y tiene varias
ventajas sobre CVS.
Este sistema es una interfaz para el control de versiones subve
rsion (ver la seccin 8.1.1); sin
embargo, psvn.el no es parte estndar de Emacs por lo que tienes que
descargarlo e instalarlo,
siguiendo las instrucciones en la seccin 4.3.18 y agregar lo siguien
te a tu /.emacs:
( r e q u i r e psvn )
Una vez cargado el programa, puedes ejecutarlo con M x svn sta
tus; te preguntar en el mini
buffer por el directorio con tu copia de trabajo. Por omisin te most
rar el directorio del archivo
actual. Este comando ejecuta svn status en el directorio que teclea
ste y te muestra un buffer con
el resultado que, como notars, se parece mucho a la salida del coman
do en una terminal, pero a
diferencia de sta, en este buffer cuentas con una serie de enlaces d
e teclas para ejecutar rpida y
cmodamente comandos de subversion.
Tabla 8.6 Emacs: comandos de psvn
Enlace

Descripcin

, p , C p

(svn status previous line) Te lleva a la lnea an

terior.
, n , C n

(svn status next line) Te lleva a la siguiente

lnea.
Contina en la siguiente pgina

8.2 Emacs
269
Tabla 8.6 Emacs: comandos de psvn
tina de la pgina anterior
Enlace

Con

Descripcin
(svn status nd

le or examin directory) Abre el archivo

(directorio) en la
Enter
lnea actual.
(svn status update buffer) Actualiza la vista en el b
uffer con respecto a tu
x
revisin local.
U

(svn status update cmd Ejecuta svn update en el direc

(svn status add le) Aade el archivo al repositorio.

torio actual.

(svn status mv) Ejecuta el comando svn move en el arc


hivo (directorio) ac
R
tual.
(svn status rm) Ejecuta el comando svn delete en el a
rchivo (directorio) ac
D
tual.
C
(svn status cp) Ejecuta el comando svn copy en el arc
hivo (directorio) actual.
r
el archivo actual.

(svn status revert) Ejecuta el comando svn revert en


(svn status show svn diff) Ejecuta el comando svn dif

f del archivo (directo


=
rio) actual con la versin de la revisin en tu copia de
trabajo.
(svn status commit) Compromete el cambio en el archiv
o (directorio) con el
c
repositorio actual.
(svn status set user mark) Pone una marca en el archi
vo o directorio. Esto
te permite poner marcas a varios archivos y el siguie
nte comando se ejecutar
m
sobre todos los archivos marcados. Por ejemplo, aadirl
os, borrarlos, compro
meter los cambios y otros.

(svn status unset user mark) Elimina la marca del arc


hivo (directorio) en la
u
lnea actual.

Extendiendo tu
ambiente
9
La capacidad de extender y acoplar el sistema a tus necesidades es una
de las principales ca
ractersticas de UNIX en general. Linux, por supuesto, hereda esta caracterst
ica y en este captulo
te mostraremos una de las formas ms poderosas de extender tu ambiente con l
a programacin en
shell.
Tambin te mostramos cmo extender Emacs a travs de su lenguaje de programa
cin de exten
sin, Emacs Lisp. De hecho, la gran mayora de subsistemas y paquetes para ext
ender Emacs que
revisamos en este libro, por ejemplo JDEE (seccin 8.2.1) o ERC ( 5.15.4), s
on programas escritos
en Emacs Lisp. Entonces, lo que sucede cuando cargas uno de estos programa
s en Emacs, es que
ste acta como mquina virtual e interpreta (ejecuta) el programa.

9.1. Programacin en shell


El shell de UNIX cuenta con una caracterstica muy importante que es la
capacidad de ser
programado. La programacin del shell se hace por medio de los llamados guio
nes de shell, los
cuales bsicamente toman una serie de instrucciones y las ejecutan en un nue
vo proceso de shell.
Los guiones de shell son archivos que contienen instrucciones para el shel
l que llevan a cabo una
tarea espec ca, por ejemplo automatizar la entrega de ciertos correos a un gr
upo de personas, y en
general se utilizan para automatizar todo tipo de tareas.
En un guin de shell las instrucciones se ejecutan una despus de otra en
el orden dado por
el guin. Adems de stas, los guiones de shell tambin pueden recibir parmetros de
la misma
manera en que los programas lo hacen, pueden de nir variables para guardar c
iertos valores que

272
Extendiendo tu ambiente
sean de inters para la ejecucin del programa y cuentan con estructuras d
e control de ujo, algunas
de las cuales veremos ms adelante.
En un guin de shell tambin podemos tener comentarios, que son mensaj
es para los que lean el
guin (en particular, nosotros mismos despus de algn tiempo). Los comentar
ios son ignorados por
el shell al momento de ejecutar, as que no hacen dao y sirven para dar m
ayor claridad a nuestro
guin de shell. Los comentarios son todo lo que siga al carcter # hasta e
l n de la lnea.
Los guiones de shell pueden ser ejecutados de manera autnoma simple
mente cambiando los
permisos de ejecucin y poniendo un comentario especial en la primera lne
a del archivo. Esta lnea
luce algo as #!/ bin /bash y le indica al shell que debe de usar el pro
grama / bin /bash para procesar el
resto del archivo.
A continuacin te mostramos un guin de shell muy sencillo:
#! / usr / bin / bash
echo h o l a ;
Actividad 9.1 Crea un guin de shell que ejecute un ls la, lo redirija a
un archivo llamado
listado . dir y despliegue un mensaje al usuario, informndole de la cre
acin de este archivo; da
permisos de ejecucin y ejectalo un par de veces en directorios distintos
.
9.1.1.

Variables

Los guiones de shell utilizan variables como almacenes para cierto


s valores, por ejemplo el
mensaje a desplegar o los nombres de los archivos a borrar. Para las v
ariables se utilizan palabras
formadas nicamente de maysculas1 y se les asigna valor por medio del ope
rador =; por ejemplo
MENSAJE="saluditos por la maana"; despus, para usarlas recuperando su va
lor, precedemos
el nombre de la variable con el carcter $, como en la siguiente lnea:
% echo $MENSAJE
Entonces el programa anterior, usando variables para el mensaje
, quedara as:
#! / usr / bin / bash
MENSAJE= h o l a ; e c h o $MENSAJE ;
Actividad 9.2 Modi ca el guin de shell anterior de manera que uses variab
les para el mensaje al
usuario as como para el nombre del archivo a donde se dirige la entrada
.
9.1.2.

Preparacin

Hasta ahora has aprendido cmo hacer algunos programas sencillos, hec
hos con base en los
comandos aceptados por el shell estndar de Linux, bash, y conectando la
salida de algunos con la
1
Esto es parte de la tradicin; se pueden usar minsculas tambin.

9.1 Programacin en shell


273
entrada de otros. Ahora ests capacitado para emprender labores un po
co ms complejas. Aprende
rs cmo hacer programas ejecutables por bash, ms grandes y que ofrecen
servicios ms tiles.
Antes que nada y con vistas a organizar decorosamente tu activi
dad, debers crear en tu di
rectorio personal un subdirectorio donde puedas guardar todos tus p
rogramas ejecutables de uso
frecuente. Esto, adems de la evidente ventaja de organizar tu labor,
te proporciona la posibilidad
de incluir este subdirectorio como parte de tu variable de ambiente
$PATH. Procedamos en orden.
Lo que tenemos que hacer es:
1. Crear un directorio llamado /bin: cd; mkdir bin.
2. Agregar a nuestra variable $PATH el directorio que acabamos de
crear. Esto es, edita el archivo
/.bashrc y agrega al n de la lnea que comienza: PATH=, lo siguien
te: :/$HOME/bin.
Ahora todos los programas que hagas y coloques en ese subdirect
orio podrn ser llamados desde
cualquier otro directorio en el que ests. El sistema se encargar de e
jecutarlos desde tu directorio
bin. Por supuesto todos los programas debern tener permiso de ejecuc
in (recuerda el uso de
chmod).
Actividad 9.3 Despliega la variable de ambiente $PATH luego de edit
ar el archivo /.bashrc.
Compara el resultado con la que acabas de poner en el archivo. Que o
curri?
En general, todos los programas que elabores en esta seccin debe
rn almacenarse en tu direc
torio bin.
9.1.3.

Vigilando el espacio en disco

Nuestro primer programa, como todos los que seguirn, estar enfoca
do a resolver un problema,
a facilitarte la vida de alguna manera. Algo con lo que todo usuari
o de un sistema compartido debe
aprender a convivir es con los dems usuarios. Todos comparten un mis
mo disco duro, un mismo
procesador, una misma memoria; es necesario regular el uso de estos
recursos para garantizar su
disponibilidad a todos los usuarios. Es por ello que en muchos sist
emas de cmputo compartidos
se establecen polticas generales de uso de recursos. Por ejemplo, se
establecen cuotas mximas
de uso de disco. Mediante este procedimiento cada usuario del siste
ma tiene un lmite mximo
de espacio disponible, es decir, la cantidad de informacin guardada
en su directorio personal no
deber exceder nunca este lmite; en caso de que se pretenda rebasar el
lmite, el sistema lo impide:
es como si el disco duro se hubiese acabado. El usuario se entera d

e esto porque se le presenta un


mensaje como Disk quota exceeded.
Para que nunca te suceda esta desagradable situacin y se te impi
da guardar informacin im
portante, es necesario que mantengas constantemente vigilado el mon
to de disco que utilizas. Sera
conveniente entonces poseer un listado de cunto espacio de disco ocu
pa cada uno de tus subdirec
torios para que, en caso necesario y tomando en consideracin lo que
sea ms relevante, eliminar
informacin que ya no sea necesaria.
Para poder hacer esto necesitas un programa que te permita cono
cer cunto espacio de disco
ocupa un directorio y te lo reporte en unidades de uso cotidiano. E
l comando que hace esto en

274
Extendiendo tu ambiente
UNIX es du (disk usage). Puedes saber cuanto espacio ocupa tu director
io actual y cada uno de sus
subdirectorios con el siguiente comando: du k .2 .
Actividad 9.4 Logra que la salida de du se muestre paginada.
Actividad 9.5 Logra que du reporte slo el tamao del directorio actual, p
ero sin desglosar por
subdirectorios.
Lo malo de hacer du k . es que el listado de la cantidad de disc
o ocupada sale desordenado.
Si tienes muchos subdirectorios no es evidente cules son los que ms espa
cio ocupan y, por tanto,
a cules deberas prestar ms atencin. Pero afortunadamente existe el comando
sort, que permite
ordenar aquello que recibe como entrada. Como has hecho en el pasado,
puedes pasar la salida del
comando du como entrada del comando sort y rematar esto pasando la sal
ida de sort como entrada
de more (o less si lo pre eres). sort ordena creciente y quisieras (aunq
ue en gustos se rompen
gneros) que la salida fuera ordenada decreciente para que pudieras jarte
quizs en los 3, 5 o 10
subdirectorios ms grandes fcilmente; adems, quieres que para ordenar use
los valores numricos
entregados por du. Esto ltimo puede parecer evidente pero no lo es. Hay
dos maneras de ver un
423: como el nmero 423 o como la secuencia de tres smbolos 423, una cadena
de carcteres.
Visto de la primera forma, 423 es mayor que 52; pero desde el segundo
punto de vista, la cadena
423 es menor que 52 porque, en orden lexicogr co el 5 est despus del 4.
En sntesis, y agregando algunas lneas explicativas al programa, tie
nes lo siguiente:
1
# ! / bin / bash
2
#
3
# R e p o r t a e l e s p a c i o en K b y t e s o c u p a d o p o
r c a d a
4
# s u b d i r e c t o r i o d e l d i r e c t o r i o a c t u a l o
r d e n a n d o de mayor a
5
# menor ( o r d e n i n v e r s o p a r a s o r t ) .
6
#
7
e c h o " E s p a c i o o c u p a d o en d i s c o ( en K b y t e s
) "
8
e c h o " p o r e l d i r e c t o r i o a c t u a l : pwd y s u b d
i r e c t o r i o s "
9
du k . | s o r t n r | more
Nota que est entre entre comilla invertida (acento grave, que est en
la esquina superior izquier
da del teclado, junto al 1) el comando pwd en la segunda lnea de mensaje
lnea (8) . Cuando
se pone un comando entre ese tipo de comilla, al momento de ejecutar l
a lnea que lo contiene se
reemplaza el comando por su salida, es decir la ejecucin de la lnea (8),
echo "por el directorio actual:pwd y subdirectorios,

produce:
por el directorio actual: /home/users/jose y subdirectorios
Actividad 9.6 Haz que el monto de espacio ocupado se despliegue en meg
a bytes en vez de en kilo
bytes.
Actividad 9.7 Haz que la salida de sort sea en orden creciente y sea p
osible hacer paginacin.
2
El . se re ere al directorio actual.

9.1 Programacin en shell


275
9.1.4.

Listado de directorios

Por supuesto habrs notado que el listado de los elementos de u


n directorio incluye tanto sub
directorios como archivos y que en dicho listado las entradas apar
ecen ordenadas alfabticamente.
Esto hace que subdirectorios y archivos aparezcan mezclados en la
lista, lo que di culta distin
guirlos, sobre todo si tenemos una larga lista. Sera bueno tener un
programa que liste slo los
subdirectorios de un directorio dado.
Entonces queremos hacer un programa al que podamos decirle el
nombre, o en general, la ruta
de algn directorio y nos muestre en la pantalla un listado del nomb
re de todos los subdirectorios
que se encuentran contenidos en l. Sera bueno que ese nombre o ruta
del directorio pudiera darse
al programa del mismo modo en que se dan los parmetros de entrada d
e los programas que conoce
mos, es decir, ponindolos inmediatamente despus del nombre del progr
ama que se quiere ejecutar.
Cuando llamamos a ls por ejemplo, podemos decirle la ruta de algn d
irectorio del que deseamos
ver el listado. Por ejemplo:
% ls /usr/include
te muestra el listado del directorio /usr/include que pusiste junt
o al nombre del programa.
bash tiene prevista la situacin en la que se dan parmetros de en
trada a los programas. En
esencia slo se requiere guardarlos en algn lugar accesible al progra
ma y ponerle nombre a dicho
lugar para poder referirse a lo que est guardado all desde el progra
ma. Adems, el nombre de estos
lugares deber de ser un estndar para que cualquier programador sepa
cmo referirse a l. En casa
todos los miembros de la familia pueden acceder a las llaves de la
puerta porque estn en un lugar
estndar que todos conocen y al que todos hacen referencia cuando le
piden las llaves a alguien ms.
A estos lugares con nombre para almacenar valores se les llama var
iables. Ya has tenido experiencia
con variables de ambiente (como PATH) y ahora estamos hablando de
las variables de tus programas
(en particular las variables de ambiente son variables de tus prog
ramas).
Pues bien, existen ciertas variables que existen siempre automt
icamente en todos los programas
en shell y que se re eren a los parmetros de entrada de un programa:
Tabla 9.1
Programacin en shell: variables automticas
Variable

Descripcin
$0 es el nombre del programa mism

o que invocaste, es de
cir, lo primero que pones en la ln
ea de llamada. $1 es el

$0, $1, $2, ..., $n


del nombre del progra

primer parmetro que se pone luego


ma (v.gr.. en ls l,

l sera $1).

Anlogamente $2, . . . , $n
son los siguientes parmetros.
es el nmero de parmetros que pones
frente al nombre del
$#
programa, es decir no se cuenta $
0.
Co
ntina en la siguiente pgina

276
Extendiendo tu ambiente
Tabla 9.1

Programacin en shell: variables automticas


Contina de la pgina anterior
Variable

Descripcin
es el resultado del ltimo com

ando ejecutado. Todos los


$?
eden regresar un resultado;

programas que se ejecutan pu


ms adelante abordaremos el te

ma.
Nota adems que existe un medio para contar cuntos parmetros de ent
rada se le dieron a un
programa. Basta con observar el valor que posea la variable $# para
saber cuntas palabras (separa
das por espacios) se dieron frente al nombre del programa cuando ste
fue llamado a ejecutarse.
En nuestro programa requeriremos saber cuntos parmetros de entrad
a se dieron; si existe
algn parmetro, se debe ser la ruta de acceso al directorio del que se
desea conocer el listado
de subdirectorios. Llamemos a este directorio el directorio objetiv
o. Si no existe parmetro alguno
entonces supondremos que el directorio objetivo es el actual. En ca
so de que s exista el parmetro,
entonces deberemos cambiarnos al directorio objetivo especi cado por
dicho parmetro y listar slo
el nombre de sus subdirectorios.
Es decir, el esquema general de lo que debemos hacer es el siguient
e:
1 Si se dio l a r u t a del d i r e c t o r i o o b j e t i v o
2
n o s cambiamos a e s e d i r e c t o r i o .
3 S i no ,
4
no n o s movemos .
5 Ya p a r a d o s en e l d i r e c t o r i o o b j e t i v o , p a r
a c a d a e n t r a d a d e l l i s t a d o
6
de d i r e c t o r i o
7
S i l a e n t r a d a e s e l nombre de un s u b d i r e c t
o r i o ,
8
l a mostramos .
9
S i no ,
10
nos v a l e .
Nta que en las lneas 1 y 7 debes tomar decisiones, debes ser capa
z de preguntar si algo ocurre
o no. Esto lo puedes hacer en bash usando la construccin:
i f [ c o n d i c i n ]
then
# i n s t r u c c i o n e s que s e e j e c u t a n s i l a c
o n d i c i n e s v e r d a d e r a
else
# i n s t r u c c i o n e s que s e e j e c u t a n s i l a c
o n d i c i n e s f a l s a
fi

Existen dos maneras de escribir la condicin, una es ponindola ent


re corchetes ([ y ]) y la
otra usando explcitamente el comando test3 . test d <algo> pregunta s
i <algo> es un subdirectorio;
si en vez de d se pone f entonces pregunta si <algo> es un archivo ( l
e ).
3
En realidad [ condicin ] es una manera implcita de usar el com
ando test .

9.1 Programacin en shell


277
Adems debemos hacer algo para cada entrada del listado de dir
ectorio, como dice nuestro
esquema general. Esto es posible usando la construccin for del sh
ell (ver man bash):
f o r < v a r i a b l e de n d i c e > i n < c o n j u n t o d
e v a l o r e s >
do
# i n s t r u c c i o n e s que hay que r e p e t i r
done
Esto hace que las instrucciones entre el do y el done se rep
itan tantas veces como elementos
tenga el conjunto especi cado a continuacin de la palabra in. En es
encia, lo que hace el for es
ponerle a la variable de ndice el primer valor de la lista, luego
ejecutar las instrucciones a repetir,
cambiar el valor de la variable de ndice ponindole el segundo del
conjunto y repetir las instruc
ciones; y as sucesivamente hasta que la variable adquiera el ltimo
valor del conjunto; sa ser la
ltima vez que se ejecuta el ciclo.
A continuacin se muestra el cdigo del programa que queremos:
1
2
3

# ! / bin / bash
#
# E n t r e g a un l i s t a d o de a q u e l l a s e n t r a d
a s d e l d i r e c t o r i o que
4
# son s u b d i r e c t o r i o s .
5
#
6
# S i hubo un p a r m e t r o en l a l i n e a de comandos
7
# e s e l d i r e c t o r i o d e l que d e s e a m o s l o s s
u b d i r s .
8
i f [ $# ne 0 ] ; t h e n
9
cd $1
10
fi
11
# s i no , q u e r e m o s e l l i s t a d o d e l d i r e c t
o r i o a c t u a l
12
e c h o " S u b d i r e c t o r i o s en pwd "
13
f o r i i n l s aA ; do
14
i f t e s t d $ i ; t h e n
15
l s l d $ i
16
fi
17
done

Actividad 9.8 Por qu se le puso la opcin d al comando ls (lnea 15)?


Actividad 9.9 Por qu se le pusieron las opciones aA al comando ls
(lnea 13)?
Actividad 9.10 Para qu sirven las lneas 1317?
Actividad 9.11 Analiza la lnea 8 del programa. Qu ocurre si el usua
rio, tontamente, da ms

de un parmetro? Como haras para restringir ms, si es posible, la ent


rada? (sugerencia: man
test).

278
Extendiendo tu ambiente
9.1.5.

Recorridos recursivos

El problema de borrar basura: planteamiento


Ya sabes cmo hacer para conocer el espacio en disco que ocupas en t
u directorio personal.
Esto te provee de un medio para saber cules de tus subdirectorios son ms
grandes, lo que puedes
usar como un criterio para decidir qu borrar o comprimir y qu no, con el
n de reducir el espacio
ocupado.
Pero si meditas un poco en el proceso que debers llevar a cabo para
depurar tu directorio,
te dars cuenta de que puede no ser agradable. Habra que navegar por todo
s los subdirectorios
buscando archivos intiles y borrndolos, teniendo cuidado de no borrar lo
s que no debes.
Es posible establecer criterios generales, basados en los nombres
de los archivos, para decidir
qu borrar y qu no. Ya conoces, por ejemplo, los archivos de respaldo de
Emacs, esos que terminan
con y que suelen ser muy tiles cuando an no se obtiene la versin nal de un
archivo que est
en proceso de edicin, pero que una vez que dicha versin nal se ha obtenid
o dejan de serlo. Con
frecuencia, archivos como stos se quedan por all ocupando espacio innece
sariamente. Hay otros
casos similares como los archivos de bitcora (.log) o auxiliares (.aux)
que son generados por TEXy
LATEX.
Podras pensar entonces en hacer un programa que descienda por todo
el rbol de tu directorio
personal eliminando todos los archivos que satisfagan los criterios es
tablecidos en su nombre. Eso
automatizara en buena medida el proceso de depuracin de espacio y reduce
signi cativamente la
probabilidad de que te equivoques borrando algo que no queras borrar (p
or supuesto que pueden se
guir ocurriendo errores indeseables: si en algn momento deseas conserva
r un archivo cuyo nombre
cumple con los criterios de borrado, debers cambiarle de nombre para no
borrarlo accidentalmente
en el futuro).
El patrn de descenso
Para resolver el problema que te ocupa tienes que ser capaz, prime
ro, de poder descender por un
directorio y todos sus subdirectorios. Cmo haces esto? Conceptualmente h
ablando, lo que quieres
es:
1. Haces lo que deseas hacer en el directorio actual (lo que quieres
hacer aun cuando ste sea el
nico directorio presente).
2. Te jas en cada entrada del listado del directorio.
3. Si la entrada corresponde a un subdirectorio te introduces a l y h
aces lo mismo que estabas

haciendo en el nivel anterior (haces lo que deseas. . . jarte en


cada entrada. . . ).
4. Si le entrada no es un directorio quizs haces algo ms con ella.
5. Cuando terminas con cada una de las entradas del directorio sales
al directorio inmediato
anterior.
El paso nmero 2 signi ca que haces exactamente lo mismo que estabas h
aciendo en el direc
torio superior; es decir, ejecutas cada una de las acciones que estaba
s llevando a cabo, en el mismo
orden; esto es, ejecutas el mismo programa. Cuando un programa, como p
arte de sus instruccio

9.1 Programacin en shell


279
nes, ordena la ejecucin de s mismo, el programa recibe el apelativ
o de recursivo. Imagina que tu
programa se llama paseo_rec. Entonces el esquema general de lo q
ue quieres hacer es algo as:
1
Hacemos l o que d e s e a m o s h a c e r , e l o b j e t i
v o de n u e s t r o p r o g r a m a
2
Para cada e n t r a d a del d i r e c t o r i o
3
S i l a e n t r a d a e s un s u b d i r e c t o r i o
4
Entramos a l s u b d i r e c t o r i o
5
Ejecutamos paseo_rec a p a r t i r del d i r e c t o r i o a
c t u a l
6
Salimos del d i r e c t o r i o a l inmediato s u p e r i o
r
7
S i no e s un s u b d i r e c t o r i o
8
Decimos s u nombre
Deseamos repetir al proceso de las lneas 3 a 8 para cada entr
ada del directorio. Esto se dice
for i in ls es decir para cada elemento del listado producido po
r el comando ls. Dado que ls
entrega una por una las entradas del directorio, esa i que usas
sirve para referirse, uno por uno, a
cada elemento del listado de directorio. Entonces, una vez que e
sts parados en la entrada i del
directorio, puedes preguntar si esa i corresponde a un subdirect
orio o a un archivo. Esto es posible
hacerlo con los comandos if y test, tal como lo hiciste en el pr
ograma que lista directorios. As:

d o un r

1
2
b
3
4
e
5
t
6
s
7

a del d i r
n d i r e c
mbiamos a

o
c
o
t

# ! / bin / bash
# P r o g r a m a r e c u r s i v o p a r a b a j a r p o r t o
l de d i r e c t o r i o s
e c h o " D i r e c t o r i o a c t u a l : " pwd
f o r i i n l s ; do
# Para cada e n t r a d
t o r i o
i f t e s t d $ i ; t h e n # s i l a e n t r a d a e s de u
r i o
cd $ i
# n o s ca
e
$HOME/ b i n / p a s e o _ r e c # Llamada r e c u r s i

v a
8
9

cd . .
e l i f t e s t f $ i ; t h e n # s i no , s i e s un a r c

h i v o
10
11
12

echo " a r c h i v o : $ i "


fi
done

El problema de borrar la basura revisitado


Ahora puedes usarlo para tus nes, hacer un programa que borr
e todos los archivos que terminen
con: , aux o log. Como realmente no te interesa hacer algo con la
s entradas del directorio que no
son directorios, eliminas el trozo de cdigo de las lneas911 y en ve

z de la lnea 4 pondrs tambin


las lneas que necesitas para eliminar los archivos. El resultado
es el cdigo que se encuentra en
el listado 9.1 de la siguiente pgina se est suponiendo que el arch
ivo donde este programa se
encuentra se llama borramugres.rec.
Nota que en la lnea 14 se llama al programa borramugres.rec,
que se supone se encuentra en
el subdirectorio bin del directorio personal del usuario; as que
si cambias el nombre del programa
o su ubicacin debers modi car esa lnea para que pueda encontrarse a s
mismo.

280
Extendiendo tu ambiente
Actividad 9.12 Modi ca el programa para que pregunte si realmente de
sea borrar cada archivo
de respaldo de Emacs, (sugerencia: man rm).

Cdigo 9.1
1
2
3
4
5
6
7
8
9

Borrado recursivo de basura


# ! / bin / bash
# Programa r e c u r s i v o p a r a b o r r a r b a s u r a
#
e c h o " D i r e c t o r i o a c t u a l : " pwd
rm f . l o g
rm f . aux
rm f 
rm f . 
for i in ls
# Para cada e n t r a d a del d i r e c

t o r i o
10
11

do
i f t e s t d $ i # s i l a e n t r a d a e s de un d i r e c

t o r i o
12
13
14
15
16
17

then
cd $ i
# entra al directorio
$HOME/ b i n / b o r r a m u g r e s . r e c
cd . .
fi
done

Un grep recursivo
Ya conoces el programa grep que te permite, en particular, bu
scar presencias de una cadena
cualquiera en conjuntos de archivos. En muchas situaciones es dese
able conocer no slo en cu
les archivos de un directorio aparece la cadena, sino en cules arch
ivos de sus subdirectorios, en
cules de los subdirectorios de stos y as sucesivamente. Es simple pen
sar en una situacin as;
por ejemplo, si quisieras saber cuntos y cules de los archivos conte
nidos en un directorio o sus
subdirectorios son programas para bash podras buscar la cadena /bin/
bash en todos los archivos.
Lo que quieres es hacer un grep recursivo que busque una cade
na en todos y cada uno de los
archivos contenidos en un directorio y sus subdirectorios. Tienes
que hacer que tu grep recursivo (al
que llamaremos rgrep) busque la cadena deseada en todos los archiv
os del directorio actual y luego
proceda a la manera de paseo_rec, metindose a cada subdirectorio qu
e se encuentra y llamndose
a s mismo. Cuando la entrada del directorio sea un archivo no haces
nada, como puedes ver en el
listado 9.2 de la siguiente pgina.
Actividad 9.13 Qu signi can las opciones Hns de grep que se usan en rg

rep en la lnea 11?

9.1 Programacin en shell


281
Cdigo 9.2

grep recursivo
1
2
3

# ! / bin / bash
#
# Hace un g r e p r e c u r s i v o a mano ( e s d e c i r emul

ando
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# e g r e p r ) . Como h a c an l o s hombres de mi p o c a .
#
#
i f [ $# ne 1 ]
then
e x i t 1
fi
g r e p Hns $1
| more
for i in ls
do
i f t e s t d $ i
then
cd $ i
echo ""
e c h o " e s t o y en " pwd
$HOME/ b i n / r g r e p $1
cd . .
fi
done

Actividad 9.14 Qu signi ca la opcin


p, que ocup el lugar
del antiguo grep)?

r de grep (o mejor dicho de egre

Cambiando permisos, propietario y grupo


recursivamente
Podras utilizar tambin el esquema general de programa recursi
vo para mejorarlo, ahora ha
ciendo otra labor: la de cambiar permisos, propietario y grupo d
e todos los archivos de un directorio
y sus subdirectorios.
Quieres un programa, llamado chmogr, que reciba como parmetr
os de entrada en la lnea de
llamada:
1. los permisos,
2. el propietario y
3. el grupo,
que quieres poner a todos los archivos y subdirectorios a partir
del directorio actual.
Ya sabes usar los comandos chmod, chown y chgrp que son en
los que nos apoyaremos para
realizar nuestra labor. Pero hay algo adicional que considerar:
no es posible entrar a un subdirectorio
si ste no posee permiso de ejecucin (curioso no?). As que en tu prog
rama debes tener esto en
cuenta y asegurarte de poder entrar a todos los subdirectorios p
onindoles permiso de ejecucin.

282
Extendiendo tu ambiente
Seguramente ya has usado varias veces el comando ls con la opcin
l y habrs visto la salida
que produce. A diferencia de ls a secas, ls l despliega una lnea por
cada archivo. Si observas
esta salida, en el extremo izquierdo de cada archivo estn los permisos
de acceso del mismo. En
la seccin 3.2.1 revisamos con detalle el sistema de permisos de UNIX y
aqu vas a utilizar esta
informacin para acceder a cada subdirectorio.
1
2
3

# ! / bin / bash
#
# Programa p a r a cambiar permisos , e l p r o p i e t a r i o y e

l
4
# g r u p o de t o d o s l o s a r c h i v o s y d i r e c t o r i o
s r e c u r s i v a m e n t e
5
#
6
i f [ $# eq 3 ]
7
then
8
for i in ls
9
do
10
i f t e s t d $ i
11
then
12
chown $2 $ i
13
c h g r p $3 $ i
14
# l e ponemos p e r m i s o de e n t r a r t e m p o r a
l m e n t e
15
chmod +x $ i
16
cd $ i
17
e c h o " D i r e c t o r i o a c t u a l : " pwd
18
# OJO aqu s e pone l a r u t a c o m p l e t a a b s o l u
t a
19
# para a c c e d e r a e s t e programa
20
$HOME/ b i n / chmogr $1 $2 $3
21
cd . .
22
# l e ponemos l o s p e r m i s o s que n o s d i j e r o
n
23
chmod $1 $ i
24
e l i f t e s t f $ i
25
then
26
echo "
A r c h i v o : "$ i
27
chown $2 $ i
28
chmod $1 $ i
29
c h g r p $3 $ i
30
fi
31
done
32
else
33
e c h o "USO : $0 [ perm ] [ p r o p ] [ g r u p o ] "
34
e c h o " Cambia p e r m i s o s , p r o p i e t a r i o y g r u
p o r e c u r s i v a m e n t e "
35
e c h o " J o s + \ e+ G a l a v + \ i + , F a c u l t a d de C
i e n c i a s , UNAM. "
36
fi

9.1 Programacin en shell


283
Actividad 9.15 El programa recursivo de cambio de permisos propieta
rio y grupo fue hecho hace
mucho cuando an no existan ciertas extensiones de los comandos tradic
ionales chown, chmod
y chgrp. Cmo haras actualmente un programa con la misma funcionalidad
pero ms sencillo?
(sugerencia: man chown)

Actividad 9.16 Elabora, a partir de paseo_rec, un programa que actu


alice la fecha y hora de
cada archivo descendiendo recursivamente por los subdirectorios a p
artir de la posicin actual.
(Sugerencia: man touch).

9.1.6.

Comparando archivos

Frecuentemente posees diferentes versiones de tus archivos, por


ejemplo diferentes versiones
del mismo programa con el mismo nombre. Posiblemente, haya director
ios completos cuyos archi
vos estn duplicados o son versiones diferentes de los contenidos en
otro. En estas circunstancias
sera bueno poder saber si los archivos de un directorio son, de hech
o, diferentes de los que tienen
el mismo nombre, contenidos en otro directorio.
En UNIX existe un comando para saber si dos archivos son difere
ntes: diff. Usaremos este
comando para hacer un programa en shell que te indique cuntos y cules
archivos son diferentes
y cules no. Para poder contar necesitars poseer contadores que puedas
ir incrementando cada vez
que te percates de que un archivo es diferente de su anlogo o cada v
ez que son iguales. Para ello
puedes usar el comando let de bash que permite evaluar expresiones
aritmticas. Adems para que
te puedas percatar de la igualdad o diferencia de dos archivos nece
sitars saber cul es el resultado
entregado por diff.
diff, como casi todos los comandos ejecutables en el shell, re
gresa un valor resultado de su
ejecucin. Es posible atrapar este resultado para poder tomar la deci
sin de incrementar el contador
de archivos iguales o el de archivos diferentes. Ya antes mencionam
os la variable $? que entrega el
resultado del ltimo comando ejecutado, as que sa ser la manera de conoc
er el valor entregado
por diff. diff entrega un cero si los archivos que se le encomend co
mparar resultan ser iguales, uno
si son diferentes y dos si no se pudo efectuar la comparacin por algn
motivo. En el listado 9.3 en
la siguiente pginaa se muestra el cdigo del programa que deseas.
En las lneas 68 se establece el valor inicial de los contadores I
GUAL, DIFER y CONTADOR

que nos permiten contar archivos iguales, diferentes y el total res


pectivamente. En la lnea 23 se
pregunta si el valor entregado por diff es cero, en cuyo caso incre
mentamos el valor del contador
IGUAL en uno (lnea 25) usando let. De no ser iguales los archivos (l
o que signi ca que o bien
son diferentes o no se pudieron comparar), entonces incrementamos e
l contador DIFER y siempre
incrementamos CONTADOR, el que cuenta todos los archivos.

Actividad 9.17 Qu signi can las opciones qs de diff en la lnea 22?

284
Extendiendo tu ambiente
Cdigo 9.3

Usando el resultado que entrega diff


1
2
3

# ! / bin / bash
#
# Programa p a r a comparar t o d o s l o s l o s a r c h i v o s

# d i r e c t o r i o a c t u a l con l o s de o t r o d i r e c t

d e l
o r i o
5
6
7
8
9
10
11
12
i r e c t o
13
p e c i f i
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
s "
36

#
CONTADOR=0
DIFER=0
IGUAL=0
i f [ $# ne 1 ]
then
e c h o " u s o : $0 < d i r e c t o r i o >"
e c h o " Se comparan uno a uno l o s a r c h i v o s d e l d
r i o "
e c h o " a c t u a l con l o s d e l d i r e c t o r i o e s
c a d o "
else
e c h o " Comparando l o s a r c h i v o s en pwd "
e c h o " con l o s de $1 . . . "
echo ""
for i in ls
do
i f [ f $ i ]
then
d i f f q s $ i $ 1 / $ i
i f [ $? eq 0 ]
then
l e t IGUAL=IGUAL+1
else
l e t DIFER=DIFER+1
fi
l e t CONTADOR=CONTADOR+1
fi
done
echo ""
e c h o "$CONTADOR a r c h i v o s c o m p a r a d o s "
e c h o "$IGUAL i g u a l e s "
e c h o "$DIFER d i f e r e n t e s o i n c o m p a r a b l e
fi
Actividad 9.18 Qu recibe como parmetro de entrada el programa?

Actividad 9.19 Qu ocurre con el programa cuando hay un archivo en el


directorio actual que
no existe en el otro directorio?

9.1 Programacin en shell


285
Actividad 9.20 Modi ca el programa para que, en caso de que los archi
vos sean diferentes diga
cul es ms reciente (sugerencia: man test).

9.1.7.

Otra vez el problema de borrar la basura

Has hecho ya un programa recursivo basado en paseo_rec que elim


ina archivos innecesarios
a partir de un directorio dado. Pero ahora tienes muchos ms elemento
s para poder hacer una nueva
versin, mejorada, del programa. Es de notar que el problema esencial
del programa es la manera de
encontrar los archivos intiles; esto lo haces con el descenso recurs
ivo por el rbol de directorios,
pero hay otra manera de hacerlo sin necesidad de descender por todo
el rbol a pie. Existe un
programa que se encarga de encontrar archivos que cumplan con ciert
as caractersticas. nd nos
permite encontrar archivos con caractersticas comunes, localizados a
partir de cierta ruta espec ca
(es decir, a partir de cierto directorio); tambin se le dice a nd qu h
acer cada vez que se encuentre
algn archivo que cumpla con las caractersticas especi cadas, por ejempl
o, desplegar el nombre
del archivo. Si nd te puede regresar un conjunto de archivos tales q
ue su nombre cumpla con
la caracterstica de terminar con , por ejemplo, estars en el camino co
rrecto. Bastara entonces
borrar cada archivo de ese conjunto para eliminar los respaldos de
Emacs, por ejemplo.
El siguiente programa automatiza el proceso de borrar la basura
y adems genera un informe
detallado de su actividad, registrndola en un archivo de tu director
io personal. Es de notar que, a
diferencia de la versin anterior que borraba basura, este programa n
o borra la basura a partir del
directorio actual, sino que lo hace a partir de tu directorio $HOME
. En este programa se hace uso
de nd de la siguiente forma:
% /usr/bin/ nd . name "core" print
Los parmetros con los cules est siendo ejecutado signi can:
. El primer parmetro de nd es . (punto), busca a partir del directori
o actual, previamente el
programa se cambia al directorio del usuario.
name Encuentra archivos cuyo nombre coincida con el patrn que se es
tablece a continuacin. Es
posible tambin establecer condiciones que no tengan que ver con
el nombre del archivo sino
con otras caractersticas, por ejemplo su fecha de ltimo acceso, l
o que permitira eliminar

archivos viejos.
core Archivos que se llamen core en este ejemplo; en otros casos de e
ste mismo programa se
buscan aquellos que cumplan con el patrn *, por ejemplo, lo que s
igni ca los que terminan
con tilde (respaldos de Emacs).
print Este ltimo parmetro le indica a nd qu hacer con el archivo que e
ncuentre; en este
caso print signi ca imprime su nombre.

286
Extendiendo tu ambiente
Cdigo 9.4

Borrado de archivos usando


(1/2)
1
2
3

nd

# ! / bin / bash
#
# Programa p a r a b o r r a r l a b a s u r a d e l d i r e c
r i o d e l u s u a r i o
4 #
5 cd $HOME
6 e c h o " L i m p i a n d o pwd . . . "
7 FECHA= d a t e + %d %m%y
8 echo date
9 rm r f I n f o r m e .
10 e c h o " S a l v a n d o e s t a d o a c t u a l de e s p a c
o c u p a d o . . . "
11 e c h o " A r c h i v o : I n f o r m e . $FECHA"
12 / u s r / b i n / du k s . > " I n f o r m e . $FECHA"
13 / u s r / b i n / du k s .
14 e c h o " B o r r a d o c a c h e de N e t s c a p e y T r a s
>> I n f o r m e . $FECHA
15 e c h o " L i m p i a n d o c a c h e de n e t s c a p e . . .
16 rm r f $HOME / . n e t s c a p e / c a c h e
17 mkdir
$HOME / . n e t s c a p e / c a c h e
18 e c h o " L i m p i a n d o e l b o t e de b a s u r a . . . "
19 rm r f $HOME/ D e s k t o p / T r a s h
20 mkdir
$HOME/ D e s k t o p / T r a s h
21 e c h o "ARCHIVOS BORRADOS">> I n f o r m e . $FECHA
22 # cores
23 echo " Borrando c o r e s . . . "
24 f o r i i n / u s r / b i n / f i n d . name " c o r e " p
25 do
26
rm f $ i
27
e c h o $ i >> $HOME/ I n f o r m e . $FECHA
28 done
29 # r e s p a l d o s de Emacs
30 e c h o " B o r r a n d o r e s p a l d o s de Emacs . . . "
31 f o r i i n / u s r / b i n / f i n d . name "  " p r i
32 do
33
rm f $ i
34
e c h o $ i >> $HOME/ I n f o r m e . $FECHA
35 done
36 f o r i i n / u s r / b i n / f i n d . name " .  " p r
37 do
38
rm f $ i
39
e c h o $ i >> $HOME/ I n f o r m e . $FECHA
40 done

t o

i o

h "
"

r i n t

n t

i n t

9.1 Programacin en shell


287
Cdigo 9.4

Borrado de archivos usando


(2/2)
41

nd

# a r c h i v o s a u x i l i a r e s y de b i t c o r a de TeX

y LaTeX
42
e c h o " B o r r a n d o
e TeX y LaTeX . . . "
43
f o r i i n / u s r / b
t
44
do
45
rm f $ i
46
e c h o $ i >> $HOME/
47
done
48
f o r i i n / u s r / b
49
do
50
rm f $ i
51
e c h o $ i >> $HOME/
52
done
53
e c h o " S a l v a n d o
e s p a c i o o c u p a d o . . . "
54
e c h o " E s p a c i o a
HA
55
/ u s r / b i n / du k s
56
/ u s r / b i n / du k s
57
e c h o " E l d i r e c t
o . "
58
echo ""

a r c h i v o s a u x i l i a r e s d
i n / f i n d . name "

. l o g " p r i n

I n f o r m e . $FECHA
i n / f i n d . name "

. aux " p r i n t

I n f o r m e . $FECHA
e l nuevo e s t a d o a c t u a l de
c t u a l :" > > I n f o r m e . $FEC
. >> " I n f o r m e . $FECHA"
.
o r i o pwd ha s i d o l i m p i a d

Este programa entrega una lista de tu espacio ocupado antes


y despus de la limpieza, y una
lista de los archivos eliminados. El nombre de dicho archivo tie
ne el pre jo Informe y su nombre se
construye en las lneas 9 y 14. Tambin elimina los directorios de c
ache de Netscape y de depsito
de basura Trash del ambiente de trabajo.
Actividad 9.21 Cul es el su jo del nombre del archivo de informe que
genera el programa?
Cmo se obtiene dicho su jo?
Actividad 9.22 Modi ca el programa para que te pregunte si deseas
borrar cada archivo encon
trado (Sugerencia: man rm).
Adicionalmente, este programa (la versin original, no la obte
nida en el segundo ejercicio) pue
de ser ejecutado a una hora determinada en das determinados usand
o el comando crontab. Para
usarlo primero debes hacer lo siguiente, tanto en tu terminal ac
tual como en tu archivo /.bashrc:
hay que hacer que el editor de crontab por omisin sea nuestro con
ocido Emacs. As que en
/.bashrc tienes que aadir las lneas:
EDITOR = / u s r / b i n / emacs
e x p o r t EDITOR
y por lo pronto lo pones en tu shell actual.

Ahora puedes teclear:


% crontab e
Eso te pondr en Emacs listo para editar tu tabla de trabajos
a ejecutarse automticamente
por el sistema en tiempos determinados. Teclea lo siguiente con
los cambios pertinentes (en vez

288
Extendiendo tu ambiente
de /home/jose debe aparecer tu directorio personal, en vez de borramugres
debe aparecer el
nombre que le hayas dado al programa para borra basura y en vez de la dir
eccin de correo jo
se@pateame.fciencias.unam.mx debe aparecer la direccin de tu correo).
#
#
B o r r a d o de b a s u r a
#
#
# Se e f e c t a t o d o s l o s v i e r n e s a l a s 2 : 3 0 AM
#
30 02
6 ( / home / j o s e / b i n / b o r r a m u g r e s ) | / b i n
/ m a i l s
b o r r a m u g r e s j o s e @ p a t e a m e . f c i e n c i a s . u
nam . mx > / dev / n u l l 2>&1
#
Nota: A pesar de que se muestran dos lneas sin # en realidad es slo una
; si aparecen dos es
slo para mejorar la presentacin.
Esta lnea de crontab hace lo siguiente:
1. Ejecuta el comando entre parntesis, es decir nuestro programa que bor
ra basura.
2. La salida del programa, lo que ste escriba en la pantalla, se pasa a
mail con tema borramugres
y direccin de envo jose@pateame.fciencias.unam.mx. El resto de la lnea
es para redi
reccionar la salida estndar de errores a la salida estndar y a su vez
sta es enviada a /dev/null
(lo que equivale a tirarla a la basura).
Conviene ahora leer el manual de crontab para entender los primeros c
inco campos de la lnea,
que esencialmente indican cundo deber ejecutarse el resto de la lnea; en est
e caso todos los
viernes (da 6) a los 30 minutos despus de las 02 horas cualquier da (*) de c
ualquier mes (*).
Slo por no dejar
Hay una opcin ms para hacer el programa de eliminacin de basura. Como ya
se dijo antes,
el ltimo parmetro de entrada de nd es lo que tiene que hacer cada vez que se
encuentra un
archivo que cumple con las condiciones buscadas. Es posible decirle a nd q
ue, de hecho, ejecute
otro comando y pasarle a dicho comando el nombre del archivo encontrado p
or nd; eso hace que
puedas quitar los ciclos for que aparecen en el programa y que procesan l
a salida de nd. Esto lo
haras reemplazando todo el ciclo por una instruccin como la siguiente:
% /usr/bin/ nd . name "core" exec rm f {} ;
El signi cado de esta lnea hasta antes de exec es el que ya se ha expl
icado. exec le indica a
nd que ejecute un comando, en este caso rm. En el momento en que nd ha enco
ntrado un archivo
que cumple con la condicin, guarda el nombre del archivo encontrado para q
ue pueda ser pasado

como parmetro del comando que se ejecutar. Para hacer referencia a ese arch
ivo encontrado se
utiliza {}. Por ltimo, para avisarle al programa ejecutado por nd (rm en es
te caso) que se han
terminado los parmetros que le son pasados para su ejecucin, se pone un ; ent
re comilla simple
(para que el shell no crea que se trata de un terminador de instruccin). E
n sntesis, el signi cado
de la lnea mostrada es: nd busca a partir del directorio actual (.) archivo
s cuyo nombre ( name)
cumpla con la condicin de ser core; una vez que se encuentra uno de sos ord
ena la ejecucin

9.2 Emacs
289
( exec) de rm diciendo: rm f {} ; borra (rm), sin preguntar ( f) el
archivo que encontr ({}) y nada
ms. Nota que todo lo que est despus del exec es lo que nd le dice a rm
.
9.1.8.

Para saber ms

bash es producto de la Free Software Foundation y puedes encontrar


informacin adicional acerca
de la programacin en este shell en: http://www.gnu.org.
Tambin hay un tutorial de programacin en bash accesible como document
o HOWTO en el Linux
Documentation Project: http://www.linuxdoc.org.
9.2. Emacs
9.2.1.

La madre de todos los lenguajes

A pesar de que Emacs es el editor de texto con mayor funcionali


dad que ha existido en la historia
de la computacin, es increble incluso un poco loco que sus usuarios i
nviertan tanto tiempo en
extender Emacs. Sin embargo, lo hacemos. En esta seccin te mostramos
por qu, para qu y cmo
se hace.
Para nosotros, programadores o aprendices de, el editor de text
o es una herramienta, til para
crear ms software. Haciendo un smil, podemos pensar en el editor de t
exto como un martillo para
un carpintero o una llave espaola para un mecnico, como algo til para
resolver la tarea en puerta.
Entonces, por qu Emacs es diferente?
La respuesta es que el carpintero y el mecnico modi caran sus herra
mientas para hacerlas
mejores, si tan slo supieran cmo. Quin sabe mejor que ellos mismos lo q
ue necesitan? Pero ellos
no son herreros y no pueden modi carlas. Por otro lado, Emacs es un t
ipo de herramienta especial:
es software, lo que signi ca que la herramienta est hecha de la misma
cosa que los usuarios de
Emacs hacen con Emacs. Por lo tanto, t, nosotros y todos los usuario
s/programadores de Emacs en
el mundo estamos en la feliz posicin de ser los herreros (diseadores
sera un mejor trmino) de
nuestra herramienta principal.
Damos por hecho que conoces algn lenguaje de programacin de alto
nivel, aunque no es nece
sario que manejes un lenguaje de la familia de Lisp. Desarrollaremo
s varios ejercicios de programa
cin con ejemplos reales y que te sern de utilidad. Es de esperarse ta
mbin que ests familiarizado
con la terminologa de Emacs; en caso contrario puedes leer la seccin
llamada Emacs en todos los
captulos anteriores de este libro.
Emacs Lisp es un lenguaje de programacin muy grande y no tenemos

el tiempo su ciente pa
ra mostrar todas sus construcciones, pero intentaremos mostrarte su c
iente como para que puedas
manejar cmodamente variables (creacin, asignacin, bsqueda, etc.), keyma
ps, comandos inter
activos, buffers y ventanas.
Por conveniencia, a lo largo de estas prcticas nos referiremos a
Emacs Lisp, como elisp. Tam
bin hablaremos del lenguaje de programacin LISP (LISt Processing) y e
n general no haremos

290
Extendiendo tu ambiente
distincin entre este ltimo y elisp: para propsitos de este material, habl
aremos indistintamente de
LISP o Emacs Lisp como elisp o simplemente LISP.
9.2.2.

LISP en 15 minutos

LISP maneja listas (y listas de listas) y stas se presentan entre p


arntesis. Muchas veces en
contrars las listas precedidas por un apstrofo (). Las listas son la part
e medular de LISP.
Listas en elisp
En elisp una lista luce como (rosa violeta clavel azucena). Esta l
ista est precedida por
un apstrofo. Los elementos de la lista son nombres de distintas ores, se
parados entre s por un
espacio en blanco, aunque cabe aclarar que el nmero de blancos (espacio
s en blanco, tabuladores
o nuevas lneas) no es relevante.
Las listas tambin pueden tener nmeros dentro, por ejemplo (+ 2 2),
que tiene al smbolo +
y al nmero 2, dos veces.
En elisp, tanto los datos como los programas se representan de la
misma forma, esto es, son
listas de smbolos, nmeros o bien otras listas, separadas por blancos y r
odeadas por parntesis
(dado que los programas lucen como datos, pueden pasarse a otros progr
amas; esto signi ca que los
programas en elisp tambin son elementos de primera clase y esto constit
uye una gran herramienta
de elisp).
tomos en elisp
En elisp, a los elementos o palabras que hemos usado en nuestras
listas arriba, los llamamos
tomos. Los tomos, desde el punto de vista de elisp, son unidades indivis
ibles, al igual que los
nmeros y carcteres como +. Por el contrario, las listas, como veremos ms ad
elante, s pueden
ser divididas (seccin 9.6).
Ya dijimos que una lista puede tener tomos, nmeros y otras listas,
pero hay un caso particular
y es la lista que no tiene nada, y que gr camente luce as: ( ); se llama l
a lista vaca, tambin
representada por nil. Esta lista vaca tiene la facultad de ser una list
a y un smbolo al mismo tiempo.
La representacin escrita de listas y tomos se conoce como expresin s
imblicas (symbolic
expression), o bien s expression. Aclaramos que la representacin escrit
a no tiene nada que ver con
la forma interna de las expresiones.
En elisp siempre trabajamos con tomos y listas, pero usualmente a
los programadores les gusta
hablar en trminos ms precisos de los tomos que usan. As, tenemos varios ti

pos de tomos: n
meros, por ejemplo 13, 295 o 1763; y smbolos tales como +, foo, forward line
etc.; todos los
nombres que hemos usado en las listas de ejemplo, aqu arriba, tambin son
smbolos. Adicional
mente, cualquier texto entrecomillado, incluyendo oraciones o prrafos c
ompletos, es un smbolo.
Por ejemplo:
( esta l i s t a incluye " texto entre comillas dobles . " )

9.2 Emacs
291
es una lista que tiene cuatro smbolos. En elisp todo el texto entre c
omillas, incluyendo el signo de
puntuacin y los blancos, es un tomo. Este tipo particular de tomo se co
noce como cadena y es el
tipo de tomos que se utiliza para comunicar mensajes que un humano pu
ede leer. Las cadenas son
un tipo distinto de tomo a los nmeros y smbolos y no slo por su forma, s
ino tambin por su uso.
Dado que los blancos en una lista no importan, las siguientes s
on representaciones de la misma
lista:
( esta l i s t a
luce asi )
( esta l i s t a luce asi )
( esta
lista
luce
asi )
Por extrao que parezca, hemos cubierto con estos breves ejemplos c
asi todo lo que podemos
ver en elisp! Todo lo dems son combinaciones de lo anterior, aunque p
osiblemente usando listas
ms largas y anidadas, pero ningn concepto nuevo. Hay muchas construcci
ones esotricas en elisp
que utilizan otro tipo de tomos, pero no son comunes y podemos avanza
r mucho sin conocerlas.
En resumen, no debes olvidar que: una lista va entre parntesis, u
na cadena entre comillas
dobles, un smbolo luce como una palabra (o secuencia de ellas, unidas
por algn carcter no blanco)
y un nmero luce como un nmero.
Emacs te ayuda a dar formato a cdigo en elisp
Si tecleas una expresin de elisp en Emacs usando ya sea el modo
de elisp Interaction, o Emacs
LISP Mode, entonces Emacs te proveer con su cientes comandos para que l
a expresin sea f
cilmente legible. Por ejemplo, presionando TAB automticamente indenta
r la expresin en el
rengln actual usando el nmero adecuado de espacios.
Adems, cuando tecleas un parntesis que cierra, Emacs momentneament
e saltar al parn
tesis correspondiente que abre, de forma tal que t puedes siempre ver
cul es y detectar errores
rpidamente.
Nota: El modo mayor elisp Interaction es el modo en que por omi
sin se encuentra el buffer
*scratch*, que casualmente es el nico buffer que existe cuando inicia
s Emacs.
Ejecucin de programas
Una lista en elisp es un programa listo para ser ejecutado. Si l

o ejecutas (evalas en el cal de


elisp) har una de tres posibles cosas: nada, excepto regresar la list
a misma; mandarte un mensaje
de error o tratar el primer smbolo en la lista como un comando para h
acer algo.
El apstrofo sencillo que aparece en algunas de las listas de ejem
plo en la seccin anterior se
llama quote (es una funcin). Cuando precede a una lista, le dice a el
isp que no haga nada con ella
excepto tomarla tal y como est escrita. En cambio, si no aparece un a
pstrofo delante de la lista,

292
Extendiendo tu ambiente
entonces elisp interpreta el primer elemento en la lista como un comando
que tiene que obedecer.
En elisp estos comandos se llaman funciones. La lista (+ 2 2) arriba no t
ena un apstrofo, por lo
que elisp entiende el + como una funcin que hace algo con el resto de los
elementos en la lista, en
este caso, sumar los elementos en la lista.
Actividad 9.23 Teclea (+ 2 2) en el buffer *scratch*, pon el cursor justo
despus del parntesis
que cierra y luego teclea C x C e .
Lo que acabas de hacer se conoce como evaluar la lista.
Actividad 9.24 Ahora haz lo mismo, pero con una lista que est precedida co
n un apstrofo, por
ejemplo, ( que bonito ) . Qu pasa?
Cuando una lista est precedida por un apstrofo, entonces el intrprete d
e elisp no interpreta
la lista, la lee de manera textual. Nos referiremos a este tipo de listas
como listas textuales, citadas,
inmutables o constantes.
Mensajes de error
A continuacin te pediremos que evales una expresin que har que el intrpret
e de elisp
marque un error. Lo hacemos por varias razones: la primera y ms importante
, para mostrarte que
no pasa nada malo, es una actividad inofensiva; haremos esto varias veces
a lo largo de la seccin. La
segunda razn es para que te acostumbres al lenguaje y la forma de los mens
ajes de error, ya que una
vez que los entiendas te dars cuenta que son muy informativos. Puedes pens
ar en estos mensajes de
error como sealizacin para el viajero de las carreteras de elisp: son crptic
os al principio (como
casi cualquier otro tipo de sealizacin), pero una vez que los entiendes, te
llevan de la mano a tu
destino nal.
Lo que haremos, y ese es tu siguiente ejercicio, ser evaluar una lista
que no est citada y que
no tiene un nombre de funcin como su primer elemento. Hazlo:
Actividad 9.25 Evala la siguiente lista: ( esta lista marca un error ) .
Despus de hacer eso, debiste recibir el mensaje: Symbols function de nition i
s void: esta,
cierto? Dado que este tipo de mensajes es muy frecuente, a continuacin te p
resentamos una ex
plicacin, aunque ya debes tener una buena idea de lo que el mensaje signi ca
.
Sabemos que el problema fue ocasionado por el smbolo esta; tambin se me
nciona la pala
bra function, una palabra muy importante. Para efectos prcticos, valga la
siguiente de nicin de

funcin: un conjunto de instrucciones para la computadora que le indican lo


que debe hacer. En
realidad, el smbolo le dice a la computadora dnde encontrar las instruccion
es a ejecutar.
Ahora s, estamos en posicin de entender en su totalidad el mensaje de e
rror: el smbolo esta
no contiene la de nicin de conjunto alguno de instrucciones para la computad
ora.
La extraa frase Symbols function de nition is void tiene que ver con la f
orma en que Emacs
est implementado, ya que cuando un smbolo no tiene un conjunto de instrucci
ones asociado, el
lugar donde tal conjunto (de existir) debera estar, es ocupado por la func
in void, que no hace nada.

9.2 Emacs
293
Por otro lado, dado que s pudimos sumar 2 y 2 evaluando (+ 2 2)
, podemos inferir que el
smbolo + debe tener un conjunto de instrucciones que la computadora o
bedece; esta instruccin
suman los dos nmeros.
Finalmente, debes saber que los smbolos tambin se usan para nombr
ar variables o funciones.
Esto no quiere decir que el smbolo, por ejemplo +, sea la funcin, sino
simplemente una referencia
al lugar donde estn las instrucciones que hacen a la funcin. Su papel
es similar al de los nombres
que tenemos las personas, nuestro amigo Juan Prez, puede ser referido
como Juan, pero no es las
letras J, u, a, n. De la misma manera, las instrucciones que le dice
n a la computadora que sume una
lista de nmeros (y cmo hacerlo) no son +.
Ms an, elisp nos permite poner varios nombres a un mismo conjunto
de instrucciones. Para
sumar dos nmeros podramos hacer que un nuevo nombre, digamos suma, hag
a referencia a las
mismas instrucciones que +.
El intrprete de elisp
Ya debes tener una buena idea de qu hace el intrprete de elisp cua
ndo encuentra una lista: si es
inmutable, regresa la lista; si el primer elemento es un smbolo, busc
a su conjunto de instrucciones
asociado y los ejecuta usando el resto de los elementos de la lista
como parmetros; si el conjunto
de instrucciones asociado es void, marca un error. Muy sencillo, no?
Sin embargo, hay varias
complicaciones que necesitas entender para seguir aprendiendo elisp
y comenzar a programar:
Adems de listas, elisp puede interpretar tambin smbolos (sin parnte
sis alrededor y sin
quote), en cuyo caso el intrprete intentar determinar el valor de
l smbolo como variable.
Regresaremos a esto ms tarde.
Algunas funciones no trabajan igual que la evaluacin de listas.
Se llaman formas especiales
y se usan para cosas muy particulares, como de nir funciones. No
hay muchas y las iremos
revisando conforme avancemos.
Si lo que el intrprete est tratando de evaluar no es una forma es
pecial, y s es parte de una
lista, el intrprete revisa si la lista tiene otra lista adentro.
Si hay una lista adentro, primero ve
qu debe hacer con ella y si a su vez tiene otra lista adentro, p
rimero hace sa y as sucesi
vamente. Una vez que concluye su trabajo (de evaluacin) con las
listas internas, hace lo que
tiene que hacer con la lista actual.

En cualquier otro caso, el intrprete va evaluando de izquierda a


derecha y de expresin en
expresin.
La ltima de las complicaciones listadas arriba es la ms interesant
e de todas y la ms abstracta
tambin. Por qu evala de adentro hacia afuera? La respuesta tiene dos par
tes: primero debes saber
que toda evaluacin en elisp regresa un valor (o bien termina en error
); lo segundo que te interesa
saber es que el valor lo regresa al punto de llamada. Entonces, las
expresiones ms externas esperan,
por decirlo de alguna forma, a los valores que regresan las expresio
nes anidadas para usarlos. Por
ejemplo, veamos que sucede cuando evaluamos (+ 2 (+ 3 4)) ; hazlo: e
vala esa expresin.

294
Extendiendo tu ambiente
Vers 9 aparecer en el rea de eco. Y eso slo puede suceder si primero se
evala (+ 3 4) a 7,
y ese valor es visto y usado por la otra aplicacin de +, como si en realid
ad estuvieras evaluando:
(+ 2 7) .
Ahora ests en posicin de saber que C x C e evala el comando eval last se
xp4

Actividad 9.26 Evala la expresin (+ 2 (+ 3 4)) , en distintas partes de la


misma. Por ejemplo,
pon el cursor al nal y evala (debes obtener 9 otra vez); coloca el cursor s
obre el ltimo parntesis
o detrs del parntesis que cierra (+ 3 4) y atrs de un nmero, etc. Qu pasa?
s
explicar por qu pasa eso?
Variables
En elisp un smbolo puede tener un valor asociado a l, al igual que una
funcin, como ya
vimos. Nota que son cosas distintas: una funcin es un conjunto de instrucc
iones, mientras que un
valor es algo, como un nmero o un nombre que puede cambiar; de este hecho
se desprende el
nombre variable, que es el nombre con el que conocemos a los smbolos que r
epresentan un valor.
Algo muy importante es que un smbolo puede tener tanto un valor como
una funcin asocia
dos. Puedes pensar en un smbolo como una cajonera, en una cajn se guarda el
valor y en otro
las instrucciones que conforman la funcin. Entonces puedes cambiar el cont
enido de uno de los
cajones sin perturbar al otro.
Por ejemplo, ll column es una variable que existe en todos los buffer
s de Emacs. Para saber su
valor puedes evaluarla y vers que su valor es usualmente 70 o 72.
En el cal de elisp, decimos que una variable es o est ligada a un valo
r: un nmero, como 70,
una cadena "como esta" o a una lista (como esta otra ) . Incluso podemos
enlazar una variable a la
de nicin de una funcin.
Otra forma muy comn de evaluacin es M : (eval expression). Esta funcin
viene desac
tivada por omisin, as que la primera vez que la ejecutes, en lugar de un pr
ompt del estilo Eval:
en el rea de eco, Emacs te har preguntas que te permiten decidir qu hacer: a
ctivar el comando
slo por esta ocasin, pero dejarlo desactivado; activarlo (permanentemente);
o no hacer nada. Se
considera un comando peligroso para novatos en Emacs, pero t ya no eres un
novato.
Recapitulando, ahora sabes que una opcin para evaluar, que hemos usad
o mucho, es poner la
expresin en un buffer de Emacs, poner el cursor al nal de la expresin y lueg
o ejecutar C x C e .
Ahora tienes otra opcin: M : y despus del prompt Eval: escribir la expresin
y presionar Enter .

Actividad 9.27 Prueba evaluar algunos de los ejemplos que hemos revisado
hasta el momento
usando M : . Nota los aspectos buenos y malos de ambos enfoques. Tener la
s dos formas es muy
til y dependiendo del contexto puedes escoger la que ms te convenga.
Notaste que en la evaluacin de ll column no usaste parntesis? Prueba eva
luar
( ll column), por qu marca un error?
4
El sexp abrevia symbolic expression y se lee sex pee. En espaol es poco
usual llamarle evaluacin
de expresiones simblicas a la accin de eval last sexp y nos referimos a dich
a accin simplemente como
evaluacin.

9.2 Emacs
295
Ahora pon el cursor en el espacio en blanco despus del smbolo +, e
n la expresin (+ 2 2) ,
y evala. Qu error marca? Es igual a los errores anteriores? Si no son ig
uales, cul es la
diferencia entre ellos? Explica.
Argumentos y tipos de argumentos
Para redondear la discusin sobre evaluacin en elisp, tambin tenemos
que hablar de la forma
en que el intrprete reconoce y pasa los operandos a las funciones. Ve
rbigracia, en nuestro ejemplo
favorito, (+ 2 2) , el intrprete regresa 4 y decimos que los dos nmero
s (ambos 2) que siguen al
+ son los argumentos de la funcin. Ellos constituyen la informacin que
el intrprete pasa a la
funcin.
En elisp, los argumentos son los smbolos o listas que siguen al n
ombre de la funcin. Distintas
funciones requieren distintos nmeros de argumentos: algunas no recibe
n ningn argumento y otras
reciben un nmero variable de argumentos.
De qu tipo debe ser el argumento que pasamos a una funcin? Depende
del tipo de informa
cin que requiera la funcin para llevar a cabo sus acciones. +, por eje
mplo, slo recibe nmeros
(o carcteres!), mientras que concat, por mencionar otra funcin, recibe
cadenas. Por ejemplo, si
evaluamos
( c o n c a t " abc " " def " )
obtendremos "abcdef", es decir concat concatena todos sus argumentos
(cadenas) en una sola cade
na.
Una funcin como substring recibe tanto una cadena como nmeros. Lo
que hace es regresar
una subcadena del primer argumento (cadena). Por ejemplo,
( s u b s t r i n g " que b o n i t o e s Emacs e l i s p " 14
1 9 )
regresa "Emacs". El primer argumento, como puedes notar, es una cade
na; el segundo es la posi
cin (dentro de esa cadena, empezando a contar desde 0) desde donde se
r tomada la subcadena
resultado; el segundo nmero (tercer argumento) es la posicin a la dere
cha donde debe terminar la
subcadena.
Los valores que regresan las funciones en elisp tambin pueden ser
usados como argumentos.
Actividad 9.28 Evala las siguientes expresiones y explica cada uno de
los resultados. Si no en
tiendes algn resultado, evala las subexpresiones hasta que encuentres
cul es el truco.
( + 2 f i l l column )

( c o n c a t "wow , veo
d o s g a t i t o s . " )
( c o n c a t "wow , veo

" ( + 2 f i l l column ) " l i n

" ( numbert o s t r i n g ( + 2 f

i l l column ) )
" lindos gatitos .")
(+)
( )

296
Extendiendo tu ambiente
(+ 1 2 3 4 5)
( + 1 (
1 2 ) 4 ( + 2 f i l l column ) (
1 2 10))
(+ 2 h o l a )
Qu hace la funcin number to string? Qu tipo de argumentos recibe y cuntos?
La funcin message
Al igual que la funcin +, message recibe un nmero variable de argumento
s. Se usa para
enviar mensajes al usuario y es tan til que incluso tiene su propia seccin.
Con esta funcin se consigue que un mensaje se despliegue en el rea de e
co. Por ejemplo,
puedes desplegar un mensaje evaluando lo siguiente:
( m e s s a g e " E s t o e s un b o n i t o m e n s a j e de p r u e b
a " )
Nota que el mensaje aparece en el rea de eco incluso con las comillas.
Eso sucede porque
se es el valor regresado por la funcin message. Usualmente, cuando t usas me
ssage en tus
programas, esto no suceder y el texto que vers se imprimir como un efecto se
cundario, sin las
comillas.
Sin embargo, si hay un %s en el argumento entrecomillado de message,
no imprimir un %s
en el rea de eco, sino que buscar un argumento despus del argumento entrecom
illado, lo evaluar
y pondr su valor en la posicin del %s en la cadena. Por ejemplo,
( m e s s a g e " E l nombre de e s t e b u f f e r e s : %s " ( b u f f
e r name ) )
scratch " al ser evaluad
imprimir algo como: "El nombre de este buffer es :
a, suponiendo que s
ests en un buffer llamado *scratch* cuando ejecutamos esto, s estbamos en un
o llamado as .
Si lo que quieres es imprimir un nmero en notacin decimal, entonces cam
bia el %s por un %d,
como por ejemplo:
( m e s s a g e " E l v a l o r de f i l l column e s : %d " f i l l colum
n )
Si hay ms de un %s en la cadena entre comillas, entonces el primer arg
umento que siga a la
cadena ser puesto en el lugar del primer %s, el segundo argumento sustitui
r al segundo %s, y as
sucesivamente. Por ejemplo:
( m e s s a g e " Hay %d % s en e l l a b o r a t o r i o "
( f i l l column 1 5 ) " e l e f a n t e s r o s a s " )
imprimir "Hay 55 elefantes rosas en el laboratorio ".
Lo valioso de message es que si lo usas con formato ( %), le puedes p
edir que evale funciones
al momento de evaluarse ella misma.
Asignar valores a una variable
Hay varias formas por medio de las cuales podemos darle un valor a un
a variable. Aqu veremos
setq. Ms adelante hablaremos de let. En elisp decimos que estamos ligando
una variable a un

valor.

9.2 Emacs
297
En esta seccin veremos cmo funciona setq 5 y cmo se pasan los ar
gumentos.
setq
Para asignarle a la variable ores la lista ( rosa violeta clavel a
zucena) puedes evaluar la si
guiente expresin:
( setq flores
( rosa v i o l e t a c l a v e l azuce
na ) )
Vers la lista ( rosa violeta clavel azucena) aparecer en el rea de eco
. Esta lista es el valor de
regreso de la funcin y, como efecto secundario, la variable (el smbolo
) ores est ahora ligado a
la lista. Es decir, que despus de evaluar la expresin de arriba puedes
evaluar el smbolo y vers la
lista aparecer en el rea de eco.
Con setq tambin podemos asignar valores a varias variables al mi
smo tiempo. Por ejemplo,
para asignar una lista de ores a la variable ores y una lista de anima
les a la variable animales,
podemos hacer:
( setq f l o r e s ( rosa v i o l e t a c l a v e l az
ucena )
a n i m a l e s ( l e n s a p o o s o p e r r o
) )
Nota que la expresin bien podra ir toda en una lnea, pero tal vez n
o hubiese cabido en la pgina
y adems los humanos podemos leer con mayor facilidad listas con un fo
rmato ms agradable.
A pesar de que hemos usado hasta el momento el trmino ligar, hay
otra forma de referirnos al
trabajo que realiza setq y es decir que setq hace que el smbolo apunt
e a la lista. Esto tambin se
llama referencia y es muy comn, as que a partir de este momento nos re
feriremos a este tipo de
asignaciones as.
Contador
En esta seccin construiremos un contador (muy sencillo) que usa s
etq. Dicho contador puede
ser usado para contar cuntas veces se repite una cierta parte de tu p
rograma. Primero necesitamos
inicializar una variable a cero; luego aadir uno a esa variable cada
vez que se repita esa parte en el
programa. Para hacer esto, necesitas una variable que sirva de conta
dor y dos expresiones: un setq
que asigne cero al contador; una segunda expresin setq que incremente
el contador cada vez que
es evaluado.
( setq contador 0)
i c i a l i z a c i n

; I n

( s e t q c o n t a d o r (+ c o n t a d o r 1 ) )

; Incr

emento
contador
El texto que sigue a un carcter ; y hasta el n de lnea, es un comen
tario que es ignorado por el
intrprete de elisp.
5
setq en realidad es una abreviatura de la combinacin de las fu
nciones set y quote.

298
Extendiendo tu ambiente
Si evalas la primera de estas expresiones, la inicializacin, y luego
evalas la tercer expresin,
el contador, el nmero 0 aparecer en el rea de eco. Si evalas entonces la s
egunda expresin, el
incremento, el contador aumentar en 1 su valor; as, si evalas nuevamente
la tercera expresin,
entonces vers el nmero 1 aparecer en el rea de eco. Cada vez que evales la
segunda expresin,
el valor de contador aumentar en 1.

Actividad 9.29 Evala varias veces la segunda y tercera expresiones de m


anera alternada; des
pus explica con detalle cmo evala la segunda expresin el intrprete de elisp
.

9.2.3.

Resumen

Aprender elisp es como escalar una montaa en la que la primera part


e es la ms difcil. T ya
subiste esa parte, as que lo que sigue se ir haciendo ms sencillo conform
e avancemos.
En resumen:
Los programas en elisp estn formados por expresiones, que son list
as o tomos.
Las listas estn formadas por cero o ms tomos y listas interiores, se
paradas por espacios en
blanco y rodeadas por parntesis. Una lista puede ser vaca.
Los tomos son smbolos (palabras) como forwardparagraph, smbolos de un
slo carcter
como +, cadenas de carcteres o nmeros.
Un nmero se evala a s mismo.
Una cadena tambin se evala a s misma.
Cuando evalas un smbolo, regresa su valor.
Cuando evalas una lista, el intrprete de elisp checa el primer smbol
o en la lista y luego a la
funcin ligada a ese smbolo, luego las instrucciones en la funcin son
ejecutadas.
Un slo apstrofo le indica al intrprete que debe regresar la siguient
e expresin tal y como
est escrita y no evaluarla.
Los argumentos son la informacin pasada a una funcin. Los argumento
s de una funcin se
calculan evaluando el resto de los elementos de la lista, en la c
ual la funcin aparece como el
primer elemento.
Una funcin siempre regresa un valor cuando se evala (a menos que ge
nere un error); ade
ms, tambin puede llevar a cabo alguna otra accin, llamada efecto secu
ndario. En muchos
casos, el propsito principal de una funcin es crear un efecto secun
dario.

Actividad 9.30 Crea un contador que incremente de 2 en 2. Adems, escrib


e una expresin de tal
forma que cuando se evale despliegue un mensaje que diga El valor del co
ntador es X, donde
X deber ser el valor actual del contador.

9.3 Evaluaciones
299
9.3. Practicando evaluaciones
Antes de que aprendas a escribir de niciones de funciones en elis
p, es importante que prac
tiques evaluando funciones que ya fueron escritas. Estas expresione
s sern listas con los nombres
de las funciones como su primer (y en muchos casos nico) elemento. C
omenzaremos con algunas
funciones relacionadas con buffers, ya que son sencillas e interesa
ntes.
Siempre que das un comando de edicin a elisp, tal como el
comando para mover
el cursor o recorrer la pantalla, ests evaluando una expresin,
cuyo primer elemento es
una funcin. As funciona Emacs.
Cuando tecleas carcteres, provocas que el intrprete de elisp evale
expresiones y as es como
obtienes resultados. Incluso teclear simple texto involucra evaluac
in de funciones de elisp. En este
caso, veremos una que usa self insert command, que simplemente inse
rta el carcter que tecleaste.
Las funciones que evalas tecleando alguna combinacin de teclas se lla
man funciones interactivas
o comandos; cmo crear este tipo de funciones lo veremos ms adelante,
en la seccin 9.4.1.
9.3.1.

Nombres de buffers

Las dos funciones, buffer name y buffer le name, muestran la dif


erencia entre un archivo
y un buffer. Cuando evalas ( buffer name), el nombre del buffer se de
spliega en el rea de eco;
cuando evalas ( buffer lename), el nombre del archivo visitado en el bu
ffer se despliega. Usual
mente el nombre del buffer es el mismo nombre del archivo que visit
a, mientras que el nombre del
archivo viene con su ruta completa al archivo.
Un buffer y un archivo son entidades completamente distintas. U
n archivo es informacin alma
cenada permanentemente en la computadora (a menos que t lo borres),
mientras que un buffer es
informacin dentro de Emacs que desaparecer cuando acabes tu sesin (o c
uando mates el buffer).
La distincin es importante porque nos permite distinguir entre accio
nes tiles cuando hacemos
programas. Sin embargo, muchas veces escuchars a gente decir estoy ed
itando un archivo (en
Emacs), en lugar de algo ms apropiado como estoy editando un buffer q
ue despus salvar a un
archivo. Usualmente este tipo de ambigedades son comprensibles por co
ntexto para una persona,
pero la computadora no es tan inteligente y cuando programas en Ema
cs elisp es importante que le
digas exactamente lo que deseas.

No todos los buffers de Emacs estn asociados a un archivo. Por e


jemplo, cuando empiezas
tu sesin con Emacs, ste arranca con un buffer llamado *scratch*; este
buffer no est visitando
ningn archivo, lo mismo que el buffer llamado *Help*.
Actividad 9.31 Ve al buffer scratch y evala las dos expresiones:
( b u f f e r name )
( b u f f e r f i l e name )
tambin evala las expresiones usando C u C x C e .

300
Extendiendo tu ambiente
Obteniendo buffers
La funcin buffer name regresa el nombre del buffer, pero si lo que t q
uieres es el con
tenido del buffer, entonces debes usar current buffer. Es decir, con curr
ent buffer t obtienes
el buffer mismo, no slo su nombre. Sin embargo, hay una pequea complicacin:
si t evalas
( current buffer) , lo que obtienes es el buffer pero su forma impresa se
ver como: #<buffer " scratch ">.
Otra funcin relacionada es other buffer que te regresa el buffer ms re
cientemente seleccio
nado que no sea en el cual ests actualmente.
Actividad 9.32 Prueba las funciones buffer name y other buffer haciendo l
o siguiente. Ve a al
gn otro buffer en tu sesin actual de Emacs y de regreso a scratch ; despus evala
s las dos
funciones (recuerdas C x b ?).
Cambiando de buffer
La funcin other buffer es til cuando se utiliza con switch to buffer. D
e hecho, esta ltima
es una de las funciones que debes usar con mayor frecuencia en Emacs, cua
ndo ejecutas C x b ;
esa combinacin de teclas est ligada al comando switch to buffer, que recibe
un buffer como
parmetro y lo muestra en la ventana actual.
Por ejemplo, si evalas lo siguiente:
( s w i t c h t o b u f f e r ( o t h e r b u f f e r ) )
vers que hace justo lo mismo que C x b , ya que ests ejecutando (de otra fo
rma) la misma
funcin con los mismos argumentos.
En general, en programas preferimos set buffer sobre switch to buffer
; esto es porque los hu
manos necesitamos ver lo que hacemos, pero los programas no tienen ojos6
y no necesitan que el
buffer en el que operan sea visible en una ventana de Emacs.
Tamao de un buffer y la localizacin del punto
Veamos algunas funciones muy simples, buffer size, point, point min,
point max. Estas fun
ciones dan informacin sobre el buffer, su tamao, la posicin del punto y las
posiciones inicial y
nal del buffer.
buffer size regresa el tamao del buffer, que no es otra cosa sino la c
uenta de todos los carcte
res en el buffer. point regresa la cuenta de todos los carcteres desde el
inicio hasta el punto donde
actualmente se encuentra el cursor (uno antes, para ser exactos; o mejor
dicho, el punto est entre el
carcter sobre el cual est el cursor y el anterior); point min es la primera
posicin permisible del
buffer (o la cuenta de carcteres desde el principio del buffer hasta la pr

imera posicin donde pode


mos trabajar en el buffer) y point max la cuenta de caracteres hasta la lt
ima posicin permisible
del buffer.
6
S tienen cerebros y bocas, por eso uno puede hablar con sus programas,
incluso discutir, aplicarles un
correctivo o simplemente platicar con ellos.

9.4 De niciones de funciones


301
Actividad 9.33 Evala las cuatro funciones nombradas en esta seccin. D
espus mueve el cursor
en el buffer y repite este proceso.
Parece tonto tener una funcin que siempre regresa 1, como point
min, cierto? Pues no, no
es cierto. Cuando programamos en elisp, tenemos la facultad de reduc
ir nuestro espacio de ope
racin a cualquier subconjunto del buffer actual; esto que se llama n
arrowing ni siquiera lo voy a
intentar traducir. Desgraciadamente no nos da tiempo de ver en este
curso cmo y para qu puedes
usarlo, pero debe ser claro que si estamos trabajando en una seccin
del buffer tiene sentido pregun
tar cul es la primera posicin de esa seccin, y eso es lo que hace poin
t min. point max hace algo
similar.
No desprecies estas funciones, ya que a pesar de su aparente s
implicidad son sumamente tiles
para hacer un gran nmero de funciones interesantes. De hecho, un gra
n nmero de funciones de
Emacs las utilizan y algunos de los ejemplos que veremos ms adelante
tambin.

9.4. Cmo escribir de niciones de funciones


En elisp, todas las funciones estn de nidas en trminos de otras fun
ciones, excepto algunas
primitivas que estn escritas en el lenguaje de programacin C. De cual
quier manera, las funciones
primitivas y no primitivas que vienen con Emacs y las nuevas funcio
nes que t escribas, todas se
ejecutan igual.
Vamos a enfatizar ms esto: las funciones que t escribas y las que
ya estn integradas a Emacs,
se ejecutan de la misma forma. Entonces te preguntars, si la diferenc
ia no es importante, para qu
me dices? La respuesta es porque es un dato interesante.
9.4.1.

La forma especial defun

En elisp, un smbolo tal como mark whole buffer tiene cierto cdigo
asociado a l que le
indica a la computadora qu hacer cuando la funcin sea llamada (o ejec
utada). Dicho cdigo se
conoce como la de nicin de la funcin y se crea evaluando una expresin qu
e comienza con la
palabra reservada defun (que abrevia a de ne function). Dado que defu
n no evala sus argumentos
en la forma usual, se conoce como una forma especial.
En subsecuentes secciones veremos cmo estn hechas (i.e. el cdigo)
de algunas funciones
de Emacs; en sta veremos una funcin muy simple, para explicar cmo func
iona defun. Una
de nicin de funcin tiene hasta cinco partes despus de la palabra defun:

1. El nombre del smbolo al cual la funcin ser ligada, pegada, asocia


da7 .
2. Una lista de los argumentos que sern pasados a la funcin. Si no
se pasarn argumentos a la
funcin, entonces usamos la lista vaca, ( ).
3. Documentacin que describe a la funcin (tcnicamente este campo es
opcional, pero en la
prctica muy recomendable).
7
Del verbo en ingls attach y que signi ca algo as como ligar, peg
ar o adjuntar.

302
Extendiendo tu ambiente
4. Opcionalmente, una expresin para hacer que la funcin sea interactiva, p
ara que puedas usarla
tecleando M x y el nombre de la funcin; o tecleando una combinacin de t
eclas apropiada.
5. El cdigo que le dice a la computadora qu hacer: el cuerpo de la funcin.
Es ms fcil pensar en una funcin como un esqueleto de la forma:
( d e f u n nombre ( a r g u m e n t o s . . . )
" D o c u m e n t a c i n o p c i o n a l . . . "
( i n t e r a c t i v e paso dei n f o r m a c i n ) ; o p c
i o n a l
cuerpo . . . )
Por ejemplo,
gumento (un n
mero) por 7:
( d e f u
" M u
(
7

a continuacin te presentamos una funcin que multiplica su ar


n m u l t i p l i c a por 7 ( num )
l t i p l i c a NUM p o r 7 . "
num ) )

Este ejemplo no es interactivo, eso lo veremos ms adelante; por el momento


nota que las otras
partes estn todas ah. Su nombre, multiplica por7; sus argumentos, (num); su do
cumentacin,
" Multiplica NUM por 7."; y su cuerpo, ( 7 num).
En este caso, la funcin slo recibe un argumento, que aqu decidimos llamar
num, pero bien
pudo ser cualquier otro nombre, por ejemplo, parangaricutirimicuaro , pero
ese hubiera sido un muy
mal nombre, ya que no le dice nada a un humano. En cambio, num, suena como
nmero y eso es
ms o menos lo que esperamos sea pasado a la funcin, un nmero. Por ejemplo, ev
ala la de nicin
de la funcin aqu arriba y luego evala las siguientes:
( m u l t i p l i c a por 7 6 )
( m u l t i p l i c a por 7 1 0 )
debers ver 42 y 70, respectivamente.
Los nombres que uses para tus argumentos en la de nicin de una funcin se c
onvierten auto
mticamente en privados, esto es, slo son vistos (y por ende, slo pueden ser u
sados) dentro del
cuerpo de la funcin. En nuestro caso, podrs notar que num se multiplica por
7, pero si t tratas de
usar num fuera de la funcin vers que no est ligado a nada; pon num en el buff
er *scratch* y
luego ejecuta C u C x C e para convencerte.
Algo que debes notar es que los nombres que uses para tus argumentos p
ueden ser usados en
el exterior de la funcin (i.e. fuera de ella) o como nombres de argumentos
en otra funcin o en
muchas; en realidad no importa, porque no afecta el curso del cmputo de tu
funcin.
La documentacin de tu funcin es lo que aparece cuando usas C h f y un no
mbre de funcin.
Por ejemplo, teclea C h f y luego pon multiplica por7 y vers un nuevo buffer
de ayuda con la
documentacin que usamos para describir nuestra funcin.

Actividad 9.34 Haz una funcin que saque el promedio de dos nmeros. Llama a s
us parmetros
num y num2. Vuelve a probar multiplica por7 y comprueba que sigue funcionando
, a pesar de
que ya hay al menos una funcin ms (la que acabas de hacer que calcula el pro
medio) que utiliza
el mismo nombre para un argumento, num.

9.4 De niciones de funciones


303
Instalar nuevas de niciones
Aqu arriba, cuando te pedimos que evaluaras la de nicin de la funcin mul
tiplica por7, te hi
cimos trampa porque no te explicamos lo que iba a suceder. Para efe
ctos didcticos era mejor as,
pero aqu te va la explicacin completa.
Para que t puedas ejecutar una funcin con ciertos argumentos, pri
mero Emacs debe cono
cer dicha funcin. Para lograr esto, debes instalar la de nicin en Emacs
. Cuando pones el cursor
al nal de la de nicin de una funcin, como multiplica por7, y le picas C x
C e , vers el
nombre de la funcin en el rea de eco (eso es lo que regresa una de nicin
de funcin, el nombre
de la funcin). En ese momento, la funcin ha sido instalada en Emacs y
es tan parte de Emacs
como forward word o cualquier otra funcin de edicin que t uses (multip
lica por 7 permanecer
instalada en Emacs hasta que termines tu sesin de Emacs; para instal
ar cdigo permanentemente
puedes introducirlo en tu /.emacs).
Cmo cambiar la de nicin de una funcin
Si quieres cambiar el cdigo en multiplica por 7, slo tienes que
reescribirlo y volver a instalar
la funcin en Emacs. As modi cas cualquier cdigo de funcin en Emacs, es mu
y sencillo.
A manera de ejemplo, puedes cambiar el cdigo de la funcin multip
lica por 7 por una versin
que no utilice multiplicacin (*), por ejemplo:
( d e f u n m u l t i p l i c a por 7 ( num )
" M u l t i p l i c a NUM p o r 7 . "
( + num num num num num num num ) )
Vamos, prubalo! Evala esta nueva versin y vuelve a probar la funcin.
De hecho, sta es
la forma de hacer funciones pequeas en Emacs elisp: haces una primer
a versin, la instalas, la
pruebas y luego haces correcciones y vuelves a instalar, probar, en
un ciclo hasta que quede como
la deseas.
Cmo hacer una funcin interactiva
Haces una funcin interactiva poniendo una lista que empieza con
la forma especial interactive
justo despus de la documentacin. Un usuario puede invocar una funcin i
nteractiva tecleando
M x funcin, o tecleando la combinacin de teclas a las cules est ligada
la funcin, como por
ejemplo, C n para ejecutar next line o C x h para ejecutar mark who
le buffer.
Algo muy interesante, que escapa al programador de Emacs elisp
novato, es que cuando llamas

a una funcin interactiva, su resultado no aparece en la lnea


La razn es que muchas de estas
funciones son hechas por sus efectos secundarios, como avanzar
lnea o borrar una palabra, y
no por el valor que regresan. Si el valor regresado apareciera
l rea de eco distraera mucho al
usuario.
Una versin de nuestra multi citada funcin multiplica por
ser interactiva y aun as
imprimir su resultado en el rea de eco. Por ejemplo:
( d e f u n m u l t i p l i c a por 7 ( num )

de eco.
una
en e
7 puede

304
Extendiendo tu ambiente
" M u l t i p l i c a NUM p o r 7 . "
( i n t e r a c t i v e "p ")
( m e s s a g e " E l r e s u l t a d o e s : %d " (

7 num ) ) )

Ahora, cuando evales esta nueva versin de multiplica por 7 podrs usar la fun
cin de manera
interactiva: teclea C u 6 M x multiplica por 7 Enter y vers el mensaje El r
esultado es: 42
aparecer en el rea de eco.
En general, puedes invocar una funcin como sta en una de dos formas:
1. Tecleando un argumento pre jo que ser num para la funcin, seguido de M x
y el nombre
de la funcin. Por ejemplo, C u 3 M x forwardsentence, o
2. tecleando cualquier tecla o combinacin de ellas a las cuales est ligad
a la de nicin, como
en C u 3 M e .
Ambos ejemplos mencionados hacen lo mismo: mueven el punto tres oraci
ones hacia adelante
(dado que multiplica por 7 no est ligado a ninguna tecla, entonces no pode
mos usar la segunda
forma, aunque debiste haber aprendido a ligar funciones a teclas hace un
par de captulos dentro del
marco de este material).
Un argumento pre jo N puede ser pasado a una funcin usando C u N o bien
M N. Si slo
tecleas C u sin argumentos, el valor por omisin es 4; comprubalo, ejecutand
o
C u M x multiplica por7
En nuestro ejemplo, la expresin ( interactive "p") le dice a Emacs que
pase el argumento
pre jo a la funcin y que use su valor (el del argumento pre jo) como argumento
de la funcin.
Diferentes opciones para interactive
En nuestro ejemplo, p le indica a Emacs que pase el argumento pre jo (un
nmero) como
parmetro a la funcin. Pero qu sucede si la funcin no recibe un nmero? La forma
especial
interactive tiene un gran nmero de opciones, cerca de 20 carcteres, y muy p
robablemente uno de
ellos te permitir pasar la informacin que requieres a tu funcin. No los revi
saremos todos aqu,
slo veremos unos cuantos, pero puedes buscar la documentacin de interactive
en el manual en
lnea de Emacs elisp.
Por ejemplo, la letra r le dice a Emacs que pase a la funcin los valore
s inicial y nal de la
regin (el valor del punto y el valor de la marca en el buffer actual) como
dos argumentos separados
a la funcin. Se usa como sigue:
( interactive " r ")
La letra B le dir a Emacs que pida un nombre de buffer que ser pasado a l
a funcin. No slo
eso, sino que puedes usar una etiqueta para preguntar por el buffer y, ad
ems, Emacs te ayudar a

completar el nombre. Se usa as:


( i n t e r a c t i v e "BDame un b u f f e r : " )
Una funcin con varios argumentos tambin puede usar interactive; la form
a en que separamos
los argumentos es usando un smbolo de nueva lnea, \n. Por ejemplo,
( i n t e r a c t i v e "BDame un b u f f e r : \ n r " )

9.4 De niciones de funciones


305
le dice a Emacs que pida un buffer, que ser el primer argumento de l
a funcin, y que adems pase
el valor de la marca y el punto (la regin) como segundo y tercer val
or (no necesariamente en ese
orden) a la funcin.
Si la funcin no recibe ningn argumento, eso no es motivo para que
no puedas usar interactive;
de hecho, interactive siempre recibe el mismo nmero de argumentos qu
e la funcin, as que a una
funcin sin argumentos le corresponde una forma interactive sin argum
entos, ( interactive ) .
9.4.2. let
Una expresin let tambin es una forma especial que usars en muchas
de niciones de fun
ciones. Su uso es til para ligar un smbolo a un valor, de forma tal q
ue le permite al intrprete
distinguir esta variable de otra con el mismo nombre y que no forme
parte del cuerpo de la funcin.
Para entender por qu let es necesaria, piensa en tu hogar, al c
ual t te re eres como mi casa;
ahora imagina que ests hablando con Foo, y ste est hablando de mi casa.
Muy probablemente
Foo est hablando de su casa y no de tu casa, pero si cada vez que t o
yes mi casa piensas en tu
casa, te confundirs sin lugar a dudas. Ahora imagina que dos funcion
es usan una variable y que
dicha variable se llama igual, pero debe tener distintos valores pa
ra cada funcin.
let evita este tipo de confusiones. Lo que hace es crear un no
mbre que opaca, o mejor dicho
oculta, a cualquier referencia externa a ese mismo nombre en el cuerp
o del let.
Una expresin let tiene tres partes: (let varlist cuerpo...). La
primera parte es el smbolo let,
el segundo es una lista, identi cada como varlist; cada elemento de l
a lista es un smbolo o una
lista de dos elementos, el primero de los cuales es un smbolo y el s
egundo una expresin; el tercer
elemento de la lista es el cuerpo.
Los smbolos en la lista varlist, son las variables a las que se
les asigna un valor inicial por
let. Los smbolos que aparecen solos son asignados el valor nil ; el
intrprete evala los segundos
elementos de cada lista y asigna al primer elemento (un smbolo) el r
esultado.
Por lo tanto, una varlist puede lucir as: (num (sex f )) , en c
uyo caso Emacs asignar a la primera
variable, num, el valor nil y la variable sex valdr f .
Si la lista de variables, varlist, est compuesta de parejas (el
caso ms usual), let luce as:
( l e t ( ( var value )
( var value )
...
( var value ) )

cuerpo . . . )

Ejemplo de let
La siguiente expresin let le da valor a dos variables y luego imp
rime sus valores. El cuerpo
consiste slo de la llamada a message:
( l e t (( zebra rayas )
( tiger feroz ))

306
Extendiendo tu ambiente
( m e s s a g e "Un a n i m a l t i e n e % s y e l o t
r o e s % s " z e b r a t i g e r ) )
Puedes evaluar esta expresin. El resultado lucir como: Un animal t
iene rayas y el otro es
feroz.
Actividad 9.35 Haz una funcin llamada suma exotica, que recibe tres
parmetros numricos,
a, b, c y regresa el resultado de la operacin: a2 + b3 + c4 . Usa le
t para almacenar los resultados
intermedios. Tambin puedes hacer una funcin auxiliar que reciba dos nm
eros como parmetros,
n y m y regrese nm .
9.4.3.

La forma especial if

La tercera forma especial que veremos, adems de defun y let, es


la condicional if. Esta forma se
usa para ensear a la computadora a tomar decisiones. No es indispens
able para escribir funciones,
pero su uso es muy comn y por eso est aqu. La funcin beginning of buffe
r la usa, por ejemplo.
La idea bsica detrs de if es que si (if) algo es verdadero, enton
ces algo se hace, por ejemplo,
si el cielo est despejado y hace calor, entonces ve a la playa. En eli
sp no usamos ninguna palabra
para designar la parte del entonces, por lo que las construcciones if
lucen as:
( i f p r u e b a f a l s a ov e r d a d e r a
r e a l i z a r e s t o s i esv e r d a d e r a )
La primera parte es conocida como la parte if y la segunda es c
onocida como la parte then. Por
ejemplo, evala la siguiente expresin:
( i f (> 5 4)
( m e s s a g e "Wow, 5 e s mayor que 4 . " ) )
La funcin > prueba si el primer argumento es mayor que el segu
ndo y regresa verdadero si lo
es.
En la vida real, claro est, la prueba no es ja, usualmente depe
nde de una variable. Por ejemplo,
1
( d e f u n t i p o dea n i m a l ( c a r c t e r )
2
" Imprime un m e n s a j e en e l r e a de e c o d e p e
n d i e n d o de CARCTER .
3
S i e s e l s mbolo f e r o z , e n t o n c e s a v i s
a que e s un t i g r e . "
4
( i f ( equal car cter feroz )
5
( m e s s a g e " Es un t i g r e " ) ) )

imprime el mensaje Es un tigre dependiendo de si su parmetro es el smbo


lo feroz o no.
Las expresiones if reciben opcionalmente un tercer parmetro, con
ocido como la parte else y se
evala cuando la prueba es falsa. As, podemos completar nuestra funcin
tipo deanimal para que
regrese algo ms creativo que nil cuando no encuentra la caracterstica
feroz.

9.4 De niciones de funciones


307
1
2
e n d o de c
3
n t i g r e .
4
5
6
o z . " ) ) )

( d e
"
a r
S i e
"
(

f u n t
Imprime
c t e r
l e l s

i p o dea n i m a l ( c a r c t e r )
un m e n s a j e en e l r e a de e c o d e p e n d i
.
mbolo f e r o z , e n t o n c e s a v i s a que e s u

i f ( equal caract feroz )


( m e s s a g e " Es un t i g r e " )
( m e s s a g e "Ummm no , l o s i e n t o , no e s f e r

Vamos no seas tmido, evala nuevamente la funcin y prubala con feroz , am


istoso, y otros sm
bolos que se te ocurran.
Valores de verdad en elisp
Hasta el momento hemos hablado de falso y verdadero como si fue
ran nuevos tipos de datos en
elisp. La realidad es que falso est representado por nuestro viejo a
migo, nil ; cualquier otra cosa
en serio, cualquier valor distinto de nil es verdadero.
La expresin que prueba si algo es verdadero se interpreta como v
erdadera si el resultado de
la evaluacin no es nil . Como ya habamos mencionado, nil tambin signi ca
la lista vaca, ( ). Es
decir, para el intrprete de elisp, nil y ( ) son la misma cosa, pero
los humanos tendemos a referirnos
a nil como falso y a ( ) como la lista vaca.
Cabe notar que si el intrprete de elisp no puede regresar algn va
lor til para representar
verdadero, entonces regresar el smbolo t , que signi ca verdadero (la t e
s de true).
9.4.4. save excursion
La funcin save excursion es la cuarta y ltima forma especial
que revisaremos en este mate
rial.
En elisp es comn hacer programas para editar; la funcin save exc
ursion es comnmente
usada, ya que guarda las posiciones del punto y la marca, ejecuta e
l cuerpo de la funcin y luego
regresa el punto y la marca a sus valores previos, si es que fueron
cambiados por la accin de la
funcin. Su nico propsito es evitar darle sorpresas inesperadas o moles
tas al usuario, cambiando
a sus espaldas la posicin del punto o la marca.
En Emacs es comn que una funcin cambie la posicin del punto y la
marca como parte integral
de su funcionamiento, aun cuando el usuario pueda o no esperar tal
comportamiento. Por ejemplo,
la funcin count lines region mueve el punto. El uso de save excursio
n es una buena prctica de
programacin.
save excursion incluso recupera los valores de la marca y el p

unto, aun en el eventual caso


de que algo salga mal, o en el cal usado en elisp, incluso cuando la
funcin termine de manera
anormal. Asimismo, esta funcin tambin regresa al buffer de partida en
caso de que la funcin
cambie de buffer internamente para trabajar.
La forma general de save excursion es:
( s a v e e x c u r s i o n
cuerpo . . . )

308
Extendiendo tu ambiente
aunque es usual que save excursion ocurra dentro de una expresin let, c
omo en:
( let

9.4.5.

varlist
( s a v e e x c u r s i o n
cuerpo . . . ) )

Resumen

En las ltimas secciones hemos mostrado algunas funciones y formas e


speciales. Aqu las des
cribiremos brevemente, para que te acuerdes rpidamente cmo se usan y tam
bin mencionaremos
algunas funciones ms que son parecidas.
eval last sexp Evala la ltima expresin simblica anterior a la posicin actua
l del punto. Su
valor aparece en el rea de eco, a menos que la funcin sea llamada
con un argumento, en
cuyo caso el resultado se inserta en el buffer actual. Este coma
ndo est usualmente ligado a
C x C e .
defun De ne function. Esta forma especial tiene hasta cinco partes: el n
ombre, un esqueleto para
los argumentos que sern pasados a la funcin, documentacin, una decl
aracin interactive
opcional y el cuerpo de la de nicin.
Por ejemplo:
( d e f u n backt o i n d e n t a t i o n ( )
" Apunta a l p r i m e r c h a r v i s i b l e en
l a l n e a . "
( interactive )
( b e g i n n i n g ofl i n e 1 )
( s k i p c h a r s f o r w a r d " \ t " ) )
interactive Le declara al intrprete que la funcin puede ser usada intera
ctivamente. Esta forma
especial puede ir seguida de una cadena con una o ms partes que pa
san informacin a los
argumentos de una funcin, en secuencia. Estas partes tambin le pued
en indicar al intrprete
que solicite informacin del usuario. Las partes de la cadena se se
paran por medio de nuevas
lneas, \n.
Algunos carcteres de control comunes son:
b El nombre de un buffer existente.
f El nombre de un archivo existente.
p El argumento (numrico) pre jo. (Nota que esta p es minscula).
r El punto y la marca, pasados como dos argumentos numricos, el
ms pequeo (cual
quiera que ste sea) primero. ste es el nico carcter de control
que especi ca dos
argumentos sucesivos en lugar de uno solo.
let Declara que una lista de variables ser usada dentro del cuerpo del
let y les da un valor inicial;
por omisin, dicho valor es nil ; despus evala las dems expresiones en
el cuerpo del let y

regresa el valor de regreso de la ltima. Dentro del cuerpo del let


, el intrprete de elisp no ve
los valores de las variables cuyos nombres ya estaban ligados fue
ra del let8 .
8
Esto representa un concepto muy importante en lenguajes de prog
ramacin, llamado alcance lxico, pero

9.4 De niciones de funciones


309
Por ejemplo,
( l e t ( ( f o o ( b u f f e r name ) )
( b a r ( b u f f e r s i z e ) ) )
( m e s s a g e " E s t e b u f f e r e s % s y t i e n
e %d c a r c t e r e s . "
foo bar ) )
save excursion Almacena los valores del punto, la marca y el buffer
actual antes de evaluar el
cuerpo de la forma. Los restaura una vez terminada la ejecucin d
e la ltima expresin en su
cuerpo.
Por ejemplo,
( m e s s a g e " Somos %d c a r c t e r e s h a s t a e s t e p u
n t o ( en e s t e b u f f e r . ) "
( ( p o i n t )
( s a v e e x c u r s i o n
( g o t o c h a r ( p o i n t min ) ) ( p o
i n t ) ) ) )
if Evala el primer argumento de la funcin; si es verdadero, evala el s
egundo argumento; en caso
contrario, evala el tercero (si existe).
La forma especial if se llama condicional. Hay otras formas co
ndicionales en elisp, pero if es
probablemente la ms usada.
Por ejemplo,
( if
( s t r i n g = ( i n t t o s t r i n g 2 1 )
( s u b s t r i n g ( emacsv e r s i
o n ) 7 9 ) )
( m e s s a g e " E s t a e s l a v e r s i n 21 de Ema
cs " )
( m e s s a g e " E s t a NO e s l a v e r s i n 21 de Ema
cs " ) )
equal Prueba si dos objetos son el mismo. equal regresa verdadero s
i los objetos
eq
tienen la misma estructura y contenidos. eq regresa verdadero
si los dos objetos son en rea
lidad el mismo objeto.
< <= La funcin < veri ca si su primer argumento es menor que el segund
o; las dems revisan
respectivamente menor o igual, mayor y por ltimo mayor o igua
l. Las cuatro funciones
> >=
reciben argumentos numricos.
message Imprime un valor en el rea de eco. El mensaje slo puede ser d
e una lnea de longitud.
El primer argumento es una cadena que puede contener %s, %d, o %c
para imprimir el
valor de argumentos que sigan a la cadena. El argumento usado p
or %s debe ser una cadena.
El argumento usado por %d debe ser un nmero. El argumento usado p
or %c debe ser un
nmero y ser impreso como el carcter con ese valor en el cdigo ASCII
.
setq La funcin setq asigna el valor de su primer argumento al valor

del segundo.
set El primer argumento es citado automticamente por setq. Hace lo m
ismo para subsecuentes
parejas de valores. Otra funcin set slo toma dos argumentos y los
evala ambos antes de
asignar el valor del segundo al primero.
buffer name Sin argumentos, regresa el nombre del buffer actual, co
mo cadena.
ya tendrs muchos semestres para dominar toda esa terminologa; por el
momento tendrs que conformarte
y nosotros tambin con entender el concepto.

310
Extendiendo tu ambiente
buffer le name Sin argumentos, regresa el nombre del archivo que el buf
fer actual est visitan
do.
current buffer Regresa el buffer en el cual Emacs est activo; puede ser
algn buffer distinto al
que est visible en la ventana de Emacs.
other buffer Regresa el buffer ms recientemente seleccionado (uno disti
nto al que se pasa como
parmetro a other buffer y al buffer actual).
switch to buffer Selecciona un buffer para que Emacs est activo en l, y
lo despliega en la
ventana para que los usuarios puedan verlo. Usualmente est ligada
a C x b .
set buffer Cambia la atencin de Emacs a un buffer donde los programas c
orrern. No altera lo
que se est viendo en la ventana.
buffer size Regresa el nmero de carcteres en el buffer actual.
point Regresa el valor de la posicin actual de punto, como entero; esto
es igual al nmero de
carcteres desde el inicio del buffer.
point min Regresa el mnimo valor permisible para el punto en el buffer
actual. Esto es 1, a menos
que narrowing est activo.
point max Regresa el mximo valor permisible para el punto en el buffer
actual. Esto es el nal
del buffer, a menos que narrowing est activo.
Actividad 9.36 Escribe una funcin no interactiva que duplique el valor
de su argumento. Despus
haz la funcin interactiva.
Actividad 9.37 Escribe una funcin que pruebe si el valor actual de ll co
lumn es mayor que el
argumento pasado a la funcin, y si lo es, que mande el mensaje apropiad
o al rea de eco.

9.5. Algunas funciones relacionadas con buffers


En esta seccin estudiaremos varias funciones de Emacs. Esto usualme
nte se llama walk th
rough, que sera ms o menos equivalente a un paseo por. La idea es mostrarte
ejemplos de
verdad de todo lo que hemos visto. Aprender viendo es una tcnica muy us
ada en programacin y
estamos seguros que te servir mucho, as que sintate cmodamente, respira ho
ndo y pon atencin.
Las funciones que analizaremos aqu estn todas relacionadas con buffe
rs; ms adelante vere
mos otro tipo de funciones. Describiremos cada funcin, en su momento, d
e manera breve; si te
interesa ver la documentacin completa de la funcin, puedes usar C h f <
nombre de la fun
cin> Enter ; o si es una variable C h v <nombre de la variable> Enter .

9.5.1.

De nicin (simpli cada) de beginning of buffer

La funcin beginning of buffer es una buena funcin para comenzar nues


tro paseo por las
funciones de Emacs, ya que es sencilla y a estas alturas ya debes esta
r familiarizado con ella. Cuando

9.5 Funciones relacionadas con buffers


311

se usa interactivamente, beginning of buffer mueve el cursor al


inicio del buffer, dejando la marca
en la posicin previa. Usualmente est ligada a M < .
Sin ms, aqu est nuestra de nicin simpli cada (es simpli cada porque l
versin real maneja
una opcin compleja adems del comportamiento que hemos descrito):
1
( d e f u n s i m p l i f i e d b e g i n n i n g ofb u f f e
r ( )
2
" Mueve e l p u n t o a l i n i c i o d e l b u f f e
r ;
3
d e j a n d o l a marca en l a p o s i c i o n a c t u a l
. "
4
( interactive )
5
( pushmark )
6
( g o t o c h a r ( p o i n t min ) ) )
Nota que tiene sus cinco partes como toda buena de nicin. La pa
rte que no conoces an, es el
cuerpo de la funcin, que en este caso consta de dos expresiones:
5
( pushmark )
6
( g o t o c h a r ( p o i n t min ) )
La primera de ellas, (push mark), al ser evaluada por el in
trprete lo que hace es poner la marca
en la posicin actual del cursor, en donde sea que ste est. Dicha po
sicin se guarda en el anillo de
marcas (Emacs tiene varios tipos de anillos, el de marcas, el de
la muerte y otros y todos son muy
tiles).
La siguiente lnea, (goto char (point min)), mueve el cursor
a la primera posicin del buffer.
Por qu poner la marca en el lugar anterior? A primera vista no par
ece obvio, pero en la prctica
uno usualmente desea regresar al inicio del buffer temporalmente
, como por ejemplo para hacer un
pequeo ajuste en las lneas iniciales, para revisar algn dato o algu
na otra actividad. Sin embargo,
el punto ms importante es usualmente el de edicin ms reciente, as qu
e poniendo la marca en l
es fcil regresar a ese punto (prueba, por ejemplo, C x C x ).
Cuando veamos funciones que desconozcas, por ejemplo goto c
har, recuerda que puedes usar
C h f , seguido del nombre de la funcin, para terminar con Enter
para obtener su documenta
cin.
Actividad 9.38 Escribe la funcin simpli ed end of buffer.
La de nicin de mark whole buffer
Esta funcin, mark whole buffer, no es ms difcil que nuestra ver
sin simpli cada de beginning
of buffer y, a diferencia de aqulla, sta no est simpli cada; veremos
la versin real.
Lo que hace mark whole buffer es poner el punto al inicio de
l buffer y la marca al nal; no es
tan usada como las anteriores, pero es importante. Usualmente es

t ligada a C x h . Luce as:


1 ( d e f u n markwholeb u f f e
2
" Pone e l p u n t o a l i n
d e l b u f f e r . "
3
( interactive )
4
( pushmark ( p o i n t ) )
5
( pushmark ( p o i n t max
6
( g o t o c h a r ( p o i n

r ( )
i c i o y l a marca a l f i n a l

) )
t min ) ) )

312
Extendiendo tu ambiente
En esta funcin, las ltimas dos expresiones ponen la marca al nal del buf
fer y la otra mueve
el punto a la primera posicin. Pero, por qu aparece (push mark (point)) como
primera lnea del
cuerpo? Nuevamente, la idea detrs de esto es que la posicin actual (antes d
e llamar a mark whole
buffer) es la posicin de edicin, la ms importante actualmente en el buffer;
la prctica indica que
cuando uno marca todo el buffer, lo hace con la intencin de reformatearlo,
re indentarlo, copiarlo,
o algo similar, pero despus de eso, uno desea regresar a la posicin previa
de edicin.
Cmo regresamos a esa posicin? Pues es muy sencillo. Recuerda que dijimos
q que push
mark empuja la marca a un anillo que puedes recorrer; por omisin C x C x t
e lleva a la po
sicin previa de la marca, y ya sabes que CSpace pone la marca. Pues CSpace ,
que en
realidad es un ligado de la funcin set mark command, hace ms que eso: si le
pasas un argu
mento pre jo, brinca a esa marca en el anillo local de marcas; vamos, intntal
o! Ejecuta dos veces
C u CSpace y ve lo que sucede!
La de nicin de append to buffer
La funcin append to buffer copia una regin (la regin actual en el buffer
actual) a un buffer
especi cado. Usaremos la funcin insert buffer substring para copiar la regin;
como es de es
perarse, esta ltima recibe dos posiciones, la inicial y la nal, y el buffer
del cual debe extraer la
subcadena comprendida entre dichas posiciones.
Esas posiciones no son otras que el punto y la marca (que rodean la r
egin) en el buffer actual;
aqu est nuestra de nicin:
( d e f u n appendt o b u f f e r ( b u f f e r s t a r t end )
" Agrega e l t e x t o de l a r e g i n a l BUFFER .
Es i n s e r t a d o en BUFFER a n t e s de s u p u n t o .
Cuando e s l l a m a d a d e s d e un p r o g r a m a r e c i b e
t r e s a r g u m e n t o s :
un b u f f e r o s u nombre , y d o s numeros e s p e c i f i c a
n d o e l a r e a
a copiar ."
( i n t e r a c t i v e " BAgregar a l b u f f e r : \ n r " )
( l e t ( ( o l d b u f ( c u r r e n t b u f f e r ) ) )
( s a v e e x c u r s i o n
( s e t b u f f e r ( g e t b u f f e r c r e a t e b u f
f e r ) )
( i n s e r t b u f f e r s u b s t r i n g o l d b u f
s t a r t end ) ) ) )
Analiza parte por parte la funcin y vers que no hay muchas cosas nueva
s; lo que si tiene es
una mezcla funcional de varias cosas que vimos muy por encima. Primero te
conviene probarla para

que veas cmo funciona y eso aclarar mucho. Visita un archivo de prueba en u
n buffer, marca una
regin (pon la marca y mueve el punto un par de lneas abajo, por ejemplo). A
hora regresa al buffer
*scratch*, copia y evala esta funcin y pon el punto al nal del buffer.
A continuacin, regresa al buffer del archivo que acabas de abrir (don
de pusiste la marca y el
punto anteriormente) y llama a la funcin: M x append to buffer. Te pide un
buffer, te propondr el
ms reciente (si hiciste lo que acabo de decir, debe ser *scratch*); presio
na Enter y vers aparecer
la regin en el buffer *scratch*.
Muy bien. Ahora, qu es lo que pas? Vamos por partes:

9.5 Funciones relacionadas con buffers


313
1. Slo necesitamos tres argumentos, el nombre del buffer al que va
mos a copiar (destino) y
las posiciones del punto y la marca en el buffer fuente. Nota
que no necesitamos tambin el
nombre del buffer fuente, porque para que la funcin haga lo que
esperas que haga, tienes
necesariamente que estar en dicho buffer.
2. La forma ( interactive "BAgregar al buffer : \ nr ") , solicit
a un buffer (el destino) y ya sabes
que r pasa como dos argumentos consecutivos las posiciones del
punto y la marca. No slo eso,
r siempre pasa primero el ms pequeo, as que cuando llamemos a ins
ert buffer substring,
que espera su segundo argumento sea menor o igual que su terce
r argumento, no tendremos
ningn problema.
3. El cuerpo consta de una expresin let, que es la primera que vem
os en accin. La usamos para
guardar el buffer actual (el fuente) en una variable local lla
mada oldbuf. Por qu? Porque
tenemos que cambiar de buffer (al destino) para poder insertar
la subcadena.
4. Nota tambin el uso de save excursion, que con la explicacin del
punto anterior ya debe ser
obvio. Lo usamos aqu (antes de cambiar de buffer) para que guar
de la informacin adecuada
y nos regrese aqu cuando acabe la funcin.
5. set buffer es nueva, aunque ya la habamos explicado en el la se
ccin 9.4.5. Lo que hace es
cambiar la atencin de Emacs (si no est en la ventana, no aparece
r por la accin de esta fun
cin) al buffer que recibe como parmetro. En este caso, le dice a
Emacs, ( set buffer ( getbuffercreate
que se cambie al buffer destino, pero oh sorpresa! aqu nos encon
tramos con otra funcin nue
va: get buffer create, y, para no variar con los nombres largo
s y auto explicativos de Emacs,
esta funcin recibe una cadena o un buffer como argumento. Si es
un buffer se mueve a ese
buffer; si es una cadena, busca un buffer con ese nombre y se
mueve a l; nalmente, si es una
cadena pero no hay ningn buffer en Emacs con ese nombre, crea u
no nuevo y se mueve a l.
6. Por ltimo, tenemos ( insert buffersubstring oldbuf start end) que
lo nico que hace es cor
tar la subcadena comprendida entre start y end en nuestro buff
er origen (recuerda que guar
damos su contenido en la variable oldbuf) y luego insertarla e
n la posicin actual.
9.5.2.

Resumen
Aqu est un resumen de las funciones que acabamos de revisar:
describe function Imprimen la documentacin de una funcin o una variab

le.
describe variable Usualmente estn ligadas a C h f y C h v , respecti

vamente.
push mark Pone la marca en una localidad particular y almacena el v
alor de la marca anterior en
el anillo de marcas. La marca es una posicin en el buffer que ma
ntendr su posicin relativa
aun cuando sea agregado o eliminado texto del buffer.
goto char Pone el punto en la posicin especi cada por el valor de su a
rgumento, que puede ser
un nmero, un marcador, o una expresin que regresa el nmero de una
posicin, tal como
(point min).
insert buffer substring Copia una regin de texto de un buffer, que s
e pasa como argumento a
la funcin en el buffer actual.

314
Extendiendo tu ambiente
mark whole buffer Marca todo el buffer como una regin. Usualmente est liga
do a C x h .
set buffer Cambia la atencin de Emacs a otro buffer, pero no cambia la ve
ntana que est siendo
desplegada. Se usa cuando un programa (a diferencia de un humano) v
a a trabajar en un buffer
distinto.
get buffer create Encuentra un buffer nombrado o crea uno si un buffer c
on ese
get buffer nombre no existe. La funcin get buffer regresa nil si el buffe
r nombrado no existe.
Actividad 9.39 Usa if y la funcin get buffer para construir una funcin int
eractiva que imprima
un mensaje diciendo si un buffer dado existe o no.

9.6. Funciones fundamentales: car, cdr, cons


En elisp, car, cdr y cons son funciones fundamentales. La funcin con
s se usa para construir
listas, mientras que las funciones car y cdr se usan para descomponerlas
.
Retrasamos la discusin de estas funciones hasta este momento, porque
para hacer cosas inte
resantes usando estas funciones fundamentales era necesario que conocier
as las formas especiales
que revisamos y que manejaras de mejor forma buffers, cadenas, etc.
La funcin cons es una abreviatura de la palabra construct y sirve ju
stamente para construir
listas. Las otras dos funciones, desgraciadamente, tienen nombres esotric
os, y desafortunados por
que no signi can absolutamente nada til; por razones histricas se siguen usa
ndo y en funciones
de Emacs siguen apareciendo, as que aqu tambin los usaremos. Pero puedes pe
nsar en ellas co
mo primer elemento, el car, y el resto de la lista, el cdr (que por cier
to, se pronuncia could er en
ingls).
Tambin presentaremos rpidamente varias funciones utilitarias ms, como
length, setcar,
nthcdr y nthcdr. Culminaremos la seccin y este breve curso de Emacs elisp
revisando copy
region as kill, una funcin de Emacs muy til y relativamente ms compleja que
todas las anterio
res.
9.6.1. car y cdr
El car de la lista es simplemente el primer elemento de la lista. El
car de la lista (rosa violeta
clavel azucena) es rosa. Intenta evaluar lo siguiente:
( car ( rosa v i o l e t a c l a v e l azucena ) )

Vers que el smbolo rosa aparece en el rea de eco. Un mejor nombre sera
st (y de hecho
este nombre tambin existe en Emacs elisp; est de nido como un alias de car e
n el paquete cl.el).
El car no remueve el primer elemento de la lista, esto es, despus de
aplicar car a una lista, la
lista sigue siendo la misma. En el cal de elisp, esto signi ca que car es u
na funcin no destructiva.

9.6 Funciones fundamentales


315
cdr de una lista es el resto de la lista, esto es, cdr regresa l
a parte de la lista que sigue al
primer elemento. De tal forma que (cdr (rosa violeta clavel azucena))
regresa (violeta clavel
azucena).
Al igual que car, cdr no remueve ningn elemento de la lista. Clar
amente, un mejor nombre
para cdr sera rest y al igual que rst, rest tambin existe (en el paquet
e cl.el) y es un alias de cdr.
Cuando car y cdr se aplican a listas de smbolos (como en los ejem
plos anteriores) el elemento
de la lista regresado por car es rosa sin parntesis, como smbolo. Sin
embargo, el cdr de la lista es
siempre otra lista.
Por otro lado, en una lista de listas, el primer elemento es una
lista. car regresa este primer
elemento como lo que es: una lista. Por ejemplo, evala el siguiente e
jemplo:
( car
( ( l e n t i g r e c h i t a )
( gazela antlope zebra )
( b a l l e n a d e l f n t i b u r n ) ) )
Esta funcin regresa la lista de animales carnvoros, (len tigre chita),
mientras que el cdr de esa
lista es la lista: ((gazela antlope zebra) (ballena delfn tiburn)).
cons
La funcin cons construye una lista; es la inversa de car y cdr. P
or ejemplo, cons puede usarse
para hacer una lista de cuatro elementos a partir de una lista de slo
tres elementos, agregando uno
al principio as:
( cons r o s a
( v i o l e t a c l a v e l azucena ) )
Despus de evaluar esa expresin vers a nuestra querida y vieja amiga
, la lista (rosa violeta
clavel azucena) aparecer en el rea de eco.
cons siempre requiere una lista como segundo argumento y lo que
regresa es una nueva lista
cuyo car es el primer argumento y cuyo cdr es su segundo argumento (
la lista). No puedes empezar
una lista a partir de nada, necesitas empezarla a partir de la lista
vaca. Por ejemplo, evala las
siguientes expresiones en secuencia:
( cons
azucena
())
( cons
clavel
( azucena ) )
( cons
violeta
( c l a v e l azucena ) )
( cons
rosa (
v i o l e t a c l a v e l azucena ) )
Nota que en la primera expresin estamos usando a ( ) como la list
a vaca, pero recuerda que es
exactamente lo mismo que usar nil .
Encontrar la longitud de una lista: length
Puedes usar la funcin length de elisp para saber cuntos elementos

tiene una lista, como en


los siguientes ejemplos:
( length
( azucena ) )
( length
( daisy buttercup ) )

316
Extendiendo tu ambiente
( length ())
Los valores que obtendrs una vez que evales las expresiones, representan
el nmero de ele
mentos en cada lista, 1, 2 y 0 respectivamente.
nthcdr
La funcin nthcdr est asociada con la funcin cdr. Lo que hace es aplicar
cdr repetidamente.
Si sacas el cdr de la lista ( rosa violeta clavel azucena) obtendrs la lis
ta ( violeta clavel azucena).
Si ahora sacas el cdr de esta nueva lista, obtendrs ( clavel azucena)
; (nota que si sacas dos
veces el cdr de la misma lista, obtendrs lo mismo, ya que es no destructiv
a). Es decir, si evalas
(cdr (cdr ( rosa violeta clavel azucena ))) obtendrs ( clavel azucena).
La funcin nthcdr hace lo mismo que repetidas llamadas a cdr anidadas.
En el siguiente ejem
plo, el argumento 2 se pasa a la funcin nthcdr, junto con la lista, y el v
alor que regresa es la lista
sin los dos primeros elementos, que es lo mismo que aplicar dos veces cdr
en cadena.
( nthcdr 2 ( rosa v i o l e t a c l a v e l azucena ) )
Actividad 9.40 Usando la lista original, ( rosa violeta clavel azucena),
aplica nthcdr pasndole
argumentos numricos del 0 al 5. Puedes explicarlo? Si no puedes, entonces a
plica el mismo
nmero de veces (de manera anidada) cdr a la misma lista. Ahora s, explcalo.
setcar
Como te puedes imaginar por sus nombres, las funciones setcar y setcd
r (que veremos en un
momento) asignan nuevos valores al car y al cdr de una lista. En realidad
cambian la lista original,
a diferencia de car y cdr que son no destructivas. Una forma de entender
cmo funciona esto es
experimentando. Empezaremos con la funcin setcar.
Primero, podemos hacer una lista y luego asignar a una variable dicha
lista, utilizando la funcin
setq. Aqu est una lista de animales:
( setq animales
( g i r a f a a n t i l o p e t i g r e leon )
) .
Evala las siguientes expresiones. Una vez evaluadas, puedes con rmar que
la variable animales
ahora apunta a la lista ( girafa antilope tigre leon) . A continuacin, eva
la la funcin setcar pa
sndole dos argumento, la variable animales y el smbolo citado hipo; es deci
r, evala:
( s e t c a r animales hipo )
Vers el smbolo hipo aparecer en el rea de eco. Ahora evala nuevamente la vari
able animales y

notars que la lista ha cambiado.


setcdr
La funcin setcdr es similar a la funcin setcar, excepto que esta funcin
cambia el segundo y
subsecuentes elementos de una lista en lugar del primero.

9.6 Funciones fundamentales


317
Por ejemplo, asigna el valor de una variable animalesdomesticable
s, evaluando la siguiente ex
presin:
( s e t q a n i m a l e s d o m e s t i c a b l e s ( c a b a
l l o vaca oveja p e r r o ) )
Ahora, evala:
( s e t c d r a n i m a l e s d o m e s t i c a b l e s
o cocodrilo ) )

( gat

Vers la lista ( gato cocodrilo ) aparecer en el rea de eco. se es el va


lor de regreso de la funcin;
ahora veri ca su efecto secundario, evaluando animalesdomesticables.
Actividad 9.41 Construye una lista de aves evaluando varias expresio
nes cons. Guarda esa lista
en una variable, con setq. Investiga qu pasa cuando haces un cons de
una lista con ella misma;
por ejemplo, qu pasa cuando haces (cons aves aves) , suponiendo, clar
o, que la variable donde
guardaste tu lista se llama aves. Reemplaza la primera ave de tu lis
ta con un pez. Reemplaza el
resto de las aves en la lista con peces.
9.6.2.

Cortando y guardando texto

Cuando matas texto en un buffer, con alguno de los comandos que


matan texto, Emacs guarda
ese texto en una lista para que puedas traerlo de nuevo a la vida co
n alguno de los comandos que
hacen yank. Por lo que la lista puede lucir ms o menos as:
( " un p e d a z o de t e x t o " " t e x t o f i n a l " )
La funcin cons puede usarse para aadir una pieza de texto a esta l
ista, como en:
( c o n s " o t r a p i e z a de t e x t o " ( " un p e d a z o
de t e x t o " " t e x t o f i n a l " ) )
Y despus, con un uso apropiado de car y nthcdr puedes obtener de
vuelta todas las secciones
de texto almacenadas en la lista. Por ejemplo, si quisieras el segun
do elemento de la lista, podras
evaluar:
( c a r ( n t h c d r 1 ( " o t r a p i e z a de t e x t o "
" un p e d a z o de t e x t o "
" texto final ")))
que debe mostrar "un pedazo de texto ".
Las funciones de Emacs que hacen kill y yank en realidad son ms c
omplejas. Para empezar, el
anillo de la muerte (equivalente a nuestra lista en el ejemplo anter
ior) es circular (de ah el nombre
de anillo) por lo que una vez que llegas al ltimo elemento, si quiere
s seguir buscando partes de
texto en el anillo, te debe llevar al primero de la lista.
La funcin principal de este captulo tiene que ver con el anillo de

la muerte y cmo se usa. Para


que te vayas aclimatando, primero te mostraremos una funcin llamada z
aptochar.

318
Extendiendo tu ambiente
zap to char

La funcin zap to char elimina el texto en la regin comprendida entre l


a localizacin del
cursor (i.e. el punto) y la siguiente aparicin de un carcter (incluido este
ltimo) dado. El texto que
zap to char elimina se guarda en el anillo de la muerte; y puede sacarse
de ah con C y (yank). Si
se le pasa un argumento pre jo, entonces elimina el texto hasta encontrar e
se nmero de presencias
del carcter.

Entonces, si el cursor estuviera al inicio de esta oracin y el carcter


fuera s, Entonces, sera
eliminada. Si el argumento pre jo fuese 2, Entonces, s sera eliminado.

Para determinar cunto texto tiene que ser eliminado, zap to char utili
za una funcin de bs
queda. Las bsquedas se usan extensivamente en el cdigo que manipula texto e
n Emacs, por lo que
mientras revisamos estas funciones te rogamos pongas especial atencin en l
a funcin de bsqueda
y en la de borrado.

9.6 Funciones fundamentales


319
1
2

( d e f u n zapt o c h a r ( a r g c h a r )
" Mata e l t e x t o h a s t a l a ARG s i m a a p a r

i c i n de CHAR.
3
Va h a c i a a t r s s i ARG e s n e g a t i v o .
Marca un e r r o r s i CHAR
4
no e s e n c o n t r a d o . "
5
( i n t e r a c t i v e " p \ ncZap t o c h a r : " )
6
( k i l l r e g i o n ( p o i n t )
7
( progn
8
( s e a r c h f o r w a r d ( c
h a r t o s t r i n g c h a r ) n i l n i l a r g )
9
( point ) ) ) )
Analicemos ahora la funcin por partes:
1. La seccin interactiva, ( interactive " p\ncZap to char : ") , n
os indica tres cosas:
a) El * le dice a Emacs que marque un error si el buffer est p
rotegido contra escritura. O
en otras palabras, si es de slo lectura. Esto es obvio,
porque si no podemos editarlo, no
podemos borrar texto alguno.
b) La p le dice a Emacs que la funcin recibir como primer a
rgumento el argumento
pre jo. ste ya lo conocas.
c) El \n separa los argumentos y la c le dice a Emacs
que debe pedir un carcter, utilizando
para ello el prompt: Zap to char : .
2. El cuerpo de la funcin contiene la funcin que mata (esto es, q
ue elimina) el texto de la
regin desde la posicin actual (la primera presencia de ( point
) ) hasta la posicin (incluida
ella) donde se encuentra el carcter. Esto es la primera parte
:
6
( k i l l r e g i o n ( p o i n t ) . . .
La siguiente parte del cdigo utiliza la funcin progn. El cu
erpo de progn consiste de llamadas
a search forward y nuevamente a point. Es ms fcil entender
el funcionamiento de progn
una vez que entiendas cmo funciona la bsqueda hacia adelant
e, search forward, as que
primero veremos esta ltima y luego regresamos a progn.
3. La funcin search forward se usa para localizar el carcter que
marca la posicin hasta la que
queremos cortar el texto. Si la bsqueda es exitosa, deja el p
unto inmediatamente despus del
ltimo carcter en la cadena objetivo (en este caso, la cadena o
bjetivo es slo de un carcter de
largo). Si la bsqueda es hacia atrs, deja el punto justo antes
del primer carcter en la cadena
objetivo. Adems, search forward regresa t para sealar verdader
o, por lo que mover el punto
es un efecto secundario.
En zap to char, la llamada a la funcin search forward luce co
mo:
8
( s e a r c h f o r w a r d ( c h a r t o s t r i n

g c h a r ) n i l n i l a r g )
La funcin search forward toma cuatro argumentos:
a) El primer argumento es el objetivo, aquello que estam
os buscando. ste debe ser una
cadena, tal como s.
Nota que en elisp, un carcter no es visto (automticame
nte) como una cadena de un
solo carcter. Por eso usamos (chartostring char) para t
ransformar el carcter a una
cadena, como search forward lo quiere.

320
Extendiendo tu ambiente
b) El segundo argumento limita la bsqueda; es una posicin espec ca en el
buffer. En este
caso, la bsqueda puede ir hasta el nal del buffer, por lo que no e
stamos limitando la
bsqueda y entonces usamos nil .
c) El tercer argumento le dice a la funcin qu debe hacer si la bsqueda
falla puede
sealar un error (e imprimir un mensaje) o puede regresar nil . Us
ar nil como tercer
argumento provoca que la funcin marque un error.
d) El cuarto argumento para search forward es una cuenta de repetic
in cuntas presen
cias de la cadena debe buscar. Este argumento es opcional y si l
a funcin se llama sin
una cuenta de repeticin, la funcin recibe por omisin 1. Si este arg
umento es negativo,
la bsqueda va hacia atrs.
En su forma general, search forward se ve as:
( s e a r c h f o r w a r d " cadena o b j e t i v o "
l m i t e del a b s q u e d a
queh a c e r s i l a b s q u e
d a f a l l a
c u e n t a de r e p e t i
c i n )
4. La funcin progn es tal que provoca que todos sus argumentos sean evalu
ados en secuencia y
luego regresa el valor del ltimo. Las expresiones previas (a la ltima)
se evalan slo por sus
efectos secundarios, ya que sus valores de regreso se descartan.
Su forma general es:
( progn
cuerpo . . . )
En zap to char, la expresin progn tiene que hacer dos cosas: poner el
punto en la posicin
correcta y luego regresar la posicin de ese punto para que kill regio
n pueda hacer su trabajo.
El primer argumento de progn es search forward. El segundo argumento
es (point). Esta
expresin regresa el valor del punto, que en este caso ser la localizac
in a la que se ha movido
search forward.
De acuerdo, de acuerdo, fue una explicacin muy larga. Lo sentimos, pero
no conocas search
forward y progn, que son dos funciones muy tiles y muy usadas en elisp. As q
ue aqu te va
un resumen de cmo funciona zap to char ahora que sabes cmo funcionan todas l
as funciones
auxiliares:
El primer argumento pasado a kill region es la posicin del punto en el
momento que ejecutas
zap to char. Dentro del progn, la funcin de bsqueda mueve el punto justo des
pus del carcter
hasta el que queremos cortar; point regresa el punto de esta nueva posicin.
La funcin kill region
pone estos dos valores juntos, el primero como inicio de la regin y el segu

ndo como el punto nal


de sta y elimina la regin.
La funcin progn es necesaria porque kill region recibe slo dos argumento
s; y fallara si
search forward y point fueran escritas en secuencia, en lugar de como argu
mentos de progn.
Es decir que progn es el segundo argumento de kill region y su valor de re
greso es el valor que
regresa ( point ) .
Obviamente, sta no es la nica manera de hacer esta funcin: bien pudimos h
aber guardado el
valor regresado por search forward en una variable local (con let) y luego
usarlo en kill region.

9.6 Funciones fundamentales


321
Pero esta forma que hemos revisado, es la que se usa desde la versin
19 de Emacs y es ms elegante,
adems de que muestra el uso de una nueva funcin que te servir mucho: pr
ogn.

delete region: nota cultural


La funcin zap to region que acabamos de ver utiliza a la funcin k
ill region; sta a su vez
utiliza otras dos funciones, copy region as kill, que veremos en un
minuto, y delete region. La
funcin delete region es interesante y muy sencilla; lo nico que hace e
s borrar texto de forma tal
que no puedas recuperarlo.
Sin embargo, delete region no est escrita en Emacs elisp sino en
C. Es una de las primitivas
de Emacs.
9.6.3.

Inicializacin de variables: defvar

sta es la ltima parada antes de poder explicar copy region as kill


y es importante, porque la
variable kill ring, el lugar donde se guardan todas las secciones de
texto que se matan, se crea con
defvar.
La funcin defvar viene de de ne variable y es una forma especial, s
imilar a setq ya que
asigna un valor a una variable. Sin embargo, es distinta a setq en d
os aspectos: primero, slo asigna
un valor a una variable si la variable an no tiene uno; si la variabl
e ya tiene un valor, defvar
no sobreescribe su valor actual. Segundo, defvar tiene una cadena qu
e sirve para documentar la
variable.
Para ver el valor actual de una variable cualquiera, usamos desc
ribe variable, usualmente li
gada a C h v . Por ejemplo, checa lo que dice C h v cuando le pasas
kill ring. Vers dos cosas
importantes: primero su valor, que puede ser muy pequeo o muy grande,
dependiendo de cun
to hayas matado en la sesin de Emacs hasta el momento; vers tambin su d
ocumentacin, que
comienza ms o menos as:
Documentation :
L i s t of k i l l e d t e x t sequences .
La de nicin de kill ring usando defvar puede ser:
( d e f v a r k i l l r i n g n i l
" L i s t of k i l l e d t e x t sequences . " )
Como puedes notar, su valor inicial es nil , que tiene sentido,
ya que si no has guardado nada en
el anillo no esperaras que cuando quieras pegar (recuperar del anillo
, o revivir)9 , algo apareciera,
o s?

9
No hay traduccin exacta para yank, pero en notacin de muchos otros
editores de texto, equivaldra a
pegar, slo que es mucho ms poderoso porque tiene memoria.

322
Extendiendo tu ambiente
9.6.4. copy region as kill
La funcin copy region as kill copia una regin de texto del buffer
en una variable que se llama
kill ring. Si llamas a kill region as kill inmediatamente despus de ha
ber ejecutado un kill region,
Emacs junta la seccin de texto recin copiada con la anterior. Esto sig
ni ca que si haces un yank
despus, obtendrs todo el texto de las ltimas dos operaciones de muerte.
Por otro lado, si algn
otro comando precede a la accin de copy region as kill, la funcin copi
a el texto en una entrada
separada en el anillo de la muerte.
Aqu est el cdigo de la funcin. Probablemente en versiones muy recie
ntes de Emacs sea
distinto; de cualquier forma esta versin es lo su cientemente compleja
e interesante para que la
analicemos aqu.
1
( d e f u n copyr e g i o n as k i l l ( beg end )
2
" S a l v a l a r e g i n como s i h u b i e s e s i d o matada ,
p e r o no l a mata . "
3
( interactive " r ")
4
( i f ( eq l a s t command k i l l r e g i o n )
5
( k i l l a p p e n d ( b u f f e r s u b s t r i n g beg e
nd ) ( < end beg ) )
6
( s e t q k i l l r i n g
7
( c o n s ( b u f f e r s u b s t r i n g beg end
) k i l l r i n g ) )
8
( i f ( > ( l e n g t h k i l l r i n g ) k i l l r i n g max )
9
( s e t c d r ( n t h c d r (1 k i l l r i n g max ) k i
l l r i n g ) n i l ) ) )
10
( s e t q t h i s command k i l l r e g i o n )
11
( s e t q k i l l r i n g yankp o i n t e r k i l l r i n g ) )
Si revisas con cuidado la de nicin notars que tiene sus cinco parte
s. Los dos argumentos, beg
y end y el cdigo r de interactive (que regresa la regin, como dos argume
ntos numricos conse
cutivos) deben darte una idea respecto a qu hacen referente al inicio
(beg, por beginning) y n (end)
de la regin. Los parmetros estn en ingls, porque cuando comiences a ver
el cdigo de distintas
funciones de Emacs por tu cuenta, vers que la regin se usa exhaustivam
ente y curiosamente stos
son los nombre favoritos para nombres de parmetros en funciones que m
anejan la regin.
El cuerpo de la funcin comienza con un if lnea 4 . Nos sirve para
distinguir dos tipos de
situaciones: saber si el comando ejecutado inmediatamente antes que s
te fue (o no) un kill region.
En caso de que haya sido, la nueva regin muerta se pega a la anterior
. En caso contrario, se inserta
(la regin muerta) al inicio del anillo de la muerte.
Las ltimas expresiones son setq. Una asigna a la variable this co

mmand el valor kill region


y la otra hace que la variable kill ringyankpointer apunte al anillo de
la muerte.
El cuerpo del copy region as kill amerita una discusin ms detalla
da y la mostramos a conti
nuacin:
El cuerpo
La funcin copy region as kill fue escrita con sumo cuidado para poder
:

9.6 Funciones fundamentales


323
Fusionar uno o ms comandos que matan en una sola pieza de texto
que pudiera ser pegada
nuevamente con un solo comando. No tienes idea lo til que es es
to, pero eventualmente lo
sabrs.
Todo lo que matas (o los comandos que matan hacia adelante) se
aaden al nal del texto co
piado previamente, y los comandos que copian o matan texto en
reversa se copian al principio
del texto copiado previamente. De esta manera, las palabras en
el texto (que se va pegando) se
mantienen en el orden correcto.
La funcin hace uso de dos variables para mantener el rastro de
los comandos actual y anterior
que ejecut Emacs. Las dos variables son this command y last command.
Normalmente, siempre que una funcin se ejecuta Emacs asigna esa
funcin a this command,
en este ejemplo copy region as kill. Al mismo tiempo, Emacs asigna e
l valor de last command al
valor anterior de this command. Sin embargo, el comando copy region a
s kill es diferente; asigna
el valor de this command a kill region, que es el nombre de la funcin q
ue llama a copy region
as kill.
En la primera parte del cuerpo de copy region as kill, una exp
resin if determina si el valor de
last command es kill region. Si lo es, la parte entonces del if se eva
la; usa la funcin kill append
para concatenar el texto copiado con esta llamada al texto que ya se
encuentra en la primera posicin
del anillo de la muerte. Por otro lado, si el valor de last command n
o es kill region, entonces la
funcin copy region as kill agrega un nuevo elemento al anillo de la m
uerte.
La funcin kill append
La funcin kill append que
l se muestra a conti
nuacin:
( d e f u n k i l l a p p e
( s e t c a r k i l l r
( i f b e
(
l r i n g ) )
( c o
i n g ) ) ) )

se usa en la de nicin de copy region as kil


n
i
f
c

d
n
o
o

( s t r i n g b e f o r e p )
g
r e p
n c a t s t r i n g ( c a r k i l

n c a t ( c a r k i l l r i n g ) s t r

Como siempre, podemos analizarla por


ocumentacin). La funcin
setcar utiliza concat para concatenar el
lo de la muerte. Si pre agrega o
post agrega, depende del resultado de la
( i f b e f o r e p
( c o n c a t
r i n g ) )
( c o n c a t ( c

partes (nota que no tiene d


nuevo texto al car del anil
expresin if:
s t r i n g ( c a r k i l l
a r k i l l r i n g ) s t r

i n g ) )
Si la regin que se est matando est antes que la regin que mat el ltimo
comando, entonces
debemos agregar antes (pre agregar) el texto; contrariamente, si el
texto muerto sigue a lo que se
mat con anterioridad, entonces debemos agregarlo despus. La expresin if
depende del predicado
beforep para decidir si el texto nuevo debe ir antes o despus de lo qu
e est en el car del anillo de
la muerte.
El smbolo beforep es el nombre de uno de los argumentos de kill ap
pend. En la funcin
copy region as kill su valor se calcula con (< end beg), lo que es v
erdadero cuando el texto que

324
Extendiendo tu ambiente
estamos cortando va antes que los que estn en el car del anillo de la
muerte (y por ende ser
pre agregado).
Pre agregar est representado por:
( c o n c a t s t r i n g ( c a r k i l l r i n g ) )
Post agregar por:
( c o n c a t ( c a r k i l l r i n g ) s t r i n g )
Para entender cmo funciona esto, primero necesitamos entender cmo f
unciona concat. La
funcin concat liga o une dos cadenas de texto. El resultado es una cad
ena. Por ejemplo,
( c o n c a t " abc " " def " )
regresa "abcdef".
Ahora s, podemos entender rpidamente cmo funciona kill append: modi ca
el contenido
del anillo de la muerte. La funcin setcar cambia en realidad el primer
elemento de la lista. Logra
esto usando concat para reemplazar el viejo contenido del primer elem
ento del anillo con un nuevo
primer elemento que se obtiene concatenando el viejo texto con el nue
vo (el texto recin muerto,
esto es). El nuevo texto se pone antes que el viejo o al revs, dependi
endo de si estaba antes o
despus en el buffer, respectivamente.
La parte nal de copy region as kill
Muy bien; despus de haber entendido
l cuando el comando
previo fue tambin un kill region, ahora
qu pasa cuando el
comando previo no fue kill region?
Lo que hace es asignar como valor al
a lista que es igual a la anterior,
pero ahora como primer elemento tiene el
logra con la seccin:

cmo funciona copy region as kil


tenemos que ver la ltima parte:
anillo de la muerte una nuev
texto recin cortado. Esto se

6
( s e t q k i l l r i n g
7
( c o n s ( b u f f e r s u b s t r i n g beg end ) k
i l l r i n g ) )
La siguiente parte es nuevamente una expresin if. Esta expresin sir
ve nicamente para man
tener acotado el tamao del anillo de la muerte; usualmente su valor es
30. Es decir, evita que el
anillo de la muerte guarde ms all del valor que tenga kill ring max. Es
to se logra con la seccin
de cdigo:
8
( i f ( > ( l e n g t h k i l l r i n g ) k i l l r i n g max )
9
( s e t c d r ( n t h c d r (1 k i l l r i n g max ) k i l
l r i n g ) n i l ) )
Lo que dice esta expresin if es que si pasa del tamao permitido, en

tonces convierte en nil el


ltimo elemento del anillo de la muerte. Ya vimos las funciones setcdr
y nthcdr as que esto no
debe parecerte tan extrao. Salvo quiz por el uso de la funcin llamada 1,
que resta uno a su
argumento.
A continuacin siguen dos asignaciones en el cdigo de copy region as
kill, la primera:

9.6 Funciones fundamentales


325
10

( s e t q t h i s command k i l l r e g i o n )

Nota que estas dos expresiones no son parte del if anterior,


por lo que se ejecutan siempre
que se ejecute la funcin. Lo nico que hace es guardar el smbolo kill
region en la variable
this command, por lo que si volvemos a copiar algn texto inmediatam
ente despus, ste ser
pegado al car del anillo de la muerte.
Finalmente, la ltima lnea
11
( s e t q k i l l r i n g yankp o i n t e r k i l l r i n g )
actualiza el apuntador global kill ringyankpointer que dice en todo
momento cul es el siguiente
texto a revivir. Esta variable es usada por yank y yank pop, pero
, por cuestiones de espacio, ya no
ceremos estas dos ltimas funciones veremos aqu.
9.6.5.

Resumen

Aqu est un resumen de las funciones que introdujimos recientemente:


car Regresa el primer elemento de una lista.
cdr Regresa el resto de la lista.
nthcdr Regresa el resultado de sacar el cdr n veces a una lista.
cons Construye una lista agregando su primer argumento como prime
r elemento a la lista que
recibe como segundo argumento. Si no recibe una lista como s
egundo argumento, entonces
crea lo que se conoce como una lista impropia, aunque todo l
o que se puede hacer con listas
impropias se puede hacer con listas normales, as que no debera
preocuparte.
setcar Cambia el primer elemento de una lista.
setcdr Cambia el resto de una lista.
progn Evala cada uno de sus argumentos en secuencia y regresa el v
alor del ltimo, descartando
todos los valores intermedios.
search forward Busca una cadena y si la encuentra, mueve el punto
. Recibe cuatro argumentos:
1. La cadena a buscar (objetivo).
2. Opcional, un lmite para la bsqueda.
3. Opcional, qu hacer si falla, regresa nil o un mensaje de
error.
4. Opcional, cuntas veces repetir la bsqueda; si el argument
o es negativo, busca hacia
atrs.
kill region Corta el texto entre el punto y la marca del buffer y
lo guarda en el anillo de la muerte,
para que puedas revivirlo con yank.
delete region Elimina el texto entre el punto y la marca del buff
er y lo descarta. No puedes
recuperarlo.
copy region as kill Copia el texto entre el punto y la marca al a
nillo de la muerte para que
puedas recuperarlo. La funcin ni corta ni mueve el texto del

buffer.

326
Extendiendo tu ambiente
Actividad 9.42 Escribe una funcin interactiva que busque una cadena. S
i la bsqueda encuentra
la cadena, deja el punto despus de sta y despliega el mensaje La encontr.
(NO utilices search
forward como el nombre de tu funcin; si lo haces, sobre escribirs la fu
ncin existente que viene
con Emacs. Usa un nombre como busca.)
Actividad 9.43 Escribe una funcin que imprima el tercer elemento del a
nillo de la muerte en el
rea de eco, si existe, claro. Si el anillo de la muerte no tiene un te
rcer elemento, manda un mensaje
apropiado.

9.7. Lluvia de funciones tiles de Emacs elisp


Ponte cmodo y reljate, ya que en esta seccin no hay ejercicios, slo
funciones y explicaciones
breves. Sin embargo, si las tecleas y pruebas, estamos seguros que te
divertirs, las entenders mejor
y te sern tiles como patrones para funciones futuras.
9.7.1.

Quin o qu es ASCII?

Es comn imprimir la tabla de carcteres ASCII10 , pero obviamente ha


cerlo tecleando carcter
por carcter no es precisamente una idea brillante. Por un lado son 128
carcteres (27 ) en el ASCII
estndar y 256 en el extendido (28 ). Aqu est una funcin en elisp que lo h
ace por nosotros.
( d e f u n show a s c i i ( )
" M u e s t r a e l ASCII como una l i s t a de p a r e j a
s . "
( interactive )
( l e t (( counter 0))
( dotimes ( i 256)
( i n s e r t ( f o r m a t "( %d, %c ) " i i ) )
( when ( eq c o u n t e r 1 0 )
( insert "\ n ")
( setq counter 0))
( setq counter ( incf counter ) ) ) ) )
Slo evala la funcin; despus muvete a un buffer que puedas editar y ejecuta
M x showascii y vers aparecer varias lneas, cada una con diez o menos de
tales parejas. Por
ejemplo, la sptima lnea debe lucir as:
( 6 1 , = ) ( 6 2 , > ) ( 6 3 , ? ) ( 6 4 ,@) ( 6 5 ,A) ( 6 6 , B) ( 6
7 , C) ( 6 8 ,D) ( 6 9 , E ) ( 7 0 , F )

y que puedes leer cmo el cdigo ASCII de A es 65, el de B es 66 y as sucesiv


mente.
10
ASCII son las siglas de American Standard Code for Information
Interchange, aunque se utiliza para

referirnos al conjunto de codi cacin que predomin hasta hace un par de aos
. Hoy da Unicode es el
estndar de facto para codi cacin.

9.7 Lluvia de funciones


327
Lo ms interesante de esta funcin es el uso de la funcin dotimes
que, como su nombre indica,
hace algo un cierto nmero de veces. Tiene la siguiente sintaxis:
( d o t i m e s (VAR COUNT [ RESULT ] ) BODY . . . )
Evala BODY ligando VAR a un entero sucesivo desde 0 (cero) i
nclusive, hasta COUNT (no
incluido). Despus evala RESULT, para obtener el valor de regreso,
o regresa nil por omisin.
Ahora ya debe ser obvio cmo funciona la funcin show ascii: pr
imero inicializa el contador
lstinline|counter| en 0; utiliza i como ndice para recorrer todos
los posibles valores ASCII desde
0 hasta 255 (recuerda que el 256 no est incluido) y va imprimiend
o cada valor numrico y su
correspondiente carcter. Esto lo hace la funcin format. Lo que sig
ue, sirve para agregar una nueva
lnea cada que hemos impreso diez parejas y no tiene mayor complic
acin.
9.7.2.

Cmo numerar una regin de lneas?

Algo que puede ser muy til, aunque sea poco comn, es numerar
una lista de objetos, digamos
la lista de tus libros que casualmente tienes escrita en un arch
ivo. Con lo que sabes de edicin lo
podras hacer ms o menos as: visitas el archivo en un buffer de Emac
s, te mueves al primer carcter
de la primera lnea y tecleas 1. ; luego te mueves a la siguiente ln
ea, regresas a la primera posicin
en la lnea y tecleas 2. ; y as sucesivamente.
No suena muy difcil. Con un poco de prctica podras llegar a la
primera posicin de la siguien
te lnea con teclear slo dos combinaciones de teclas y agregar un nm
ero (uno o ms dgitos), un
punto, un guin y un espacio; son slo unos cuantos carcteres ms. Y en
efecto, es muy sencillo.
Desgraciadamente t tienes 8272 libros en tu lista! Adems, como eres
muy escrupuloso quieres
que todos los ttulos de tus libros comiencen en la misma columna,
o lo que es lo mismo quieres que
la numeracin agregue exactamente el mismo nmero de carcteres a cada
lnea. No hay problema,
aqu esta una funcin en elisp que lo hace:
1
( d e f u n numera ( beg end )
2
" Numera l a s l i n e a s en l
3
( interactive " r ")
4
( l e t
( ( l i n e s ( c o u
5
( p a d d i n g (
t r i n g l i n e s ) ) ) )
6
( g o t o c h a r beg )
7
( dotimes ( l i n e l i n e
8
( i n s e r t ( format
9
( c o
t " % cd " p a d d i n g ) " d. " )

a r e g i n . "
n t l i n e s beg end ) )
l e n g t h ( i n t t o s
s )
n c a t " %" ( f o r m a

10
11

(1+ l i n e ) ) )
( f o r w a r d l i n e 1 ) ) ) )

Hay pocas cosas nuevas en esta funcin. Por ejemplo, la funcin


count lines (lnea 4) que
regresa el nmero de lneas que hay en la regin; la funcin int to stri
ng (lnea 5) que convierte un
entero a una cadena. Todo lo dems debe ser medianamente obvio, sa
lvo quiz por el detalle de la
variable llamada padding (lnea 5), que la usamos para saber de cun
tas posiciones tiene que ser la
cadena que vamos a agregar.

328
Extendiendo tu ambiente

El razonamiento que usamos fue el siguiente: si hay seis lneas en l


a regin, entonces el grueso
de la cadena que tenemos que agregar en cada lnea es: un carcter (para e
l dgito de la lnea),
un carcter para el punto, uno para el guin y un espacio, en total cuatro
. Pero si hay 28 lneas,
entonces necesitamos un carcter ms (los primeros nueve sern de un dgito y
tendrn un espacio
a la izquierda del dgito) y los siguientes ya son de dos, y as sucesivam
ente. Pues bien, padding
lnea 9 es justamente el nmero de carcteres que debe ocupar el nmero de lne
, y format
entiende ese parmetro y agrega los espacios en blanco necesarios a la i
zquierda del nmero.

9.7.3.

Indentar es un placer, borrar espacios en blanco un martirio

Una de los aspectos ms interesantes de Emacs es que sabe cmo indent


ar el texto de mis
programas. Sin embargo, como casi cualquier otra cosa en esta vida, no
es perfecto. Por ejemplo,
digamos que al nal de una lnea pongo un carcter que abre un nuevo bloque
(sin importar el
lenguaje de programacin). Emacs detecta el carcter e inserta una nueva ln
ea y luego, digamos
otros siete espacios en blanco para que comiences a poner el cuerpo de
l bloque. En la mayora
de los casos esto es una bendicin. Sin embargo, supongamos que tecle un
carcter de ms en
la lnea anterior (cerca del nal de la lnea), cmo regreso? Lo ms probable es
que intente usar
BackSpace para borrar el carcter y continuar.
Lo que en realidad sucede es que tienes que teclear ocho o diez v
eces BackSpace , en lugar
de slo una o dos, porque primero borras todos los espacios blancos que
agreg Emacs. Claro,
te preguntars por qu no utilizar las funciones de posicionamiento de cur
sor y luego borramos y
listo. Pues por muchas razones, la primera de ellas que usualmente uno
sabe lo que tecle mal casi
instantneamente. Tus dedos viajan en el teclado ms rpido de lo que lees,
y mientras detectas
el error uno o dos carcteres ms ya fueron impresos; lo natural, o instin
tivo si as lo pre eres,
es inmediatamente teclear dos o tres veces (dependiendo de qu tan lejos
est el error) la tecla
BackSpace y continuar editando.
Algunos modos ya incluyen variables que modi can el comportamiento d
e la funcin que se

ejecuta cuando presionamos BackSpace , pero algunos no. Aqu est una vers
in de una funcin
que borra inteligentemente todos los espacios en blanco hasta llegar a
un carcter no blanco y
despus el cdigo para instalarla en Emacs:

9.7 Lluvia de funciones


329
1
( d e f
2
" B
l a n c o s e s p a c i o
3
t a b u
y d e l e t e key no
4
e s n i
ue p r e c e d e n l a p o s
5
a c t u
6
( i
7
( i
8
9
r e f i x n u m e r i c v
10
11
12
13
h e r e )
14
1 ) ) ) ) )

u
o
s
l

n mye l e c t r i c d e l e t e ( a r g )
r r a e l c a r z c t e r p r e c e d e n t e o b
,
a d o r e s , y n u e v a s l i n e a s . S i myhungr

l
i
a
n
f

,
c
l
t
(

e n t
i n
son b
e r a
o r (

(
a l u
( l e
(
(

f
e
t
s
i

u
a
(
k
f

o n c e s t o d o s l o s b l a n c o s q
o r r a d o s . "
c t i v e "P ")
n o t myhungry d e l e t e key
arg )
n c a l l myd e l e t e f u n c
r g ) )
( here ( point ) ) )
i p c h a r s b a c k w a r d "
(/= ( point ) here )
( d e l e t e r e g i o n ( p

)
t i o n ( p
\ t \ n " )
o i n t )

( f u n c a l l myd e l e t e f u n c t i o n

Primero, nota como el if (linea 7) nos sirve para discernir


los casos que maneja la funcin. Si la
variable myhungrydeletekey, que no aparece en el cuerpo de la funcin
, es nil o si le pasamos
un argumento numrico a la funcin, entonces se ejecuta:
8
( f u n c a l l myd e l e t e f u n c t i o n ( p r e f i x n
u m e r i c v a l u e a r g ) )

En esta lnea hay dos funciones nuevas, pero ambas son triviales:
pre x numeric value que regresa
el valor numrico del argumento pasado a la funcin y funcall que ev
ala su primer argumento como
si fuera una funcin, pasndole el resto de los argumentos. Nota que
no es equivalente a:
( myd e l e t e f u n c t i o n ( p r e f i x n u m e r i c v
a l u e a r g ) )

porque esto tratara de buscar una funcin llamada my delete functio


n, pero tal funcin no existe
y de existir probablemente no sera lo que nosotros buscamos. Es u
na variable, cuyo valor es, as es
adivinaste: el nombre de una funcin. Hablemos un poco sobre la ra
zn de hacerlo as; porque si lo
piensas dos veces parece una complicacin innecesaria; por qu no pon
emos ah el nombre de la
funcin que es el valor de my delete function? Porque hay muchas f

unciones similares para borrar


carcteres y quieres darle la oportunidad a los usuarios de utiliz
ar la que mejor les acomode.
Ahora, qu pasa si la condicin del if es falsa? Se ejecuta la si
guiente parte (lineas 1014), que
s parece una funcin como las que hemos visto. Primero guardamos el
valor actual del punto en
una variable llamada here (linea 10), nos saltamos todos los bla
ncos (hacia atrs) y ahora vemos si
en realidad nos movimos o no. Si nos movimos, entonces borramos
la regin; si no nos movimos
(quiere decir que estamos en una literal) entonces slo borramos u
n carcter. Nuevamente borramos
con la funcin para borrar que el usuario quiera.
Por ejemplo, para programar en elisp, puedes poner esto en tu /.e
macs:

330
Extendiendo tu ambiente
( addhook emacsl i s p modehook
( lambda ( )
( d e f i n e key emacsl i s p modemap " \ Cm" n e w l i n e andi n
n t )
( d e f i n e key emacsl i s p modemap ( b a c k s p a c e ) mye l e
t r i c d e l e t e )
( s e t q myd e l e t e f u n c t i o n backwardd e l e t e c h a r u
n t a b i f y
myhungry d e l e t e key t ) ) )
que bsicamente le dice a Emacs que cada vez que tecleas Enter , deb
e pasar a la siguiente lnea
y luego indentar adecuadamente. Tambin le indica que BackSpace debe
ejecutar la funcin que
recin analizamos; por ltimo le doy nombre a las dos variables que se
usan dentro del cuerpo de la
funcin.
9.7.4.

Un ejercicio totalmente intil, o eso parece

Cuntas veces has tenido la necesidad de partir una oracin en una


lista de las palabras que
constituyen la oracin? Nunca? En realidad no es comn, al menos no en
elisp. Sin embargo, es
un buen ejemplo para mostrar el manejo de cadenas y listas en elis
p.
La funcin que vers usa dos funciones auxiliares. A decir, las do
s funciones auxiliares son las
que hacen el trabajo y la funcin principal slo oculta detalles que el
usuario de la funcin no tiene
por qu conocer. Esto es una prctica usual en programacin: slo pide al
usuario los parmetros
que el usuario conoce.
1
( d e f u n s t r i n g t o k e n i z e r ( c h a r s t r )
2
" R e g r e s a una l i s t a que c o n t i e n e t o d o s l
o s e l e m e n t o s
3
en l a c a d e n a STR que e s t n s e p a r a d o s p o r CHAR .
"
4
( s t r i n g t o k e n i z e r aux c h a r s t r n i l ) )
5
6
( d e f u n s t r i n g t o k e n i z e r aux ( c h a r s t r r e s
)
7
" R e g r e s a una l i s t a , RES , que c o n t i e n e t o
d o s l o s e l e m e n t o s
8
en l a c a d e n a STR que e s t n s e p a r a d o s p o r CHAR .
"
( ( i n d e x ( i n d e x o f c h a r s t r 0 ) ) )
9
( l e t
10
( i f ( n u l l index )
11
( i f ( s t r i n g e q u a l s t r " " )
12
( reverse res )
13
( r e v e r s e ( cons s t r r e s ) ) )
14
( s t r i n g t o k e n i z e r aux c h a r ( s u b s t
r i n g s t r ( 1 + i n d e x ) )
15
( cons ( s u b
s t r i n g s t r 0 index )

16

res )

) ) ) )
17
18
( d e f u n i n d e x o f ( c h a r s t r c o u n t )
19
" R e g r e s a e l n d i c e de l a p r i m e r a a p a r i
c i n de CHAR
20
en l a c a d e n a STR empezando en COUNT . "
21
( cond ( ( s t r i n g e q u a l s t r " " ) n i l )
22
( ( c h a r e q u a l ( a r e f s t r 0 ) c h a r
) c o u n t )
23
( t ( i n d e x o f c h a r ( s u b s t r i n g s
t r 1 ) ( 1 + c o u n t ) ) ) ) )

9.7 Lluvia de funciones


331
string tokenizer es la funcin interfaz y recibe dos parmetros, la cad
ena que vamos a seccionar y
el carcter que separa las secciones. Por la pregunta con la que inic
iamos la seccin, podra pensarse
que siempre usaramos un espacio en blanco como separador. Finalmente
las palabras en una oracin
casi siempre estn separadas por un espacio (ignorando muchas reglas
gramaticales, claro, porque
los signos de puntuacin y ms de un espacio tambin delimitan palabras).
Pero no lo hicimos
as, porque esta funcin es ms general y podemos fcilmente hacer una espe
cializacin de string
tokenizer que sirva para separar palabras en una oracin.
Bien. Nota que esta funcin no hace ms que llamar a string tokeni
zer aux, pero con tres
parmetros. Los primeros dos son los que pas el usuario (una cadena y
un carcter separador) y un
tercero, nil o la lista vaca. La funcin auxiliar usar este ltimo parmetr
o para ir almacenando las
secciones (o sub cadenas).
Veamos entonces cmo funciona string tokenizer aux. Primero calc
ula el ndice dentro de la
cadena STR en el cul est la primera presencia del carcter separador en
realidad el clculo lo
hace la segunda funcin auxiliar, index of, pero por el momento vas a
tener que creerme que s
funciona, es decir, que s regresa un entero que representa la posicin
(en la cadena) de la primera
presencia del carcter separador .
A continuacin viene una serie de pruebas; primero preguntamos s
i el ndice es nil (linea 10);
si lo es, entonces preguntamos si la cadena es la cadena vaca en la
linea 11 (i.e. si ya consumimos
toda la entrada). Si la respuesta es a rmativa, regresamos el resulta
do en reversa (ms adelante
explicar por qu en reversa). Si la cadena an no es la cadena vaca, quie
re decir que el contenido
completo de la cadena debe ser la ltima parte del resultado (ya no s
e puede separar ms); asi que
lo agregamos al resultado y lo regresamos.
Como la funcin string tokenizer aux es una funcin recursiva, tie
ne dos partes importantes.
La primera, la clusula de escape, que es la parte que acabamos de re
visar en el prrafo anterior.
Ahora, como buen ejemplo de funcin recursiva, tambin tiene una parte
donde se llama a s misma.
Veamos cmo llegamos ah. Si el ndice no es nil (la primera pregunta en
la linea 10), entonces
sabemos que index of regres un nmero, un ndice en la cadena, por lo qu
e sabemos hasta dnde
hay que cortar y eso hacemos: cortamos desde el inicio de la cadena
hasta el ndice (sin incluir al
carcter separador) y agregamos esto al inicio de la lista resultado.
Ahora tenemos que analizar el
resto de la cadena y por eso hacemos una llamada recursiva a la fun
cin misma, pero ahora usando
como parmetros: (1) el mismo carcter separador; (2) el resto de la ca

dena (despus del primer


carcter separador y sin incluirlo) y (3) con la nueva lista
o que ya tiene en su primera
posicin la cadena recin cortada.
Esto se repite tantas veces como carcteres separadores
la cadena inicial, hasta que
fnalmente termina y regresa la lista. Por ejemplo, supn que
la siguiente llamada:
( s t r i n g t o k e n i z e r ? " e s una b o n i t
e n a " )

resultad
contenga
hacemos
a c a d

La notacin ? (signo de interrogacin y espacio) le dice a Emacs qu


e le estamos pasando un ca
rcter, en este caso un espacio blanco. Lo que regresar es una lista d
e la forma (" es" "una" " bonita " "cadena"
Nota cmo ninguna de las sub cadenas (palabras) contiene al carcter se
parador.
La funcin auxiliar index of es tambin una funcin recursiva. Tiene
dos casos base (o clusulas
de escape): la primera se activa cuando se agota la cadena (que se
va recortando en un carcter
con cada llamada a s misma); la segunda se activa cuando el carcter q
ue estbamos buscando es
encontrado. Su tercer parmetro es un contador, que si le pasamos 0 (
cero) nos regresar el ndice en

332
Extendiendo tu ambiente
la cadena donde
siguiente ejemplos deben
aclarar un poco
( i n d e x o
2
( i n d e x o
3

se encuentra el carcter separador por primera vez. Los


la situacin:
f ? " e s una b o n i t a c a d e n a " 0 )
f ? " una b o n i t a c a d e n a " 0 )

que si cuentas desde 0 son los ndices del


mbos casos. Para redondear
la idea de la recursividad, estos ejemplos
las llamadas recursivas de la
funcin string tokenizer aux:
( s t r i n g t o k e n i z e r aux
n a " ( ) )
( s t r i n g t o k e n i z e r aux
" ( " e s " ) )
( s t r i n g t o k e n i z e r aux
" una " " e s " ) )
( s t r i n g t o k e n i z e r aux
a " " una " " e s " ) )
( s t r i n g t o k e n i z e r aux
i t a " " una " " e s " ) )
( r e v e r s e ( " c a d e n a " " b
) )
( " e s " " una " " b o n i t a " " c

primer espacio en blanco en a


siguen el comportamiento de
? " e s una b o n i t a c a d e
? " una b o n i t a c a d e n a
? " b o n i t a c a d e n a " (
? " c a d e n a " ( " b o n i t
? " " ( " c a d e n a " " b o n
o n i t a " " una " " e s "
a d e n a " )

Esto tambin debe aclarar por qu tenemos que regresar el resultado en rev
ersa: porque fuimos
metiendo las sub cadenas al inicio de la lista. Si las furamos metiendo
al nal no habra necesidad,
pero lucira ms compleja la funcin.
Por ltimo, decimos que las funciones index of y string tokenizer a
ux estn ambas en forma
recursiva de cola, primero porque son recursivas y segundo porque lo lt
imo que hacen es llamarse
a s mismas. Una funcin recursiva puede hacer muchas llamadas a s misma, p
ero est en forma
recursiva de cola si y slo si el que llama regresa inmediatamente despus
. Por ejemplo, la siguiente
funcin calcula el n simo trmino en la serie de Fibonacci:
( defun f i b ( n )
( i f (< n 2)
1
( + ( f i b ( n 1 ) ) ( f i b ( n 2 ) ) ) ) )
pero no est en forma recursiva de cola, porque cuando terminan las llam
adas recursivas no regresa
la funcin ya que falta realizar las sumas.
9.7.5.

Resumen
Aqu est un resumen de las funciones que acabamos de revisar:
dotimes Tiene la siguiente sintaxis:
( d o t i m e s (VAR COUNT [ RESULT ] ) BODY . . . )
Evala BODY ligando VAR a un entero sucesivo desde 0 inclusive, has

ta COUNT (excluyn
dolo). Despus evala RESULT para obtener el valor de regreso, o regr
esa nil por omisin.
count lines Tiene la siguiente sintaxis:
( c o u n t l i n e s START END &o p t i o n a l IGNOREINVI
SIBLE )

9.8 Para saber ms


333
Regresa el nmero de lneas entre START y END. Usualmente esto
equivale al nmero de
carcteres de nueva lnea entre esas dos posiciones, pero puede
ser una ms si el mayor de los
dos nmeros no est al inicio de una lnea.
Si el valor del parmetro opcional es distinto de nil , enton
ces las lneas ocultas (o colapsadas)
con selective display no se consideran para la cuenta.
int to string Recibe un nmero como parmetro y lo convierte a una cade
na en notacin decimal.
Utiliza un signo negativo si el nmero es negativo; algo que no
es obvio del nombre de la
funcin es que puede recibir tanto enteros como nmeros de punto ot
ante.
funcall Evala el primer argumento como si fuera una funcin, pasndole e
l resto de los argumen
tos como sus parmetros. Por tanto, ( funcall cons x y) regresa (x .
y) .
9.8. Para saber ms
Emacs Lisp es un lenguaje muy poderoso; sin embargo, no es un l
enguaje utilizado para mucho
ms que modi car y extender Emacs. Es decir, su uso como lenguaje de pr
oduccin no es muy
amplio, por lo que muy poca gente invierte tiempo programando profe
sionalmente en elisp. Es
importante que sepas hacer cosas relativamente sencillas, como las
que vimos aqu y algunas incluso
un poco ms complicadas, porque de esa manera podrs mejorar tu product
ividad.
Por otro lado, el nmero de usuarios de Emacs es tan grande, habl
ando a nivel mundial, que es
difcil que quieras hacer algo que no se le haya antojado a alguien ms
alguna vez y, ms an, es
muy probable que esa cosa ya est implementada; utiliza Google o visi
ta alguno de estos sitios:
http://www.gnu.org
http://www.xemacs.org
USENET o Google groups:
gnu.emacs.help
comp.emacs
comp.emacs.xemacs
gnu.emacs.gnus
gnu.emacs.sources

Apndices

Distribuciones de
Linux
A
Existen varias formas de instalar Linux en tu computadora. A lo la
rgo de este libro se utiliz
Ubuntu, pero hay muchas ms opciones. Segn www.distrowatch.com, en este m
omento existen
mas de 500 versiones distintas de Linux. Existen algunas de ellas que
tienen soporte por parte de
grandes empresas como Novell, Oracle, Red Hat o IBM. Adems, para empeza
r a usar Linux no
necesitas instalarlo de forma permanente en tu computadora, ya que muc
has distribuciones tienen lo
que se conoce como un live cd, que es un disco que te permite utilizar
Linux desde un cd o dvd sin
tener que copiarlo a tu disco duro. De esa forma puedes decidir si esa
distribucin de Linux ofrece
lo que t necesitas sin tener que eliminar el sistema operativo que util
izas actualmente. A lo largo
de este apndice te presentaremos algunas de las distribuciones ms comune
s de Linux, en dnde
puedes obtenerlas y cules son sus puntos clave.

A.1. Ubuntu
A.1.1.

Filosofa

Desde 2004 Ubuntu ha experimentado un incremento enorme en su nmero


de usuarios, siendo
actualmente la distribucin ms popular. Como es una distribucin derivada d
e Debian (el cual
revisaremos en A.2), cuenta con toda la robustez de esa distribucin. El
principal problema de
Debian es los largos periodos de tiempo que pueden pasar entre la libe
racin de nuevas versiones.
Para evitar eso, los desarrolladores de Ubuntu se han comprometido a l
iberar una nueva versin

338
Distribuciones de Linux
cada seis meses. Adems los principales objetivos de Ubuntu son:
Mantener por siempre su gratuidad, y que nunca haya un costo adi
cional para obtener una
versin profesional.
Hacer que Ubuntu pueda ser usado por el mayor nmero de personas.
Estar siempre comprometido con el software libre.
A pesar de tener a su disposicin todos los paquetes de Debian, en U
buntu la instalacin por
omisin incluye un nmero reducido de paquetes, lo cual permite que pueda
distribuirse en un solo
CD, dejando la instalacin de otros paquetes como una decisin posterior.
Puedes obtener una copia
en http://www.ubuntu.com/
A.1.2.

Manejo de software

El manejo de paquetes dentro de Ubuntu se hace utilizando archivos


.deb, los cuales pueden ser
instalados con la herramienta dpkg. Esta herramienta es la encargada d
e desempacar los archivos,
copiarlos a su destino y ejecutar las operaciones para que el nuevo so
ftware opere adecuadamente.
Dado que dpkg es una herramienta poderosa pero a la vez poco amigable,
se han creado varias
interfaces para hacer el trabajo de instalacin ms sencillo. De dichas in
terfaces, una de las ms
comunes es apt. Veamos como se instala un paquete haciendo uso de esta
herramienta.
Lo primero que necesitamos es saber cul es el nombre del paquete qu
e deseamos instalar;
para ello haremos uso de la herramienta apt cache. Mediante sta podremo
s consultar la lista de
paquetes disponibles y ver cul de ellos es el que nosotros deseamos. Es
tas listas se construyen
a partir de los repositorios que se encuentran en el archivo /etc/apt/
sources.list. Dicho archivo
contiene lneas como la siguiente:
deb h t t p : / / mx . a r c h i v e . u b u n t u . com / u
b u n t u / main u n i v e r s e
Esa lnea indica lo siguiente:
La palabra deb indica que se van a obtener archivos de binarios
(tambin puede aparecer
debsrc, para indicar que se van a obtener archivos de cdigo fuent
e).
Le sigue el URL del repositorio que indica de dnde se van a obte
ner los paquetes.
La siguiente palabra indica qu distribucin se utiliza (en este ca
so stable), y qu secciones
estn disponibles1 (en este caso main).
Puedes agregar tantas lneas como necesites, para as agregar ms repos
itorios que te permitan
tener acceso a ms paquetes. La mayor parte del tiempo no necesitars ms qu
e los repositorios
o ciales. En caso de que modi ques tus repositorios necesitars indicarle a
apt que reconstruya la
lista de paquetes. Para poder hacerlo, ejecuta como root la instruccin:

% apt get update


Una vez hecho eso, puedes buscar el paquete que deseas, digamos em
acs. Entonces es necesario
ejecutar la instruccin:
% apt cache search emacs
1
Entre las distintas secciones estn: main universe multiverse res
tricted

A.2 Debian
339
De esa forma le indicamos a apt que debe buscar la lista de paq
uetes y regresarnos todos los
que contengan la palabra emacs en su nombre o su descripcin. Esto re
gresar algo como:
d i c t i o n a r y e l d i c t i o n a r y c l i e n t f o r Emacs
d r s c h e m e PLT Scheme Programming E n v i r o n m e n t
emacse x t r a emacs c o n f i g u r a t i o n
emacss n a p s h o t g t k The GNU Emacs e d i t o r ( w i t h GTK+ 2
. x s u p p o r t )
emms The Emacs M u l t i M e d i a System
emacs21 The GNU Emacs e d i t o r
emacs21b i n common The GNU Emacs e d i t o r s d e p e n d e n t f i
l e s
emacs21common The GNU Emacs e d i t o r s
Si quieres ver ms detalles acerca de un paquete, entonces puedes eje
cutar:
% apt cache search

f emacs21 common

Con lo cual obtienes un listado como:


P a c k a g e : emacs21common
Priority : optional
Section : editors
I n s t a l l e d S i z e : 35948
Architecture : all
S o u r c e : emacs21
V e r s i o n : 2 1 . 4 a6u b u n t u 2
R e p l a c e s : emacs21 ( < 21.2 4)
Depends : emacsencommon ( >= 1 . 4 . 1 0 ) , dpkg ( >= 1 . 9 . 0 )
S u g g e s t s : emacs21e l
C o n f l i c t s : emacs21e l ( < 2 1 . 4 a 6) , w3e l
F i l e n a m e : p o o l / main / e / emacs21 / emacs21common_ 2 1
. 4 a6_ a l l . deb
S i z e : 10936074
MD5sum : b 4 a 9 8 1 d 1 2 f 6 a 3 9 f 4 3 c 8 9 6 d d f 9 2 4 1 2
9 f d
SHA1 : 33 f 6 6 7 d 8 f b d 5 e 1 8 5 7 0 d 4 0 5 c 5 c 5 4 d 9 e 2
2 6 4 3 c 9 d 6 f
D e s c r i p t i o n : The GNU Emacs e d i t o r s s h a r e d , a
r c h i t e c t u r e
independent i n f r a s t r u c t u r e
GNU Emacs i s t h e e x t e n s i b l e s e l f d o c u m e n t i n
g t e x t e d i t o r .
This package c o n t a i n s the a r c h i t e c t u r e independ
ent i n f r a s t r u c t u r e
t h a t s s h a r e d by emacs21 and emacs21nox .
Esa instruccin puedes ejecutarla con ms de un paquete para que en
cuentres cul es el que
deseas instalar. Una vez hecho eso, ser necesario ejecutar el comand
o de instalacin de apt:

% sudo apt get install emacs21 common


Con lo cual apt te informar qu paquete se va a descargar y cunto e
spacio utilizar. En caso
de que existan dependencias no resueltas, te informar cules son los p
aquetes que debes instalar
para satisfacerlas, y si as lo deseas, apt se encargar de obtenerlas
por ti.

340
Distribuciones de Linux
A.2. Debian
A.2.1.

Filosofa

Debian es un sistema operativo libre, dinmico y gratis. Es distribu


ido por el Proyecto Debian.
Su objetivo principal es distribuir un conjunto de software que sea ca
paz de satisfacer la mayora
de las necesidades de los usuarios de una computadora. Para lograr eso
, Debian actualmente tiene
18,733 paquetes disponibles. Debian mantiene sus distribuciones en tre
s estados:
stable (estable). Contiene los paquetes o ciales; es la distribucin lista
para usarse y todo est
garantizado que funcionar.
testing (de prueba). Contiene paquetes que an no han sido aceptados en
la distribucin estable,
pero que en algn momento lo estarn.
unstable (inestable). Contiene paquetes en desarrollo; probablemente h
abr paquetes que no fun
cionarn del todo bien, pero tambin tiene los paquetes ms nuevos.
Conforme va pasando el tiempo, los paquetes pueden pasar de una di
stribucin inestable a una
de prueba y de ah, despus de una revisin minuciosa, nalmente llegan a esta
ble. Muchas personas
consideran a Debian como la distribucin ms robusta de Linux2 , siendo es
to una consecuencia de
la enorme cantidad de paquetes que tiene disponibles en sus repositori
os, todas las arquitecturas
que soporta y la garanta de que en su versin estable todo est probado. Po
r desgracia, esto puede
ocasionar que la versin estable sea obsoleta, pues revisar todos esos p
aquetes para garantizar que
todo es seguro lleva mucho tiempo. Esto puede no ser un problema si ut
ilizas la versin de prueba
o inestable. Puedes descargar Debian desde http://www.debian.org/.
A.2.2.

Manejo de software

El manejo de paquetes de Debian, al igual que Ubuntu, es mediante e


l manejador de paquetes
dpkg y su interfaz apt. Para revisar cmo utilizar dichas herramientas,
consulta la seccin A.1.
A.3. Fedora
A.3.1.

Filosofa

Fedora es una coleccin de proyectos patrocinados por Red Hat, y desa


rrollados en contacto
con la comunidad de software libre. Originalmente Red Hat tena una sola
distribucin homni
ma a la compaa, pero en el 2003 sta desapareci. Red Hat dividi sus esfuerzo
s en dos di

2
dando esto como resultado varias guerras santas

A.3 Fedora
341
recciones: el proyecto Fedora mantendra lo que antes era la distrib
ucin del sistema operativo
y Red Hat Enterprise se encargara de atender a los clientes empresa
riales. El propsito del pro
yecto Fedora es y ha sido apoyar el rpido progreso del software lib
re y de su contenido. Esto
incluye tener procesos abiertos al pblico, transparencia y rpida inn
ovacin. Puedes obtenerlo en
http://fedoraproject.org/.
A.3.2.

Manejo de software

El manejo de paquetes de Fedora es mediante el uso de archivo


s .rpm, los cuales se instalan
haciendo uso de la herramienta rpm3 . Para resolver las dependenci
as que puede tener un paquete,
e instalarlas automticamente, se hace uso de la herramienta yum4 .
Si se desea instalar emacs en el
sistema, lo primero que se debe hacer es buscar cul es el paquete q
ue se desea instalar. Para eso se
utiliza la instruccin:
% yum search emacs
Con lo cual se obtiene un listado de los paquetes que contienen la
palabra emacs, y que se puede
observar a continuacin.
emacs . i 3 8 6
21.4 5
installed
Matched from :
emacs
The GNU Emacs t e x t e d i t o r .
Emacs i s a p o w e r f u l , c u s t o m i z a b l e , s e
o c u m e n t i n g ,
m o d e l e s s t e x t e d i t o r . Emacs c o n t a i n s
c i a l c o d e e d i t i n g
f e a t u r e s , a s c r i p t i n g l a n g u a g e ( e l
) , and t h e c a p a b i l i t y
t o r e a d m a i l , news , and more w i t h o u t l e a v
t h e e d i t o r .
h t t p : / / www. gnu . o r g / s o f t w a r e / emacs /
r e a d l i n e . i386
installed
Matched from :
The R e a d l i n e l i b r a r y
n c t i o n s t h a t a l l o w
u s e r s t o e d i t command l i
i t i n g modes
a r e a v a i l a b l e . The R e
l u d e s a d d i t i o n a l
f u n c t i o n s f o r m a i n t
v i o u s l y e n t e r e d command
l i n e s f o r r e c a l l i n g
n e s , and f o r p e r f o r m i n g
cshl i k e h i s t o r y e x p a

l f d
s p e
i s p
i n g

5.0 3
p r o v i d e s a s e t o f f u
n e s . Both Emacs and v i e d
a d l i n e l i b r a r y i n c
a i n i n g a l i s t o f p r e
o r e d i t i n g t h o s e l i
n s i o n on p r e v i o u s comm

ands .
Una vez que sabes cual es el nombre del paquete que quieres i
nstalar, debes ejecutar como root
la instruccin:
% yum install emacs.i386
3
Redhat Package Manager
4
Yellow dog Update Manager

342
tribuciones de Linux

Dis

Con lo cual yum te mostrara cuales son los paquetes que va a instalar, sus
dependencias y cuanto
espacio van a ocupar.

Compilando e
instalando a pie
B
B.1. Aplicaciones no disponibles
Hay ocasiones en las que quieres instalar una aplicacin, pero no exist
e un paquete para el
sistema de instalacin de tu distribucin. Algunas veces, alguien ms se encarga
de distribuirlos y
puedes o no conseguir un .deb o un .rpm en su pgina. En caso de que eso no
sea posible, ser
necesario compilar el paquete e instalarlo a pie. Esto puede sonar ms compl
icado de lo que en
realidad es, pero para ilustrar el proceso veamos un ejemplo. Vamos a inst
alar un cliente de MSN
para Linux que se conoce como amsn. Lo primero que necesitas es conseguir
el cdigo fuente de la
aplicacin, que en este caso lo puedes bajar de http://sourceforge.net/proje
cts/amsn/. El archivo
que vamos a bajar es amsn 0.96.tar.bz2, el nmero corresponde a la versin que
bajamos, por lo
que es probable que cuando t lo consigas sea algo distinto. El siguiente pa
so es descomprimir el
archivo; en este caso, a partir de la extensin, sabemos que es un archivo e
mpacado con tar y luego
comprimido con bzip2. Para desempacarlo puedes usar el comando
tar xvfj amsn 0.96.tar.bz2,
o bien hacerlo desde Konqueror. Esto genera el directorio amsn 0.96 En el
encontrars algunos
archivos que suelen ser estndar en las distribuciones de cdigo fuente en UNI
X. Entre estos se
encuentran, generalmente, los siguientes archivos:
README
INSTALL
con gure

344
Compilando e instalando a pie
En el archivo README viene una breve explicacin de qu es la aplicacin, cm
o funciona y
a veces instrucciones para instalar. En caso de que las instrucciones par
a instalar no aparezcan en
README, es porque estn en INSTALL. La informacin ms importante de este archi
vo son las
dependencias del programa que quieres compilar y las opciones que le pued
es pasar al compilarlo.
El resto del procedimiento es igual para la mayora de los programas, y usu
almente es:
1. Con gurar los parmetros de compilacin.
2. Compilar el programa.
3. Instalar el programa.
Con gurando la compilacin
Veamos cmo se con guran los parmetros de compilacin. Para hacer eso utili
zamos herra
mientas de UNIX que se llaman automake y con gure. El desarrollador que pre
par los fuentes
para instalar se encarg de utilizar un guin de instalacin con automake para
que nosotros po
damos compilar con con gure. De esa forma con gure se encarga de buscar en dnd
e tenemos
nosotros instaladas las dependencias del programa que queremos compilar,
y establece en dnde
queremos instalar nuestro programa una vez compilado, incluyendo binarios
y documentacin. As
que realicemos este paso para amsn. Es necesario que el archivo con gure te
nga permisos de eje
cucin; en caso de que no sea as puedes otorgrselos con chmod +x con gure; una
vez hecho eso
ejectalo con ./ con gure . Vers que empieza a revisar si tienes instaladas to
das las dependencias
que necesitas; si no encuentra algo en ese momento se detendr y te indicar
qu es lo que falta en tu
sistema. Supongamos que en este momento con gure indica que no puede encont
rar el compilador
de C, gcc; entonces vers algo como:
c h e c k i n g f o r g c c . . . no
c h e c k i n g f o r c c . . . no
c h e c k i n g f o r c c . . . no
c h e c k i n g f o r c l . . . no
c o n f i g u r e : e r r o r : no a c c e p t a b l e C c o m p i l
e r f o u n d i n $PATH
Ser necesario instalar este compilador. En este momento, si corres co
n suerte, bastar con
utilizar tu manejador de paquetes mientras que en el peor de los casos te
ndrs que compilar tambin
ese paquete. Para instalar gcc y de paso g++1 en Ubuntu basta con ejecuta
r sudo apt get install gcc
g++. as que si una vez heco esto ultimo vuelves a ejecutar con g, deber segui
r con su ejecucin
normal. En caso de que te hagan falta bibliotecas para seguir compilando
tambin ser necesario
que las instales. Supongamos que no tienes instalado Tk, el cual es neces

ario para compilar amsn;


cuando con gure se detenga y nos indique que no encuentra la biblioteca nec
esaria, recurrimos
a apt para instalarla. En este caso es necesario instalar el paquete de d
esarrollo, pues queremos
compilar cdigo fuente. Los paquetes de desarrollo en Linux tienen la termi
nacin dev. Ejecutamos
entonces sudo aptget install tk8.4dev, y una vez ms ./ con gure . Ahora amsn d
ebera compilar
sin problemas2 . En caso de que quieras modi car algn parmetro de la instalac
in de amsn, puedes
1
g++ es el compilador de C++.
2
Dependiendo de qu tengas instalado en tu mquina, es posible que necesi
tes instalar ms paquetes, pero
el procedimiento es igual al que acabamos de describir

B.1 Aplicaciones no disponibles


345
ejecutra ./ con gure help, lo cual te mostrar las opciones disponibles.
Compilando
Cuando con gure termina exitosamente su ejecucin, puedes compilar
el programa. Al ter
minar, con gure crea un archivo de nombre Make le en el archivo en dond
e se encuentra el c
digo fuente. Dentro de ese archivo se encuentran las opciones y rut
as que se prepararon en el
seccin B.1. La herramienta que lee el archivo Make le, lleva el mismo
nombre, make le, y se
invoca con el comando make. En caso de que no est instalada, nuevame
nte recurrimos a apt,
sudo aptget install make. Ahora, colocndonos en el directorio en dond
e se encuentra el archivo
Make le, tecleamos make y vemos cmo se compila todo3 .
Instalando
Ahora viene la ltima parte. Despus de haber compilado el programa
es necesario instalarlo
en algn lugar que facilite su acceso. De esa forma cualquier usuario
del sistema puede usar el
programa que compilaste. Para llevar a cabo la instalacin una vez ms
vas a hacer uso de make,
pero esta vez es necesario hacerlo con permisos de super usuario, s
udo make install . Vers como
make despliega las instrucciones que est llevando a cabo.
Listo. Una vez hecho esto, si tecleas amsn desde tu consola, se
iniciar el cliente de MSN.
Este proceso es casi estndar dentro del mundo UNIX, por lo que puede
s repetirlo para la mayora
del cdigo fuente que quieras compilar e instalar. Si existe un paque
te para la aplicacin que deseas
instalar dentro del manejador de paquetes de tu distribucin, es mejo
r idea usarlo y no compilar a pie.
Si compilas e instalas pierdes las ventajas del manejador, como sab
er fcilmente qu aplicaciones
tienes instaladas y en qu versin estn, o el desinstalar fcilmente4 .

3
Dependiendo de qu ests instalando, esto puede tardar varios mi
nutos
4
En algunas aplicaciones puedes usar sudo make uninstall para
desinstalar la aplicacin

Emacs: archivos de
con guracin
C
A lo largo de este libro hemos revisado Emacs y muchas extensiones, sub
sistemas y paquetes
para extender la funcionalidad bsica de Emacs. Conforme avanzamos, explicamo
s las distintas
opciones y lneas de con guracin, pero las integramos aqu para tu comodidad.

C.1. /.emacs
; ; E s t e a r c h i v o de c o n f i g u r a c i n p a r a Emacs , e s u
n a n e x o d e l l i b r o :
; ; Manual de s u p e r v i v e n c i a en L i n u x
;
;
;
(
(
(

;
;
f o n t
;
r e q u i r e f o n t
addhook f o n t l o
g l o b a l f o n t l

; ; C o l o
( addt o
o r theme " ) )
( r e q u i
( c o l o r
( c o l o r

l o c k
l o c k )
c k modehook t u r n onf a s t l o c k )
o c k mode 1 )

r theme :
l i s t l o a d p a t h ( expandf i l e name "  / e l i s p / c o l
r e c o l o r theme )
theme i n i t i a l i z e )
themec h a r c o a l b l a c k )

348
Emacs: archivos de con guracin
;
;
;
(
;
;
g l o b
;
a s :
(
t e x "
(
t e x /
(
(
(
(
(
(
(
(
(

;
;
C o d i f i c a c i n : UTF8
;
p r e f e r c o d i n g s y s t e m u t f 8)
;
;
a
;

AUCTeX , RefTeX y p r e v i e w emacs :


S i AUCTeX y p r e v i e w emacs e s t n i n s t a l a d o s de manera
l en t u
s i t i o , no r e q u i e r e s l a s s i g u i e n t e s d o s l n e

addt o
) )
addt o
p r e v
r e q u
require
require
require
l o a d
s e t q
s e t q
s e t q
s e t q

l i s t l o a d p a t h ( expandf i l e name "  / e l i s p / a u c


l i s t l o a d p a t h ( expandf i l e name "  / e l i s p / a u c
i e w " ) )
i r e texs i t e )
tex )
latex )
reftex )
" p r e v i e w l a t e x . e l " n i l t t )
TeXa u t o s a v e t )
TeXp a r s e s e l f t )
d e f a u l t TeXm a s t e r n i l )
LaTeXs e c t i o n hook
( LaTeXs e c t i o n h e a d i n g
LaTeXs e c t i o n t i t l e
LaTeXs e c t i o n t o c
LaTeXs e c t i o n s e c t i o n
LaTeXs e c t i o n l a b e l )
)

; ; I s p e l l hablando espaol .
( s e t q i s p e l l programname " a s p e l l "
i s p e l l e x t r a a r g s (" W" " 3 " )
i s p e l l d i c t i o n a r y a l i s t
( cons
( " s p a n i s h " " [ [ : a l p h a : ] ] " " [ ^ [ : a l
p h a : ] ] " " [ . ] " n i l (" B" "d "
" e s " ) n i l u t f 8)
i s p e l l d i c t i o n a r y a l i s t )
)
( s e t d e f a u l t i s p e l l l o c a l d i c t i o n a r y " s p a n i s
h " )
; ; BBDB
; ; S i BBDB e s t i n s t a l a d o en un s i t i o e s t n d a r de Emac
s , no r e q u i e r e s
la primera lnea :
( addt o l i s t l o a d p a t h ( expandf i l e name "  / e l i s p / bbdb /
l i s p " ) )
( r e q u i r e bbdb )
( bbdb i n i t i a l i z e vm )
; ; w3m
( r e q u i r e w3ml o a d )
; ; Dictionary ( dict client )

C.2 /.vm
349
( load " d i c t i o n a r y i n i t ")
( g l o b a l s e t key [ ( c o n t r o l c ) ? s ] d i c t i o n a r
y s e a r c h )
( g l o b a l s e t key [ ( c o n t r o l c ) ?m] d i c t i o n a r y m
atchwords )
; ; TRAMP
( r e q u i r e tramp )
( s e t q tramp d e f a u l t method " s c p " )
; ; ERC
( require erc )
( r e q u i r e e r c s p e l l i n g )

e l " )

; ; JDE y a m i g o s :
( l o a d f i l e "  / e l i s p / c e d e t / common / c e d e t .

(
(
j d e / l i s
(
e l i b " ) )
(
(

s e m
addt
p " )
addt

a n t i c l o a d e n a b l e codeh e l p e r s )
o l i s t l o a d p a t h ( expandf i l e name "  / e l i s p /
)
o l i s t l o a d p a t h ( expandf i l e name "  / e l i s p /

require jde )
s e t q j d e e n a b l e a b b r e v mode t
j d e e l e c t r i c r e t u r n p t
j d e b u i l d f u n c t i o n ( j d e a n t b u i l d )
j d e d e b u g g e r ( " JDEbug " )
tempo i n t e r a c t i v e t
)

; ; S u b v e r s i o n D e p e n d i e n d o de t u c o n f i g u r
a c i n , p u e d e s e r que n e c e s i t e s
; ; l a p r i m e r a l n e a p a r a e n v i a r c o m e n t a r i
o s en UTF8 a l r e p o s i t o r i o :
( s e t e n v "LCCTYPEenUS . u t f 8")
( r e q u i r e psvn )

C.2. /.vm
; ; emacs l i s p
( s e t q vms p o o l f i l e s
( ( "  / INBOX"
" imaps s l : g a l a d r i e l . f c i e n c i a s
. unam . mx : 9 9 3 : i n b o x : l o g i n : J u a n . Doe
: "
"  / INBOX . CRASH" ) )
)
( s e t q vmimapa u t o expunge a l i s t
(
; ; Dejamos una c o p i a en e l s e r v i d o r .
( " imaps s l : g a l a d r i e l . f c i e n c i a s .
unam . mx : 9 9 3 : i n b o x : l o g i n : J u a n . Doe
: " . nil )

350
Emacs: archivos de con guracin
)
vms k i p r e a d m e s s a g e s t
vmc i r c u l a r f o l d e r s
t
vmv i r t u a l f o l d e r a l i s t
(
( " Amigos "
( ( "  / INBOX " )
( and ( a u t h o r " E l i s a V i s o .
r " F r a n c i s c o S o l s o n a . " ) )
))
)
vmsummaryshowt h r e a d s t
)
( s e t q vmm a i l h
n c i a s . unam . mx>"
send m a i l
s m t p m a i
i a s . unam . mx"
s m t p m a i
s m t p m a i
)

" ) ( a u t h o

e a d e r from " J u a n Doe < J u a n . D o e @ c i e


f u n c t i o n s m t p m a i l send i t
l smtps e r v e r " g a l a d r i e l . f c i e n c
l l o c a l domain " c i e n c i a s . unam . mx"
l s e n d t o domain " c i e n c i a s . unam . mx"

; ; BBDB i n s i n u a t i o n :
( bbdbi n s i n u a t e vm )

C.3. /.emacs w3m


; ; emacs l i s p
( s e t q w3mhomep a g e " h t t p : / / www. f c i e n c i a s . unam . mx"
w3md e f a u l t d i s p l a y i n l i n e i m a g e s t
)

Bibliografa
[1] D IVERSOS AUTORES The tex catalogue on line.
http://www.tex.ac.uk/tex archive/help/Catalogue/catalogue.html. Contiene m
uchsimos pa
quetes de LATEX con su documentacin, listos para ser descargados.
[2] E TTRICH , M. Kde. http://www.kde.org.
[3] H ILBRICH , T. Emacs: Dictionary. http://www.myrkr.in berlin.de/dictionary/
.
[4] I TO , A. Emacs: w3m. http://w3m.sourceforge.net.
[5] K INNUCAN , P. Emacs: Jdee
http://jdee.sunsite.dk/.

java development environment for emacs.

[6] L UDLAM , E.
Emacs: Cedet
nt tools.
http://cedet.sourceforge.net/.
[7] M ITTELBACH , F.,
on. Addison
Wesley, 2004.

AND

collection of emacs development environme

G OOSENS , M. The LATEX Companion, Second Editi

[8] R EICHOER , S. Emacs: psvn. http://www.xsteve.at/prg/vc_svn/.


[9] S TALLMAN , R. Emacs, gcc y gdb. http://www.gnu.org. Presidente de la Free
Software
Foundation. Fundador GNU.
[10] T ORVALDS , L. El sistema operativo linux. http://www.linux.org.
[11] T SUCHIYA , M. Emacs: emacs w3m. http://emacs w3m.namazu.org.
[12] WALLIN , I., AND C EDEQVIST, P. Emacs: Elib
http://elib.sourceforge.net.

emacs lisp library.

[13] WANG , P. S. An Introduction to Unix with X and the Internet. PWS Publishin
g Company,
1997.

UNIVERSIDAD NACIONAL AUTNOMA DE MXICO


FACULTAD DE CIENCIAS
Manual de supervivencia en Linux
se termin de imprimir en octubre de 2007
en los talleres de Publidisa Mexicana, S. A. de C. V.
Calz. de Chabacano 69, Col. Asturias
Mxico 06850, D. F.
El tiro fue de 500 ejemplares
Est impreso en papel Bond de 90 gramos
En su composicin se emplearon tipos Times New Roman y Courier
de 11:13.5, 12:14 y 18:20 puntos de pica.

You might also like