Documentos de Académico
Documentos de Profesional
Documentos de Cultura
E DITORES :
Francisco L. Solsona
Elisa Viso
Facultad de Ciencias, UNAM
AUTORES :
Mauricio Aldazosa
Jos Galaviz
Ivn Hernndez
Canek Pelez
Karla Ramrez
Fernanda Snchez Puig
Francisco Solsona
Manuel Sugawara
Arturo Vzquez
Elisa Viso
ndice general
Prefacio
1. Introduccin a Unix
1.1. Historia . . . . . . . . . . . . . .
1.1.1. Sistemas UNIX libres . .
1.1.2. El proyecto GNU . . . . .
1.2. Sistemas de tiempo compartido . .
1.2.1. Los sistemas multiusuario
1.3. Inicio de sesin . . . . . . . . . .
1.4. Emacs . . . . . . . . . . . . . . .
1.4.1. Introduccin a Emacs . . .
1.4.2. Emacs y t . . . . . . . .
XII
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
3
4
4
5
6
6
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
10
14
14
18
20
20
.
.
.
.
.
.
.
23
23
26
27
30
34
37
37
3. Sistema de Archivos
3.1. El sistema de archivos . . . . . . . . . . . . . .
3.1.1. Rutas absolutas y relativas . . . . . . .
3.2. Movindose en el rbol del sistema de archivos
3.2.1. Permisos de archivos . . . . . . . . . .
3.2.2. Archivos estndar y redireccionamiento
3.3. Otros comandos de Unix . . . . . . . . . . . .
3.3.1. Sintaxis estndar de comandos . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ii
3.4. Agrupando nombres de archivos . . . . . . . . . . . .
3.5. Konqueror: administrador de archivos y algo ms . . .
3.5.1. Iniciando Konqueror . . . . . . . . . . . . . .
3.5.2. Konqueror como administrador de archivos . .
3.5.3. Konqueror como un navegador web . . . . . .
3.5.4. Konqueror como una aplicacin integrada . . .
3.6. Emacs . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1. Ejecutando Emacs desde la lnea de comandos
3.6.2. Conceptos esenciales . . . . . . . . . . . . . .
3.6.3. Dired . . . . . . . . . . . . . . . . . . . . . .
3.6.4. Ejecucin de comandos de Unix desde Emacs .
4. Edicin
4.1. La guerra de los editores de texto . . . . .
4.1.1. Vieja guardia contra nueva guardia
4.2. Kate: un editor para programadores . . .
4.2.1. Introduccin . . . . . . . . . . .
4.2.2. Empezando a utilizar Kate . . . .
4.2.3. Editando archivos . . . . . . . . .
4.3. Emacs . . . . . . . . . . . . . . . . . . .
4.3.1. Comandos . . . . . . . . . . . .
4.3.2. Movimiento . . . . . . . . . . . .
4.3.3. Matando y borrando . . . . . . .
4.3.4. Reencarnacin de texto . . . . . .
4.3.5. Regiones . . . . . . . . . . . . .
4.3.6. Rectngulos . . . . . . . . . . . .
4.3.7. Registros . . . . . . . . . . . . .
4.3.8. Archivos . . . . . . . . . . . . .
4.3.9. Buscar . . . . . . . . . . . . . .
4.3.10. Reemplazar . . . . . . . . . . . .
4.3.11. Guardar . . . . . . . . . . . . . .
4.3.12. Ventanas . . . . . . . . . . . . .
4.3.13. Marcos (frames) . . . . . . . . .
4.3.14. Ayuda en lnea . . . . . . . . . .
4.3.15. Lista de buffers . . . . . . . . . .
4.3.16. Anzuelos (Hooks), setq y otros . .
4.3.17. Ortografa . . . . . . . . . . . . .
4.3.18. Extendiendo Emacs . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
45
46
46
48
49
50
50
52
53
54
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
55
55
56
56
56
57
59
64
65
66
67
68
68
68
69
70
70
70
71
71
71
72
72
72
73
74
iii
5. Internet
5.1. Redes de computadoras . . . . . . . . . . . . . . .
5.1.1. Relacin cliente-servidor . . . . . . . . . .
5.1.2. TCP/IP . . . . . . . . . . . . . . . . . . .
5.2. Web . . . . . . . . . . . . . . . . . . . . . . . . .
5.3. Redes y direcciones . . . . . . . . . . . . . . . . .
5.3.1. Domicilios estndar en Internet . . . . . .
5.3.2. Nomenclatura antigua e internacional . . .
5.4. WWW . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1. URL: especificacin de objetos en Internet
5.4.2. Navegadores . . . . . . . . . . . . . . . .
5.4.3. Google . . . . . . . . . . . . . . . . . . .
5.4.4. Wikipedia . . . . . . . . . . . . . . . . . .
5.5. Los programas de correo de Unix . . . . . . . . . .
5.6. Netiquete . . . . . . . . . . . . . . . . . . . . . .
5.6.1. Algunos puntos del netiquete . . . . . . . . .
5.7. KMail: lector de correo electrnico . . . . . . . . .
5.7.1. Introduccin . . . . . . . . . . . . . . . .
5.7.2. Utilizando KMail . . . . . . . . . . . . . .
5.8. FTP . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.1. Qu es un FTP annimo? . . . . . . . . .
5.8.2. Comandos para FTP . . . . . . . . . . . .
5.9. SSH: Secure Shell . . . . . . . . . . . . . . . . . .
5.9.1. Accediendo a sistemas remotos . . . . . .
5.9.2. Copiando archivos entre sistemas . . . . .
5.10. PGP: Pretty Good Privacy . . . . . . . . . . . . .
5.10.1. Funcionamiento de PGP . . . . . . . . . .
5.11. RSS: sistema de noticias . . . . . . . . . . . . . .
5.11.1. Introduccin . . . . . . . . . . . . . . . .
5.11.2. Akregator . . . . . . . . . . . . . . . . . .
5.12. Mensajera instantnea . . . . . . . . . . . . . . .
5.12.1. Introduccin . . . . . . . . . . . . . . . .
5.12.2. Kopete . . . . . . . . . . . . . . . . . . .
5.12.3. Creando cuentas . . . . . . . . . . . . . .
5.12.4. Funciones bsicas . . . . . . . . . . . . . .
5.12.5. Extensiones . . . . . . . . . . . . . . . . .
5.13. Rdesktop: Remote Desktop Protocol Client . . . .
5.13.1. Utilizando Rdesktop . . . . . . . . . . . .
5.14. Kontact, una suite de productividad en KDE . . . .
5.14.1. Resumen . . . . . . . . . . . . . . . . . .
5.14.2. Correo, KMail . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
77
77
78
79
80
81
81
81
82
83
83
85
85
86
87
87
89
89
90
93
93
93
95
96
96
97
98
99
99
99
101
101
101
103
104
105
106
106
106
108
108
iv
5.14.3.
5.14.4.
5.15. Emacs
5.15.1.
5.15.2.
5.15.3.
5.15.4.
5.15.5.
5.15.6.
Contactos, KAddressBook . . . . . . . .
Calendario y pendientes con KOrganizer
. . . . . . . . . . . . . . . . . . . . . . .
VM . . . . . . . . . . . . . . . . . . . .
BBDB . . . . . . . . . . . . . . . . . . .
w3m . . . . . . . . . . . . . . . . . . .
ERC . . . . . . . . . . . . . . . . . . . .
TRAMP . . . . . . . . . . . . . . . . . .
Diccionario . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6. LATEX
6.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . .
6.2. Componentes de un texto . . . . . . . . . . . . . . . .
6.3. Ambientes para formato . . . . . . . . . . . . . . . .
6.3.1. Posibles errores . . . . . . . . . . . . . . . . .
6.4. Formato general de un documento . . . . . . . . . . .
6.4.1. Cartas . . . . . . . . . . . . . . . . . . . . . .
6.5. Tipos y tamaos de letras . . . . . . . . . . . . . . . .
6.6. Listas de enunciados o prrafos . . . . . . . . . . . . .
6.6.1. Numeraciones . . . . . . . . . . . . . . . . .
6.6.2. Listas marcadas . . . . . . . . . . . . . . . . .
6.6.3. Descripciones . . . . . . . . . . . . . . . . . .
6.6.4. Listas ms compactas . . . . . . . . . . . . . .
6.7. Tablas . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7.1. Multicolumnas . . . . . . . . . . . . . . . . .
6.7.2. Separacin de renglones y columnas . . . . . .
6.7.3. Lneas incompletas verticales y horizontales
6.7.4. Espacio entre los renglones . . . . . . . . . . .
6.8. Matemticas en LATEX . . . . . . . . . . . . . . . . . .
6.8.1. Frmulas matemticas . . . . . . . . . . . . .
6.9. Emacs y LATEX . . . . . . . . . . . . . . . . . . . . . .
6.9.1. Anotaciones en los smbolos . . . . . . . . . .
6.9.2. Arreglos de frmulas . . . . . . . . . . . . . .
6.10. Imgenes y figuras . . . . . . . . . . . . . . . . . . .
6.10.1. Tablas, figuras, etc. . . . . . . . . . . . . . . .
6.10.2. Cortando figuras . . . . . . . . . . . . . . . .
6.10.3. Colores . . . . . . . . . . . . . . . . . . . . .
6.10.4. Dibujando objetos geomtricos . . . . . . . . .
6.10.5. Lneas . . . . . . . . . . . . . . . . . . . . . .
6.10.6. Acomodando objetos . . . . . . . . . . . . . .
6.11. Referencias e ndices . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
108
112
119
121
128
131
136
139
140
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
143
143
144
145
147
149
152
153
156
157
160
161
163
164
166
168
172
173
174
176
178
192
193
197
197
204
205
207
207
226
231
v
6.11.1.
6.11.2.
6.12. Emacs
6.12.1.
6.12.2.
6.12.3.
Referencias bibliogrficas
ndices . . . . . . . . . .
. . . . . . . . . . . . . . .
AUCTEX . . . . . . . . .
RefTEX . . . . . . . . . .
Preview . . . . . . . . . .
7. Lenguajes de marcado
7.1. XML . . . . . .
7.2. HTML . . . . . .
7.2.1. XHTML
7.3. CSS . . . . . . .
7.3.1. Javascript
7.4. Emacs . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
231
237
237
238
241
242
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
245
246
249
249
250
253
255
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
256
256
256
257
260
260
268
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
271
271
272
272
273
275
278
283
285
289
289
289
290
298
299
299
301
301
305
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9. Extendiendo tu ambiente
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 . . . . . . . . . .
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. Definiciones de funciones . . . . . . . . . . . .
9.4.1. defun . . . . . . . . . . . . . . . . . .
9.4.2. let . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
vi
9.5.
9.6.
9.7.
9.8.
A. Distribuciones de Linux
A.1. Ubuntu . . . . . . . . . .
A.1.1. Filosofa . . . . .
A.1.2. Manejo de software
A.2. Debian . . . . . . . . . . .
A.2.1. Filosofa . . . . .
A.2.2. Manejo de software
A.3. Fedora . . . . . . . . . . .
A.3.1. Filosofa . . . . .
A.3.2. Manejo de software
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
306
307
308
311
311
314
314
315
318
321
322
325
326
326
327
328
330
332
333
.
.
.
.
.
.
.
.
.
337
337
337
338
340
340
340
340
340
341
ndice de figuras
1.1. Acceso al sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Inicio de una sesin en un sistema UNIX. . . . . . . . . . . . . . . . .
1.3. Equivocacin al teclear la contrasea. . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
6
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.
2.9.
2.10.
KControl . . . . . . . . . . .
Administracin de usuarios . .
Administracin de contraseas
Disposicin del teclado . . . .
KDE . . . . . . . . . . . . . .
K3b . . . . . . . . . . . . . .
Quemado de un disco de datos
Quemado de un disco de audio
Amarok . . . . . . . . . . . .
Emacs en el men de KDE . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
12
12
14
15
16
16
18
19
20
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
29
47
48
49
49
50
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
89
100
103
104
107
109
viii
5.7.
5.8.
5.9.
5.10.
5.11.
5.12.
5.13.
5.14.
5.15.
5.16.
5.17.
5.18.
5.19.
5.20.
5.21.
5.22.
5.23.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
110
110
111
111
112
113
114
115
116
116
117
117
118
118
119
120
120
6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.
6.12.
6.13.
6.14.
6.15.
6.16.
6.17.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
201
202
203
204
213
221
222
222
223
224
229
231
233
234
235
236
243
ndice de tablas
1.
Convenciones tipogrficas . . . . . . . . . . . . . . . . . . . . . . . .
XII
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
63
64
66
67
67
69
69
74
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
5.8.
5.9.
5.10.
5.11.
5.12.
5.13.
5.14.
5.15.
5.16.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
82
85
86
94
124
125
126
126
127
129
130
131
132
133
133
134
x
5.17.
5.18.
5.19.
5.20.
5.21.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
135
136
137
138
141
6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.
6.12.
6.13.
6.14.
6.15.
6.16.
6.17.
6.18.
6.19.
6.20.
6.21.
6.22.
6.23.
6.24.
6.25.
6.26.
6.27.
6.28.
6.29.
6.30.
6.31.
6.32.
6.33.
6.34.
LATEX: ambientes . . . . . . . . . . . . . . . . .
LATEX: comandos para modificar espacios . . . .
Tamaos disponibles para letras . . . . . . . . .
LATEX: comandos para cambios de tipo de letra . .
Modificadores para la definicin de columnas . .
Acentos . . . . . . . . . . . . . . . . . . . . . .
Smbolos no ingleses . . . . . . . . . . . . . . .
Smbolos de puntuacin y especiales . . . . . . .
Smbolos griegos . . . . . . . . . . . . . . . . .
Smbolos con flechas . . . . . . . . . . . . . . .
Operadores y smbolos relacionales . . . . . . .
Smbolos varios . . . . . . . . . . . . . . . . . .
Nombres de funciones comunes . . . . . . . . .
Smbolos agrandables . . . . . . . . . . . . . . .
Delimitadores . . . . . . . . . . . . . . . . . . .
Tipos de letras en modo matemtico . . . . . . .
Acentos en modo matemtico . . . . . . . . . . .
Comandos de espacio en modo matemtico . . .
Posiciones posibles para los flotantes . . . . . . .
Conversin de grados Farenheit a Centgrados . .
Conversin de Farenheit a Centgrados . . . . . .
Representaciones numricas . . . . . . . . . . .
Comparacin de tamaos . . . . . . . . . . . . .
Paquetes de pgf para colores y dibujos . . . . . .
Colores bsicos con los que se cuenta . . . . . .
Modificadores para el trazo de lneas y figuras . .
Opciones de grosor y estilos de lneas . . . . . .
Ejemplos de figuras en TikZ . . . . . . . . . . .
Lneas dobles . . . . . . . . . . . . . . . . . . .
Tipos de puntas de flechas en TikZ . . . . . . . .
Figuras geomtricas que se pueden lograr en TikZ
Graficacin de funciones comunes en TikZ . . .
Smbolos para marcar curvas que se grafican . . .
Emacs: comandos de AUCTEX . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
145
150
154
155
165
175
175
175
179
180
180
182
182
184
186
187
192
196
198
199
200
200
204
205
206
212
213
214
214
215
216
218
219
239
xi
8.2.
8.3.
8.4.
8.5.
8.6.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
263
264
264
265
269
Prefacio
Este libro presenta las aplicaciones y el enfoque que un estudiante de computacin
o un futuro programador debe dominar para sacar el mayor provecho de su enseanza
profesional en programacin y, en general, en las ciencias de la computacin. Hemos
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 tipogrficas
Tabla 1 Convenciones tipogrficas
Entidad
Enfatizado
itlicas
comando
enunciados
Descripcin
Utilizamos este tipo de letra (font) para enfatizar o resaltar
palabras o frases.
Las utilizamos para modismos, palabras o frases en ingls y
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 representan comandos que puedes teclear y ejecutar en una terminal. Por
convencin utilizaremos % para significar que debe ejecutarse como un usuario no-priviligiado y $ cuando debe ejecutarse como sper-usuario o root.
Utilizaremos este tipo de letra para escribir cdigo que debe
ir en un archivo.
Este smbolo es el logo del ambiente Gnome y sirve para sealar qu aplicaciones para este ambiente son equivalentes
a la revisada en la seccin donde aparece.
Contina en la siguiente pgina
xiv
Tabla 1
Convenciones tipogrficas
Entidad
Descripcin
Este smbolo es el logo del ambiente KDE y sirve para sealar aplicaciones alternativas o similares 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 revisado en la seccin
donde aparece.
Distribucin y ambientes
Algunas de
estas notas
muestran
comandos
A lo largo del libro encontrars muchos ejemplos que funcionarn bien en cualquier
distribucin de Linux. Sin embargo, y a pesar de nuestros mejores esfuerzos, hemos
incluido aplicaciones que no son parte esencial de las distribuciones de Linux ms
utilizadas. 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 necesidad de utilizar una distribucin y optamos por Ubuntu y como administrador de paquetes utilizamos 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 distribuciones ms
importantes en el mercado al momento de la edicin de este libro. En dicho anexo
xv
encontrars, entre otros datos interesantes de cada distribucin, la manera preferida de
administrar aplicaciones.
En el apndice B se presentan las opciones que se tienen para instalar paquetes o
funciones de tu distribucin favorita. Podrs ver ah cmo compilar para instalar algunos de los servicios que se presentan en este libro.
Finalmente, en el apndice C colocamos los archivos principales para tu archivo
.emacs que fuimos construyendo a lo largo de este material, as como los archivos
necesarios para correo e internet.
Introduccin a
Unix
1.1. Historia
La primera versin de UNIX, llamada Unics, fue escrita en 1969 por Ken Thompson. Corra en una computadora PDP-7 de Digital. Ms adelante, los laboratorios Bell,
el MIT y General Electric se involucraron en la creacin del sistema Multics, grande
en tamao, y el primer sistema de tiempo compartido que inclua muchas ideas innovadoras acerca de sistemas operativos. Thompson y algunos de sus colegas admiraban
las capacidades de Multics; sin embargo, pensaban que era demasiado complicado. Su
idea era demostrar que era posible construir un sistema operativo que proporcionara un
ambiente de desarrollo cmodo de una forma ms simple. Y afortunadamente, tuvieron
un xito admirable en el desarrollo de esta idea; a pesar de esto, UNIX es irnicamente
mucho ms complicado de lo que Multics nunca lleg a ser.
En 1970 Thompson, junto con Dennis Ritchie, port UNIX a la PDP-11/20. Ritchie
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
reescribieron el kernel de UNIX, el corazn del sistema operativo, en C.
Inicialmente se otorgaron licencias gratuitas para utilizar UNIX a universidades
con propsitos meramente educativos (en 1974). Esta versin fue la quinta edicin (las
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 edicin
Introduccin a Unix
fue la que sirvi como punto de partida para la generacin de este nuevo y maravilloso
mundo: el mundo UNIX. sta es considerada la edicin clsica de UNIX. Las dos
vertientes ms fuertes creadas a partir de esta edicin de UNIX son: System V (no
confundirlo con la quinta edicin) y el sistema BSD (Berkeley Software Distribution).
A pesar de que ambos sistemas surgieron de la misma influencia y comparten muchas caractersticas, los dos sistemas se desarrollaron con personalidades muy distintas.
System V es ms conservador y slido; mientras que BSD es ms innovador y experimental. System V era un sistema comercial, mientras que BSD no.
La historia es mucho ms detallada y an hay mucho que contar acerca del 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 Facultad de Ciencias, como en muchas otras universidades de prestigio, el servicio al que acceden los
estudiantes y la mayora de los profesores es utilizando una implementacin de UNIX,
Linux, con computadoras conectadas en una red, por lo que todo lo que sucede entre
los estudiantes y la computadora ser en el contexto de esta red.
1.1.1.
En este contexto libre, es una traduccin literal de free que no significa gratis, (como en cervezas
gratis), sino significa libre (como en libertad de expresin).
2
Un sistema operativo es un conjunto de programas que controla y administra los recursos de la
computadora, como son el disco, la memoria, los dispositivos de entrada y salida.
1.1 Historia
Fedora: http://fedora.redhat.com/
Debian: http://www.debian.org/
openSUSE: http://www.opensuse.org/
FreeSpire: http://freespire.org/
Linux se distribuye bajo la licencia GPL (General Public Licence), que es conocida como CopyLeft y que representa gran parte de la idiosincrasia 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 fundamental de
desarrollo es tener un ambiente estable de desarrollo para esa arquitectura. Est
soportado por un grupo internacional de voluntarios. La gran mayora de los programas que conforman los sistemas FreeBSD, a diferencia de Linux, estn gobernados por licencias estilo Berkeley, las cuales permiten redistribuciones siempre
y cuando el cdigo incluya una nota reconociendo el derecho de autor de Regents
of the University of California and the FreeBSD project. Algunas otras partes de
FreeBSD son GNU y estn cubiertas por la GPL.
La pregunta ms comn entre usuarios de UNIX en el mundo es: cul es mejor:
Linux o FreeBSD? La respuesta no es clara. Ambos tienen cosas buenas y tal vez la
mejor forma de saberlo es probar ambos.
1.1.2.
El proyecto GNU
El proyecto GNU buscaba desarrollar un sistema compatible con UNIX, totalmente
libre3 . Es operado por la FSF (Free Software Foundation), organizacin 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 herramientas
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 modificar 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 modificaciones.
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 filosofa
de GNU, pero no es el proyecto GNU), le lleva mucha ventaja. Sin duda alguna sta es una poca
interesante para estar metido en el software libre: nos esperan cosas buenas.
Introduccin a Unix
UNIX es un sistema operativo multi-usuario y multi-tarea, es decir, permite a muchos usuarios conectarse al sistema y cada uno de estos usuarios puede ejecutar varios
programas a la vez.
1.2.1.
Esto no significa que la estacin de trabajo no tenga capacidades multiusuario o multitarea; la esta-
En este punto del proceso de iniciar una sesin, debers teclear la contrasea de
acceso que tienes registrada en el sistema. Nota que, por seguridad, la contrasea no se
muestra en la pantalla, por lo cual se deber teclear con cuidado, tambin respetando
maysculas y minsculas. Si la clave de acceso corresponde con la registrada en el
sistema, podrs iniciar una sesin.
Si Juan ingresa correctamente su contrasea, la pantalla de la computadora lucir
como en la figura 1.2, donde estNum es el nombre de la computadora en la que se est
iniciando la sesin. La forma precisa de cmo aparece la combinacin del nombre del
usuario y el nombre de la mquina puede variar, pero usualmente aparecen en donde el
cin 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.
5
UNIX es sensible al uso de maysculas y minsculas.
Introduccin a Unix
1.4. Emacs
1.4.1.
Introduccin a Emacs
Emacs es un editor de pantalla avanzado, autodocumentado, configurable, extensible y de tiempo real.
Decimos que Emacs es un editor de pantalla porque normalmente el texto que queremos 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 nombre Emacs
fue escogido como abreviatura de Editor MACros.
6
Usaremos en adelante la notacin C-u , que deber leerse como control u, para denotar la combinacin de la tecla Control oprimida al mismo tiempo que u .
1.4 Emacs
C-h es
Control
junto con h
1.4.2.
Decimos que es avanzado porque tiene muchas ms funciones de las que comnmente encontramos en editores de pantalla, como son control de subprocesos, facilidades para la edicin de archivos fuente de varios lenguajes de programacin, as como
una gran cantidad de utileras para hacer nuestra vida ms fcil.
El que sea auto-documentado significa que en cualquier momento puedes teclear
una secuencia especial, que es C-h, y saber cules son tus opciones; tambin puedes
encontrar qu hace cualquier comando o encontrar documentacin especfica de un
tema.
El que sea configurable significa que puedes cambiar las definiciones de los comandos de Emacs, es decir, controlar su comportamiento para que se adapte a tus necesidades o tus preferencias.
Extensible significa que puedes ir ms all de la simple configuracin y escribir comandos completamente nuevos, usando un lenguaje de programacin llamado EmacsLisp, del cual tambin aprenders algo en estas notas en la Seccin 9.2.
Emacs y t
Si hay algo que debes aprender y atesorar de este libro, es Emacs. Una situacin que
le ocurre a todas las aplicaciones de software en Linux y en prcticamente cualquier
sistema operativo es que pasan de moda, pierden vigencia rpidamente. Es probable
incluso que para el momento que leas algunos captulos de este trabajo, las aplicaciones
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 circulacin, y algo
importante es que no ha cambiado significativamente y, estamos seguros, 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 muchos aos.
Por este motivo, a lo largo de todo el libro, encontrars una seccin titulada as:
Emacs. En cada una de estas secciones te mostraremos qu hace tan interesante 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 lenguajes, 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 mismo libro) para realizar muchas tareas de manera simultnea, cuando utilizas Emacs para
realizar algunas o todas esas tareas, obtienes ciertas ventajas: memoria compartida, un
excelente sistema de respaldo para copiar, pegar o reordenar datos, entre otras ventajas.
Tu productividad se incrementar notablemente, te lo garantizamos.
Ambientes
grficos en Linux
10
Enlightenment
Xfce
2.2. KDE
KDE es un escritorio libre para estaciones de trabajo UNIX. La motivacin de los
desarrolladores es tener un escritorio para UNIX con el que sea fcil trabajar, y que
tenga una aplicacin equivalente a las disponibles en los sistemas operativos propietarios. KDE hace uso de QT, una caja de herramientas (toolkit) grfico de la compaia
Trolltech. Cuando se tom esta decisin en 1996, por el autor Matthias Ettrich3 , hubo
varias crticas por esa decisin. El problema es que en esas fechas QT no tena una
licencia de software libre y a la gente del proyecto GNU le preocupaba que se usara
algo as para crear un escritorio que quera ser libre. Dada esta situacin se inici otro
proyecto, GNOME, que no hara uso de QT y sera totalmente libre. En Noviembre de
1998 Trolltech cre una nueva licencia Q Public License bajo la cual distribua a QT.
Finalmente en Septiembre del 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.
Configuracin de KDE
El comportamiento de KDE lo puedes configurar mediante el uso del centro de
control de KDE, el cual puedes ejecutar mediante el comando kcontrol. Para ejecutar
una aplicacin sin tener que hacer uso de la consola puedes utilizar el atajo por omisin
Alt+F2. En la figura 2.1 se muestra la ventana inicial del centro de control, dividida en 2
secciones. En la seccin 1 se muestran las categoras mediante las cuales se puede configurar a KDE. En la seccin 2 se presenta la informacin pertinente al mdulo que se
est configurando. Al iniciar, KControl nos presenta en esta seccin cierta informacin
elemental:
1.
2.
3.
4.
3
Versin de KDE
Nombre del sistema
Nombre del usuario
Versin del ncleo del sistema
11
2.2 KDE
Administracin de usuarios
En la categora Administracin del sistema se encuentra el mdulo Administracin
de usuarios. Desde ah es posible revisar los detalles de los usuarios existentes y agregar
nuevos usuarios. Cuando se intenta modificar la configuracin del sistema es necesario
contar con los permisos adecuados y presionar el botn Modo administrador; de no
ser as slo puedes modificar los datos que pertenecen a tu propia cuenta. Para agregar
un nuevo usuario es necesario el botn Nuevo. El centro de control nos presentar el
dilogo que se muestra en la figura 2.2. En l es necesario ingresar los datos que corresponden al nuevo usuario entre los que se encuentran el nombre de usuario, su grupo
primario, los grupos a los que pertenece, su directorio personal y el intrprete que va a
utilizar.
Como se ve en la figura 2.3 en la pestaa Contrasea y Seguridad se pueden establecer diferentes opciones para la caducidad de la contrasea. Puedes decidir si es que
la contrasea caduca o no, y cules son las acciones que el sistema debe tomar en caso
de que esto ocurra.
12
Figura 2.2 Administracin de usuarios
13
2.2 KDE
Escritorios mltiples
Accesos rpidos
En la categora Regional y Accesibilidad, se encuentra el mdulo Accesos 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. Desde
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 configurado en
tu sistema. De esa forma puedes hacer que KDE despliegue todos sus mensajes en el
idioma de tu preferencia. Para poder hacer eso es necesario que instales el paquete de
internacionalizacin 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 letras
para el idioma 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 necesario que
ejecutes apt-get install kde-i18n-es. Una vez hecho eso puedes regresar al centro de
control y dentro de la categora Regional y Accesibilidad, en el mdulo Pas/Regin e
idioma podrs agregar el idioma que acabas de instalar.
14
2.2.2.
KDE en 1, 2, 3
Cuando acabas de entrar a KDE, vers el escritorio que se muestra en la figura 2.5.
Ah hemos resaltado algunas secciones, en la seccin 1 se resalta el Men K, a partir de
l puedes acceder a las aplicaciones que estn instaladas en tu sistema. En la seccin
2 tienes accesos rpidos a aplicaciones utilizadas frecuentemente. En la seccin 3 se
muestra el navegador de los escritorios virtuales (que veremos un poco ms adelante).
En 4 se muestran las aplicaciones que estn ejecutndose en un momento dado. Finalmente en 5 puedes ver applets de aplicaciones que estn ejecutndose en el background.
Veamos ahora cmo realizar algunas de las tareas comunes en KDE.
2.2.3.
15
2.2 KDE
DVD. Hay que sealar que K3b es slo la interfaz grfica ya que el trabajo real lo llevan
a cabo las aplicaciones cdrecord, cdrdao y growisofs. En la figura 2.6 se muestra la
ventana inicial de K3b.
16
Cuando ya seleccionaste todo lo que deseas agregar al CD, basta presionar el botn Grabar para seleccionar las opciones con las que deseas crear el CD. Las pestaas
17
2.2 KDE
ms importantes son Grabando y Descripcin del volumen. En la primera es necesario seleccionar cul dispositivo se va a usar para quemar el disco y a qu velocidad,
qu modo de grabacin y qu opciones queremos emplear. En los modos de grabacin
puedes seleccionar uno de los siguientes:
DAO
TAO
En bruto
18
2.2.4.
Amarok
Adems de usar la computadora para trabajar o para jugar, una de las tareas ms
comunes es la de escuchar msica. Para poder hacer eso dentro de KDE puedes usar
Amarok. Amarok se encarga de tener un solo lugar en donde puedes escuchar msica
de CD, archivos .mp3, archivos .ogg e incluso flujos desde internet. Cuando Amarok
inicia por primera vez se ve como en la figura 2.9. Para agregar archivos que desees escuchar es necesario que vayas al men Lista de reproduccin y selecciones el elemento
Aadir medio. Despus debers navegar el sistema de archivos hasta que encuentres los
archivos que quieres agregar.
Cuando Amarok inicia por primera vez te pedir que crees una coleccin de msica;
si aceptas te presentar una vista en la que puedes construir tu coleccin de msica,
decidiendo en qu directorios deseas buscar. sta es una parte esencial para que puedas
utilizar todos los beneficios que te ofrece Amarok. Cuando Amarok termine de generar
tu coleccin podrs agregar cualquier cancin que ah aparezca a la lista de msica que
deseas escuchar4 .
4
Si cuando intentas escuchar la msica te hace falta alguna biblioteca, Amarok te lo indicar y la
instalar por ti
19
2.3 Emacs
Navegadores
Los navegadores en Amarok te permiten acceder a tus canciones de distintas formas.
stos se encuentran en la parte izquierda de Amarok, como se muestra en la seccin 1
de la figura 2.9.
Contexto Aqu Amarok te presenta informacin acerca de la cancin que ests escuchando en ese momento. Puedes navegarla y revisar la letra de la cancin, el disco
en donde aparece o la biografa del artista.
Coleccin Te permite navegar tu coleccin de msica.
Listas de reproduccin Aqu puedes administrar las diferentes listas de msica, para
que puedas cargar la msica que quieres de forma rpida.
Dispositivo de medios Si conectas un reproductor de MP3 a tu computadora, desde
aqu puedes hacer que Amarok toque esa msica en tu computadora.
20
2.3. Emacs
Cada vez, a partir de este captulo, que te encuentres con una seccin titulada Emacs,
te recomendamos iniciar el editor y probar todo lo que te vamos explicando. La mayora de las secciones sobre Emacs te muestran una faceta completamente distinta; por
ejemplo, Emacs como editor de texto (Seccin 4.3); o cmo ejecutar comandos; o un
intrprete de comandos de Unix dentro de Emacs (Seccin 3.6). En esta seccin simplemente te mostramos como iniciar Emacs desde el men de KDE.
Figura 2.10 Emacs en el men de KDE
21
Sistema de
Archivos
24
Sistema de Archivos
25
.emacs
algoritmos
elisa
capit1
/
varios
home
tareas
Tarea1
fulano
vaz
sbin
win98
26
3.1.1.
Sistema de Archivos
27
28
Sistema de Archivos
(Print Working Directory), a lo que el sistema responde con la ruta absoluta del directorio en el que te encuentras.
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, utilizar
una ruta absoluta para moverte arbitrariamente a cualquier otro directorio de trabajo. 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 archivo, 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 ubicarte en el
directorio 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 usa una ruta
absoluta.
Actividad 3.1 Cmbiate a los siguientes directorios. Despus de cada cambio, pregunta 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 modificadores se pueden omitir. Los [parmetros] se refieren al formato que
puedes querer para la lista de archivos, mientras que [archivos] se refiere al lugar en el
rbol del sistema de archivos del que quieres la lista. Si omites los [parmetros] 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 refieren
a pedir una lista extendida, que contenga, entre otra informacin, el tipo de archivo, su
dueo, su tamao, el da de su ltima modificacin. Puedes querer que se listen tambin
aquellos archivos que empiezan con algo que no es una letra, como un punto. Para ello,
tecleamos el comando de la siguiente manera:
ls -al /home/fulanito/
y se mostrar en pantalla la lista de archivos y directorios que se encuentran 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 inmediatamente
colgando del directorio de trabajo.
Actividad 3.2 Pide la lista breve de archivos que se encuentran en /usr/local/
29
Actividad 3.3 Pide la lista extensa de archivos que se encuentran en /bin/. Cul es la
informacin que aparece?
Como puedes ver de la actividad anterior, muchas veces los archivos y directorios
en un directorio son tantos, que si pides la lista extensa pudieses no alcanzar a verla
completa. Para ello, haces lo que se llama entubar (en ingls, pipe), que consiste en redirigir la salida de un comando y usarla como entrada de un segundo comando. Quieres
que el segundo 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 renglones 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 tecleas q , el
listado se suspende.
Veamos el resultado que se te muestra con el comando anterior en la figura 3.2 .
Si el comando que se utiliza es less, entonces se podr regresar sobre el listado,
oprimiendo RePg ; y avanzar tecleando espacio o AvPg .
Tambin puedes entubar a que vaya a la impresora, si es que hay alguna conectada
accesible, con el comando lpr.
Actividad 3.4 Utiliza el comando less para entubar el listado del directorio /usr/bin
y d cmo responde.
2
22
1
1
1
1
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
4096
4096
2612
60592
263064
9968
4
5756
316848
446800
3
9528
Apr
Jun
Mar
Feb
Feb
Feb
Feb
Mar
Feb
Feb
Feb
Feb
19 2000 .
6 05:08 . .
7 2000 arch
3 2000 ash
3 2000 ash . s t a t i c
3 2000 aumixminimal
17 2000 awk > gawk
7 2000 basename
27 2000 bash
2 2000 bash2
17 2000 bsh > ash
7 2000 c a t
Contina en la siguiente pgina
30
Sistema de Archivos
3.2.1.
1
1
1
1
1
1
root
root
root
root
root
root
root
root
root
root
root
root
Mar
Mar
Mar
Mar
Mar
Feb
7
7
7
6
7
9
2000
2000
2000
2000
2000
2000
chgrp
chmod
chown
consolechars
cp
cpio
Permisos de archivos
Los permisos de acceso a un archivo, o simplemente permisos, especifican quin
puede hacer qu a un archivo. Los permisos de un archivo son asignados por su dueo
y se pueden ver con el comando ls -l y modificarlos 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.
31
32
Sistema de Archivos
ID efectivo del proceso se convierte en aqul del dueo del programa, as que el
programa se ejecuta con los privilegios del dueo del programa.
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 escrito solamente por el
programa passwd. Los usuarios ordinarios deben ser capaces de poder ejecutar
el comando passwd, pero no de modificar directamente el archivo passwd. 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 aplica a los permisos
de grupo en lugar de a los permisos de dueo. El bit set-gid se especifica 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 programa que est
leyendo o escribiendo el archivo puede bloquear otros intentos de leer o escribir
en l al mismo tiempo. Prender este bit previene que accesos simultneos a un
archivo puedan corromper su significado y dejarlo en un estado inconsistente. El
locking bit est representado por una l reemplazando a la x en los permisos del
grupo.
El sticky bit. Cuando se aplica a un directorio, el sticky bit previene 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 adecuada para retener
al programa en memoria cuando dicho programa puede ser compartido 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 de otros.
Construccin de permisos
Los comandos chmod, umask y find hacen uso de la habilidad para construir conjuntos de permisos simblicamente. Esto lo puedes lograr especificando un modo simblico que les indique cmo modificar un conjunto existente, posiblemente vaco, de
permisos.
Un modo simblico consiste de una o ms clusulas separadas por comas. Cada
clusula, en turno, consiste de cero o ms letras quin seguidas por una secuencia
de una o ms acciones a aplicar a la categora designada por las letras quin. Cada
2
En este contexto, utilizaremos indistintamente prendido, encendido, arriba o puesto, para indicar que
ese bit ha sido activado por medio de alguna utilera vlida como el comando chmod.
33
34
Sistema de Archivos
3.2.2.
35
Nota que como no das ms que el nombre del archivo, la trayectoria se refiere al directorio de trabajo.
36
Sistema de Archivos
touch mimosa
En realidad este comando lo que hace es actualizar la fecha de ltima modificacin
del archivo mimosa. Sin embargo, si el archivo no existe lo crea.
Nota: A lo largo de estas notas diremos que un programa produce 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 de
las estaciones de trabajo estaban conectadas a un teletipo en lugar de un monitor, pero
no debe confundirse con la accin de enviar un archivo a la impresora.
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 modificacin
del archivo gato. Ejecuta touch sobre el archivo gato. Obtn nuevamente un listado
extendido y describe la diferencia entre ambos listados.
Entubamientos y filtros
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 pipeline o entubamiento. Al igual que con las formas de redireccionamiento discutidas anteriormente,
los programas conectados no tienen por qu saber de dichas conexiones.
Sintcticamente, creas un entubamiento escribiendo dos comandos con un pipe (el
smbolo |) entre ellos. Por ejemplo, la lnea de comandos
grep pest phones | sort
llama al programa grep, que extrae del archivo phones todas las lneas que 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 salida de la lnea de
comandos completa es una lista ordenada de todas las lneas en phones que contienen
pest.
En una lnea que contenga tanto redireccionamientos como entubamientos, los redireccionamientos tienen mayor precedencia: primero los redireccionamientos se asocian
con comandos y despus los comandos con sus redireccionamientos se pasan por los
entubamientos.
La creacin de un entubamiento implica la creacin de un par de procesos, uno para
el comando que produce la informacin entubada y otro para el proceso que consume
esta informacin. Estos procesos los crea el shell que interpreta la lnea de comandos.
Un filtro es un programa que lee datos de la entrada estndar, los transforma de
alguna manera y luego escribe esta informacin transformada a la salida estndar. Uno
puede construir un entubamiento como una sucesin de filtros; estas sucesiones proveen
una forma muy poderosa y flexible de usar comandos simples para que al combinarlos
37
alcanzar grandes metas, posiblemente muy complejas. Generalmente este tipo de entubamientos se citan como ejemplos de la filosofa Unix.
Hay otras herramientas en los Unix estndar para simular estos entubamientos: archivos especiales FIFO, sockets y streams. Pero son mucho ms especficos y sofisticados y definitivamente fuera del alcance del presente trabajo.
3.3.1.
Portable Operating System Interfaz es un estndar definido por la IEEE Institute of Electrical and
Electronics Engineers y ANSI American National Standards Institute . POSIX tiene como finalidad
definir 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.
38
Sistema de Archivos
hay alguno. Las opciones controlan o modifican lo que el comando hace. Los operandos
especifican nombres de trayectorias o con lo que va a trabajar el comando.
Especificacin de opciones. Las opciones se especifican con una sucesin de palabras.
Cada palabra es un grupo de opciones o una opcin argumento. Las opciones
generalmente se denotan por letras. Se pueden escribir en cualquier orden y se
pueden combinar varias opciones en un solo grupo (siempre y cuando no reciban
ningn argumento). Cada grupo de opciones est precedido por un guin (-). Por
ejemplo, los comandos
ls -al
ls -l -a
son equivalentes e indican que el comando ls (list archives) sea llamado con las
opciones a (all files) y l (long listing).
La ltima (o nica opcin) de un grupo de opciones puede ir seguida por una
palabra que especifique 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 shell 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
separan por comas, pero se pueden separar por blancos siempre y cuando se encierre la lista de argumentos entre comillas (dobles o sencillas), o si se pone una
diagonal 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 especificar argumentos:
- - Indica el final de las opciones. Esto es muy til cuando quieres pasar argumentos que empiezan con - a un comando. Por ejemplo,
rm - - -qq
5
Una nueva lnea escapada es una que est precedida por una diagonal invertida (\).
39
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, obtendramos
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 qq
Citas (quotations)
Todos los shells estndar asignan significados especiales a ciertos carcteres, llamados meta-carcteres. Para usar estos carcteres como carcteres ordinarios en la lnea
de comandos, debes citarlos (marcarlos de manera especial para que el shell 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 significado especial.
Si un carcter es un meta-carcter, el significado especial es generalmente el
carcter mismo. Por ejemplo, \\ usualmente significa una sola \ y \$ el signo de
pesos. En estos casos, la diagonal inversa le quita su significado a los carcteres,
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, excepto por
$, que generalmente indica sustituciones a realizar.
Otra forma de citar muy similar a la anterior, pero ms fuerte es usar comillas
sencillas ya que ni siquiera el carcter $ es interpretado.
Los espacios y tabuladores, si se encuentran dentro de algn texto 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
Comando
Descripcin
cat
El comando cat copia y concatena archivos. Tiene algunos usos comunes que no implican concatenacin y que lo hacen uno de los comandos ms tiles de Unix (en prcticas posteriores lo usaremos exhaustivamente). La forma general de cat es:
Contina en la siguiente pgina
40
Tabla 3.1
Sistema de Archivos
Comandos de Unix importantes
Comando
Descripcin
cat [-estuv] [archivo. . . ]
ln
mv
cp
rm
El comando ln crea una liga a uno o ms archivos existentes. Las nuevas ligas proveen nombres adicionales para esos archivos. La forma
del comando ln es:
ln [-f s] archivo ruta
ln [-f s] archivo. . . dir
El comando mv mueve uno o ms archivos de un directorio, el directorio fuente (source), a otro directorio, el directorio destino (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 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 ln y mv, cp
s copia los datos y no slo cambia las ligas de los archivos 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 opciones -rw es otra forma (pero no lo veremos aqu); cpio
con 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 archivos). La forma de cp es:
cp [-fip] iarchivo oarchivo
cp [-fiprR] iname. . . odir
El comando rm borra ligas a archivos, ya sean archivos ordinarios o
directorios. Un archivo es eliminado cuando todas sus ligas han sido
borradas, as que borrar la nica liga a un archivo (el caso ms comn)
borra el archivo mismo. La forma del comando rm es:
rm [-firR] archivo. . .
rmdir
41
Comando
Descripcin
more
El comando more te permite examinar uno o ms archivos en tu terminal una pgina a la vez. Tambin lo puedes usar para examinar la
entrada estndar y por lo tanto examinar la salida de un programa
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 manejar; si no has ledo el material que se encuentra antes de
esta seccin, ests en problemas). La forma de la lnea de comandos
para more es:
more [-ceisu] [-n number] [-t tag] [-p cmd] [archivo. . . ]
Nota que todos los parmetros son opcionales.
less
most
Hace lo mismo que more, pero con una interfaz parecida a emacs.
Tambin extiende las capacidades de more utilizando comandos y
enlaces de teclas a la Emacs.
lpr (lp)
lpstat
lpc
lpq
lprm
find
El programa find busca en partes especificadas del sistema de archivos de Unix, archivos que casen con un cierto criterio. La forma del
comando es:
find ruta. . . [criterio]
Contina en la siguiente pgina
42
Tabla 3.1
Sistema de Archivos
Comandos de Unix importantes
Comando
Descripcin
Aqu ruta. . . es una lista de trayectorias de archivos y directorios
(usualmente slo directorios). En el caso ms simple, el criterio 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
satisfacen (son tautologas, :-)) y se ejecutan slo por sus efectos secundarios. En general, un criterio es una combinacin lgica arbitraria
de patrones que se construye a partir de los patrones primarios.
La prueba primaria -print es muy til. Siempre es verdadera y, como efecto secundario, ocasiona que la ruta absoluta de los archivos
encontrados (casados, apareados) sea enviada a la salida estndar.
which
file
cmp
diff
El comando diff analiza las diferencias entre dos archivos, tales como
diferentes versiones del mismo documento. La forma del comando
diff es:
diff [-bcefhr] [-C n] archivo1 archivo2
chmod
43
Comando
Descripcin
umask
chown
chgrp
wc
touch
El comando touch (toca) un archivo, actualizando sus tiempos de acceso y modificacin. Si el archivo no existe, se crea a menos que se
especifique 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
tee
44
Tabla 3.1
Sistema de Archivos
Comandos de Unix importantes
Comando
Descripcin
vers el contenido del archivo hola.txt por pginas (que es lo que
hace more) y encontrars en tu directorio actual un archivo llamado
adios.txt que ser una copia exacta de hola.txt.
45
Actividad 3.12 Crea un directorio llamado miPractica que contenga dos subdirectorios 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 lectura
y escritura para ti y slo de lectura a los dems.
Actividad 3.15 A todos los archivos que haz creado asgnales todos los permisos 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.
46
Sistema de Archivos
Una aplicacin de visualizacin universal, capaz de mostrar imgenes y documentos sin necesidad de iniciar otras aplicaciones. Esto lo hace integrando componentes de otras aplicaciones: de KView para visualizacin de imgenes; de
KDVI para visualizar DVIs; de KGhostView para documentos PostScript; y aplicaciones de Koffice.
Un emulador de terminal, que funciona de la misma manera que una terminal
normal.
3.5.2.
47
Vista de texto.
Vista de tamao de archivo.
lbum de fotos.
La figura 3.3 muestra la funcionalidad estndar de konqueror como un administrador de archivos.
Figura 3.3 Konqueror como un administrador de archivos
48
Sistema de Archivos
3.5.3.
49
3.5.4.
50
Sistema de Archivos
Es interesante ver como estos visores no son parte del navegador y no fueron diseados para eso; sin embargo, es posible integrar componentes de otras aplicaciones. El
visor de imgenes es parte de KView; el visor de texto es parte de KWrite; el visor de
DVI es parte de KDVI; el visor de postscript es parte de KGhostview; etc.
3.6. Emacs
3.6.1.
XEmacs,
encarnacin
de Emacs:
xemacs
51
3.6 Emacs
Tabla 3.2 Emacs: opciones de inicio
Opcin
Descripcin
-batch
-nw
-debug-init
Si ocurre algn error mientras Emacs est arrancando, iniciar el depurador. Esta opcin es til cuando agregas cosas a tu
archivo de configuracin de Emacs y no estn funcionando
bien.
-q
-user <user>
-u <user>
-help
-version
-V
-funcall <function>
-f <function>
-eval <form>
-load <archivo>
-l <archivo>
52
Sistema de Archivos
3.6.2.
Conceptos esenciales
Dado que Emacs es ms, mucho ms, que un editor de texto, para integrar tantas
operaciones 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 sistema para incrementar la productividad del programador, todo comando que puede ejecutarse puede
y usualmente est asociado a una combinacin de teclas. Puedes utilizar cualquier tecla
como parte de estas combinaciones de teclas y a menudo involucran las teclas 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 modifica directamente el archivo, sino que
toman una copia del mismo y la coloca en un buffer, el cual contiene toda 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 simplemente con
algn propsito especfico; es decir, no todos los buffers estn ligados a un archivo sino
que sirven para interactuar con Emacs. En este sentido es importante que entiendas la
diferencia entre un buffer y un archivo.
53
3.6 Emacs
3.6.3.
Dired
Combinacin
Descripcin
C-o
54
Sistema de Archivos
Tabla 3.3
3.6.4.
Combinacin
Descripcin
Crea un directorio.
Enter
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 como ayuda. Si escribes
la secuencia del comando completa muy rpidamente, Emacs no muestra nada en el rea de eco para no
distraerte.
Edicin
Geek es el sobrenombre que reciben aquellas personas fascinadas, probablemente en forma obsesiva,
con algunos temas especficos u obscuros de algn rea del conocimiento o de la imaginacin. En aos
recientes, geek se utiliza generalmente para los obsesionados con tecnologa o computacin. Es probable
que si ests interesado en los temas del presente libro, t mismo(a) califiques como geek, bienvenido(a)
al club!
2
hacker es aquella persona que crea o modifica software o hardware de computadora, incluyendo
tareas de programacin, administracin de sistemas y seguridad. Hack, por otro lado, tiene una connotacin negativa y es algo as como un chicano fix, una compostura poco elegante para un programa o
sistema.
56
Edicin
cul sers t tambin al final de este captulo); es claro que Vi es el editor del infierno y
nos 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 manera ms
general el software libre, te ofrece una nica cosa y hay que valorarla: la facultad de
elegir.
4.1.1.
Introduccin
Kate es el editor de texto preferido por programadores en KDE. Algunas caractersticas de Kate que revisaremos en este libro incluyen resaltado configurable 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.
El editor nativo en Gnome es gedit, un editor de texto eficiente y sencillo. Este editor,
sin embargo, no es directamente comparable con Kate, que revisamos en esta seccin,
y tampoco con Emacs, que veremos ms adelante.
Kate es ideal para programadores. Sin embargo, una de sus fortalezas ms importantes no est relacionada con su manejo de archivos fuente de diversos lenguajes de pro-
57
4.2.2.
Por omisin Kate te mostrar el ltimo archivo que editaste en tu sesin anterior. Si
este comportamiento no te gusta, lo puedes cambiar en el men de preferencias.
Puedes utilizar, como ya mencionamos, el comando kate para iniciar el editor; si le
proporcionas el nombre de un archivo como parmetro, abrir el archivo o lo crear si
no existe.
% kate miarchivo.txt
Si tienes una conexin activa a la red y los permisos adecuados, incluso puedes abrir
un archivo en un servidor remoto con algn protocolo soportado por KDE:
% kate ftp://ftp.fciencias.unam.mx/pub/moderno/prueba
58
Edicin
En el captulo 5 se describen varios protocolos de red; KDE ofrece soporte transparente3 para varios de ellos.
Sesiones
Kate soporta sesiones, que son una forma de mantener distintas listas de archivos y
configuraciones. Puedes tener tantas sesiones como desees y stas pueden ser 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 existir una sesin
abierta con ese nombre, los archivos especificados 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 abiertos en Kate.
Los archivos que han sido modificados 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 en distintos
directorios), 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 que hagas click sobre
el nombre en la lista.
La lista de archivos puede ordenarse de distintas formas; para ello Kate ofrece un
botn a la derecha que te permite ordenar con alguno de los siguientes criterios: por
orden de apertura, por nombre (alfabtico) y por URL.
Esta lista aparece por omisin, aunque puede moverse, al lado izquierdo de la ventana de edicin.
El selector de archivos
El selector de archivos es un visor de carpetas, que te permite navegar tu espacio de
archivos y abrir el archivo adecuado. Su funcionamiento es idntico al de otras aplicaciones KDE, particularmente Konqueror.
3
Cuando decimos que algn proceso es transparente nos referimos al hecho de que funciona como si
no estuviera ah, que no se le ve.
59
Emulador de terminal
Kate integra un emulador de terminal que es una copia de la aplicacin Konsole
de KDE. Est disponible de varias formas, a travs del men Ventana en vista de
herramientas, a travs del botn en la parte inferior llamado terminal o bien pulsando
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
permite invocar aplicaciones externas a Kate con datos relacionados con l o los documentos actuales, por ejemplo, su URL, directorio, texto.
Qu herramientas se incluyen es configurable por el usuario a travs del panel de
configuracin de herramientas externas. Las herramientas que se incluyen por 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
documento.
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 figura 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 en varias
aplicaciones que funcionan en KDE y ofrece varios selectores: de documentos, proyectos y archivos. Cada selector ofrece distintas posibilidades para localizar un archivo o
proyecto a editar.
La seccin marcada con 2, que es la ms grande de la ventana de Kate, 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 la 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 horizontal o vertical. En
ambos casos, las dos partes o marcos, contendrn el archivo que ests editando, pero
60
Edicin
slo uno de ellos ser el marco activo, lo que se representa por medio de un indicador
verde.
Figura 4.2 Ventana de Kate cuando inicia
Acceso rpido
Tecla
Control es
C.
Kate integra una serie de acciones que puedes realizar a travs de enlaces de teclas y
que te permiten un acceso rpido. A continuacin se muestra una tabla con los enlaces
por omisin, pero puedes seleccionar otros utilizando el men Preferencias y la opcin
Configurar accesos rpidos.
61
Enlace
Descripcin
Avpg
Repg
Ins
Pasa de modo insercin a modo sobreescritura y viceversa. Cuando est en modo insercin el editor aadir cualquier carcter introducido al texto y empujar los carcteres previamente introducidos a la derecha del cursor de texto. El modo de sobreescritura
hace que la entrada de cada carcter elimine el carcter inmediatamente a la derecha del cursor de texto.
BackSpace
Inicio
Fin
Supr
Shift
Shift
F1
Ayuda.
Shift F1
Ayuda: qu es esto?
Cf
Buscar.
F3
Repetir la bsqueda.
Cb
Insertar un marcador.
Cc
Cn
Nuevo documento.
Contina en la siguiente pgina
62
Edicin
Tabla 4.1
Enlace
Descripcin
Cp
Imprimir.
Cq
Cr
Reemplazar.
Cs
Salvar archivo.
Cv
Pegar.
Cx
Cz
Deshacer.
CShiftz
Rehacer.
Buscando y reemplazando
Los dilogos de bsqueda y sustitucin de Kate son muy similares, salvo 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:
63
Enlace
Descripcin
Texto a buscar
Expresin regular
Maysculas y minsculas
Desde el cursor
Buscar hacia atrs
Reemplazar con
Preguntar al reemplazar
Para iniciar una bsqueda puedes utilizar el men Editar Buscar o bien C-f ;
para reemplazar debes utilizar Editar Reemplazar o C-r .
Marcadores
Los marcadores sirven para sealar lneas interesantes en el documento y volver
a ellas fcilmente en el futuro. Puedes establecer y eliminar marcadores, moviendo el
cursor a esa lnea y activando la opcin Marcadores Cambiar o presionando C-b .
Despus, para recorrer los marcadores en el documento puedes utilizar en el men
Marcadores Siguiente ( CAvpg ) o Anterior ( CRepg ).
64
Edicin
Enlace
Descripcin
Ninguno
Normal
Este sangrado simplemente mantiene un sangrado similar al de la lnea anterior con cualquier contenido diferente a un espacio en blanco.
Puedes combinar ste con las acciones sangrar y borrar sangrado para
satisfacer tu gusto personal.
Estilo C
SS C
Es un sangrado alternativo para los lenguajes C y similares, con las mismas restricciones.
Python
XML
4.3. Emacs
Emacs es el editor de los Dioses, por directa contraposicin con su odiado archienemigo 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 los 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 aprenderlos todos
para utilizar Emacs, pero es importante los conozcas y practiques cada vez que tengas
oportunidad.
65
4.3 Emacs
4.3.1.
Meta x
sirve para
ejecutar
comandos
Comandos
Los comandos en Emacs tienen un nombre auto-descriptivo. En muchas ocasiones estos comandos estn formados por dos o ms palabras separadas por un guin
y, como puedes imaginar, ejecutar estos comandos llamndolos por su nombre puede
resultar engorroso. Por esta razn, Emacs crea un vnculo entre un comando y una secuencia de teclas y puedes ejecutarlo ya sea invocndolos por su nombre, por ejemplo
Meta x find-file, o bien tecleando la secuencia asociada, en este caso C-x C-f .
Las secuencias asociadas lucen complicadas al principio, pero despus de utilizarlas
un tiempo te dars cuenta que estn ah por muy buenas razones. De hecho, notars
que los comandos ms usuales tienen asociadas secuencias de teclas cortas. Emacs fu
diseado por programadores, para programadores, por lo que la eficiencia lo es todo.
Cada vez que tienes que despegar una de tus manos de la parte central del teclado
para buscar con el ratn un comando en los mens, pierdes tiempo valioso. Intenta:
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 find-file. Ahora imagina una sesin de
edicin donde escribirs 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 vez que
te sientas cmodo con los comandos de Emacs que dominas, regresa a este captulo e
investiga algunos de las secciones que a continuacin presentaremos y aprende nuevas
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 utilizado algunas
de stas a lo largo de este material, pero en nomenclatura de Emacs no mostramos el
nombre de estas teclas completo, sino que las sustituimos as: Ct rl es C y Meta es
M. Entonces una secuencia as: Cx , significa mantener presionada Ct rl y sin soltar
presionar 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 ejecuta una
secuencia Mx utilizando esc , sin embargo, no se mantienen presionadas de manera
simultnea. Es decir, primero presionamos esc , soltamos, y a continuacin x .
El guin nos sirve para indicar que esas teclas se presionan juntas, 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: simultneamente
Ct rl y x , liberamos ambas y de manera simultnea presionamos Ct rl y f .
66
Edicin
4.3.2.
Movimiento
Existe una posicin privilegiada que es donde se efectan las operaciones 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 con respecto al
buffer que ests editando. El punto en realidad se refiere 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 pantalla.
La mayora de las operaciones de movimiento se pueden efectuar tanto hacia adelante como hacia atrs. A continuacin presentaremos una tabla de movimientos tratando de explicar, cuando no sea claro, las funciones de estos comandos.
Tabla 4.4
Unidad
Adelante
Atrs
carcter
C-f
C-b
palabra
M-f
M-b
lnea
C-p
C-n
enunciado
M-a
M-e
prrafo
M-{
M-}
pantalla
C-v
M-v
67
4.3 Emacs
vilegiadas del texto. Emacs ofrece los siguientes comandos para realizarlo:
Tabla 4.5 Emacs: movimiento a lugares especiales
4.3.3.
Elemento
Inicio
Fin
lnea
C-a
C-e
buffer
M<
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, pero antes
te presentamos un comando muy til undo o C-x u , que deshace lo que hizo el
ltimo comando. Si ejecutas repetidamente este comando puedes retroceder tanto como
quieras en el proceso de edicin del buffer actual.
Los comandos de Emacs para borrar se dividen en dos grandes categoras, los que
matan y los que borran. Como una manifestacin del optimismo de Emacs, 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 de la
muerte (kill-ring).
Por el contrario, cuando borras algo es para siempre, a menos, claro, que utilices
el comando undo. Para evitar que los usuarios de Emacs pasemos malos ratos 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.
Unidad
Adelante
Atrs
carcter (borrado)
C-d
BackSpace
palabra
Md
MBackSpace
lnea
C-k
C-u 0 C-k
enunciado
Mk
C-x Supr
68
4.3.4.
Edicin
Reencarnacin de texto
Cuando matas alguna seccin, los carcteres que la conforman entran al kill-ring.
Si eres perspicaz te preguntars: de qu sirve que se vayan a este lugar si no s como
traerlas de regreso? sta es una pregunta vlida: en efecto existe una manera de traer de
regreso aquellos carcteres que han muerto en este buffer (o en cualquier otro buffer);
a esta operacin se le conoce como yank y el comando para realizarla es C-y . La
ejecucin 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 anterior 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 kill-ring.
Los elementos del kill-ring son el resultado de acomodar adecuadamente bloques de
operaciones matar; por ejemplo si matas dos lneas seguidas, estas dos lneas 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 sobre ellas. A estas
divisiones se les conoce como regiones.
Una regin comprende los carcteres que se encuentren entre una marca y el punto.
La marca es otra posicin especial dentro del buffer y se fija por medio del comando
CSpace . El punto es la posicin que tenga el cursor. Es decir, se coloca la marca en
la posicin donde se encuentra el punto y mueves el punto ampliando o contrayendo 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
sea 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 con 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, tambin
puedes seleccionar reas con forma de rectngulos, con la esquina superior izquierda
69
4.3 Emacs
4.3.7.
Enlace
Operacin
C-x r k
C-x r y
C-x r o
Abrir un rectngulo
Mx clear-rectangle
Borrar un rectngulo
Registros
En Emacs existen una especie de cajones, en donde puedes guardar cadenas de
texto, rectngulos o posiciones. Estos cajones reciben el nombre de registros, y sus
principales comandos son:
Enlace
Operacin
C-x x
C-x r r R
C-x r s R
C-x r Space R
C-x r i R
C-x r j R
70
Tabla 4.8
4.3.8.
Edicin
Emacs: comandos para manejar registros
Enlace
Operacin
C-x r t
Archivos
Como mencionamos en el captulo anterior (seccin 3.6.3), para abrir un archivo
en Emacs utilizamos la secuencia: Cx Cf (find-file). Si te equivocas de archivo,
inmediatamente despus de utilizar Cx Cf , puedes utilizar el comando Cx Cv
(find-alternate-file).
4.3.9.
Buscar
Emacs incluye varios tipos de bsqueda, el comando search-forward utiliza el
mini-buffer para solicitarte la cadena que deseas buscar.
Probablemente el comando ms til para buscar en Emacs es isearch-forward (nota la i al inicio del comando), que sirve para realizar una bsqueda de manera incremental. Esto significa 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 utilizamos 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 hacia adelante o hacia atrs, respectivamente. Cuando llegas al final (o inicio) del buffer, Emacs
utiliza el rea de eco para avisarte que no existen ms presencias de la cadena buscada;
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 tedioso, aun
cuando puedes utilizar los comandos de bsqueda para localizar rpidamente el texto a
cambiar.
71
4.3 Emacs
Por este motivo Emacs te ofrece dos comandos principales para reemplazar texto.
El primero replace-string, cambia todas las ocurrencias de una cadena por otra (utiliza
el mini-buffer para solicitar ambas cadenas).
Existe sin embargo, otro comando llamado query-replace-string que se comporta
similar, pero antes de realizar cada cambio presenta una serie de opciones para decidir
si esa presencia particular se cambia o no y tambin para decidir reemplazar todas las
presencias que se encuentren ms all del punto actual. Este ltimo comando es ms
popular y por ello est asociado a una secuencia corta de teclas: M % .
4.3.11.
Guardar
Ya te hemos comentado que mientras editas un documento los cambios existen
nicamente dentro de Emacs, en el buffer. Para hacer estos cambios permanentes 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 deseas guardar cada buffer modificado en tu sesin. Finalmente, el comando writefile 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
desplegar 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 de estas ventanas
puedes realizar todo tipo operaciones, ejecutar comandos de Emacs, etc.
Para cerrar todas las ventanas excepto en la que ests parado teclea 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.
72
4.3.14.
Edicin
Ayuda en lnea
No podramos decir que Emacs es un editor de texto autodocumentado si no contara con un sistema de ayuda en lnea. Si tecleas la secuencia Ch ? ? , Emacs te
mostrar una lista con las opciones de ayuda que tiene a tu disposicin. Por ejemplo,
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.
4.3.15.
Lista de buffers
En Emacs podemos tener una gran cantidad de buffers sobre los cuales estamos
trabajando, tantos que es fcil perder de vista o recordar el nombre exacto del buffer
que deseamos editar. Para estas situaciones existe el comando list-buffers o su enlace
Cx Cb , el cual despliega una lista de los buffers que tenemos abiertos 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 modificado
desde la ltima vez que se guard en disco.
Tambin desde este buffer podemos ir a los diferentes buffers, posicionndonos en
el regln correspondiente y presionando Enter .
4.3.16.
73
4.3 Emacs
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 excepcin,
pero como muchas cosas con este gran editor, y en general en Linux, para lograrlo
debes utilizar componentes externos, otros programas.
$ smart
install
aspell-es
Para lograr que Emacs revise tu ortografa vamos a utilizar la biblioteca ispell.el,
que utiliza algn programa de Linux para realizar la revisin ortogrfica. El programa predilecto 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 aspell para
revisar ortografa y, en las lneas 2 y 3 le indicamos detalles sobre el tipo de 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. Finalmente,
en la ltima lnea le indicamos que utilice por omisin este diccionario en todos los
buffers.
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 : ] ] " " [ ^ [ : alpha : ] ] " " [ . ] "
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 " spanish " )
Utilizando ispell
Ahora que hemos configurado un revisor ortogrfico en Emacs, en la siguiente tabla
te mostramos los comandos ms importantes, con los que puedes revisar la ortografa
de una palabra o de una porcin del buffer.
74
Edicin
Tabla 4.9
4.3.18.
Enlace
Operacin
Mx flyspell-mode
M$
MTab
Mx ispell
Mx ispellbuffer
Mx ispellregion
Extendiendo Emacs
Dado que Emacs es y ha sido utilizado por miles de programadores a lo largo de varias dcadas, la manera ms sencilla de extenderlo es investigar si esa extensin deseada
no fue ya implementada por alguien ms. Utiliza un buscador de web para localizar extensiones.
Una vez localizada la extensin o paquete, debemos decidir entre realizar una instalacin global (para todos los usuarios del sistema) o una instalacin personal. Si este
equipo es utilizado por mucha gente, conviene hacerlo de manera global, pero despus,
cuando actualices tu sistema operativo, debes repetir todo el procedimiento. 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 programa para extender
Emacs, por lo que es importante realizarlos de una vez.
La variable
load-path
i. Crea el directorio /elisp (puedes usar otro nombre, pero entonces recuerda cambiar elisp por el nombre que elegiste ms adelante).
ii. En tu /.emacs ahora agrega este directorio a la ruta de bsqueda de Emacs.
Esta ruta se parece mucho a la variable de ambiente PATH de Unix y, en realidad,
tienen una funcin similar:
( addto l i s t
75
4.3 Emacs
y listo: a partir de ahora, cada vez que entres a Emacs, ste sabr que todos los programas (archivos que tienen extensiones .el o .elc dentro de el directorio 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:
1. Localizar el archivo y descargarlo de la red. Si est comprimido, tienes que expandirlo.
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 esto a tu
/.emacs:
% (add-to-list load-path (expand-file-name "/elisp/foo"))
Usualmente cuando el paquete viene en un directorio, incluye instrucciones especiales para instalacin. Generalmente incluyen un archivo README o INSTALL
con instrucciones. En estos casos puedes revisar el procedimiento explicado en
el Anexo B para instalar programas paso a paso.
3. Despus tienes que leer el archivo principal del paquete y copiar las lneas de
iniciacin a tu /.emacs. Generalmente tienen la forma: (require foo), donde
foo es el nombre del archivo con extensin .el.
En los siguientes captulos de este libro utilizaremos este procedimiento para instalar algunas extensiones importantes de Emacs. A manera de ejemplo, sin embargo,
a continuacin agregaremos una extensin muy sencilla para modificar los colores de
Emacs.
76
Edicin
Internet
78
5.1.1.
Internet
Relacin cliente-servidor
En trminos propios de una red, cualquier programa que ofrezca un recurso 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, recibe 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 programa
que ofrece un servicio y recibe solicitudes para el mismo recibe el nombre de servidor1 .
Las redes de muchas organizaciones estn conectadas a redes regionales y nacionales muy grandes. Dentro de estos sistemas, ciertas computadoras, denominadas 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 conectadas a
un sistema conocido como Internet. Toda computadora en Internet puede conectarse a
cualquier computadora que tambin se encuentre en Internet.
La mayora de los pases tienen redes nacionales grandes que estn conectadas a
Internet mediante puertas. Con eficiencia, este sistema enlaza cientos de miles de computadoras, formando una red mundial enorme. Esto significa que uno puede, con poco
esfuerzo, 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 mensajes con personas que usen Amrica Online, CompuServe, MCI, Mail,
Delphi, Prodigy, AT&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 anfitrin (host).
Son expertos los que configuran y administran las conexiones de red descritas anteriormente. Estas conexiones, por lo general, usan cables o lneas telefnicas rentadas.
Las conexiones a gran escala usan enlaces va satlite. Sin embargo, puede usarse una
lnea telefnica comn y hacer que una computadora llame por telfono directamente
a la computadora anfitrin o a un ruteador (router), establecindose la conexin. En
trminos tcnicos, la conversin de seales de computadora a seales telefnicas se
llama modulacin. 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 computadora anfitrin
UNIX es mediante una terminal. Como la computadora que se tiene en casa 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 emulando 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
5.1.2.
79
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 expectativas de este
material. Sin embargo, hablaremos de manera general sobre el tema.
TCP/IP es un nombre comn que se aplica a una coleccin de ms de cien protocolos (un protocolo es un conjunto de reglas que permiten que diferentes mquinas y
programas se coordinen entre s). Los protocolos TCP/IP derivan de dos protocolos bsicos: TCP que es acrnimo de Transmition Control Protocol e IP que es acrnimo de
Internet Protocol. En esencia, estos protocolos se utilizan en Internet (y en otras redes)
para conectar computadoras, equipo de comunicaciones y programas. Cabe mencionar
que 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 junto con un
nmero de secuencia. Por ejemplo, el sistema puede dividir un mensaje en diez 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 usuarios.
Se pueden transmitir al mismo tiempo distintos tipos de paquetes, ya que se ordenarn y combinarn hasta que lleguen a su destino.
Los datos no tienen que enviarse directamente entre dos computadoras.
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 computadoras. 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 la 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 siguiente:
80
Internet
i.
ii.
iii.
iv.
5.2. Web
Internet, como ya mencionamos, es una coleccin mundial de redes que transmiten
datos usando el protocolo IP. Ahora la pregunta a resolver es qu se puede hacer 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 en ella
como si nuestra terminal estuviera conectada directamente a ella.
Grupos de inters (Usenet): Se pueden leer y escribir artculos en los miles de 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 personas.
Acceso a informacin: Se puede buscar y recuperar cualquier tipo de informacin. Si
no se est seguro de dnde buscar, existen programas especiales que nos pueden
ayudar.
81
Comunicacin con otras personas: Se puede sostener una conversacin con otras personas usando el teclado y la pantalla (puede ser una sola persona o incluso un
grupo).
5.3.1.
5.3.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
Tabla 5.1
Internet
Dominios de jerarqua superior
Dominio
Significado
com
Organizacin comercial
edu
Institucin educativa
gov
Institucin gubernamental
int
Organizacin internacional
mil
Ejrcito
net
Organizacin de redes
org
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 pases. Para
la mayora de los pases, el dominio de jerarqua superior es la abreviatura internacional
de dos letras.
Fuera de los Estados Unidos, virtualmente todos los sitios enlazados 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
Canad), 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 significa World Wide Web o simplemente web. Es un proyecto desarrollado
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 web y poseen
hipervnculos que enlazan una porcin de texto o una imagen a otro documento, normalmente relacionado con el texto o la imagen.
Para acceder al web debes utilizar un navegador (browser). El navegador lee documentos 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 obtener 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 de
83
5.4 WWW
datos. Los documentos que los navegadores despliegan son documentos de hipertexto.
El trmino hipertexto se define como texto con apuntadores a otros textos. Los navegadores tratan con los apuntadores de manera transparente. La ventaja del hipertexto es
que en un documento en hipertexto, si quieres ms informacin acerca de un tema en
particular que fue mencionado, usualmente puedes hacer click sobre el tema para leer
con ms detalle. De hecho, los documentos pueden estar ligados a otros documentos de
autores completamente diferentes, mucho como las referencias al pie de pgina, pero
puedes sumergirte en ella de forma instantnea.
El trmino hipermedia es un super conjunto de hipertexto; esto es, cualquier medio
con apuntadores a otro medio. Esto significa que los navegadores pueden desplegar no
slo archivos de texto, sino imgenes, sonidos o animaciones.
Existen diferentes sitios donde todos los usuarios pueden encontrar todo tipo de
informacin y hacer bsquedas en la red. Por ejemplo:
Google: www.google.com
Yahoo: www.yahoo.com
5.4.1.
5.4.2.
Navegadores
El primer navegador fue desarrollado por Tim Berners-Lee en el CERN a finales
de 1990 y principios de 1991. Despus surgi el navegador Mosaic, que funcionaba
inicialmente en plataformas UNIX sobre X11; fue el primero que se extendi debido a
las versiones para Windows y Macintosh que haba. Despus entr al mercado Netscape
84
Internet
85
5.4 WWW
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 principal producto es el buscador, la empresa tambin cuenta con otros servicios: un comparador de
precios llamado Froogle, un motor de bsqueda para material almacenado en discos
locales llamado Google Desktop Search y un servicio de correo electrnico gratuito
llamado Gmail, que ha revolucionado los sistemas de correo electrnico en el web.
A continuacin se listan algunos de los servicios que ofrece Google actualmente:
Buscadores
Servicios
Imgenes
Grupos
Directorio
Noticias
Gmail
Video
Maps
Calendar
Earth
Talk
Books
5.4.4. Wikipedia
La wikipedia es una enciclopedia gratuita a la cual todos los usuarios de Internet
tenemos acceso. Est escrita por todos aquellos voluntarios que quieran colaborar con
sus conocimientos y exponerlos en este medio. Actualmente existe mucha gente que va
mejorando la wikipedia, con cientos de ediciones por hora, que son registradas especficamente en el historial y generalmente en los cambios recientes del sitio. Si alguna
persona expone sus ideas en forma inapropiada o simplemente escribe disparates, las
personas encargadas del contenido del sitio lo verifican y descartan este tipo de informacin.
La wikipedia se encuentra disponible en varios idiomas, con distintos niveles de
86
Internet
avance, ya que la traduccin de artculos y entradas de la enciclopedia la realizan voluntarios. Entre otros idiomas encontramos ingls (el de mayor cobertura), espaol,
francs y alemn.
La carcterstica principal de la wikipedia es la posibilidad de editar los artculos
de la enciclopedia. En general, a los sitios web que permiten la edicin (en lnea y sin
mayores restricciones) de su contenido se les conoce como wikis.
El objetivo de la wikipedia es almacenar artculos sobre temas considerados enciclopdicos; sin embargo dentro de sta puedes encontrar otros proyectos de contenido
diverso, como:
Tabla 5.3
Servicio
Descripcin
Wikinoticias
Wikiversidad
Wikilibros
Wikisource
Wikiquote
Meta-Wiki
Wikiespecies
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 filosofa, permitirle a los usuarios
que as lo deseen, colaborar con la ampliacin del contenido del mismo, para de esta
forma ampliar cada uno de estos proyectos en el web de manera gratuita. Los temas ah
descritos son textos originales de dominio pblico.
87
5.6 Netiquete
5.6. Netiquete
La palabra netiquete se deriva de dos raices, Net, que significa red y etiquete que
se refiere az las reglas de etiqueta para comportarse en un cierto mbito, por lo que
el trmino se refiere a la etiqueta que debemos seguir cuando usemos la red, es decir,
son ciertas reglas (de etiqueta) que sera deseable seguir cuando estemos utilizando
cualquier forma de comunicacin a travs de la red. Estas reglas no son obligatorias
pero si deseables. En resumen Netiquete se refiere a la forma adecuada de comportarse
en Internet.
Antes de entrar en materia, es esencial que cada usuario en la red reconozca su
responsabilidad, al tener acceso a servicios, sitios, sistemas vastos 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 trfico entre ellas. El trfico 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 estar informados de
la carga que imponen en otras redes participantes.
Como un usuario de la red, se te permite acceder a otras redes (y/o los sistemas
de computadora unidos a esas redes). Cada red o sistema tiene su propio grupo de
polticas y procedimientos. Acciones que estn rutinariamente permitidas en una red
pueden estar controladas, o igualmente prohibidas en otra red. Es responsabilidad 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 accin.
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, lenguaje inaceptable tanto en mensajes pblicos o privados; el envo de mensajes que den como resultado
la prdida de trabajo del destinatario o de sus sistemas; el envo de artas cadena"; o
la "transmisin"de mensajes a listas o individuos y cualesquiera otros tipos de uso que
causen congestin de la red o que interfieran con el trabajo de otros.
5.6.1.
88
Internet
Cuando cites a otra persona, borra cualquier cosa que no sea directamente aplicable a tu respuesta. No permitas que tu email o software de Usenet cite automticamente todo el cuerpo de los mensajes que se responden cuando no sea necesario.
Tmate el 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 distinguir
un ttulo o cabecera. El usar palabras en mayscula que no sean ttulos suele ser
considerado 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
chiste 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 miembros de
muchos 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 geogrficas que son
locales o nacionales.
Si alguien enva un comentario o pregunta fuera del tema de la lista, no respondas
a la lista y no mantengas el tema de fuera de la lista en la conversacin pblica.
89
10. Debers usar una computadora en formas en que muestres consideracin y respeto.
Introduccin
90
5.7.2.
Internet
Utilizando KMail
Seguramente ya habrs utilizado algn otro lector de correo, pero aqu te presentaremos algunas de las ventajas que tiene KMail:
Filtros de mensajes.
Muchas veces se tienen problemas para ordenar los nuevos mensajes cuando llegan
a la bandeja de entrada. Los filtros te permiten realizar ciertas tareas automticamente sobre los mensajes entrantes y llevar a cabo acciones manualmente sobre los
mensajes seleccionados en una carpeta.
Los filtros constan de criterios de filtrado, cuyas reglas determinan si un filtro aplica
a un mensaje; y una lista de acciones de filtro, que describe qu hacer con el mensaje.
Los filtros se consideran uno despus de otro, comenzando por el primero de la lista.
El primero en el que coincida el patrn de bsqueda ser ejecutado.
Patrones de bsqueda: Los criterios por los que un filtro 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 las cabeceras).
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
mensaje.
Edad en das. Establece los lmites superiores o inferiores de la antigedad del
mensaje.
Estado. Define las restricciones al estado del mensaje.
Cualquier otro nombre. Busca el campo de la cabera indicado por ese nombre.
Acciones de filtrado.
El uso ms frecuente de los filtros 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 carpeta actual si fuera necesario.
Copiar en carpeta. Copiar el mensaje en otra carpeta.
Definir identidad. Definir la identidad que se va a usar si respondes al mensaje.
Marcar. Esto permite marcar los mensajes como ledo, importante, reenviado o
contestado.
Enviar MDN falso. Enviar un mensaje de notificacin de disposicin falso (es
decir un recibo de lectura) al remitente del mensaje.
Definir transporte. Esto establecer el mtodo de transporte (por ejemplo SMTP)
que se va a usar si respondes al mensaje.
91
92
Internet
93
5.8 FTP
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 que mantiene los archivos, llamada servidor.
5.8.1.
Qu es un FTP annimo?
Muchos sistemas de computadoras a travs de Internet ofrecen archivos por medio de FTP annimos. Esto significa que puedes acceder a una mquina sin necesidad
de tener una cuenta en esa mquina (es decir no tienes que ser un usuario oficial del
sistema). Estos servidores FTP annimos contienen software, archivos para configurar
redes, imgenes, canciones y todo tipo de informacin. Los archivos para las listas de
correo electrnico con frecuencia tambin estn almacenadas y todo est disponible a
travs de un FTP annimo. Una enorme cantidad de informacin est almacenada en
estas mquinas y est lista para cualquiera que la necesite.
5.8.2.
94
Internet
sitios de FTP ofrecen distintos comandos, por eso es importante leer los archivos README en el sitio. Usualmente FTP lista los comandos si tecleas help o (?). Tambin
los 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
Tabla 5.4
Comando
Descripcin
ascii
binary
cd
dir
ls
get
help
lcd
lpwd
mget
pwd
95
seguido de
% cd internet
Para acceso annimo, teclea
% ftp.simtel.net
usando como tu login anonymous y como password tu direccin de correo.
Muchos sistemas brindan informacin acerca de cmo usar el sistema 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 econmico 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
encuentran dentro del servidor.
iii. Gurdalos en un directorio llamado cosas_foo y brelos.
$ smart
install ssh
Secure Shell (SSH) es el reemplazo para rsh, rlogin, rcp y ftp. Encripta todo el
trfico y proporciona varios niveles de autenticacin dependiendo de las necesidades.
Entre las principales caractersticas de Secure Shell se encuentran accesos remotos
seguros a otra mquina sobre una red, ejecucin de comandos en una mquina remota,
mover 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: SSH1 y SSH2. La versin
vieja SSH1 est siendo reemplazada por SSH2 para alcanzar una flexibilidad mejorada,
mejor escalabilidad para organizaciones con cientos de usuarios y mejor seguridad. Actualmente hay funciones que se pueden encontrar en SSH1 que estn siendo trasladadas
a SSH2.
SSH trabaja cambiando y verificando informacin y usando llaves pblicas y privadas para identificar servidores y usuarios. Despus proporciona cifrado para la comunicacin subsecuente, tambin usando criptografa de llaves pblicas y privadas. Cada
sistema tiene su propio par de llaves pblicas y privadas que identifican a otros sistemas. Una llave pblica de un sistema cliente puede colocarse en un archivo del servidor
para permitir al servidor la autenticacin del cliente por medio de un intercambio de
llaves.
96
5.9.1.
Internet
5.9.2.
97
98
Internet
5.10.1.
Funcionamiento de PGP
El funcionamiento de PGP es muy sencillo: cada usuario tiene dos llaves una pblica y otra privada; la pblica es la que distribuyes a la gente y sirve para que ellos
puedan enviarte un mensaje codificado que slo t, mediante tu llave privada, podrs
descifrar; tambin puede servir para firmar un mensaje poniendo una parte de tu llave
privada (irreconocible claro) dentro de una firma. Esto es como un certificado de autenticidad, ya que al recibir el mensaje, PGP comprueba la firma y texto y lo compara con
la llave pblica que tenemos del remitente, dando un error si se ha cambiado algo en el
texto o la firma no corresponde a la persona que nos enva el mensaje.
El cifrado de PGP utiliza la criptografa de llave pblica e incluye un sistema que
asocia las llaves pblicas con cada uno de los usuarios. El cifrado de correo electrnico
a travs de PGP utiliza algoritmos de cifrado de llaves asimtricas: el remitente utiliza
la llave pblica del destinatario para cifrar una llave compartida; esta llave compartida
se usa para cifrar el mensaje; despus el destinatario que recibe el correo cifrado lo
desencripta (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 remitente.
El remitente utiliza el cifrado de PGP para crear una firma digital para el mensaje con
algoritmos de RSA o DSA. Para esto, PGP calcula un identificador nico(hash) para el
mensaje y despus crea la firma digital de dicho identificador, usando la llave privada
del remitente. El destinatario del mensaje calcula el identificador del mensaje recibido
y despus lo utiliza junto con la llave pblica del remitente, dentro del algoritmo de
la firma, para crear su propia firma digital del mensaje recibido. Si esta firma coincide
con la firma que contena el mensaje recibido, entonces se puede decir que el mensaje
recibido no ha sido corrompido deliberadamente o accidentalmente, puesto que fue
firmado correctamente.
No existe un mtodo que pueda romper el cifrado PGP por medios criptogrficos 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 destino,
PGP puede ser utilizada para proteger la informacin en medios de almacenamiento de
larga duracin como discos duros. La seguridad en el mtodo de cifrado PGP se basa
en el hecho de que los algoritmos utilizados son inquebrantables con las tcnicas del
criptoanlisis moderno.
99
Introduccin
RSS es parte de la familia de formatos XML (una especificacin genrica para
formatos de datos) desarrollado especficamente para sitios que se actualicen con frecuencia y por medio del cual se puede compartir la informacin y usarla en otros sitios
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 necesidad 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 procedencias se
denominan agregadores. Gracias a los agregadores o lectores de feeds (programas 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 funcionan
como agregadores. No es necesario abrir el navegador y visitar decenas de paginas web.
5.11.2.
$ smart
install
Akregator
5.1
Akregator
Akregator es un lector de RSS como parte de la integracin de KDE utilizado
principalmente en sistemas UNIX. RSS contiene noticias y actualizaciones de sitios
Web y Web logs. Los fuentes de RSS pueden ordenarse dentro de categoras, se pueden
hacer bsquedas incrementales para los ttulos de todas las entradas de la base de datos
y Akregator puede ser configurado para que actualice los fuentes en intervalos regulares
de tiempo. Provee integracin con Konqueror y un navegador interno para leer noticias.
RSS
El lector de RSS en Gnome es blam, est escrito en C# para el proyecto Mono y GTK#.
Utilizando Akregator
Una vez instalado, Akgregator se encuentra en en el men principal, dentro de la
categora de Internet; o puedes iniciarlo desde una terminal con el comando akgregator.
100
Internet
Akregator viene pre-instalado con algunos sitios web RSS de KDE, as que puedes bajar
los sitios y empezar a leer las ltimas noticias de forma fcil y rpida.
Muchos sitios web y blog tienen fuentes de RSS. Si entras a un sitio con soporte
para fuentes de RSS y ests utilizando el navegador de Konqueror, entonces aparece un
icono de RSS con la leyenda suscribe, indicando que soporta RSS. Seleccionando este
icono y escogiendo la opcin Agregar Fuente en Akregator podrs leer las noticias de
ese sitio web desde Akregator.
Desafortunadamente, no todas las noticias de RSS contienen toda la informacin
en un artculo, lo cual es una lstima porque desperdician mucho de su propsito. Sin
embargo, Akregator tiene una forma inteligente de solucionar esto, utilizando un navegador embebido dentro de un tabulador, que permite abrir una liga hacia el sitio web.
101
Integracin
Dentro de las opciones de configuracin de Akregator, puedes establecer que el
sistema actualice todas las noticias en intervalos regulares de tiempo y que cada vez
que ha sido descargada una noticia nueva el sistema te mande una notificacin.
Akregator est integrado dentro de Konqueror en el sentido de que permite agregar noticias RSS al sistema de Akregator desde un navegador Konqueror y viceversa,
Konqueror est integrado dentro de Akregator en el sentido en que estando dentro 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 aplicaciones de informacin personal en un solo lugar y Akregator tambin permite tener un mdulo de
Kontact de forma que todas tus noticias de RSS estn disponibles dentro de tu correo
electrnico, calendario y dems entretenimientos.
Introduccin
La mensajera instantnea (IM) es una manera para comunicarse de manera inmediata con personas a travs de Internet. Te permite tener una conversacin casi tan natural como en el telfono o cara a cara, tecleando mensajes en una ventana compartida
entre t y la otra persona.
Adems permite ver el estado en que se encuentran las personas, esto es, si estn
actualmente 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 cambiar el
estado si prefieres no ser interrumpido, y as otros sabrn que no deben contactarte.
5.12.2.
$ smart
install
kopete
Kopete
Kopete es un cliente de mensajera instantnea, desarrollado por y para el ambiente
grfico de KDE. Te permite comunicarte con amigos utilizando varios servicios de
mensajera instantnea. Proviene de la palabra chilena copete utilizada para 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 diferentes sistemas
de mensajera instantnea de una manera fcil de utilizar. El sistema est integrado
con otras aplicaciones KDE de manera que te permite acceder a los contactos de la
agenda de direcciones y otras utileras proporcionadas. Tambin provee herramientas
para guardar conversaciones, cifrado de mensajes, filtrado 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 diferentes formas que tienes de contactar a alguien en una sola persona. Otras aplicaciones 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 metacontacto es una persona y los contactos son las diferentes formas de comunicacin con sta.
As, los contactos se reconocen fcilmente mediante iconos pequeos que representan
el protocolo de comunicacin que puedes utilizar.
103
5.2
Mensajera Instantnea
El cliente de mensajera instantnea en Gnome es gaim, un mensajero que resulta sencillo y tambin es multi-protocolo.
5.12.3.
Creando cuentas
Para crear una cuenta, entra al men Preferencias->Configurar Kopete para mostrar la ventana de configuracin. Selecciona el icono Cuentas->Nuevo y escoje el
servicio de mensajera que quieras usar.
Una vez especificados los detalles de IM, en la barra de estado de la parte inferior
de la Lista de contactos de Kopete aparece un icono representando tu cuenta. Con el
botn derecho podrs conectarte a travs del men que aparece. El icono de la barra de
estado se animar mientras Kopete se conecta al servicio de IM.
Una vez conectado, se obtendrn tus contactos del servidor y se mostrarn en la
Lista de Contactos. Para contactar a alguien, slo tienes que seleccionar su nombre y
aparecer una ventana de pltica, como se ve en la figura 5.4.
104
Internet
5.12.4.
Funciones bsicas
Las funcionalidades bsicas de Kopete son:
Lista de Contactos. La Lista de Contactos es la ventana principal que aparece cuando
se inicia Kopete.
Entre las acciones que puedes realizar dentro de la Lista de Contactos se encuentran:
Establecer el estado que determina cmo ests visible en la red de IM.
Mostrar todos los contactos, sus estados y los grupos escogidos para ellos.
Iniciar una conversacin con un contacto.
Enviar mensajes a un contacto.
Enviar archivos.
Organizar contactos. Kopete introduce los metacontactos, que representan a
una persona. Un metacontacto contiene todas las diferentes identidades de IM
que tenga esa persona, haciendo fcil identificar si alguien est disponible, sin
tener que recordar qu sistema de IM est usando en este momento.
105
5.12.5.
Extensiones
Kopete ofrece extensiones que proveen funciones que no son esenciales para la
mensajera, pero son tiles, entre las que se encuentran:
Auto reemplazo de texto, que permite corregir palabras mal escritas o guardar
palabras usando abreviaturas.
Criptografa, que permite usar GnuPG para cifrar conversaciones.
Respuesta a mensajes particulares, como resaltar texto o reproducir sonidos.
Guardar conversaciones usando cualquier sistema de IM.
KopeteTex, que permite mantener conversaciones utilizando el lenguaje de marcas
LaTeX.
Auto-ausente por movimiento.
Permite a la gente con la que ests conversando en ese momento saber qu msica
ests escuchando.
Estadsticas con informacin sobre el patrn de actividad de tus contactos.
Efectos de texto.
Traductor que permite definir un idioma para cada contacto.
106
Internet
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 direccin IP
192.168.1.10. El servidor utiliza por defecto el puerto TCP 3389.
El protocolo RDP es un protocolo de aplicacin multi-canal que permite a los usuarios conectarse
a computadoras con sistemas operativos Windows; adems no se necesita tener un ancho de banda muy
grande (un modem de 56K es suficiente)
107
108
Internet
traremos cmo configurar cada una de ellas para realizar slo las operaciones ms sencillas.
5.14.1.
Resumen
ste es un componente especfico de Kontact, donde se le presenta al usuario un
resumen 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 noticias, fechas importantes (cumpleaos o aniversarios) o tal vez asuntos
pendientes.
5.14.2.
Correo, KMail
Kontact utiliza a KMail como el lector de correo. La configuracin y uso de esta
aplicacin ya se revis en la seccin 5.7.
5.14.3.
Contactos, KAddressBook
Para poder mantener de forma organizada la lista de todas las personas con las que
tratas, es necesario que lleves una libreta de direcciones. La aplicacin que te permite
hacer eso en KDE es KAddressBook. Aqu puedes mantener toda la informacin de tus
contactos y hacer uso de ella con distintas aplicaciones de KDE como KMail o Kopete.
KAddressBook te permite organizar tus contactos en distintas agendas. Esto es til
si quieres tener una agenda con tus contactos personales en tu computadora, 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 primero que se necesita para empezar a utilizar KAddressBook es tener una agenda, aun
cuando te provee de una por omisin. En la figura 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.
109
radica en poder compartir contactos con distintas personas, y poder acceder a esa informacin desde diferentes computadoras. Existen varias formas para hacer eso, pero en
este captulo veremos como trabajar con una agenda local. Para crear una nueva agenda
local es necesario realizar los siguientes pasos:
110
Internet
111
112
5.14.4.
Internet
113
Agregando un evento
Para agregar un evento es necesario seguir los siguientes pasos:
1. Seleccionar Nuevo evento dentro del men Acciones o hacer doble click en el da
y hora deseados. Aparecer una ventana como la que se muestra en la figura 5.12.
2. Seleccionar un ttulo y un lugar para el evento.
3. Seleccionar la hora de inicio y final del evento.
4. Opcionalmente, seleccionar la casilla Recordatorio para que cuando falte cierto
tiempo KOrganizer te recuerde acerca del evento.
Figura 5.12
Adems de la pestaa General tienes otras pestaas que permiten hacer ajustes a
los eventos que creas.
114
Internet
Repeticin
En esta parte es posible especificar cules son las reglas mediante las cuales se
debe repetir esta tarea. Aqu existen varias opciones. Lo primero es establecer cada
cunto quieres que se repita el evento. Esto puede ser cada cierto nmero de das o
cada semana, mes o ao. El siguiente paso es especificar un rango de fechas entre las
cuales debe llevarse a cabo la repeticin. Finalmente puedes agregar ciertos das que
sean excepciones a la regla. En la figura 5.13 puedes ver un evento que se repetir cada
dos semanas, los das lunes, jueves y sbado. Se repetir ocho veces, con excepcin del
sbado 2 de diciembre.
Figura 5.13 Ajustando la repeticin de un evento
Destinatarios
En esta pestaa podemos crear una lista de personas que van a asistir a dicha reunin. Podemos indicar cul es el rol que van a desempear y cual es su estado actual.
Como se muestra en la figura 5.14 se pueden agregar las direcciones directamente con
el teclado, o podemos utilizar algunos de los contactos almacenados en KAddressBook.
KOrganizer se encargar de notificarles (mediante correo o una aplicacin groupware)4
que han sido invitados a dicho evento y puede adems pedir que confirmen su asistencia
al mismo.
4
Figura 5.14
115
Libre/Ocupado
Para saber si puedes o no invitar a alguien al evento es necesario saber si estn
disponibles en esa fecha a esa hora. Si los invitados publican esa informacin, puedes
revisar sus horarios en esta pestaa. En la figura 5.15 seccin 1 puedes revisar cada
uno de los invitados a la reunin, puesto que aparece una lnea por cada uno de los
participantes. En la seccin 2 se muestra una grfica en cada lnea que indica el horario
de un participante. Con base en esta informacin puedes ajustar el horario de la reunin
o si presionas Zoom hasta ajustar puedes permitirle a KOrganizer hacerlo por ti.
Adjuntos
En esta pestaa se pueden colocar archivos adjuntos a la reunin para que estn
disponibles para consulta por parte de los participantes. Es necesario colocar el URI
del archivo, para que slo eso se enve; no se enva el archivo completo.
Vistas
KOrganizer puede presentar la informacin de diferentes formas, restringiendo qu
es lo que se desea ver. La ventana principal est dividida en dos secciones. En la seccin
de la izquierda se muestran los componentes para navegar las fechas, ver pendientes y
116
Internet
Qu es lo siguiente? Despliega eventos y pendientes de una forma que facilita la lectura. Se muestra en la figura 5.16.
Figura 5.16 Vista Qu es lo siguiente?
117
Lista. Muestra todos los pendientes y eventos en una lista. Se muestra en la figura 5.17.
Figura 5.17
Vista Lista
Da. Muestra un da, presentando las actividades que hay que realizar slo durante ese
da. Se muestra en la figura 5.18.
Figura 5.18
Vista Da
118
Internet
Semana laboral. Similar a la vista de da, pero muestra una semana de lunes a viernes.
Se muestra en la figura 5.19.
Figura 5.19 Vista Semana laboral
Semana. Igual que semana laboral, pero muestra todos los das de la semana. Se muestra en la figura 5.20.
Figura 5.20 Vista Semana
119
5.15 Emacs
Tres das siguientes. Muestra las actividades de los siguientes das. Por omisin muestra los siguientes tres, pero eso puede modificarse en el elemento Configurar calendario dentro del men Preferencias. Se muestra en la figura 5.21.
Figura 5.21
Mes. Muestra todas las actividades para el mes actual. Se muestra en la figura 5.22.
5.15. Emacs
En esta seccin te mostraremos como puedes realizar la mayora de las actividades
mostradas con anterioridad en este captulo, como por ejemplo, leer y contestar correo
electrnico, manejar tus contactos, etc.
La mayora de los programas que presentaremos no son parte estndar de Emacs,
por lo que debes instalarlos por separado. Muchos de stos se conocen como subsistemas de Emacs.
120
Figura 5.22 Vista Mes
Internet
121
5.15 Emacs
5.15.1.
5.1
VM
Rmail y Gnus
Adems de VM, Emacs cuenta con varios subsistemas ms para leer y enviar correo
electrnico. 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 alternativa. Desafortunadamente ha cado un poco en desuso, por lo que no lo revisaremos.
$ smart
install vm
Iniciando con VM
VM es probablemente uno de los subsistemas ms grandes que cubriremos en este
libro probablemente con la excepcin de AUCTEX en la seccin 6.12 tanto as que
por la cantidad de variables que puedes modificar, VM utiliza un archivo de configuracin 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. Estas 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) puedes
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
comando (tecla Space ) paginan el contenido del mensaje.
Si no deseas ver el mensaje que VM muestra, con n (vm-next-message) 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 borra inmediatamente, sino que VM pone una marca en l para borrarlo ms tarde. Esto es importante,
122
Internet
( s e t q vmspool 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 : Juan . Perez : "
" ~ / INBOX .CRASH " ) )
)
Como puedes apreciar, la variable vm-spool-files recibe una lista de listas. Esto significa varias cosas. Primero, que VM puede manejar varias bandejas de correo electrnico
distintas, sin importar si stas son bandejas locales o remotas. Segundo y menos obvio,
que puedes asociar en una misma carpeta correo proveniente de diversas fuentes. La
sintaxis para especificar 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 llamada /INBOX y,
como puedes ver en el ejemplo arriba (lnea 2), es la carpeta que utiliz Juan para
configurar su correo. La carpeta de recuperacin (en este caso el valor por omisin
123
5.15 Emacs
es /INBOX.CRASH) la utiliza VM para almacenar inicialmente todos los mensajes extrados de la bandeja de entrada de correo; despus procesa todos los mensajes
almacenados en la carpeta de recuperacin 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 por
cualquier motivo, tu correo no se pierde y cuando ejecutes VM nuevamente, ste buscar en la bandeja de entrada y la carpeta de recuperacin, y procesar los mensajes
que encuentre y los mover a tu carpeta de inicio.
Finalmente, en las lneas 3 y 4 del ejemplo de configuracin 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 tiene su cuenta
es IMAP y requiere cifrado con SSL. VM adems soporta los protocolos de correo
local y POP3.
Seleccin de mensajes
Para poder leer, borrar o realizar cualquier accin con un mensaje, primero debes
seleccionarlo o, en terminologa VM, convertirlo en el mensaje actual. La mayora 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, pero la dividimos en dos por
razones de legibilidad.
124
Internet
Enlace
Comando/Descripcin
(vm-prev-message) se mueve hacia atrs en la carpeta actual. Salta mensajes marcados como borrados.
Enter
Tab
M-n
M-s
M-p
(vm-{next(prev)}-unread-message) se mueve hacia adelante (atrs) hasta encontrar el siguiente (anterior) mensaje
no ledo.
(vm-isearch-forward) funciona como la bsqueda incremental de Emacs, excepto que cuando termina la bsqueda
VM te muestra el mensaje en el que termin el punto.
Si deseas que los comandos bsicos n y p se salten tambin los mensajes ledos,
debes 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 que al llegar
al ltimo y seleccionar el siguiente (con n ), VM te lleve al primer mensaje, tambin
debes asignar t a la variable vm-circular-folders.
Una vez seleccionado un mensaje VM te lo mostrar. Como ya mencionamos anteriormente, esto es un trabajo de dos pasos: vista previa y mensaje completo.
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.
125
5.15 Emacs
asegura que la transmisin de los mensajes se realiza sin errores y define ciertos tipos
de contenidos vlidos.
Existen variables en VM que te permiten controlar si deseas o no 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 comunes para
mensajes de correo codificados con MIME.
Enviando mensajes
Cuando envas mensajes desde VM utilizas el modo mayor Mail de Emacs, ms
algunas extensiones con los siguientes enlaces:
Tabla 5.6 Emacs: comandos para manipular la composicin de correo en VM
Enlace
Comando/Descripcin
C-c C-y
C-c C-a
C-c C-m
C-c C-b
C-c C-e
(vm-mime-encode-composition) codifica el mensaje elaborado utilizando MIME, pero no lo enva. Esto es til si quieres
firmar el mensaje con PGP antes de enviarlo. Despus de esto
puedes enviar el mensaje con C-c C-c .
C-c C-p
126
Internet
(vm-mail).
En caso de que el mensaje sea rechazado y regresado por cualquier motivo, puedes
reenviar 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
Enlace
Comando/Descripcin
C-c C-s
C-c C-c
(mail-send-and-exit) enva el mensaje y selecciona otro buffer. Este es el comando ms comn para
concluir la composicin de mensajes y enviarlos.
Iniciar una nueva composicin de correo es tan usual como contestar a un mensaje recibido y VM hace muy sencillo lograrlo. Cuando contestas un mensaje 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 contestas y lo identifica anexando el valor de la variable vm-included-text-prefix.
Los comandos para contestar son:
Tabla 5.8
Enlace
Comando/Descripcin
127
5.15 Emacs
Tabla 5.8
Enlace
Comando/Descripcin
VM ofrece adems tres comandos para traspasar o enviar mensajes que recibes a
otros receptores. stos son:
Tabla 5.9 Emacs: comandos para adelantar mensajes de VM
Enlace
Comando/Descripcin
(vm-send-digest) funciona como z , excepto que todos los mensajes en el folder actual se concatenan en un digerido y puestos
en el cuerpo del buffer de composicin.
Marcas de mensajes
La mayora de los comandos mencionados para enviar, contestar y traspasar mensajes reciben argumentos numricos prefijos (con C-u N , donde N es un nmero) y
pueden trabajar sobre mensajes marcados. VM provee marcas de propsito general 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
argumento numrico N , marcar tambin los siguientes N 1 mensajes siguientes; con
un argumento negativo, los N -1 previos. Un asterisco (*) aparecer a la derecha de los
nmeros de mensaje marcados.
Para quitar la marca a un mensaje puedes utilizar M U (vm-unmark-message).
M m marca todos los mensajes en la carpeta actual y M u les quita la marca.
128
Internet
5.15.2.
$ smart
install bbdb
BBDB
BBDB es una base de datos para manejar contactos en Emacs. BBDB viene de
Insidious Big Brother Database y ofrece las siguientes caractersticas:
Integracin con distintos lectores de correo:
Despliega de manera sencilla la entrada correspondiente al remitente del
mensaje actual.
Permite la creacin automtica de entradas basado en el contenido del mensaje actual.
Permite agregar de manera automtica datos a campos de la entrada que
corresponde al remitente del mensaje.
Muestra una lista de registros que casan con una expresin regular.
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 realizar bsquedas y manipular registros. Sin embargo, no est asociada con ninguno de los lectores de correo.
Para utilizarlo con VM (ver la Seccin 5.15.1) y poder enviar mensajes aprovechado 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)
129
5.15 Emacs
( bbdbi n s i n u a t e vm)
Utilizando BBDB
Ahora que hemos instalado y activado BBDB, podemos utilizarla para agregar, revisar o editar nuestros contactos. Por omisin, el archivo donde se guardan los contactos
se llama /.bbdb y puedes cambiarlo asignando un nuevo valor a la variable bbdb-file.
La base de datos de BBDB consiste de un conjunto de registros y cada registro
corresponde a una persona. Cada registro tiene varios campos y estos campos pueden
tener distintos tipos; en la tabla 5.10 te mostramos los tipos predefinidos.
Tabla 5.10 Emacs: tipos vlidos para campos BBDB
Tipo
Descripcin
name
company
AKA
net
adress
phone
notes
Comentarios.
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
utilizando 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.
130
Internet
Enlace
Comando/Descripcin
d C-k
(bbdb-delete-current-field-or-record) borra el campo en la lnea actual. Si la lnea actual es la primera del registro, BBDB te preguntar
si deseas borrar el registro completo.
C-o
(bbdb-create) crea un nuevo registro en la base de datos con la informacin que ingresas en el mini-buffer.
(bbdb-bury-buffer) esconde el buffer *BBDB*. Nota que este comando no mata el buffer.
131
5.15 Emacs
5.15.3.
$ smart
install
w3m-el
w3m
En sus inicios, W3 era el navegador ms popular para Emacs, pero era sumamente
lento. Por otro lado, w3m era un paginador con capacidades para navegar el web, desarrollado por Akinori Ito. As que se desarroll esta interfaz para utilizar w3m desde
Emacs y el resultado es un navegador eficiente.
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 prefiere tener su propio archivo de configuracin, en este
caso /.emacs-w3m, que es el valor por omisin de la variable w3m-init-file.
Comando
Descripcin
w3m
Arranca emacs-w3m y despliega la pgina de inicio. Esta pgina est especificada por la variable w3m-home-page.
w3m-find-file
w3m-browse-url
132
Internet
Enlace
Comando/Descripcin
Enter
(w3m-reload-this-page) vuelve a cargar la pgina. Esto es particularmente til si ests leyendo las noticias o el diario de una persona,
que pudieron ser actualizados desde el momento en que fue cargada
la pgina.
133
5.15 Emacs
Tabla 5.14 Emacs: navegando con w3m
Enlace
Comando/Descripcin
Space
(w3m-scroll-up-or-next-url) recorre la pgina hacia abajo. Si utilizas VM ya debes estar acostumbrado a este comportamiento, pues
as funciona la lectura de mensajes en VM.
delete
>
<
/,
M-l
(w3m-horizontal-recenter) recorre la pgina horizontalmente hasta que la posicin actual quede en el centro.
Enlace
Comando/Descripcin
Tab
M-Tab
Por ejemplo, si ests viendo la pgina http://www.google.com, (s, la del afamado buscador), puedes realizar los siguientes pasos: ] , Enter , (teclea lo que sea que
quieras buscar en google) y finalmente C-c C-c para localizar lo deado.
Ahora que ya sabes moverte dentro de una pgina, resta revisar los mecanismos que
ofrece emacs-w3m para movernos entre pginas. Dado que estas pginas son 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 siguientes
formas de hacerlo:
134
Internet
Enlace Comando/Descripcin
B
Space
(w3m-scroll-up-or-next-url) cuando el punto se encuentra al final de buffer y no puedes avanzar hacia adelante, entonces la tecla Space te llevar
a la siguiente pgina donde la siguiente pgina es aqulla definida por
el encabezado especial next en la pgina actual. Este comando no tiene
relacin alguna con la historia.
Por ejemplo, si continuamos con la bsqueda que realizamos en google
arriba, notars que al llegar al final de la primera pgina de resultados y
teclear Space , te lleva a la segunda pgina de resultados.
Del
(w3m-scroll-down-or-previous-url) cuando el punto se encuentra al inicio del buffer y no puedes moverte hacia arriba, puedes teclear Del y
esto te llevar a la pgina previa. Al igual que Space , esto funciona si la
pgina contiene el encabezado especial previous.
135
5.15 Emacs
Imgenes y ms
Por omisin, emacs-w3m no mostrar las imgenes de las pginas; sin embargo,
la mayora de encarnaciones de Emacs modernas soportan mostrar imgenes en buffers. 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 asignar 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
M-i
M-[
M-]
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 quieres referirte
a ellas. As, tenemos las opciones que se listan en la tabla 5.18 de la siguiente pgina.
Una vez que tienes ligas favoritas almacenadas, puedes acceder a ellas con el comando v (w3m-bookmark-view) desde cualquier buffer de emacs-w3m. Otra posibilidad es visitar el URL especial: about://bookmark/. En esta pgina vers tus ligas
favoritas organizadas por seccin.
Emacs-w3m tiene muchas ms acarctersticas que, por cuestiones de espacio, no
podemos 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 abrirlos todos
136
Internet
con un solo movimiento. Pero todas estas caractersticas las dejaremos como ejercicio
al lector.
Tabla 5.18 Emacs: ligas favoritas en w3m
5.15.4.
Enlace
Comando/Descripcin
(w3m-bookmark-add-current-url) te permite integrar la pgina actual a tu lista de favoritos. Si lo llamas con un argumento
prefijo, entonces te pedir el URL a utilizar. Adems, utilizar el
mini-buffer para preguntarte si quieres editar el ttulo y el URL.
M-a
ERC
5.2 ZenIRC
ZenIRC es otra alternativa popular para acceder a servidores de IRC. Al igual que
ERC, ZenIRC no es parte estndar de Emacs y puedes encontrarlo en la direccin
http://www.zenirc.org/.
$ smart
install erc
IRC son siglas del protocolo de Internet Internet Relay Chat (RFC 1459), que especifica una red
internacional para conectarse y charlar en tiempo real.
137
5.15 Emacs
Utilizando ERC
Una vez instalado ERC, que como ya dijimos no es parte estndar de Emacs, debes
agregar lo siguiente a tu /.emacs:
( r e q u i r e erc )
( r e q u i r e ercs p e l l i n g )
Enlace
Comando/Descripcin
C-a
Enter
Tab
M-Tab
C-c C-b
C-c C-c
C-c C-d
C-c Tab
C-c C-j
C-c C-n
C-c C-p
138
Internet
Enlace
Comando/Descripcin
C-c C-q
C-c C-t
C-c C-u
Mdulos
ERC viene con una manera poco estndar de agregar funcionalidad que involucra la
utilizacin de mdulos. Hay mdulos de muchos tipos y para muy diversas funciones;
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
Descripcin
autoaway
autojoin
bbdb
button
fill
log
match
notify
pcomplete
readonly
replace
ring
139
5.15 Emacs
Tabla 5.20 Emacs: mdulos para extender ERC
Mdulo
Descripcin
scrolltobottom
smiley
spell
Revisa tu ortografa.
stamp
track
truncate
unmorse
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 tipo de temas para
conversar. Nosotros te recomendamos irc.freenode.net.
5.15.5.
TRAMP
TRAMP es un paquete para editar archivos remotos en Emacs y son siglas de la
frase en ingls Transparent Remote (file) Access, Multiple Protocol.
TRAMP se distribuye con versiones recientes de Emacs y, una vez cargado, te permitir el acceso a un sistema de archivos remoto para editar archivos, control de versiones y dired (ver la seccin 3.6.3).
El acceso al sistema remoto se puede lograr con distintos programas como rsh,
rlogin, telnet o con cualquiera que tenga un mtodo similar de acceso. TRAMP soporta
conexiones utilizando ssh y es el mecanismo recomendado.
Para hacer su trabajo, TRAMP requiere tener acceso al sistema remoto y hacer una
copia local para trabajar. La transferencia se puede realizar en una variedad de formas.
Los mecanismos ms eficientes para transferir archivos grandes son rcp, scp y
rsync. Los otros mecanismos requieren de herramientas adicionales para codificar 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 complicado,
te sorprender lo sencillo que es utilizarlo. Imagina que deseas abrir el archivo UNARCHIVO en la mquina remota MAQUINA; entonces necesitas visitar el archivo, s, con
140
Internet
Aqu estn algunos ejemplos de las rutas para distintos archivos en sitios remotos:
/moria.fciencias.unam.mx:.emacs, para editar tu /.emacs en tu directorio
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/issue en el servidor ada.fciencias.unam.mx.
Lo anterior supone que tu nombre de usuario en la mquina local es idntico 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.
Tambin puedes especificar el mtodo de conexin para abrir cierto archivo, como en: /ssh:juan@galadriel.fciencias.unam.mx:/home/juan/miarchivo.txt, que se
conectar utilizando ssh al servidor galadriel.fciencias.unam.mx como el usuario
juan.
5.15.6.
Diccionario
Adems te recomendamos agregar tambin las siguientes dos lneas que agregan
enlaces 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 ]
( 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 search )
d i c t i o n a r y matchwords )
141
5.15 Emacs
Utilizando dictionary
Puedes ejecutar el comando dictionary o utilizar alguno de los enlaces de tecla
que definimos 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 primera es la seccin de
botones que te permiten navegar las definiciones, buscar nuevamente, seleccionar diccionarios o salir del diccionario. La siguiente es la seccin de definiciones. Una vez que
dictionary localiza una o varias definiciones solicitadas, las muestra en esta seccin.
Notars que en las definiciones aparecen palabras resaltadas con otro color. stas
son referencias cruzadas y funcionan como hipertexto, es decir, son ligas que puedes
seguir y dictionary te llevar a su definicin.
La forma ms usual para interactuar con dictionary es con el comando dictionary-search que te pide en el mini-buffer una palabra a buscar, pero utiliza como
propuesta inicial la palabra ms cercana al punto. Por la frecuencia de su uso te recomendamos 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 siguientes comandos:
Tabla 5.21 Emacs: comandos de dictionary
Enlace
Comando/Descripcin
n o Tab
(dictionary-match-words) pregunta por un patrn y lista todas las palabras que casan con l.
Enter
Visita la liga.
LATEX
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 algunas observaciones y el paquete procede a formatear el texto. Entre las operaciones que deseamos
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 letras 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 figuras en el texto.
Muchos de los procesadores de texto pretenden hacer mucho trabajo por ti. Por
ejemplo, al escribir una carta proveen maneras directas y fciles de formar la carta,
pidiendo nicamente el destinatario, el remitente, la firma, etc..
Hay fundamentalmente dos tipos de procesadores de texto, aquellos que van mostrando el resultado de la edicin en la misma pantalla, conforme se va escribiendo
como es el caso de Word y aquellos que funcionan con comandos de control y que
144
LATEX
ejecutan un programa para poder ver cmo queda el texto ya formateado. LATEX es de
este ltimo tipo. Llamemos a los primeros de tipo intrprete, porque van interpretando
conforme van recibiendo el texto, y a los segundos de tipo compilador, porque primero
reciben todo el texto y despus lo transforman a las pginas correspondientes.
Cada uno de estos tipos de procesadores tiene sus ventajas y sus desventajas. La
principal ventaja del intrprete es que es ms fcil de usar y detectas inmediatamente
cuando algo no es como lo quieres. La principal desventaja es que supone demasiados
parmetros respecto a cmo quieres el texto, y toma muchas decisiones que son difciles
de 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 desventaja 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 proyecto, por
lo que hay muchos paquetes adicionales para casi cualquier cosa que se te pueda
ocurrir, como graficacin, msica, animacin, entre otros.
(d) Es el ms usado en el medio de Ciencias de la Computacin y Matemticas para
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 cuenta,
conforme los vayas requiriendo.
oraciones
subsecciones
partes
prrafos
secciones
documento
Esto, en realidad, ya no es del todo cierto, pues LATEX cuenta ya con intrpretes que permiten ir
viendo cmo queda el texto conforme lo vas escribiendo.
145
report
Se utiliza para textos menos formales que un libro o un artculo. No tiene captulos, sino que agrupa a partir de secciones.
Artculo
article
Es, tal vez, el ambiente que ms seguido utilizarn para la entrega de tareas, elaboracin de pequeos manuales, etc. Permite escribir en dos columnas fcilmente.
Libro
book
letter
Permite elaborar cartas que acomodan de manera fcil el remitente, la firma, etc.
146
LATEX
Tambin en el prembulo puedes cambiar de manera explcita algunos de los parmetros de la hoja.
\ setcounter { chapter } { 5 }
\ 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 trabajar o incluir
definiciones:
\ input { definiciones }
\ i n c l u d e o n l y { segundo }
y termina con
\ end { document }
comandos de LATEX;
\ begin { c e n t e r }
...
\ end { c e n t e r }
147
6.3.1.
Posibles errores
En este primer ejercicio realmente tendrs pocos errores que reportar. Generalmente
sern aqullos ocasionados por errores de dedo. Nta que LATEX tiene varios tipos de
comandos:
i. Aquellos que estn entre \begin {...} y \end {...} , donde lo que 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 }
.... $
. . . . \)
y cuando quieres que aparezca en un prrafo separado, tienes para ello cualquiera
de los dos ambientes que siguen.
$$
\[
....
....
$$
\]
iii. Aquellos que marcan lo que sigue, y que aparecen nicamente como comandos de
control. A estos les llamamos comandos de estado, porque cambian el estado del
ambiente:
Ejemplos:
\ bf
\ large
Estos comandos funcionan hasta nuevo aviso. Puedes delimitar tambin su rango de accin si colocas entre llaves al comando y a todo a lo que quieres que se
aplique:
v. Y por ltimo, aquellos comandos que simplemente se usan como abreviaturas convenientes o para denotar smbolos especiales. Siempre empiezan con \
149
\ cdot
\ uparrow
espera una nmero entero en su segundo parmetro, por lo que si le dieras otra cadena
protestara.
Muchas veces es necesario tener en el documento texto que no quieres que aparezca
en la versin final. Tambin pudiera suceder que tengas problemas con un comando
particular y quieras ver qu pasa si lo quitas, pero sin quitarlo realmente del archivo.
Lo que conviene en esos casos es usar comentarios.
LATEX tiene dos tipos de comentarios. El primero, y el ms sencillo 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 fin de lnea (en la pantalla, aunque la lnea
se haya doblado) el compilador de LATEX no va a considerar eso para compilar y no
aparecer en el trabajo final.
La segunda manera es introduciendo el ambiente de comentario mediante
\ begin { comment }
...
\ end { 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.
150
LATEX
Comando
Descripcin
\t
Produce tambin un espacio en blanco, pero que el compilador no puede usar para cambiar de lnea.
\\
Da un cambio de rengln, pero salta, adems de al rengln siguiente, tanto como se le indique. Si el nmero
es negativo, retrocede en la hoja. El a continuacin de
\\\\ es para forzar a que se d el espacio; de otra manera,
LATEX decide si aplica el espacio o no.
\vspace{<num><mdda>} Da un espacio vertical del tamao especificado. Si el n\vspace{<num><mdda>} mero es negativo, retrocede en la pgina. Nuevamente, el
es para forzar a LaTeX a que recorra el espacio especificado.
\\[< num><mdda>]
\\[< num><mdda>]
151
Comando
Descripcin
\smallskip
\medskip
\ bigskip
Permiten el desplazamiento vertical del texto en un cuarto del tamao de la lnea base ( \\ baselineskip), media lnea base y una completa. Es muy til porque son saltos
relativos al tamao de letra que ests usando.
\noindent
\indent
\hspace{<num><mdda>} Deja un espacio horizontal dado por el nmero. Si el n\hspace{<num><mdda>} mero es negativo, retrocede en la lnea. LATEX puede de-
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 separados 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 }
152
LATEX
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 especificacin de \documentcl ass).
Actividad 6.4 Agrega encabezado al documento. Ponte t como autor, junto con tus
mejores amigos, el ttulo que a t ms te parezca y algn comentario respecto a la
fecha. Agrega un prrafo de agradecimiento tan grande como quieras. Recuerda nada
ms que debe ir despus de \begin{document}. Compila y ve el efecto.
Actividad 6.5 El objetivo ahora es ver el efecto que tienen las distintas clases de documento sobre lo que se imprime. En todas las acciones que siguen, haz el cambio,
compila y ve el resultado. Anota cul es el efecto del cambio. Convierte en comentarios
(ya sea con % o con \begin{comment} ... \end{comment} para conseguir que compile bien.
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 compilar 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 clase 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 mismo
documento varias cartas, ya que se espera que el remitente y la firma sean los mismos
para todas las cartas incluidas en el documento. Por ello, una vez iniciado el documento,
debes especificar estos dos parmetros. Veamos primero el remitente:
Remitente: Se refiere a lo que normalmente aparece en el tope de la carta y que es la
direccin de aqul quien firma 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 el remitente, separas los renglones con \\.
Firma: Para la firma se especifica 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}
153
Una vez que tienes definidos estos parmetros, se procede a escribir cada 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 refieren a cada una de ellas.
Veamos cmo se hace:
Destinatario: A continuacin de \begin{ letter } colocars entre llaves los datos del destinatario:
\ 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}
Copias: Muchas veces quieres poner al pie de la carta la lista de las personas a las que
pretendes entregarle una copia de la carta. Esto se logra con el comando:
\ cc { Mis mejores amigos \ \
Mis estimados colegas \ \
Primer i n g r e s o en g e n e r a l }
154
LATEX
de las letras cuentas con comandos de estado, por lo que el que uno de ellos aparezca
se referir a todo el ambiente en el que estn. Es conveniente, por ello, escribirlos entre
llaves:
{ \ l a r g e e s t e es . . . . . . . }
Veamos una lista de tamaos de letras con sus nombres en la tabla 6.3.
Tabla 6.3
Nombre
tiny
scriptsize
footnotesize
creciendo un poco
small
normalsize
large
Large
LARGE
Muy grande
huge
Huge
HUGE
155
Actividad 6.11 Quita las llaves que delimitan el texto. Compila y ve el resultado.
Actividad 6.12 Haz que la primera letra de cada prrafo empiece en cada uno de los
tamaos especificados. Compila y ve el resultado.
Veamos ahora cules son los tipos de letra que provee LATEX (se les denomina fonts).
Vienen tanto como comandos de cambio de estado como con un argumento, que es el
texto que se va a cambiar.
Tabla 6.4 LATEX: comandos para cambios de tipo de letra
Decl.
Abr.
\mdseries
Comando
Descripcin
\textmd {...}
\ bfseries
\ bf
\ textbf {...}
\rmfamily
\rm
\textrm {...}
\ sffamily
\ sf
\ textsf {...}
\ ttfamily
\ tt
\ texttt {...}
\textup {...}
\upshape
\itshape
\ it
\ textit {...}
Texto en itlicas
\slshape
\ sl
\ textsl {...}
\scshape
\sc
\ textsc {...}
T EXTO
\textnormal {...}
Texto normal
\normalfont
EN MAYSCULAS
E S C A L A DAS
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 junto con el texto
entre llaves, la que abre precediendo al comando.
Puedes utilizar otro tipo de texto, conocido como enfatizado, que simplemente implica un cambio de tipo de letra, que depende de la instalacin de LATEX. Su 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 encuentra
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
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 verificar el ltimo (ms interno) cambio de estado que se haya solicitado:
Itlicas negritas comparadas con negritas
Lo mismo suceder con cualquier combinacin que se desee de dos tipos de letras:
debers combinar usando una como cambio de estado y la otra como comando con
argumento aunque la eficacia de esto depende del orden o las dos en modo de
declaracin.
157
Cada prrafo que desees marcar (numerar) deber ir precedido del comando \item.
Entre un \item y el siguiente, o entre \item y el final de la lista puede haber ms de un
prrafo.
Los <tipo de lista> que vas a manejar por lo pronto son los siguientes:
\ 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 segundo 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 numeracin
\ 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 numeracin
\ end { enumerate }
158
LATEX
Como puedes observar, cada nivel lleva su propio contador y usa sus propios mtodos de numeracin. Los valores por omisin, como acabas de ver, son los nmeros
arbigos seguidos de un punto para el primer nivel; las letras minsculas seguidas de
un parntesis para el segundo nivel; nuevamente nmeros arbigos, pero seguidos de
un parntesis para el tercer nivel; y nuevamente letras maysculas, pero seguidas de un
apstrofo para el cuarto nivel. LATEX admite nicamente cuatro niveles de anidamiento
para las numeraciones. Las numeraciones tambin tienen definidas espacio entre los
distintos niveles y sangras para los mismos. Puedes definir qu tipo de numeracin utilice. La manera ms fcil es incluyendo el paquete para numeraciones en el prembulo
de tu documento fuente, \usepackage{enumerate} y entonces podrs marcar qu tipo de
numeracin deseas, colocando 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.
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 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 }
produce
I. Es un paquete de distribucin gratuita, disponible en prcticamente 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 entre parntesis,
mientras que cuando usas nmeros romanos en mayscula, al nmero lo haces seguir
por 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 identificado como el primer nmero
de cierto tipo, LATEX simplemente repetir esa cadena frente a cada uno 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 corresponde al nmero.
\ begin { enumerate } [ { Nota } 1 . ]
\ i t e m Primera nota .
\ i t e m Segunda nota .
\ end { enumerate }
Cabe aclarar que la sustitucin que hagas para el tipo de numeracin afecta nicamente al nivel en el que aparece. Los niveles anidados seguirn la convencin por
omisin descrita arriba.
160
6.6.2.
LATEX
Listas marcadas
Cuando simplemente quieres marcar a cada prrafo con algn carcter, como 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 siguiente 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 m e r n i v e l
\ begin { i t e m i z e }
\ i t e m Primero d e l segundo n i v e l
\ begin { i t e m i z e }
\ 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 }
\ i t e m Primero d e l c u a r t o n i v e l
\ i t e m Segundo d e l c u a r t o n i v e l
\ end { i t e m i z e }
\ i t e m Segundo d e l t e r c e r n i v e l
\ end { i t e m i z e }
\ i t e m Segundo d e l segundo n i v e l
\ 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 e l
\ end { i t e m i z e }
161
\ begin { i t e m i z e }
- Primero del primer nivel
\ \ i t e m [ ] Primero d e l p r i m e r n i v e l
\ begin { i t e m i z e }
+ Primero del segundo nivel
\ i t e 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
Segundo del cuarto nivel
\ begin { i t e m i z e }
Segundo del tercer nivel
\ i t e m [ > ] Primero d e l c u a r t o n i v e l
\ i t e m Segundo d e l c u a r t o n i v e l
Segundo del segundo nivel
\ end { i t e m i z e }
Segundo del primer nivel
\ i t e m Segundo d e l t e r c e r n i v e l
\ end { i t e m i z e }
\ i t e m Segundo d e l segundo n i v e l
\ 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 e l
\ end { i t e m i z e }
6.6.3.
Descripciones
El formato para las descripciones es:
\ begin { d e s c r i p t i o n }
. . .
hprrafos-marcadosi
. . .
\ end { d e s c r i p t i o n }
donde cada prrafo marcado lleva inmediatamente despus de \item, entre 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 dejando 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 en 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 }
163
6.6.4.
Listas ms compactas
Como puedes observar de los ejemplos que mostramos, muchas veces 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 paquete, adems de
acortar los espacios verticales, asume las funciones del paquete enumerate permitiendo
modificar las etiquetas de las distintas listas. Para poder hacer esto ltimo, pasas 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 }
Estos tres ambientes resultan muy cmodos para compactar un poco el texto que
se est produciendo. En este libro es ms comn que usemos estos ambientes que los
originales de LATEX. paralist tiene adems listas corridas en un nico rengln, pero no
las revisaremos en este momento.
6.7. Tablas
En general, LATEX provee comandos para definir tablas de los tipos ms variados.
Veremos 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 siguiente:
\ 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 preceder
y suceder a la tabla con un rengln en blanco.
El argumento que va entre corchetes, <pos> se refiere al caso en que desees 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
tendr sentido si se deja, como acabamos de mencionar, un rengln en blanco antes y
despus de la tabla.
El argumento <cols> se refiere al formato que debern tener las columnas de la
tabla, y que ser aplicado a cada uno de los renglones. Debes especificar el formato
para cada una de las columnas que deseas tener en la tabla. Tambin especificas si
165
6.7 Tablas
se debe colocar algo entre las columnas. De esto, <cols> corresponde a una lista de
especificadores, que se refieren a la sucesin de columnas e intercolumnas:
Tabla 6.5
Especificacin
Descripcin
p{<ancho>}
m{<ancho>}
Igual que p, excepto que si hay columnas que dan un nmero distinto de lneas para el mismo rengln, centra verticalmente el contenido de las columna.
pulgadas
cm
centmetros
mm
milmetros
pt
puntos
em
ancho de carcter
||
En los primeros tres casos, el tamao final de la columna ser el mximo de todos
los renglones de la tabla. Si es que va a haber mucho texto en cada columna, te recomendamos usar la cuarta o quinta descripcin, para que el rengln se doble y se
conforme un prrafo.
Los renglones se componen de material que quieres en cada columna. Cada vez que
deseas cambiar de columna, debes insertar un carcter & y cada vez que quieras cambiar
de rengln debers agregar al final del rengln \\.
Puedes colocar lneas entre cada dos renglones con el comando \hline. Cuando no
es el primero de los renglones, debe venir a continuacin de un cambio de rengln.
166
LATEX
Se tiene una tabla con cuatro columnas y dos renglones y se usa & para separar
las columnas entre s. Se utilizan \\ para separar los renglones. La tabla queda de la
siguiente manera:
letras y smbolos
palabras
oraciones
secciones
captulos
prrafos
partes
subsecciones
documento
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
especificacin de la columna sea p o m, el introducir un rengln en blanco ser interpretado como cambio de prrafo, que lo realiza dentro del mismo rengln de la tabla y
en la misma columna.
Actividad 6.19 Crea un archivo Tablas.tex y copia el prembulo de CalcProp.tex.
Copia la definicin de la tabla anterior, compila y ve el resultado.
Actividad 6.20 Modifica la tabla anterior para que quede de la siguiente manera:
letras y smbolos
prrafos
captulos
palabras
oraciones
subsecciones
secciones
partes
documento
donde la primera columna est justificada 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 espacio 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:
167
6.7 Tablas
letras y
palabras
secciones
smbolos
oraciones prrafos subsecciones
captulos
partes
documento
\ 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 }
prrafos
partes
subsecciones
documento
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, ahora s, desapareci el espacio de ms entre y y smbolos.
letras y smbolos
palabras oraciones
secciones captulos
prrafos
partes
subsecciones
documento
Tambin puedes aprovechar las multicolumnas para poner ttulos a la tabla o pies
de pgina:
Componentes de un documento de LaTeX
letras y smbolos
palabras oraciones
secciones captulos
prrafos
partes
subsecciones
documento
En general puedes agregarle modificadores a las columnas para que el texto de esa
columna tenga un tamao o tipo particular. Por ejemplo, para el ttulo de la tabla agregas
al principio del texto el modificador \ bf y para el ltimo rengln cambias el tamao
del carcter a \ footnotesize. Estos cambios se aplican nicamente a esa columna y en
ese rengln. Asimismo, puedes saltar lneas en blanco entre renglones, simplemente
agregando cambios de lnea ( \\ ) al final del rengln.
Actividad 6.21 Repite la tabla que construiste y modifcala para agregarle el ttulo y
el ltimo rengln.
6.7.2.
169
6.7 Tablas
Ambiente
Reporte
Nombre
report
Artculo
article
Descripcin
Se utiliza para cosas menos formales que un libro o un
artculo. No tiene captulos, sino que agrupa a partir de
secciones.
Es, tal vez, el ambiente que ms seguido utilizars para la
entrega de tareas, elaboracin de pequeos manuales, etc.
Permite escribir en dos columnas fcilmente.
Observa que antes de cada \ hline , excepto el primero, debe haber un cambio de rengln. En cambio, despus del \ hline no es necesario un cambio de rengln. Como ya
vimos, puedes modificar 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 en
negritas. Tambin deseas lneas dobles horizontales entre los ttulos y el contenido de la
tabla. Juguemos un poco con eso. Para no ocupar tanto espacio nada ms mostraremos
el rengln o renglones que estemos modificando. Lo primero que haremos es separar a
los encabezados de columnas con lneas dobles y ponerlos en negritas, de la siguiente
manera:
\ 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
170
LATEX
Ambiente
Nombre
D ESCRIPCIN
Reporte
report
Artculo
article
Se utiliza para cosas menos formales que un libro o un artculo. No tiene captulos, sino que
agrupa a partir de secciones.
Es, tal vez, el ambiente que ms seguido utilizarn para la entrega de tareas, elaboracin de
pequeos manuales, etc. Permite escribir en dos
columnas fcilmente.
Supongamos que le agregas dos renglones ms, pero que por el momento no tienes
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
Nombre
D ESCRIPCIN
Reporte
report
Artculo
article
Se utiliza para cosas menos formales que un libro o un artculo. No tiene captulos, sino que
agrupa a partir de secciones.
Es, tal vez, el ambiente que ms seguido utilizars para la entrega de tareas, elaboracin de
pequeos manuales, etc. Te permite escribir en
dos columnas fcilmente.
Acetatos
Cartas
seminar
letter
Nota que falta la lnea vertical al final. Esto es porque no especificaste nada para la
tercera columna. Cuando tienes lneas verticales para separar columnas, debes completar todas las columnas en cada rengln. Los renglones agregados debieron tener la
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
171
6.7 Tablas
Nombre
Ambiente
Reporte
report
Artculo
article
Acetatos
Cartas
seminar
letter
D ESCRIPCIN
Se utiliza para cosas menos formales que un libro o un artculo. No tiene captulos, sino que
agrupa a partir de secciones.
Es, tal vez, el ambiente que ms seguido utilizars para la entrega de tareas, elaboracin de
pequeos manuales, etc. Te permite escribir en
dos columnas fcilmente.
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 comando
\multicolumn. Debes tener cuidado si es que las columnas originales tienen separacin
por columnas, porque debes especificar explcitamente las nuevas separaciones. Quieres el ttulo centrado, pero de ancho mayor que el resto de los renglones. Para lograrlo
pones un rengln en blanco antes y despus. Veamos cmo funciona en la tabla que
estamos usando como 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
report
Artculo
article
D ESCRIPCIN
Se utiliza para cosas menos formales que un libro o un artculo. No tiene captulos, sino que
agrupa a partir de secciones.
Es, tal vez, el ambiente que ms seguido utilizarn para la entrega de tareas, elaboracin de
pequeos manuales, etc. Permite escribir en dos
columnas fcilmente.
De los ejemplos anteriores, es claro que cuando colocas carcteres entre las columnas, dejar renglones en blanco no es trivial.
Al igual que cuando no tienes lneas entre las columnas, puedes utilizar \multicolumn
para quitar las lneas de una determinada columna en un cierto rengln. La manera
como se asocian las separaciones de columnas son:
172
LATEX
Tema:
Ambiente
Reporte
Nombre
Artculo
article
report
D ESCRIPCIN
Se utiliza para cosas menos formales que un libro o un artculo. No tiene captulos, sino que
agrupa a partir de secciones.
Es, tal vez, el ambiente que ms seguido utilizars para la entrega de tareas, elaboracin de
pequeos manuales, etc. Te permite escribir en
dos columnas fcilmente.
** La lista no es exhaustiva
\ begin { t a b u l a r } { | c | c | c | | c | }
\ hline
\ 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
&\ m u l t i c o l u m n { 2 } { c | | } { \ b f Sigma }
& \ \ \ c l i n e {2 3}
\ bf Q & 0 & 1 & F \ \ \ hline
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 }
173
6.7 Tablas
Tienes tambin el comando \vline que introduce una lnea de separacin de columna, que cubre toda la columna. Se codific como se muestra a la derecha de la tabla
formada.
Esta es
Para mostrar la divisin
una prueba
artificial
\ begin { t a b u l a r } { | c | l | }
\ hline
Esta es & una prueba \ \
\ hline
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 \ \ \
\ 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 formato del cdigo
no influye en el de la tabla, por lo que puedes partir renglones arbitrariamente en el
cdigo.
6.7.4.
Esta es
Para mostrar la divisin
una prueba
artificial
\ begin { t a b u l a r } { | c | l | }
\ hline
Esta es & una prueba \ \ [ 4 p t ]
\ hline
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.
174
LATEX
< num > puede ser negativo tambin, forzando a que haya un retroceso. El
cdigo se encuentra a la derecha de la tabla formada:
Esta es
una prueba
artificial
\ begin { t a b u l a r } { | c | l | }
\ hline
Esta es & una prueba \ \ [ 6 p t ]
\ hline
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
\ m u l t i c o l u m n { 2 } { | l | } { Ac
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 }
Ao
1971
Bonetera Cientfica, S. A.
Precio
bajo alto
Comentarios
97-245
Mal ao.
72
245-245
73
245-2001
175
la combinacin de tecla con Alt produzca los carcteres acentuados . Sin embargo,
pudiera ser que no estuviera Emacs habilitado de esta manera. En general, LATEX provee
mecanismos para que se impriman 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 los llama smbolos. Veamos a continuacin una lista de los ms usados:
Tabla 6.6
Acentos
\{o}
\={o} o
\t{oo} o o
\~{o}
\H{o} o
\b{o} o
\v{o}
\d{o}
\"{o}
o
o.
\c{o} o
\^{o}
\u{o} o
\{o}
\.{o}
\{\i}
Smbolos no ingleses
\ae
\OE
!
\oe
\O
\o
\aa
\l
\ss
\AA
\L
\AE
?
Se tienen algunos smbolos de puntuacin que resultan tiles. Se incluyen ac tambin los smbolos que tienen algn significado especial en LATEX.
Tabla 6.8
\dag
\ddag
\%
%
\S
\pounds
\&
&
c
\copyright
\#
#
\_ \&
_ &&verb+{ }+
\P
\$ $
{}
Finalmente, cuando se trate de que un smbolo aparezca tal cual, sin que sea interpretado por LATEX (por ejemplo, la diagonal inversa \) simplemente usas el comando
176
LATEX
\verb+texto+ y todo el texto que aparece entre los smbolos + no ser interpretado y
aparecer en la pgina tal cual lo tecleaste2 .
Actividad 6.24 Crea un archivo nuevo copiando el prembulo que hemos visto hasta
ahora.
Actividad 6.25 Construye una tabla de cinco columnas en las que veas el 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 denomina texto LR
(left to right) y que consiste fundamentalmente de prrafos que se acomodan en la hoja
como vienen. Cuando quieres escribir frmulas matemticas, stas contienen smbolos
que obligan al compilador a realizar un formato tambin vertical, no nada ms en el
rengln correspondiente. Para lograrlo debers introducir un ambiente matemtico.
Tienes dos tipos de ambientes matemticos:
i. En la lnea, donde lo que buscas es poder intercalar una frmula o un carcter
(i = 2 3 ). Esto se logra, de cualquiera de las siguientes maneras:
Se escribe:
Se forma:
= 2 3
i = 2 3
\(\ alpha_i=2\cdot\beta^3\)
i = 2 3
\begin{math}\alpha_i=2\cdot\beta^3\end{math}
i = 2 3
i = 2 3
\ begin { d i s p l a y m a t h }
\ a l p h a _ i =2\ c d o t \ beta ^3
\ end { d i s p l a y m a t h }
i = 2 3
Usando este comando es como se han escrito algunos de los comandos en todo este texto.
177
n
2 n+1
n
n+1
Nota que el lugar que ocupa cada carcter es ligeramente mayor en el modo matemtico.
Revisemos ahora cules son los componentes principales de las frmulas matemticas.
Exponentes
Una de las acciones ms comunes que quieres realizar es la de poner exponentes.
Esto se logra fcilmente si donde quieres deseas un exponente colocas el smbolo ^
seguido de un slo smbolo, para que ese smbolo aparezca como exponente; o bien
seguido de varios smbolos, todos ellos entre llaves. No se permiten secuencias de ms
de una combinacin de ^ con el exponente. Siguen algunos ejemplos:
$a^m b^n c^{n+m}$
$x^{y^2}$
$x^{2y}$
$x^2y$
am bn cn+m
2
xy
x2y
x2 y
En el segundo ejemplo nos vimos forzados a encerrar el segundo exponente entre llaves
para que no se infringiera la regla de que hubiera ms de uno seguido. De esta manera,
el exponente de x es, simplemente, otra expresin con exponente.
Como puedes observar en todos estos ejemplos, las llaves sirven para indicar dnde empieza y termina el exponente. Es claro, por ejemplo en el ltimo caso, que en
ausencia de llaves LATEX considerar nicamente al primer carcter que sigue a ^.
Actividad 6.26 Codifica en LATEX las siguientes frmulas:
3x2 + 4xy + 2y 2 = 0
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 para
exponentes. Siguen algunos ejemplos:
$a_m b_n c_{n+m}$
am bn cn+m
$x_{y_2}$
x y2
$x_{2y}$
x2y
$x_2y$
x2 y
179
Letras griegas
Para que se imprima una letra griega haces preceder el nombre de la misma (en
ingls) por la diagonal inversa. En la tabla 6.9 se muestran las letras griegas disponibles:
Tabla 6.9
Smbolos griegos
Minsculas
\alpha
\theta
\tau
\beta
\vartheta
\pi
\upsilon
\gamma
\iota
\varpi
\phi
\delta
\kappa
\rho
\varphi
\epsilon
\lambda
\varrho
\chi
\varepsilon
\mu
\sigma
\psi
\zeta
\nu
\varsigma
\eta
\xi
\omega
Maysculas
\Gamma
\Lambda
\Sigma
\Psi
\Delta
\Xi
\Upsilon
\Omega
\Theta
\Pi
\Phi
Puedes ver que no para todas las letras griegas hay la versin en mayscula. Si
no aparece en esta lista es porque no la hay. Tambin existe, para algunas de ellas, la
versin para variable.
Actividad 6.28 Haz una tabla que contenga nicamente las letras griegas para las
cuales hay maysculas, y aqullas para las cuales hay versin en var. En la primera
columna de la tabla deber aparecer el nombre de la letra en minscula; en la
segunda columna deber imprimirse el smbolo; en la tercera columna, si es que hay,
el smbolo para la mayscula; y en la cuarta columna, si es que hay, el smbolo para
la variable.
180
LATEX
7
,
)
;
.
\ rightarrow
\Longrightarrow
=
\ Leftrightarrow
\Uparrow
\updownarrow
l
\longmapsto
7
\leftharpoonup
(
\rightharpoondown
+
\nearrow
%
\nwarrow
\ longleftarrow
\Leftarrow
\longrightarrow
\ leftrightarrow
\ Longleftrightarrow
\downarrow
\Updownarrow
\hookleftarrow
\rightharpoonup
\ rightleftharpoons
\searrow
m
*
&
Operadores
En la tabla 6.11 te mostramos smbolos comnmente usados en matemticas como
operadores y smbolos relacionales.
Tabla 6.11 Operadores y smbolos relacionales
\oplus
\ bigtriangleup 4
\times
\otimes
/
\ triangleleft
\sqcup
t
\ star
?
\ bigcirc
\rhd
\setminus
\
\cdot
\pm
\mp
\ominus
\uplus
]
\ div
\oslash
\ triangleright .
\vee
\ circ
\dagger
\unlhd
\wr
o
\cap
\diamond
\cup
\bigtriangledown 5
\sqcap
\ast
\odot
\lhd
\wedge
\ bullet
\ddagger
\unrhd
181
|
1
6=
w
\leq
\models
\sim
\succeq
\ ll
\ parallel
\approx
\supseteq
\sqsubset
\smile
\doteq
\ ni
\vdash
|=
k
<
^
.
=
3
`
\geq
\prec
\perp
\simeq
\gg
\subset
\bowtie
\cong
\sqsupset
\sqsubseteq
\frown
\ notin
\dashv
'
./
=
=
v
_
/
a
k X Yi
k2 fX dX
Smbolos varios
Notars que a pesar de que hemos dado ya muchsimos smbolos matemticos, todava nos faltan algunos que ya conoces como el para todo. En la tabla 6.12 ponemos
algunos smbolos ms que te van a ser de utilidad.
182
LATEX
~
\imath
\jmath
\ ell
`
\wp
\Re
<
\Im
=
\mho 0
0
\emptyset
\nabla
\prime
\surd
>
\top
\bot
\|
\angle
\ exists
\neg
\ flat
[
\ natural
\
\sharp
]
\backslash \
\ partial
\Box
2
\Diamond
3
\ triangle
4
\ clubsuit
\diamondsuit
\ heartsuit
\spadesuit
\ forall
\ infty
Actividad 6.31 Codifica en LATEX las siguientes figuras (pista: utiliza una tabla tabular
para acomodar las figuras):
6
\cos
ker
\ arcsin arcsin
\ lg
lg
\arctan arctan
\ lim
lm
\arg
arg
\limsup
\ker
\cosh
\ ln
\cot
\log
\coth
cos
lm sup
cosh
ln
cot
log
coth
\csc csc
\exp
\min mn
\sinh
\deg deg
\gcd
Pr
\det det
\sec sec
\dim dim
\sup
\Pr
\hom
\tan
\ inf
exp
sinh
gcd
sup
hom
tan
nf
183
lm inf
\max
max
a mod b
a \mod b
sin
\ sin
\pmod{b}
\tanh
tanh
(mod b)
Nota que como estamos trabajando en espaol (paquete babel) aquellas 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$
$1/(n+1)$
3/4
1/(n + 1)
3
4
3
4
1
n+1
1
n+1
xn + xn1
xn xn1
=
2
2
2Xmax /M
i
c0 (x)
Races
La raz de una frmula o expresin se logra con el comando \ sqrt y ponindole
como argumento entre llaves a la expresin que quieres cubra la raz.
\ frac {x+y}{1+\sqrt {\ frac {y}{z+1}}}
x+y
q
y
1 + z+1
184
LATEX
Puedes tambin poner valor en el radical, agregando ese valor entre corchetes como
primer argumento de \ sqrt :
\ frac {x+y}{1+\sqrt[n ]{\ frac {y}{z+1}}}
x+y
q
y
1 + n z+1
Actividad 6.33 Codifica en LATEX las siguientes frmulas:
2
b b2 a c
2a
s
1
1
3 () = ( 2
)
( + 1)2
Smbolos agrandables
Tenemos en matemticas muchos smbolos, como el de la integral o las series, que
deben tomar el tamao dado por todo lo que est a su derecha. Como vimos en el ejercicio anterior, la raz cuadrada, por ejemplo, crece al tamao que toma su argumento.
Esto lo hace automticamente. Los smbolos en la tabla 6.14 son con los que cuenta
LATEX para el modo matemtico. El tamao aumenta nicamente cuando aparece en el
modo en que acomoda a la frmula en un prrafo, no en una lnea.
Tabla 6.14 Smbolos agrandables
\sum
\bigcap
\bigodot
\prod
\bigcup
\bigotimes
\coprod
\bigsqcup
\bigoplus
\ int
\bigvee
\biguplus
\ oint
\bigwedge
Cuando pones subndice o exponente a cualquiera de estos smbolos, LATEX los acomodar de tal manera que se vean bien. Por ejemplo,
\ [ \ sum_{ \ i n f t y } ^ \ i n f t y f _ {X | Y } ( x _ i | y _ j ) \ ]
185
f (x)2 g(y)2
s
3 () =
1
1
( + 1)2
(
P (x) =
x2 + y 2
p
(x2 y 2 )2
yn =
N
X
ai xni +
i=0
D(k) =
bi yni
i=1
M Z
X
i=1
M
X
(k)
bi
(
bi1 k)
(x yi )2 fX (x)dx
Equivalente a \ left y \ right tenemos manera de pedir distintos tamaos de delimitadores con las siguientes parejas, listadas de menor a mayor. El comando se hace seguir
por un nico smbolo.
186
LATEX
\ bigl
\ Bigl
\ biggl
\ Biggl
\ bigr
\ Bigr
\ biggr
\ Biggr
\uparrow
\Uparrow
\downarrow
\Downarrow
\{
\}
\updownarrow
\Updownarrow
\ lfloor
\ rfloor
\ lceil
\ rceil
\ langle
\rangle
\backslash
\|
\rgroup
\lgroup
{
|
\rmoustache
\arrowvert
z
k
\lmoustache
\Arrowvert
\bracevert
1k<m
187
valores para x1 , . . . , xn
donde los puntos suspensivos se colocan alineados con la parte inferior de la lnea
( \ ldots ); o bien, alineados con la parte central de la lnea ( \cdots):
\ [ 1 + \ f r a c { 1 } { x ^2}+\ f r a c { 1 } { x ^4}+\ cdots +\ f r a c { 1 } { x ^{2^ n } } \ ]
1
1
1
+ 4 + + 2n
2
x
x
x
donde los puntos suspensivos se alinean con el operador para darle continuidad. Tam.
.
bin cuentas con puntos suspensivos verticales, \vdots:(..) y diagonales, \ddots ( . . ).
1+
n
f () = cd
+ cd1
+ + c0
dn
d1n
n
\ begin { d i s p l a y m a t h }
\ d e l t a ( q \ mbox { \ b { o } } , a )
\ end { d i s p l a y m a t h }
ABCDEF...
$\mathit{ it \acute{a}licas \cdot 2^{ ft }\ Psi \log [\ psi ]} $
188
LATEX
m
aquina de escribir 2ft log[]
$\mathbb{BLACKBOARD CON BORDES DOBLES}$
que logra poner en negritas tambin a los smbolos matemticos. Mostramos ambas
opciones juntas para que se note la diferencia:
\ [ \ mathbf { n e g r i t a s \ c d o t 2 ^ { f t } \ P s i \ l o g [ \ p s i ] } \ ]
a + b2c
a + b2c
Cabe hacer la aclaracin que estos comandos los tienes que poner antes de que
entres al modo matemtico, para que tengan efecto.
Actividad 6.37 Codifica en LATEX la siguiente frmula, cuidando el tipo de letra y las
negritas:
Sea x 6= y x N, y y x
189
x=
b2 4ac
Da la solucin de ecuacin cuadrtica
2a
Tablas de frmulas
Hay dos maneras de organizar varias frmulas en una tabla. La primera de ellas es
con un tabular y colocando en cada celda el modo matemtico en lnea ($ \(... $\) ). La
otra manera es declarando un ambiente de lnea o recuadro y colocando all un arreglo matemtico, \begin{array }...\ end{array}. Es importante insistir en que un array slo
puede estar en un ambiente matemtico. Las declaraciones de columnas y renglones las
haces exactamente igual que con tabular , excepto que el contenido es interpretado como frmulas. La excepcin es cuando para describir la columna diste p{<num><mdda>},
pues en ese caso automticamente esa columna quedar en modo texto.
Este mecanismo se utiliza tambin para imprimir matrices o, en general, tablas que
en su mayora van a contener frmulas matemticas.
\ [ \ begin { a r r a y } { l l c l }
a_ {11}& a_ { 1 2 } & \ l d o t s &a_ { 1m } \ \
a_ {21}& a_ { 2 2 } & \ l d o t s &\ l d o t s \ \
\ c d o t s &\ c d o t s &\ l d o t s &\ l d o t s \ \
a_ { n1}&a_ { n2 } & \ c d o t s
&a_ {nm}
\ end { a r r a y } \ ]
a11
a21
an1
a12
a22
an2
...
...
...
a1m
...
...
anm
Siempre que tienes una frmula que ocupa ms de un rengln, puedes ponerle algn carcter a la izquierda y otro a la derecha que crezcan tanto como la frmula en
cuestin. Esto lo haces marcando la frmula con \ left y \ right a su izquierda y derecha
respectivamente, y poniendo el smbolo que quieras. Por ejemplo, la matriz anterior
podra quedar:
190
LATEX
\ [ \ l e f t [ \ begin { a r r a y } { l l c l }
a_ {11}& a_ { 1 2 } & \ l d o t s &a_ { 1m } \ \
a_ {21}& a_ { 2 2 } & \ l d o t s &\ l d o t s \ \
\ c d o t s &\ c d o t s &\ l d o t s &\ l d o t s \ \
a_ { n1}&a_ { n2 } & \ c d o t s&a_ {nm}
\ end { a r r a y } \ r i g h t ] \ ]
a11
a
21
an1
a12 . . . a1m
a22 . . . . . .
... ...
an2 anm
a11 a12 . . .
a21 a22 . . .
...
an1 an2
a1m
...
...
anm
que queda a + b . Debes notar que usa tantos renglones como necesite, corrigiendo el
ab
siguiente rengln para que no se encime.
Las lneas entre columnas y entre los renglones se utilizan exactamente igual que en
el caso de las tablas no numricas ( tabular ). Tambin habrs notado que la descripcin
de las columnas se hace tambin de la misma manera que en un tabular . Tambin se
pueden redefinir las columnas.
Actividad 6.38 Codifica en LATEX la siguiente tabla:
(a + b)2 = a2 + 2ab + b2
Suma de cuadrados
2
2
a b
= (a + b)(a b)
Diferencia de cuadrados
n
n
n1
n
(a + b) = a + 2a b + + b Expansin binomial
Matrices y combinaciones
Si bien puedes armar matrices usando arrays, LATEX provee comandos especiales
para ello. Por ejemplo, es muy comn que quieras definir una funcin por casos
como la que sigue:
191
Prj
(
0
=
r!(1)(rj)/2
\ [ P_ { rj }=
\ begin { cases }
0&\ t e x t { s i r j es impar } , \ \
si r j es impar,
r ! ( 1 ) ^ { ( rj ) / 2 }
&\
t e x t { s i r j es par } .
si r j es par.
\ end { cases }
\]
Prj =
0
r!(1)(rj)/2
\ [ P_ { rj } = \ l e f t \ {
\ begin { a r r a y } { l l }
0&\ t e x t { s i r j es impar } , \ \
r ! ( 1 ) ^ { ( rj ) / 2 }
si r j es impar,
&\ t e x t { s i r j es par } .
si r j es par.
\ end { a r r a y }
\ right .
\]
que puedes corroborar en la parte izquierda que forma exactamente la misma ecuacin.
Por ello, el ambiente de casos es, simplemente, un atajo para codificar este tipo de
tablas.
Otro atajo comn es el que se usa para matrices. LATEX define varios ambientes
especficos para matrices, dependiendo de los delimitadores que quieras tener:
\ [ \ begin { m a t r i x }
a&b \ \
c&d
\ end { m a t r i x } \ ]
\ [ \ begin { b m a t r i x }
i&j \ \
k& l
\ end { b m a t r i x } \ ]
\ [ \ begin { V m a t r i x }
q&r \ \
s& t
\ end { V m a t r i x } \ ]
a b
c d
i j
k l
\ [ \ begin { p m a t r i x }
e& f \ \
g&h
\ end { p m a t r i x } \ ]
\ [ \ begin { v m a t r i x }
m&n \ \
o&p
\ end { v m a t r i x }
e f
g h
m n
o p
q r
s t
192
LATEX
6.9.1.
n!
r!(n r)!
i=1
Como puedes notar, aun cuando estemos en modo de lnea, acomoda el texto que le
indiques donde le indiques. El primer parmetro LATEX lo escribe con un tamao menor
y lo coloca encima (over) o debajo (under) del segundo argumento. El segundo argumento nicamente puede ser un smbolo. El primer argumento, como ya vimos, puede
ser cualquier cosa. Para aquellos smbolos que son muy comunes, tenemos definidos
comandos que colocan determinado carcter. stos se encuentran en la tabla 6.17.
Tabla 6.17 Acentos en modo matemtico
\hat{a}
\check{a}
\breve{a}
a
`
a
\acute{a}
\grave{a}
~a
\bar{a}
\vec{a}
a
a
\dot{a}
\ddot{a}
\ tilde {a}
Muchas veces quieres poner una flecha, raya, llave, encima de toda una expresin
que tiene ms de un smbolo. Para ello tenemos los siguientes smbolos que se extienden
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 } \ ]
z }| {
a+b+c=a
b + }c
| +{z
\ [ \ 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
193
a+b+c=a+b+c
\ [ \ o v e r l e f t r i g h t a r r o w { a+b+c } = \ u n 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 todos estos comandos y combinarlos de la manera
que desees.
B
AB =
AB
6.9.2.
si A B
si B A
si A y B son ajenos
por la ley de De Morgan
Arreglos de frmulas
Seguramente ests pensando en escribir frmulas (o ecuaciones) en modo prrafo.
Hasta ahora has utilizado para ello el ambiente displaymath. Sin embargo, 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}
R= \ f r a c { 1 } {M} \ sum_ { k =1}^M R_k
\ end { e q u a t i o n }
R=
M
1 X
Rk
M k=1
(6.1)
194
LATEX
\ [ \ begin { a r r a y } [ t ] { l l }
x_1 = \ sum_ { k =1}^ n a_ky ^ k
&\ t e x t { p r i m e r v a l o r } \ \ [ 1 0 p t ]
x_2 = \ sum_ { k =1}^ n b_ky ^ k
x1 =
Pn
x2 =
Pn
k=1
ak y k primer valor
k=1 bk y
segundo valor
&\ t e x t { segundo v a l o r }
\ end { a r r a y }
\]
Si quieres varias lneas, pero cada una de ellas en modo prrafo, tienes que usar el
ambiente de arreglos de ecuaciones \eqnarray.
\ begin { eqnarray }
x_1 = \ sum_ { k =1}^ n a_ky ^ k
x1 =
n
X
ak y k
Primer valor
(6.2)
bk y k segundo valor
(6.3)
k=1
&\ t e x t { Primer v a l o r } \ \
x_2 = \ sum_ { k =1}^ n b_ky ^ k
&\ t e x t { segundo v a l o r }
x2 =
n
X
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 los
ambientes eqnarray y equation respectivamente:
\ begin { eqnarray }
x_1 = \ sum_ { k =1}^ n a_ky ^ k
x1 =
&\ t e x t { Primer v a l o r } \ \
n
X
ak y k
Primer valor
k=1
x2 =
n
X
bk y k segundo valor
k=1
195
1 1 1
1
+
2
2 1 1
2
0
(6.4)
1
+ 2
1&1
2
1 1
\ end { b m a t r i x }
\ begin { b m a t r i x }
2
\ alpha \ \
\ alpha
0
\ end { b m a t r i x } \ \ [ 1 0 p t ]
&\ begin { b m a t r i x }
\ s q r t { 2 } \ alpha \ \
0
\ end { b m a t r i x }
% \ end { s p l i t }
\ end { eqnarray }
(6.5)
(6.6)
196
LATEX
Existen otros ambientes ms para matemticas. Si los quieres revisar, consulta alguno de los libros de LATEX.
Espacio positivo
Abr
Completo
Ejemplo
\mspace{1mu}
xx
\,
\thinspace
x \, x
\:
\medspace
\;
\thickspace
x \; x
\enskip
x\enskip x
\quad
x\quad x
\qquad
x\qquad x
mu
x\medspace x
Normal
xx
xx
xx
xx
x x
x x
x
x
xx
xx
xx
xx
xx
xx
Espacio negativo
Abr
Completo
Ejemplo
xx
\negmedspace x\negmedspace x xx
\negthickspace x\negthickspace x xx
\!
\negthinspace
x \! x
Normal
xx
xx
xx
Es necesario aclarar que estos espacios se pueden utilizar tambin fuera del entorno
matemtico, en el modo de texto, excepto por \mspace{} que se usa nicamente en modo
matemtico.
Actividad 6.42 Codifica en LATEX la siguiente ecuacin:
1
N
PN 1
2
i=0 i
GT C =
QN 1 2 N1
i=0 i
(6.7)
197
6 sn1
=
6= sn1
= sn1
= sn1
= sn2
6= sn2
6= sn2
= sn2
M1
M2
M3
M4
= 0.4
= 0.9
= 1.5
= 2.0
(6.8)
(6.9)
(6.10)
(6.11)
(6.12)
d
g
b
e
h
f
i
Con esto damos por terminada la parte correspondiente a frmulas matemticas. Por
supuesto que esto no agota el material relevante, pues por cuestiones de tiempo dejamos
fuera muchsimas caractersticas y posibilidades que tiene LATEX. Sin embargo, creemos
que con esta introduccin, podrs seguir adelante de manera independiente, de existir
el inters en ti.
198
LATEX
de las grficas o, en general, figuras que queramos incluir. Esto se hace mediante lo
que LATEX llama flotantes. Les llama as porque le puedes indicar al compilador que
las acomode no forzosamente donde aparecen, sino en la primera pgina en la que
no ocasionen que se deje espacio en blanco innecesario. Por supuesto que tambin le
puedes indicar que las coloque exactamente donde aparecen, sin importar el armado de
las pginas que las preceden, o haciendo t el armado a pie.
Las flotantes que vamos a revisar ac son nicamente dos:
Figuras ( figure )
Tablas ( table )
Ambas flotantes tienen los mismos argumentos, que tienen que ver fundamentalmente con dnde se desea que se les acomode; ambas proveen un espacio con la posibilidad de ponerles un ttulo ( \caption)4 . Definen un ambiente donde los cambios de
tipo de letra o tamao sern efectivos nicamente dentro de ese ambiente. En general,
el ambiente table se usa para material que se presenta en forma de tabla o lista, mientras que el de figure se usa para material grfico. La sintaxis de estos ambientes es la
siguiente:
Para figuras:
Para tablas (o cuadros):
\ begin { f i g u r e } [ posicionador ]
Contenido
\ c a p t i o n { Ttulo de la figura }
\ end { f i g u r e }
\ begin { t a b l e } [ posicionador ]
Contenido
\ c a p t i o n { Ttulo de la tabla }
\ end { t a b l e }
letra
significado
Tambin hay la posibilidad de marcarlas con una etiqueta para poder hacer referencias a ellas, pero
dado lo poco del tiempo no entraremos en eso en esta ocasin.
199
letra
significado
Para acomodar una figura o tabla procedes a dar tus preferencias, que son combinaciones de las primeras tres letras. LATEX tratar de acomodar la figura, colocndola en
la misma pgina o posponindola, procurando dejar poco espacio en blanco. Si no se
especifica, el valor por omisin es tbp. LATEX podra no acomodar las figuras como le
indicas porque tiene parmetros que le indican, por ejemplo, cuntas figuras pueden ir
en una misma pgina o qu porcentaje del total de la pgina pueden ocupar. No entraremos en estos detalles por falta de tiempo. En la mayora de los casos, y sobre todo en
un principio, puedes trabajar con los valores por omisin, excepto posiblemente para
el posicionamiento. Te recomendamos, en general, poner H y si no se forma bonito,
proceder a acomodar la figura o tabla a pie. Veamos algunos ejemplos sencillos, con el
cdigo de LATEX que los produce.
Tabla 6.20 Conversin de grados Farenheit a Centgrados
Fahr
32
40
80
Cent
0
4.5
27
\ begin { t a b l e } [ ! h ]
\ c a p t i o n { Conversin de F a r e n h e i t
a Centgrados }
\ begin { t a b u l a r } [ t ] { | r | r | }
\ hline
\ b f Fahr & \ b f Cent \ \ \ h l i n e
32 & 0 \ \
40 & 4 . 5 \ \
80 & 2 7 \ \ \ h l i n e
\ end { t a b u l a r }
\ end { t a b l e }
Puedes cambiar varios aspectos de esta tabla. Si, como ya dijimos, quieres que la
acomode en la parte superior de una pgina, conseguiras que coloque primero el texto
que dimos como cdigo y despus la tabla misma. Sin embargo, es poco recomendable
dar una nica posicin como opcin, porque entonces si LATEX no puede acomodar a la
tabla o figura en la siguiente pgina, lo ms seguro es que ya no la coloque en ningn
lugar y la perdamos. Observa cmo la tabla 6.21 que ests colocando inmediatamente
despus de estas lneas, queda acomodada de manera aparentemente arbitraria (est
200
LATEX
Fahr
32
40
80
Cent
0
4.5
27
Decimal
1
2
3
5
7
8
15
16
Binario
1
10
11
101
111
1000
1111
10000
Octal
1
2
3
5
7
10
17
20
Hexadecimal
1
2
3
5
7
8
F
10
Todo lo que dijimos de las tablas se aplica a las figuras. El contador de tablas es independiente del de figuras. LATEX provee un mecanismo sencillo para incluir imgenes
o figuras generadas desde fuera y que estn codificadas en postscript o imgenes .png.
Esto se hace con el comando \includegraphics {...} que toma como argumento un archivo
en el que se encuentre la imagen o figura que se desea incluir. En el archivo dummy.ps
se encuentra una figura (hecha en xfig ) que deseamos incorporar en nuestro documento. Para hacerlo, tenemos que incluir el uso del paquete graphics en el prembulo del
201
documento: \usepackage{graphics}. Este paquete cuenta con los mecanismos para poder
manipular la figura:
Figura 6.1 Grfico introducido con includegraphics
El paquete graphics contiene adems comandos que permiten girar y escalar una
imagen, prrafo, tabla, smbolo, etc. Tienes dos maneras de escalar un objeto: de manera
relativa, diciendo el factor de escala, como se muestra en la figura 6.3a ( \scalebox{.25});
o indicando la proporcin en la escala horizontal entre llaves y con la escala vertical
entre corchetes: \scalebox{.2}[.3], como en 6.3b ( \scalebox {.25}[.5] ). Tambin
puedes dar medidas absolutas, como en la figura 6.3c ( \resizebox{8cm}{2cm}) o bien,
utilizar una escala relativa, donde omitimos el factor vertical, y se asumir el mismo
que el horizontal, por ejemplo 6.3d ( \resizebox{2cm}{!}). En la escala absoluta se deben
dar las dos medidas. Cualquiera de ellas puede ser sustituida por ! .
202
LATEX
203
Si por ejemplo quieres el reflejo de algo pero a lo largo del eje horizontal, lo puedes
conseguir con el cdigo que sigue
\ scalebox { 2 } { r e f l e j o h o r i z o n t a l \ r o t a t e b o x {180}{ %
\ reflectbox { reflejo horizontal } } }
y que produce
204
LATEX
1
q1
E
nt
ra
q1
0
q0
do
q0
q0
q1
q0
q0
q1
q1
q1
q0
Entrada
Edo 0
1
da
= b2 4ac = b2 4ac
Actividad 6.48 Importa a un archivo de LATEX que use el paquete graphics alguna de
las grficas que elaboraste con xfig (la del rbol genealgico, por ejemplo). La debes
tener guardada en tu cuenta, por lo que si no la exportaste, abre otra ventana y ejecuta
xfig para exportarla en postscript.
6.10.2.
Cortando figuras
Puedes mostrar nicamente parte de una figura utilizando el modo \includegraphics
del comando (agregando un asterisco al nombre del comando) y dndole parmetros
opcionales entre corchetes. La primera pareja le indica la posicin de la esquina inferior izquierda y la segunda pareja la posicin de la esquina superior derecha. Puedes
observar el resultado en la figura 6.4.
205
En la figura 6.4 colocamos un marco alrededor del recorte para hacerlo ms claro.
Ese marco no aparece como resultado del comando.
6.10.3.
Colores
En el contexto de generar archivos pdf, utilizaremos para colorear dos paquetes,
color y tikz. Aunque el primero es claro su objetivo, el segundo, tikz, es un paquete
de LATEX mucho muy poderoso para graficacin y que incluye un sistema de colores
adems compila tanto con pdflatex como con latex . Est incluido dentro del paquete
pgf aunque aporta una interfaz ms sencilla que la que soporta pgf. Es tan grande y
poderoso que est dividido en varios paquetes para que elijas nicamente aquellos que
va a usar. En la tabla 6.24 damos una lista de los que vamos a requerir, por lo pronto,
para generar colores. Cabe aclarar que para utilizar tikz es necesario cargar tambin
algunos paquetes que nos sirven como soporte, que listamos tambin a continuacin5 .
Nombre
Uso
tikz
xkeyval
pifont
color
Descripcin
\usepackage{tikz}
y desde ese momento en adelante, en el rango del ambiente en el que est, todo
se escribir en rojo. Los colores bsicos con los que contamos se encuentran en la
tabla 6.25.
5
206
LATEX
.
Tabla 6.25 Colores bsicos con los que se cuenta
Cdigo
Resultado
\ color{black}black
black
white
red
yellow
cyan
blue
green
magenta
black
darkgray
gray
lightgray
white
El paquete color tambin nos ofrece la posibilidad de conformar cajas con el fondo
de ciertos colores para realzar algunos textos:
\ c o l o r b o x { red } { \ t e x t c o l o r { b l u e }{ %
Esta es una prueba } }
Actividad 6.49 Teclea en un archivo fuente de LATEX donde uses el paquete color y
graphics, las lneas correspondientes a color y ve en la pantalla cmo quedan (desafortunadamente la impresin no muestra el color, sino nicamente distintos niveles de
grises, pero en la pantalla s lo puedes apreciar).
pantalla lo vers tal cual
207
6.10.4.
Ambiente de prrafo.
Los modificadores van entre corchetes y tienen que ver con aspectos generales de
las figuras que deseamos construir. Ambos ambientes presuponen un tamao, ya sea
de lneas o de prrafo, dado en la unidad de medida que se especifique. La unidad de
medida por omisin es en centmetros, pero se puede cambiar. Prcticamente todo lo
que deseemos dibujar va a tener implcitas coordenadas y longitudes, que estarn dadas
implcitamente en la unidad de medida.
Para denotar a estas unidades de medida, tikz utiliza vectores en el eje de las x,
de las ys y de las zs. Es conveniente asegurarnos con qu unidad de medida estamos
trabajando. La puedes definir en milmetros, pulgadas, centmetros o puntos. Preferimos
trabajar con puntos, ya que sta es una unidad que se usa en muchos otros lugares.
Para establecer al punto como unidad de medida en los comandos de tikz utilizamos el
siguiente modificador:
\ t i k z [ x=1 pt , y=1 pt , z=1 p t ] { . . . }
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 pt , z=1 p t ]
...
\ end { t i k z p i c t u r e }
y a partir de ese momento y dentro del ambiente declarado, la unidad de medida ser 1
punto (1pt). Si se declara otro ambiente en otro lugar, habr que hacer lo mismo, o bien
trabajar en centmetros.
6.10.5.
Lneas
El comando que permite dibujar lneas es \draw y hay que darle como argumentos
las coordenadas de los puntos por los que quieres que pase. El formato ms simple del
comando es el siguiente:
208
LATEX
\ draw ( <coord inicial> ) ( <siguiente coordenada> ) . . . ;
donde los puntos sucesivos indican que puedes poner tantas coordenadas como desees.
Las coordenadas se pueden dar como puntos relativos con la unidad de longitud del
ambiente; o bien puede ser algn objeto etiquetado7 ; tambin puede aparecer all una
coordenada con una unidad de medida especfica. Si se trata de coordenadas, consiste
de una pareja con los elementos separados entre s por coma, donde el primer elemento
de la pareja es el desplazamiento sobre el eje x y el segundo sobre el eje y. Tambin es
importante notar que los comandos de tikz en su mayora terminan con punto y coma
(;).
Es importante mencionar que el texto seguir inmediatamente despus del punto
que el comando considere que requiere. Veamos algunos ejemplos:
. Nota cmo el rengln se aco\ tikz [x=1pt,y=1pt]\draw(0,0) (20,30) (30,0)
moda verticalmente para dar lugar al trazo y el texto contina a partir del final del
espacio ocupado. Si deseamos que el texto se acomode encima del dibujo, tenemos que
hacerlo a pie recorrindonos hacia arriba y hacia la izquierda con comandos de \vspace
y \hspace.
\ vspace {30 p t } % E l mximo de l a segunda coordenada y e l cambio
% de l nea .
\ t i k z [ x=1 pt , y=1 p t ] { \ draw (0 ,0) (20 ,30) (30 ,0);}
\ hspace{30 p t} %
\ t i k z [ x=1 pt , y=1 p t ] { \ draw (0 ,0) (20 ,30) (30 ,0);} %
y l a s l neas se acomoda como se e s t observando
209
Puedes cambiar el ancho de la lnea tambin con un modificador, line width y el tamao de
la lnea se puede dar en cualquier unidad de medida:
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 p t ]
\ draw [ l i n e w i d t h =2 p t ] ( 0 , 0 ) ( 3 0 , 2 0 ) ;
\ draw [ l i n e w i d t h =.13 i n ] (30 ,20) ( 5 0 , 0 ) ;
\ draw [ l i n e w i d t h =.15cm ] (50 ,0) ( 7 0 , 2 0 ) ;
\ draw (70 ,20) ( 9 0 , 0 ) ;
\ draw [ l i n e w i d t h =1 p t ] (90 ,0) ( 1 1 0 , 2 0 ) ;
\ end { t i k z p i c t u r e }
Tambin se puede dar el ancho de lnea para todo un ambiente, ponindolo de modificador
de ambiente:
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 pt , %
l i n e w i d t h =2 p t ]
\ draw ( 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 ) ;
\ end { t i k z p i c t u r e }
El comando \draw es fundamental en tikz ya que servir tambin para acomodar objetos y
dibujar figuras. Por ejemplo, para dibujar un rectngulo combinamos \draw con esa forma:
Siempre que introduces un ambiente tikz, debes pensar que reservas un espacio rectangular
dado por lo que dibujaste. Ese espacio logra contener todos los objetos que hayas acomodado
o dibujado en ese ambiente. El (0,0) es la esquina inferior izquierda (aunque esto lo puedes
modificar) y la esquina superior derecha est dada por lo que hayas hecho dentro del ambiente.
Actividad 6.50 Escribe el cdigo necesario para que se dibuje lo que sigue (el tamao relativo
es lo que importa).
210
LATEX
Como ya mencionamos, tikz provee varias figuras geomtricas con las que puedes trabajar
usando la biblioteca shapes de este paquete. Y como las figuras son cierto tipo de objetos,
puedes acomodarlos tambin en la retcula mediante draw. Adems del rectngulo, contamos
con crculos (circle), diamantes (diamond) y elipses (ellipse). El formato para cada una de estas
figuras es el siguiente: una vez que se ubica el punto donde se va a colocar la figura mediante draw, cada una de las figuras tiene sus propios parmetros. Quisiramos antes mencionar
un modificador ms que altera la forma de los puntos de quiebre para redondearlos y que es
rounded corners. Observa el efecto que tiene en el rectngulo que hicimos arriba:
Puedes jugar con qu tan redondeadas estn las esquinas, agregndole el redondeo en trminos de una unidad de medida a continuacin del signo =. La medida se refiere a la distancia
de lo que sera la esquina sin redondear a la redondeada, medido verticalmente.
rounded
corners
211
Otros de los modificadores que puedes poner a \draw son el color de las mismas blue,
red, yellow, cyan, green, magenta ; el tipo de lnea [ loosely |densely]{solid |dotted|dashed}
. Estos ltimos parmetros no llevan signo = o identificador cuando aparecen en el contexto de
un comando \draw y puedes usarlos con figuras, lneas o arcos. Hay que mencionar tambin que
el redondeo de esquinas puede aplicarse nicamente a un segmento de la trayectoria pintada,
si se coloca antes de las coordenadas a partir de la cual debe aparecer. Veamos un pequeo
ejemplo:
En la tabla 6.26, <dim> se refiere siempre a una cantidad de medida, como mm, cm, in, pt,
em, ex, mientras que <num> es un nmero que puede o no ser un entero, y en algunos casos
puede ser negativo. Estos modificadores pueden aparecer en el ambiente o en el comando.
212
LATEX
Descripcin
Por omisin
color=<color>
Especifica el color en que se va a pintar la lnea. Puede aparecer directamente el color nada ms.
color: black
dim: 1cm
dim: 1pt
pattern= patrn
estilo: solid
pattern color=<color>
black
sharp corners
no
solid
x=<dim>
y=<dim>
z=<dim>
line width=<dim>
very thick
thick
very thin
thin
rounded corners
rounded corners= dim
sharp corners
fill
fill = < color >
dashed
loosely dashed
densely dashed
dotted
loosely dotted
densely dotted
solid
213
very thin
loosely dotted
dotted
densely dotted
thin
loosely dotted
dotted
densely dotted
normal
loosely dotted
dotted
densely dotted
thick
loosely dotted
dotted
densely dotted
very thick
loosely dotted
dotted
densely dotted
very thin
loosely dashed
dashed
densely dashed
thin
loosely dashed
dashed
densely dashed
normal
loosely dashed
dashed
densely dashed
thick
loosely dashed
dashed
densely dashed
very thick
loosely dashed
dashed
densely dashed
Pasemos ya a ver las distintas figuras que puedes dibujar con el comando \draw. Las mostramos en la tabla 6.28.
214
LATEX
Figura
Realmente el nmero de variaciones sobre estos cuatro simples comandos es muy grande,
as que te recomendamos consultar el manual de TikZ para poder usar todas ellas.
215
En el caso de las lneas y los polgonos, puedes tener el ltimo segmento tome o no la forma
de flecha. Los tipos de flechas que tenemos disponibles se encuentran en las tablas 6.30 y se
consiguen poniendo como modificador de la lnea el tipo de flecha que deseas. Vienen en el
paquete de biblioteca de flechas de TikZ que se invoca con la siguiente lnea en el prembulo
del documento.
\ u s e t i k z l i b r a r y { arrows }
Algunas puntas de flechas vienen por omisin en TikZ. Los estilos del cuerpo de la flecha
pueden ser cualesquiera de los listados anteriormente, por lo que los ejemplos los daremos con
lnea slida para ejemplificar nada ms las puntas. Los distintos tipos de puntas de flechas se
encuentran en la tabla 6.30.
Tabla 6.30 Tipos de puntas de flechas en TikZ
\draw [arrows=>] (0,0) (50,0);
\draw [arrows=>>] (0,0) (50,0);
\draw [arrows=|>] (0,0) (50,0);
\draw [arrows=|diamond] (0,0) (50,0);
\draw [arrows=latex] (0,0) (50,0);
\draw [arrows=angle 45] (0,0) (50,0);
\draw [arrows=angle 60] (0,0) (50,0);
\draw [arrows=angle 90] (0,0) (50,0);
Como puedes observar hay bastante juego con el tipo de flecha y el origen del segmento.
Para ms informacin, consulta el manual de TikZ.
Otro aspecto bonito de TikZ es que puedes dar distintos patrones para el relleno de figuras.
Esto se logra cargando el paquete de biblioteca patterns en el prembulo del documento.
\ u s e t i k z l i b r a r y { patterns }
En el manual de TikZ viene una lista de patrones interesantes que puedes desear usar.
En las tablas 6.31 y 6.32 daremos ejemplos de distintos objetos geomtricos que puedes
pintar con TikZ. Es importante que recuerdes que las coordenadas que se dan suponen que
el comando inicia en (0,0), y a partir de ah se calcula la posicin del dibujo. Sin embargo,
el acomodo de las figuras se hizo con mecanismos que se darn a continuacin. Asimismo
se hicieron algunos trucos para que la altura del rengln fuera la adecuada para cada figura.
Debers tomar en cuenta la seccin que sigue donde ensearemos a acomodar de mejor manera
las figuras.
216
LATEX
217
Contina de la pgina anterior
Otro aspecto que es frecuente que quieras tener en un documento es la graficacin de funciones. TikZ proporciona algunas funciones tpicas que puedes querer graficar, como lo son la
parbola, el crculo, seno y coseno. Para otras funciones se tendrn que preparar las tablas en
218
LATEX
un archivo aparte, pero se pueden graficar. Veamos primero estas cuatro en la tabla 6.32.
Puedes obtener pedazos de parbola si das como segunda coordenada algo que no sea
la imagen del punto de origen, o bien con modificadores:
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 p t ]
\ useasboundingbox ( 0 , 0 )
rectangle (140 ,60);
\ draw ( 0 , 0 ) p a r a b o l a ( 3 0 , 4 5 ) ;
\ draw ( 5 0 , 0 )
p a r a b o l a [ bend a t end ]
(80 ,45);
\ draw ( 1 0 0 , 0 )
p a r a b o l a bend
(122.5 ,52.25) (130 ,45);
\ end { t i k z p i c t u r e }
Contina en la siguiente pgina
219
Tanto el seno como el coseno nicamente estn definidos para el intervalo (0, 2 ), por lo que es necesario combinar ambas funciones para pintar la
trayectoria completa
Otro mecanismo tambin muy importante para graficar funciones es el de poder darle una
lista de puntos y que vaya marcndolos con algn smbolo. Para marcar los puntos con smbolos
requieres de la biblioteca plotmarks mediante el comando
\ u s e t i k z l i b r a r y { plotmarks }
Una vez cargada la biblioteca de marcas, puedes elegir entre las que se encuentran en la
tabla 6.33.
Tabla 6.33 Smbolos para marcar curvas que se grafican
Marca
Identificacin
Descripcin
mark=
guiones
mark=|
barras verticales
mark=o
crculos huecos
mark=asterisk
asteriscos
mark=star
estrellas
Contina en la pgina siguiente
220
LATEX
Identificacin
Descripcin
mark=oplus
mark=oplus
mark=otimes
mark=otimes
mark=square
cuadrado
mark=square
cuadrado slido
mark=triangle
tringulo
mark=triangle
tringulo slido
mark=diamond
diamante
mark=diamond
diamante slido
mark=pentagon
pentgono
mark=pentagon
pentgono slido
Para graficar funciones usamos tambin el comando \draw con modificadores y parmetros.
221
Marcas un punto inicial y a continuacin dices que quieres graficar una funcin ( plot ). A
esta ltima opcin le aplicas modificadores, como el smbolo para las marcas, posiblemente si
quieres o no la curva suave (smooth) y el color de las marcas, que puede no ser el mismo que
el de la curva.
Sin embargo, las grficas que pintamos en la figura 6.6 son realmente muy pobres. Quisiramos poder dibujar los ejes cartesianos y colocar indicaciones respecto a los valores en estos
ejes. Tenemos dos formas de hacerlo.
Usando el comando \draw con el argumento grid , cuya sintaxis es:
\draw <esq. inf. izquierda> grid [ <modificadores> ] <esq. sup. derecha>;
La parte del [ < intervalo > ] corresponde a que tan cerrada quieres la rejilla para las
coordenadas. Sin embargo, con esta opcin no tenemos todava los ejes o las anotaciones
en los mismos. Veamos cmo queda en la figura 6.7.
Sin embargo, con esta opcin debemos poner los ejes y las marcas a pie. Los ejes no es
ningn problema pues lo hacemos simplemente utilizando \draw, como se muestra en la
figura 6.8.
La otra forma de pintar la retcula es a pie . Afortunadamente, como el pintar las lneas
se trata de una tarea repetitiva, puedes usar la construccin \foreach que proporciona TikZ.
Esta es una construccin muy poderosa que funciona como sustitucin de macros, por lo
que se puede introducir en casi cualquier enunciado. Daremos el ejemplo en la figura 6.9
y despus analizaremos su formato.
222
LATEX
223
Las variables del foreach que van separadas entre s por una diagonal y que consisten
de diagonal inversa y un identificador. Se recomienda que los identificadores consistan
nicamente de letras, porque a veces, dependiendo del contexto, al sustituirse pueden dar
problemas inesperados. En los dos ejemplos anteriores, la lista de variables consiste de
una variable a las que llamamos \x y y en el primero y segundo for , respectivamente.
Una lista de valores que deben tomar las variables. Cada elemento de la lista consiste de
un valor por cada variable enunciada, separados los elementos entre s por comas y los
valores de un mismo elemento por diagonales. Esta lista va entre llaves.
Por ltimo tenemos una lista de enunciados donde pueden o no aparecer las variables del
for .
Ambos ejemplos tienen una sola variable y las lneas que se pintan estn a intervalos constantes. En general, cuando se dan estas dos condiciones puedes reemplazar a parte o toda la lista
por una lista donde se infieren los puntos que faltan y que tiene la siguiente forma:
hprimer valori
224
LATEX
Los dos \foreach que tenemos los podramos haber escrito de las formas que se muestran en el
listado 6.1.
Cdigo 6.1
Aunque aparentemente el colocar los nmeros sobre los ejes parece sencillo, no sabemos
cmo colocar objetos cuando trabajamos con TikZ, y no se logra simplemente con un \draw
cuyo objetivo es pintar lneas. En la siguiente seccin resolveremos este problema. Antes de
abandonar esta seccin quisiramos hacerte notar que hay otra forma de alimentarle coordenadas a \draw y que es mediante un archivo con las mismas, que pudo ser generado por una utilera
de linux. Para el lector interesado le recomendamos que vea el manual de TikZ. Terminamos
esta seccin con un divertimento en la figura 6.10 que usa nicamente los conceptos que hemos
dado hasta ahora.
Figura 6.10 Divertimento con slo trazo de lneas
225
Los comandos de TikZ que logran el dibujo anterior se encuentran en el listado 6.2.
Cdigo 6.2
Dibujos arbitrarios
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 p t ]
\ useasboundingbox ( 3 0 , 3 0 ) r e c t a n g l e ( 3 5 0 , 1 8 0 ) ;
% ojos
\ foreach \ x / \ y i n { %
50/160 ,100/160 , 1 4 0 / 9 0 , 1 9 0 / 9 0 , 3 1 0 / 1 0 0 , 2 8 0 / 1 5 0 } { %
\ draw ( \ x , \ y ) c i r c l e (12 p t ) ;
\ draw [ f i l l ] ( \ x , \ y ) c i r c l e ( 3 p t ) ;
}
% cejas
\ f o r e a c h \ x / \ y / \ xx / \ yy / \ a / \ b / \ aa / \ bb i n { %
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} {
\ draw ( \ x , \ y ) . . c o n t r o l s + ( \ a : 2 0 p t ) and + ( \ b : 2 0 p t ) . .
( \ xx , \ yy ) ;
\ draw ( \ x , \ y ) . . c o n t r o l s + ( \ aa : 3 0 p t ) and + ( \ bb : 3 0 p t ) . .
( \ xx , \ yy ) ;
}
% nariz
\ foreach \ x / \ y i n {0/75 ,90/0} { %
\ p g f p u t a t { \ p g f x y ( \ x , \ y )}{ %
\ draw [ rounded c o r n e r s ] ( 7 5 , 8 0 ) ( 7 0 , 6 5 ) ( 6 5 , 6 0 )
( 7 0 , 5 5 ) ( 8 0 , 5 5 ) ;
\ f o r e a c h \ xx i n { 7 0 , 7 4 } { %
\ draw [ f i l l ] ( \ xx , 6 0 ) c i r c l e ( 1 p t ) ;
}
% boca
\ draw ( 4 0 , 4 5 ) . . c o n t r o l s +(320:20 p t ) and +(220:20 p t ) . .
(110 ,45);
\ draw ( 4 0 , 4 5 ) . . c o n t r o l s +(320:30 p t ) and +(220:30 p t ) . .
(110 ,45);
} %\p g f p u t a t
} %f o r e a c h
(1/2)
226
Cdigo 6.2
LATEX
Dibujos arbitrarios
(2/2)
% Tercera cara
\ p g f p u t a t { \ p g f x y ( 40 ,50)}{ %
\ draw [ rounded c o r n e r s ] ( 3 3 0 , 7 0 ) ( 3 1 0 , 6 5 )
( 3 0 5 , 6 0 ) ( 3 1 0 , 5 0 ) ;
\ foreach \ x / \ y i n {310/58 ,312/52}
\ draw [ f i l l ] ( \ x , \ y ) c i r c l e ( 1 p t ) ;
% boca
\ draw ( 2 7 0 , 7 0 ) . . c o n t r o l s + ( 0 : 3 0 p t ) and +(80:30 p t ) . .
(310 ,0);
\ draw ( 2 7 0 , 7 0 ) . . c o n t r o l s +(340:10 p t ) and +(70:10 p t ) . .
(309 ,0);
} %p g f p u t a t
\ end { t i k z p i c t u r e }
El nico comando nuevo en el listado anterior es el de pgfputat que lo que hace es tomar las
coordenadas dentro de su alcance (entre las llaves) relativas al primer parmetro ( \pgfxy(x,y) ).
Actividad 6.51 Escribe los comandos necesarios en TikZ para dibujar lo siguiente:
6.10.6.
Acomodando objetos
El poder pintar una retcula de la superficie que usamos para dibujar suele ser til no nada
ms para graficar funciones, sino tambin para dibujar y colocar objetos. En general, asociamos
objetos que pueden ser letreros, dibujos, puntos, etc. a nodos. Un nodo tiene las siguientes
caractersticas:
Ocupa una cierta posicin, dada por una pareja (x,y) .
Tiene alguna forma que puede ser circle , rectangle, diamond, ellipse .
Puede tener un identificador asociado.
Puede dibujarse o no su contorno con cualquier tipo de lnea.
Puede rellenarse o no con distintos patrones y en colores diversos.
El formato general para colocar un nodo es el siguiente:
\ node ( hetiquetai ) [ hmodif icadoresi ]
a t ( hposici
oni ) { hcontenidoi } ;
227
Por ejemplo, puedes marcar algunas posiciones en el espacio en el que graficas 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 \foreach. Aunque en este caso slo son en
realidad dos objetos (tres lneas que se repiten casi dos veces), puedes parametrizar de la
siguiente manera:
......
e \ f o r e a c h \ e t i q/ %
\ xe / \ ye / \ l e t r / \ x l / \ y l / \ c o n t / \ c l o r
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 ) { } ;
\ node ( \ l e t r ) %
[ \ c l o r , diamond , draw , f i l l = w h i t e ]
at ( \ xl , \ y l )
{ \ cont } ;
\ draw[ l a t e x , \ c l o r ]
( \ l e t r ) ( \ e t i q ) ;
}
......
f (x) = x3
f (x) = x2
228
LATEX
Explicamos ahora algunos de los modificadores.
La forma (shape) puede ser cualquiera de las que se encuentran 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 }
200
f (x) = x2
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 modificador en el nodo nota
que no utilizamos nombre para el nodo pues no es necesario que acomoda 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 izquierda (left). Tenemos
las siguientes posibilidades para este modificador:
above
anchor=north
above left
anchor=north west
above right
anchor=north east
left
anchor=west
right
anchor=east
below
anchor=south
below left
anchor=south west
below right
anchor=south east
1
a
0
1
230
Cdigo 6.3
LATEX
Dibujo de una grfica
\ begin { t i k z p i c t u r e } [ x=1 pt , y=1 p t ]
% C o l o c a c i n de l o s nodos
\ f o r e a c h \ name / \ e t i q / \ x / \ y i n {
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 ) a t ( \ x , \ y ) { \ e t i q } ;
}
% d i b u j o de l o s arcos r e c t o s
\ f o r e a c h \ f f r / \ t t o / \ e t i q / \ pos i n {
a / b / 0 / above , b / d / 1 / r i g h t ,
d / 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 [ \ pos ] { \ e t i q } ( \ t t o ) ;
}
\ end { t i k z p i c t u r e }
231
Figura 6.12
Actividad 6.52
Yo
Ellos
6.11.1.
Referencias bibliogrficas
Como ya discutimos, la presencia de referencias bibliogrficas en tus trabajos te permite
incursionar en ms temas que consideres interesantes. Esto significa que las referencias deben
232
LATEX
ser precisas y dirigir al lector de tu obra con el menor esfuerzo posible.
Hay varias formas de darle formato a las bibliografas; de hecho, en la mayora de los casos
te encontrars siguiendo las reglas que para tal efecto dicte la editorial. Por tanto, una de las
tareas ms importantes cuando envas un libro, artculo o cualquier otro trabajo escrito para su
publicacin, es generar la lista de referencias bibliogrficas siguiendo dichas reglas.
En la prehistoria de la computadora
En la pre-historia de las computadoras, es decir hace una veintena de aos, tenamos que
componer a mano la lista de bibliografas. Por ejemplo, tenamos que teclear esto:
\ begin { t h e b i b l i o g r a p h y } { algunae n t r a d a }
\ b i b i t e m [ e t i q u e t a 1 ] { l l a v e 1 } I n f o r m a c i n sobre l a e n t r a d a b i b l i o g r f i c a
\ b i b i t e m [ e t i q u e t a 2 ] { l l a v e 2 } I n f o r m a c i n sobre l a e n t r a d a b i b l i o g r f i c a
. . .
\ end { t h e b i b l i o g r a p h y }
Para citar esas referencias usamos el comando \ cite y usamos la llave apropiada, por ejemplo, \ cite { llave1 } .
Algunos de los problemas con esta forma tradicional de ingresar bibliografa en nuestros
trabajos son:
1. Es muy difcil mantener la consistencia en las citas, particularmente en un documento
con contribuciones de varios autores. Entre las dificultades ms comunes, encontramos,
ewntre otros, variaciones en el uso de abreviaturas o nombres completos, el uso de itlicas
o comillas para los ttulos.
2. Si ya tienes una lista bibliogrfica ordenada de acuerdo a cierto estilo, por ejemplo alfabtico por autor y ao, es extremadamente difcil de convertir a otro estilo, por ejemplo
usando nmeros de acuerdo al orden de cita.
3. Es virtualmente imposible mantener una gran base de referencias bibliogrficas que pueda
ser reutilizada en distintos documentos.
BIBTEX
A continuacin describiremos una posible forma de resolver el problema de las listas de
bibliografas. Est basado en LATEX y su programa hermano BIBTEX. Es importante hacer notar
que BIBTEX ha estado en circulacin por muchos aos y, por lo tanto, existen muchos estilos
que hoy podramos llamar estndar y que estn a nuestra disposicin, por lo que es muy fcil
encontrar el estilo adecuado para tu trabajo.
La estructura bsica de una entrada BIBTEX tienes tres partes bsicas:
(a) El tipo de la entrada (book, article, inproceedings y otros). Ntese que el tipo siempre va
en ingls.
(b) Una llave elegida por el usuario que identifica la publicacin. Esta llave es la que debe
usarse como parmetro para el comando \ cite .
233
(c) Una serie de campos separados entre s por comas, donde cada campo consiste de un
identificador de campo y sus datos entre comillas o llaves, por ejemplo:
a u t h o r =" F u l a n i t o Labrador " ,
j o u r n a l = " Las b i c i c l e t a s " ,
t i t l e = { Los paseos por l a ciudad } ,
Existen varios esquemas para asociar convenientemente las llaves con sus respectivas entradas en la base. Un esquema popular es el conocido como Harvard, donde tomamos el apellido
del autor (en minsculas) y el ao de la publicacin y los combinamos para crear la llave usando
dos puntos. Por ejemplo, smith:1987. BIBTEX lee las entradas del archivo de bibliografas, con
extensin .bib, y al formato que se le dar a las entradas lo controla un archivo de estilo, con
extensin .bst. Por razones de espacio, no discutiremos en este trabajo los comandos que pueden usarse en los archivos de estilo, adems de que, como ya hemos mencionado, hay muchos
estilos ya definidos por personas o por organizaciones, por ejemplo por la Sociedad Matemtica Americana (AMS, por sus siglas en ingls), por la Association for Computing Machinery
(ACM), revistas de prestigio, casas editoriales. A continuacin describimos algunos estilos muy
usados y que no estn asociados a ninguna asociacin o casa editorial. Es importante notar que
no necesitas obtener una copia de los archivos de estilo (.bst) de los que usamos aqu como
ejemplos, ya que se incluyen con todas las distribuciones de LATEX.
plain El estilo estndar de BIBTEX. Las entradas son ordenadas alfabticamente con etiquetas
numricas.
unsrt Similar al anterior, pero las entradas son impresas en el orden en que fueron citadas en
el documento. Utiliza etiquetas numricas.
alpha Similar a plain, pero las etiquetas de las entradas son formadas a partir del nombre del
autor y del ao de publicacin.
abbrv Similar a plain, pero las entradas son ms compactas, dado que los nombres de pila, los
meses y los nombres de las revistas son abreviados.
acm Usado para las publicaciones de la Association for Computing Machinery. Tiene el nombre del autor (apellido y luego nombre) en maysculas pequeas y usa nmeros como
etiquetas.
Ahora te vamos a mostrar el efecto de usar BIBTEX en un documento y luego te mostraremos
qu fcil es cambiar el estilo y los dramticos cambios que generan estos cambios en la salida.
Nuestros archivos fuente sern: ejemplo.tex, nuestro documento LATEX y bejemplo.bib,
nuestra base de datos de bibliografas. En las figuras 6.13 y 6.15 puedes ver estos documentos.
Figura 6.13
(1/2)
234
LATEX
(2/2)
Lo primero que debes entender es cmo funcionan LATEX y BIBTEX juntos: primero corres
el comando latex con el archivo fuente como argumento (figura 6.14); despus corres el
comando bibtex con el mismo argumento y luego debers ejecutar latex dos veces para
que LATEX pueda resolver todas las referencias. El resultado, puedes apreciarlo en la figura 6.16,
donde lo hemos puesto usando tanto el estilo plain como el estilo acm.
Figura 6.14 Salida de LATEX al ejecutarlo por primera vez sobre el archivo usando BIBTEX
% l a t e x ejemplo
T h i s i s TeX , V e r s i o n 3.14159 (Web2C 7 . 4 . 5 )
LaTeX Warning : C i t a t i o n nonaka95 : _knowl_creat_compan on page 1
u n de f i n ed on i n p u t l i n e 6 .
LaTeX Warning : C i t a t i o n van96 : _impac_kbs on page 1 u n d e f i n ed
on i n p u t l i n e 7 .
LaTeX Warning : C i t a t i o n boehm88 on page 1 u n d e f i n e d on i n p u t
l i n e 10.
LaTeX Warning : C i t a t i o n boehm89 : _theor_w on page 1 u n d e f i n ed
on i n p u t l i n e 1 1 .
LaTeX Warning : C i t a t i o n 0 1 : _progr_web_high_level_languag on
page 1 u n d e fi n e d on i n p u t l i n e 1 3 .
LaTeX Warning : C i t a t i o n wadlerhow on page 1 u n d e f i n e d on
i n p u t l i n e 15.
LaTeX Warning : C i t a t i o n boehm89 : _theor_w on page 1 u n d e f i n ed
on i n p u t l i n e 1 5 .
No f i l e ejemplo . b b l .
Figura 6.15
235
236
LATEX
Figura 6.16 Ejemplo usando los estilos BIBTEX: acm (arriba) y plain (abajo)
Ejemplo de citas
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 enhancement. IEEE
Computers, pages 6162, 1988.
[3] B. Boehm and R. Ross. Theory-w software project management: principles
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 prouduction processes. PhD thesis, Universeit van Amsterdan, 1996.
[6] Philip Wadler. How to add laziness to a strict language without even being
odd.
Ejemplo de citas
References
[1] 10th European Symposium on Programming, ESOP 2001. Programming 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 enhancement. IEEE
Computers (1988), 6162.
[3] Boehm, B., and Ross, R. Theory-w software project management: principles and examples. IEEE Trans. Softw. Eng. 15, 7 (1989), 902916.
[4] Nonaka, I., and Takeuchi, H. The Knowledge-Creating Company. Oxford Univ Press, New York, 1995.
[5] Van Wegen, B. Impacts of KBS on cost and structure of prouduction
processes. PhD thesis, Universeit van Amsterdan, 1996.
[6] Wadler, P. How to add laziness to a strict language without even being
odd.
237
6.12 Emacs
6.11.2.
ndices
Para encontrar un tema de inters en un documento grande, el lector tiene dos alternativas,
usar la tabla de contenidos o el ndice. En general, el ndice es la forma de acceso ms comn a
un documento tcnico y, por tanto, una parte esencial del documento.
Al igual que las referencias bibliogrficas, para generar un ndice requerimos de la combinacin de LATEX y otro programa externo llamado MakeIndex. En tu documento LATEX debes
usar el comando \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 aparecen las
entradas seleccionadas por \index y las pginas en que stas aparecen. Despus de esto, cuando
ejecutes el comando makeindex, al igual que como suceda con bibtex, leer un archivo de estilo (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 conforme avances en el
desarrollo de tu documento. Debes tomar en cuenta a quin va dirigido el documento, qu es
importante y organizar el ndice de manera tal que el lector pueda encontrar fcilmente lo que
busca.
El comando \index soporta hasta tres niveles de entradas en el ndice. Para acceder a los sub
y subsub niveles, el argumento de \index debe contener la entrada principal y las sub-entradas
separadas por el carcter !. Por ejemplo:
6.12. Emacs
Como ya sabes, editar un archivo LATEX es simplemente editar un archivo de texto con
comandos especiales que interpreta el comando latex o pdflatex . En este sentido, 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
6.12.1.
LATEX
AUCTEX
AUCTEX es un ambiente integrado para editar archivos LATEX y TEX 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 no podamos hacer
slo con la ayuda de Emacs? Varias cosas: te permite ejecutar TEX/LATEX y dems comandos
y herramientas relacionados con el proceso de documentos, como visores de DVI, Postscript
o PDF. En particular, la habilidad de ejecutar LATEX desde AUCTEX es interesante 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 para 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 auxiliares
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 de varias distribuciones
mayores de Emacs, incluyendo XEmacs. Desgraciadamente AUCTEX no viene con Emacs por
install
emacs-auctex omisin; sin embargo existen paquetes pre-compilados para la mayora de las distribuciones de
Linux.
En caso de que no encuentres paquetes para tu distribucin de Linux, no hay nada de qu
preocuparse, pues ya sabes lo fcil que es instalar paquetes en Emacs (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 siguiente 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 escribes. 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-paragraph de Emacs, Mq , es
re-implementado por AUCTEX para que haga lo correcto con tu documento LATEX. Finalmente,
la funcin LaTeX-fill-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; por 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 manejo, para lo
cual debes poner en tu /.emacs lo siguiente:
239
6.12 Emacs
( s e t q TeXautosave t )
( 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 funcin de eso te ayuda
a completar comandos de LATEX, lo cual tiene dos aplicaciones importantes y que a la postre
agradecers infinitamente.
1. Te permite completar comandos parcialmente escritos. Por ejemplo, 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 prefijo, 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 \begin \end.
Un nmero importante de macros acompaan a AUCTEX y estn aqu para ayudarte a editar
rpidamente. Las ms importantes son las siguientes:
Tabla 6.34 Emacs: comandos de AUCTEX
Comando
LaTeX-environment
Descripcin
Inserta un par de la forma \begin \end.
C-c C-e
LaTeX-section
C-c C-s
TeX-font
C-c C-f seguido de
AUCTEX provee varios comandos ms, pero en la mayora de los documentos 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 AUCTEX provee
para tal efecto.
Para lograr que AUCTEX te pregunte por los ttulos de las secciones, captulos y otras subpartes del documento que insertas y te proponga nombres inteligentes para etiquetas, es conve-
240
LATEX
niente 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 )
)
241
6.12 Emacs
Por lo tanto tienes dos opciones, presionar dos veces y luego la letra deseada o bien cambiar
el prefijo utilizado por AUCTEX.
6.12.2.
RefTEX
RefTEX es un paquete para manejar etiquetas, referencias, citas e ndices desde Emacs en
documentos TEX o LATEX. No es necesario usar AUCTEX y RefTEX juntos, pero hay pocas cosas
que combinan mejor, con la notable excepcin de tacos y cerveza.
RefTEX es otro programa escrito, al igual que AUCTEX, en Emacs-Lisp y es un producto
de software complejo y grande, pero te daremos una breve introduccin a su uso y te podemos
garantizar que una vez que te acostumbres a RefTEX te preguntars cmo pudiste vivir sin l
(nosotros nos preguntamos eso con casi todos los productos de software, aplicaciones y paquetes
que incluimos en este libro, por ello es que ahora las promovemos incansablemente.)
Para cargar RefTEX en Emacs, agrega lo siguiente a tu /.emacs:
( require reftex )
Tabla de contenidos
La tabla de contenidos de un documento LATEX es algo muy importante y te puede dar una
visin global de la estructura de tu trabajo. Sin embargo, la tabla de contenidos existe hasta que
compilas tu documento fuente y exclusivamente en el documento generado como salida (DVI,
PostScript, PDF, etc.). Qu haras y cmo aprovecharas el poder tener una tabla de contenidos
generada dentro de tu editor? Qu haras con ella si adems esta tabla fuera navegable?
El comando reftex-toc ( C-c =) hace justo eso, te muestra secciones, etiquetas y entradas
de ndice definidos en tu documento y ms an, te permite saltar a cualquiera de estos puntos
rpidamente.
Etiquetas y referencias
Crear etiquetas para los distintos elementos de tus documentos como figuras, tablas y frmulas es usualmente una tarea tediosa y poco gratificante. La gente se ha inventado frmulas
y tcnicas para asignar etiquetas ordenadamente para despus recordarlas fcilmente y hacer
referencia a stas sin tener que buscar en todo el documento. Los resultados varan mucho, pero
en general puedes asegurar que es una mala idea y no funciona bien.
RefTEX te ayuda a crear etiquetas nicas y a encontrar la etiqueta adecuada cuando quieres
hacer una referencia rpidamente. RefTEX distingue entre etiquetas para distintos ambientes,
conoce todos los ambientes estndar (figure, equation, table) y puedes configurarlo para que
entienda an ms tipos de etiquetas cambiando el valor de la variable reftex-label-alist.
Crear etiquetas: El comando reftex-label ( C-c ( ) inserta una etiqueta en el punto. Cuando usas este comando RefTEX realizar una de las siguientes acciones:
242
LATEX
Derivar una etiqueta del contexto (por omisin usa una para seccin).
Pedir que le des una cadena descriptiva para la etiqueta (esto lo hace para figuras y
tablas).
Insertar una etiqueta simple hecha con un prefijo y un nmero (para todos los dems
ambientes).
La variable reftex-insert-label-flags controla qu etiquetas son creadas y cmo.
Referir etiquetas: Para hacer una referencia usa el comando reftex-reference ( C-c ) ). Esto
te muestra una vista (outline) de tu documento con todas las etiquetas de un cierto tipo
(figure, equation, etc.) y algo de contexto para cada etiqueta para que puedas reconocerlas
fcilmente. Al seleccionar una etiqueta de esta vista, RefTEX inserta \ ref {LABEL} en el
buffer original.
Citas
El comando reftex-citation ( C-c [ ) te permite especificar una expresin regular o patrn
para buscar en el archivo de base de datos de BIBTEX para el documento (tal y como se especifica
en el comando \ bibliography ). Todas las entradas que concuerden con el patrn de bsqueda te
sern mostradas para que elijas la apropiada. La lista aparece con formato y ordenada.
Una vez que seleccionas una entrada, aparecer en tu documento fuente una referencia de
la forma \ cite {KEY}.
6.12.3.
Preview
El paquete preview-LATEX se distribuye como parte estndar de AUCTEX y extiende tanto a
Emacs como a LATEX. Esto es porque incluye un estilo para LATEX y cdigo en Emacs-Lisp para
aprovechar este estilo y ayudarte en la edicin de documentos.
Para los usuarios de TEX/LATEX siempre ha sido un problema serio la discusin sobre tener
editores que te muestren lo que ests escribiendo (por sus siglas en ingls, WYSIWYG), que
como ya sabes es algo que no sucede con LATEX. Sin embargo, la intencin del paquete preview
para Emacs no es exactamente sta.
243
6.12 Emacs
Con preview se busca un balance entre elementos grficos y texto. Utiliza la salida grfica
para ciertas construcciones (configurable); hace esto cuando se le solicita y lo hace ah mismo,
dentro del cdigo fuente. Cambiar entre la versin grfica y el cdigo fuente es fcil y natural y
puede hacerse para cada imagen de manera independiente.
Para activar preview debes poner lo siguiente en tu /.emacs:
( l o a d " previewl a t e x . e l " n i l t t )
Para ver/editar el cdigo LATEX para un objeto especfico, que es probablemente ms til,
puedes ejecutar el comando preview-at-point ( C-c C-p C-p ) o bien presionar el botn del
medio del ratn sobre la vista previa. Ahora puedes editar el cdigo y generar una nueva vista
preliminar con C-c C-p C-p nuevamente.
Lenguajes de
marcado
Los lenguajes de marcado (markup languages) utilizan texto comn y corriente combinado
con informacin adicional que sirve para definir su semntica o su presentacin (a veces ambas).
En palabras sencillas: esta informacin adicional nos dice qu significa el texto o cmo se presenta al usuario. La informacin adicional suele estar intercalada en el mismo texto utilizando
marcas especiales; de ah el nombre de lenguajes de marcado.
Los lenguajes de marcado tienen sus orgenes en la industria editorial, mucho antes de la
creacin de computadoras digitales: cuando un manuscrito se preparaba para impresin, un especialista (coloquialmente conocido como marcador) escriba en los mrgenes anotaciones
especiales (marcas) que servan de gua a los que transcriban el texto en su forma final ya
lista para imprimirse. Estas marcas eran un lenguaje de marcado primitivo (no haba necesariamente un estndar, ni tenan una sintaxis formalmente definida), que serva para explicar la
presentacin del texto: el tamao de la fuente, el tipo, el estilo, etc.
Con la llegada de las computadoras, los lenguajes de marcado ganaron adems la capacidad de obtener automticamente informacin semntica: por ejemplo, si en nuestro lenguaje de
marcado definimos la marca AUTOR: para que con ella identifiquemos al autor del documento, es trivial hacer un programa que automticamente obtenga el autor o autores de todos los
documentos disponibles y haga una relacin entre ellos.
Aunque hay muchsimos lenguajes de marcado actualmente (TEX y PostScript son lenguajes
de marcado procedurales), de especial importancia es SGML, el Lenguaje de Marcado Estndar
Generalizado (Standard Generalized Markup Language). SGML es un meta lenguaje para definir lenguajes de marcado, y de ah se derivan los dos lenguajes de marcado probablemente ms
famosos y usados en la actualidad: XML y HTML. Nos centraremos en estos ltimos durante
el resto del captulo.
246
Lenguajes de marcado
7.1. XML
SGML es un metalenguaje grande y complejo. Implementar un programa (o sistema de programas) que pueda lidiar con cualquier lenguaje definido con SGML tendr que ser igualmente
grande y complejo. La mayor parte de los programas que se utilizan para manejar lenguajes
definidos con SGML, en la prctica slo soportan un subconjunto de todas las opciones que
ofrece.
En gran medida por este motivo, y las necesidades especiales que presentan las aplicaciones
que necesitan comunicarse por Internet (SGML precede por varios aos a Internet), fue que se
cre XML, el Lenguaje de Marcado Expandible (Expansible Markup Language). XML es un
subconjunto simplificado de SGML, lo que hace el escribir programas que lo manejen mucho
ms fcil, y adems est pensado para compartir informacin, especialmente a travs de la red.
XML es inmensamente popular y existen muchsimos lenguajes definidos con XML que
se usan hoy en da; por nombrar slo algunos: RSS (para noticias), MathML (para representar
frmulas matemticas complejas), XHTML (el sucesor de facto de HTML), Scalable Vector
Graphics (para grficos escalares), MusicXML (para notacin musical) y miles ms. XML tambin es utilizado por muchos programas para guardar sus archivos, especialmente en el mundo
del software libre: OpenOffice, AbiWord, Gnumeric y KOfficen usan XML para guardar sus
documentos, por nombrar unos cuantos.
Un documento XML presenta su informacin en una estructura jerrquica, que podemos
ver como un rbol. Todo documento XML tiene un elemento raz, que a su vez puede tener ms
elementos y/o texto comn y corriente. Cada elemento a su vez puede tener ms elementos y/o
texto y as sucesivamente. Adems, cada elemento puede tener atributos. Veamos un ejemplo
en el listado 7.1
Cdigo 7.1
Documento en XML
<? xml v e r s i o n = " 1 . 0 " e n c o d i n g ="UTF8"?>
<libro >
<titulo >
E l i n g e n i o s o h i d a l g o don
Q u i j o t e de l a Mancha
</ t i t u l o >
< a u t o r > M i g u e l de C e r v a n t e s S a a v e d r a < / a u t o r >
< p a r t e numero ="1" >
< c a p i t u l o numero ="1" >
< resumen >
Que t r a t a de l a c o n d i c i&o a c u t e ; n y e j e r c i c i o
d e l famoso h i d a l g o don Q u i j o t e de l a Mancha
</ resumen >
(1/2)
247
7.1 XML
Cdigo 7.1
Documento en XML
(2/2)
<parrafo >
En un l u g a r de l a Mancha , de cuyo nombre no
q u i e r o a c o r d a r m e , no ha mucho t i e m p o que
v i v&i a c u t e ; a un h i d a l g o de l o s de l a n z a en
a s t i l l e r o , a d a r g a a n t i g u a , r o c&i a c u t e ; n f l a c o
y galgo corredor .
<parrafo >
...
</ c a p i t u l o >
...
</ p a r t e >
...
</ l i b r o >
La primera lnea es la declaracin XML, que sirver para definir qu versin del estndar
estamos usando (generalmente la 1.0) y el conjunto de carcteres en que est el documento
(generalmente UTF-8).
El ejemplo obviamente es de un libro: libro es el elemento raz, titulo, autor, parte, capitulo, extracto y parrafo son elementos, mientras que numero es un atributo que poseen parte
y capitulo. Como estamos definiendo un documento XML que utiliza el conjunto de carcteres
UTF-8, sera perfectamente legal definir a los elementos como ttulo, captuo, prrafo, pero no
es lo que suele acostumbrarse. De igual forma, podran utilizarse acentos (o ees o diresis),
pero utilizamos ó en lugar de para explicar lo que son las entidades.
Las entidades son usadas para poder escribir carcteres en XML que de otra forma sera
complicado hacerlo. Por ejemplo, el smbolo de menor que (<) no es vlido dentro de un
documento XML porque es el utilizado para definir cundo empieza una etiqueta de inicio
o final: entonces se utiliza la entidad < (por less than, en ingls). De igual forma, para
usar el smbolo de ampersand (&) se utiliza la entidad &. En todo documento XML estn
definidas las siguientes cinco entidades:
Entidad
Smbolo
&
>
<
'
"
&
>
<
"
pero se pueden definir ms entidades y veremos cmo ms adelante. Adems, todo smbolo en
UTF-8 puede utilizarse usando su nmero identificador; por ejemplo, en lugar de ó para
la , podramos usar Č, porque 268 es el nmero que le corresponde a en UTF-8.
El documento de este ejemplo est bien formado; esto quiere decir que todos sus elementos
tienen etiquetas de inicio y finales (por ejemplo <parte> y < /parte>) estn bien anidados
248
Lenguajes de marcado
(todo elemento, excepto el raz, est completamente contenido dentro de otro) y los valores de
los atributos estn entre comillas (tambin podran estar entre comillas simples, como en 3).
Para que un documento XML sea correcto, debe estar bien formado; pero eso no es suficiente; adems, el documento debe ser vlido. Un documento XML vlido es aquel que cumple
con un esquema particular. Un esquema nos dice la estructura que debe seguir un documento
XML; hay varias formas de definir esquemas.
La forma ms vieja de definir esquemas viene de tiempos de SGML y se llama DTD, Definicin de Tipo de Documento (Document Type Definition). El DTD para los XML de libros
ser como se ve en el ejemplo del listado 7.2.
Cdigo 7.2
El DTD sencillamente nos dice qu puede contener cada elemento y qu atributos puede
tener; tambin puede definir las entidades vlidas en el documento. El elemento libro tiene un
titulo, uno o ms autores (autor+) y una o ms partes (part+). El DTD tambin nos dice si un
atributo es obligatorio (#REQUIRED) u opcional.
El problema con los DTDs es que son poco flexibles y que no soportan varias caractersticas especficas de XML que SGML no tiene (como espacios de nombres). Sin embargo, para
documentos con estructuras sencillas, los DTDs cumplen razonablemente el trabajo.
Otra forma de definir esquemas es con XML Schema. Sin embargo, los esquemas de este
estilo son algo ms complejos que los DTDs; por razones de espacio no los veremos aqu.
Una gran ventaja que ofrece XML para manipular informacin, es que ya existen las herramientas necesarias para manejar los documentos, en casi cualquier lenguaje de programacin
existente. Comprobar que un documento XML est bien formado y sea vlido es muy sencillo,
por lo que el programador ya slo necesita encargarse de extraer y manipular la informacin
contenida en el documento. Para esto ltimo tambin ya existen las herramientas necesarias.
249
7.2 HTML
7.2. HTML
HTML naci casi al mismo tiempo que la World Wide Web, de la necesidad de poder
presentar informacin en la red de forma rpida y sencilla. SGML era muy complejo como para
lo que se requera y XML todava no se inventaba; as que HTML fue el resultado de querer
resolver un problema muy concreto de la forma ms sencilla posible. Se utiliz una estructura
similar a la de un lenguaje SGML, pero mucho menos estricto y con mucha tolerancia a fallos.
Eso, aunado a que al inicio no haba un estndar propiamente sino slo una serie de reglas no
muy claramente especificadas, hizo que HTML terminara siendo un lenguaje poco consistente
y demasiado permisivo en su manejo de errores (en general los navegadores desplegaban una
pgina no importaba cuntos errores tuviera el documento HTML).
Con la fundacin del Consorcio de la World Wide Web (World Wide Web Consortium), o
W3C, se empezaron a corregir muchos de los problemas que inicialmente tena HTML; aunque
ahora el estndar de XHTML es bastante estricto y formalmente definido, todava existen miles
de pginas en la red que siguen usando (o abusando) de las versiones iniciales de HTML.
El estndar actual es el de XHTML 1.0 y 1.1 y es en se en el que nos centraremos aqu.
7.2.1.
XHTML
XHTML es bsicamente una limpieza de HTML para que se comporte como un documento
XML bien formado y que sea vlido, utilizando uno de los tres DTDs que la W3C especifica
para XHTML.
La W3C ofrece 3 DTD distintos para poder tener uno que ofrezca compatibilidad con versiones anteriores de HTML; un DTD es el llamado estricto y es el que debera usarse para
pginas nuevas si se puede garantizar que quienes las vean tendrn navegadores razonablemente modernos que puedan desplegarlas sin problemas. El segundo es el transicional y es un poco
ms flexible que el estricto; es el que hay que usar si se quiere convertir paulatinamente pginas
escritas antes de que se definiera XHTML o para conservar compatibilidad para navegadores
ya algo viejos. El tercero es para utilizar marcos. Por razones de espacio aqu slo veremos
XHTML estricto.
Un documento XHTML mnimo podra ser el que se ve en el listado 7.3.
Una vez ms, podramos utilizar directamente en lugar de é, porque el documento utiliza el conjunto de carcteres UTF-8, pero usamos la entidad para recalcar que en
XHTML casi todas las letras acentuadas tienen definida una entidad, as como muchos smbolos
de otros idiomas (por ejemplo, α despliega ).
Dado que un documento en XHTML es un documento XML tambin, empieza con la declaracin XML. Despus viene el tipo de documento, donde le decimos que utilice la versin
estricta del estndar XHTML 1.0. El elemento raz de un documento XHTML es html y ste a
su vez tiene los elementos de cabeza (head) y cuerpo (body). En este ejemplo slo ponemos el
ttulo de la pgina en la cabeza y un encabezado de nivel 1 (h1) y un prrafo (p) en el cuerpo.
250
Cdigo 7.3
Lenguajes de marcado
Documento en XHTML
<? xml v e r s i o n = " 1 . 0 " e n c o d i n g ="UTF8"?>
<!DOCTYPE h t m l PUBLIC " / /W3C / / DTD XHTML 1 . 0 S t r i c t / / EN"
" h t t p : / / www. w3 . o r g / TR / x h t m l 1 /DTD/ xhtml1 s t r i c t . d t d " >
< h t m l xmlns =" h t t p : / / www. w3 . o r g / 1 9 9 9 / x h t m l " xml : l a n g =" en " >
<head >
< t i t l e >P&a a c u t e ; g i n a P e r s o n a l de F u l a n o de Tal < / t i t l e >
</ head >
<body >
<h1 >P&a a c u t e ; g i n a P e r s o n a l de F u l a n o de Tal < / h1 >
<p>
Hola , yo s o y F u l a n o de T a l y &e a c u t e ; s t a
e s mi p&a a c u t e ; g i n a p e r s o n a l .
</ p>
</ body >
</ html >
Todos los elementos definidos en XHTML cumplen una funcin semntica, no de presentacin. Aunque por omisin ciertos elementos se despliegan con caractersticas especiales (por
ejemplo, los encabezados de nivel 1 tienen una fuente de mayor tamao que los de nivel 2), esto
es slo por convencin y tratando de emular cmo funcionaba HTML originalmente. XHTML
realmente no dice casi nada acerca de cmo debe verse un documento; la presentacin del mismo es independiente de su contenido.
Para modificar la presentacin de un documento XHTML se utilizan hojas de estilo, que es
lo que veremos a continuacin.
7.3. CSS
Las Hojas de Estilo en Cascada (Cascading Style Sheets) es el medio a partir del cual se
modifica cmo se ve un documento XHTML; pero tambin se pueden utilizar para documentos
XML arbitrarios o para documentos HTML aunque no sean necesariamente XHTML.
Veamos cmo funcionan siguiendo el ejemplo en el listado 7.4.
Cdigo 7.4
(1/2)
251
7.3 CSS
Cdigo 7.4
Sin utilizar ninguna hoja de estilo, la pgina se vera como en la figura 7.1.
(2/2)
252
Lenguajes de marcado
Sin modificar en nada el contenido del documento, podemos cambiar por completo cmo
se ve, usando la hoja de estilo del listado 7.5.
Cdigo 7.5
Documento en XML
body {
f o n t f a m i l y : mono ;
f o n t s i z e : 14 px ;
}
em {
c o l o r : #0 f 0 ;
}
strong {
c o l o r : # f00 ;
}
ul {
color : # f0f ;
f o n t s t y l e : i t a l i c ;
}
ol {
c o l o r : #0 f f ;
f o n t s i z e : l a r g e ;
}
253
7.3 CSS
Para que el documento XHTML use la hoja de estilo, se utiliza el elemento link en la cabeza
del mismo:
Cdigo 7.6
Sin importar que tan bien o mal se vea la pgina, lo relevante es que su apariencia es completamente independiente de su contenido. El que lo primero sea ortogonal a lo segundo, permite
a los creadores del contenido concentrarse slo en la informacin y dejarle la presentacin a
diseadores grficos o a alguien que se encargue exclusivamente de eso (y as evitar que las
pginas se vean como en el ejemplo).
Las hojas de estilo tambin sirven para poder determinar cmo se representar una pgina
en distintos medios. Se puede utilizar una hoja de estilo para presentarla en un navegador normal; otra especialmente hecha pensando en impresoras; una ms para lectores de pantalla (para
usuarios ciegos o con visin limitada).
7.3.1.
Javascript
JavaScript (que no tiene casi nada que ver con el lenguaje de programacin Java) es un lenguaje de programacin que se usa principalmente dentro de un navegador. Dado que es posible
acceder al contenido de una pgina a travs de JavaScript, es una opcin muy sencilla para crear
contenido dinmico y darle la posibilidad al usuario de interactuar con la pgina sin necesidad
de comunicarse todo el tiempo con el servidor (porque el cdigo JavaScript se ejecuta en el
cliente, en el navegador).
Todo el contenido de una pgina est disponible a travs del Modelo de Objeto del Documento (Document Object Model o DOM), que es bsicamente una representacin en memoria
de la jerarqua tipo rbol que tiene un documento HTML o XML.
Por ejemplo, si tenemos la pgina en el listado 7.7,
254
Cdigo 7.7
Lenguajes de marcado
Documento en XML
<? xml v e r s i o n = " 1 . 0 " e n c o d i n g ="UTF8"?>
<!DOCTYPE h t m l PUBLIC " / /W3C / / DTD XHTML 1 . 0 S t r i c t / / EN"
" h t t p : / / www. w3 . o r g / TR / x h t m l 1 /DTD/ xhtml1 s t r i c t . d t d " >
< h t m l xmlns =" h t t p : / / www. w3 . o r g / 1 9 9 9 / x h t m l " xml : l a n g =" en " >
<head >
< t i t l e > JavaScript </ t i t l e >
< s c r i p t t y p e =" t e 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 " / >
</ head >
<body >
<h1 > J a v a S c r i p t < / h1 >
< t a b l e i d =" myTable " >
<tr >
< t d >< s t r o n g > E l e m e 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 e ; mero < / s t r o n g > </ t d >
</ t r >
</ t a b l e >
< i n p u t t y p e =" b u t t o n " v a l u e =" A g r e g a r r e n g l&o a c u t e ; n "
o n c l i c k =" addRow ( document ) ; " / >
< i n p u t t y p e =" b u t t o n " v a l u e =" B o r r a r r e n g l&o a c u t e ; n "
o n c l i c k =" delRow ( document ) ; " / >
</ body >
</ html >
Documento en XML
f u n c t i o n addRow ( document )
{
var t a b l e
= document . g e t E l e m e n t B y I d ( myTable ) ;
v a r numRows = t a b l e . rows . l e n g t h ;
v a r newRow = t a b l e . i n s e r t R o w ( numRows ) ;
var c e l l 1
= newRow . i n s e r t C e l l ( 0 ) ;
var c e l l 2
= newRow . i n s e r t C e l l ( 1 ) ;
c e l l 1 . innerHTML = Nuevo Elemento ;
c e l l 2 . innerHTML = numRows ;
}
f u n c t i o n delRow ( document )
{
var t a b l e
= document . g e t E l e m e n t B y I d ( myTable ) ;
v a r numRows = t a b l e . rows . l e n g t h ;
i f ( numRows > 1 )
t a b l e . d e l e t e R o w ( numRows 1 ) ;
}
255
7.4 Emacs
Entonces cada vez que se haga click en el botn Agregar rengln, un nuevo rengln aparecer
en la tabla; y cada vez que se haga click en Borrar rengln, se le quitar un rengln a la tabla.
El primer botn de la pgina tiene definido (usando el atributo onclick) que cada vez que se
le haga click, se mande llamar a la funcin addRow con el parmetro document. En JavaScript,
document es una variable que representa a todo el documento HTML o XML. El segundo botn
tiene definido de forma anloga que se mande llamar la funcin delRow.
La funcin addRow hace lo siguiente: primero obtiene el objeto de la tabla usando la funcin getElementById. sta es una funcin del DOM y nos permite obtener cualquier elemento,
siempre y cuando tengamos su identificador (en la pgina, al definir la tabla usamos el atributo
id ).
Despus, obtiene cuntos renglones tiene la pgina e inserta un nuevo rengln al final; los
renglones se numeran a partir del 0, por lo que si hay n renglones estn numerados de 0 a n 1.
Despus aade dos celdas al rengln y define el cdigo HTML de cada una de ellas.
La funcin delRow tambin obtiene el objeto de la tabla; si hay al menos dos renglones borra
el ltimo (esto es para no quedarnos con una tabla sin renglones).
Este ejemplo tan sencillo permite ver el poder que tiene JavaScript: nos permite modificar
dinmicamente el documento HTML y XML, y de esta forma interactuar con el usuario sin necesidad de comunicarnos con el servidor, porque todo ocurre del lado del cliente (el navegador).
7.4. Emacs
Emacs tiene soporte para manipular HTML, XML y XHTML, incluyendo validacin utilizando el DTD. Si planeas utilizar XHTML, slo tienes que aadir lo siguiente al archivo
/.emacs:
( addt o l i s t
a u t o mode a l i s t
Al abrir un documento con extensin .html, el modo XML se cargar automticamente. Para
cargar el DTD definido en el tipo de documento, slo hay que oprimir Cc Cp ; lo validas
usando el comando Cc Cv . Para definir el programa externo para validar puedes aadir lo
siguiente al archivo /.emacs:
( customs e t v a r i a b l e s
( sgmlxmlv a l i d a t e command " x m l l i n t v a l i d n o o u t %s %s " )
)
Aqu se utiliza el programa xmllint, pero se puede utilizar cualquier programa que valide un
documento XML contra su DTD.
Si ests editando un documento XML, con Cc Ce aades un elemento y Emacs se
encargar de slo mostrar los elementos vlidos (de acuerdo al DTD). Con el comando Cc
/ cerrar cualquier etiqueta de inicio que siga abierta.
Herramientas para
desarrollo
8.1.1.
subversion
subversion es un sistema de control de versiones abierto y libre. Esto significa que subversion maneja archivos y directorios a travs del tiempo. Su forma de operar involucra un rbol
de archivos en un repositorio central. Este repositorio funciona como un servidor de archivos
ordinario, excepto que recuerda cada cambio que se realiza a los archivos y directorios. Esto te
permite recuperar versiones anteriores de los datos o examinar la historia de cmo stos fueron
257
cambiando.
subversion puede acceder a sus repositorios a travs de redes, lo que le permite ser utilizado
en distintas computadoras. En este sentido, la habilidad de tener varias personas modificando
y trabajando sobre el mismo conjunto de datos, desde sus respectivos lugares, mejora las posibilidades de colaboracin. Cada miembro del equipo aporta al proyecto de manera directa, sin
intermediarios y, dado que todo est etiquetado por versiones, no se corre el riesgo de sacrificar
calidad al no tener un filtro de calidad, ya que si algn cambio reciente es incorrecto, subversion
permite echar atrs los cambios realizados.
subversion es una arquitectura cliente-servidor. Dado que la instalacin y configuracin de
servicios de red escapa el alcance de este libro, aqu hablaremos brevemente de los aspectos
relativos al cliente.
8.1
Existen varios clientes grficos para manejar tu copia local de subversion para KDE.
Entre los ms conocidos encontramos:
kdesvn Es una interfaz para subversion y, a diferencia de otras herramientas, utiliza
directamente un API en C desarrollado por Rapid SVN, por lo que no revisa la
salida del cliente de subversion svn, sino que implementa un cliente de subversion.
ksvn Es una extensin para Konqueror que le permite manejar copias de trabajo de
subversion.
8.1.2.
Introduccin a subversion
subversion, CVS y otros sistemas de control de versiones utilizan un modelo conocido como
copiar-modificar-intercalar. En este modelo, cada cliente de usuario contacta al repositorio central y crea una copia de trabajo, que es un reflejo de los archivos y directorios en el repositorio
central. Los usuarios trabajan en paralelo, modificando sus copias privadas y, finalmente, intercalan sus copias en una versin final nueva. El sistema de control usualmente asiste el proceso
de intercalado, pero al final del da es un humano el encargado de que esto ocurra correctamente.
Existen otros modelos ms sencillos en el papel, pero con grandes desventajas a largo plazo.
El modelo de copiar-modificar-intercalar puede sonar un tanto catico, pero en la prctica funciona muy bien. Incrementa la productividad, ya que los usuarios pueden trabajar en paralelo,
sin esperar a los otros. Cuando trabajan en los mismos archivos, en general, los cambios no se
enciman y los conflictos son poco frecuentes y toma poco tiempo arreglarlos.
A continuacin te daremos una gua del ciclo usual de desarrollo cuando utilizas un sistema
de control de versiones.
258
Tu copia de trabajo
Usualmente comienzas a utilizar subversion haciendo una copia local del proyecto (checkout). Esta copia contiene la ltima revisin de subversion, llamada HEAD.Obtienesd ls copia
con una lnea como sta:
% svn checkout http://svn.collab.net/repos/svn/trunk
Obviamente la liga cambia para reflejar el repositorio de tu proyecto y existen diversos protocolos para especificarlo. Puede ser va http, como en el ejemplo, o va el sistema de archivos
local o a travs de ssh. En este ejemplo, extraemos el directorio trunk del proyecto, que generalmente incluye todos los archivos y directorios, pero puedes seleccionar rutas ms detalladas
para obtener ciertas partes del proyecto.
Una vez que tienes una copia de trabajo, no tienes nada ms que esperar. Puedes comenzar
a modificar esos archivos y directorios e iniciar el ciclo tpico de trabajo.
259
8.2 Emacs
Tabla 8.1 subversion: comandos ms importantes
Comando
Descripcin
svn add
svn update
Con este comando pones tu copia local al da y subversion te avisa de cambios, uno por lnea. Cada lnea inicia con una letra que te indica algo:
A Un nuevo archivo en tu copia.
U Un archivo no sincronizado en tu copia, pero subversion lo actualiz en
ella, no te preocupes.
D Un archivo fue eliminado de tu copia.
G Una archivo no sincronizado en tu copia, porque t lo editaste en tu copia
local.
C Un archivo no sincronizado en tu copia, pero subversion no puede actualizarlo porque hay conflictos que requieren tu intervencin.
svn delete
svn copy
Si el nombre de un archivo es desafortunado, con este comando puedes cambiar el nombre del archivo sin perder su historia.
svn move
svn status
svn diff
svn revert
Te permite retroceder a otra versin de un mismo archivo o directorio. Usualmente utilizas este comando cuando quieres descartar los cambios que realizaste en tu copia local.
svn update
svn resolved Una vez que has arreglado un conflicto, con este comando se lo indicas a
subversion.
svn commit
Una vez que terminas tu trabajo de edicin, has intercalado tus cambios y
resuelto los conflictos, con este comando le indicas a subversion que integre
todos tus cambios.
Cuando envas tus cambios tienes que acompaarlos de un mensaje que describa tus cambios. Si lo haces en la lnea de comandos, tienes que agregar la
bandera -m seguida del mensaje entre comillas.
Como ya mencionamos, subversion ofrece una pltora de comandos y opciones ms, pero
el ciclo que hemos presentado es el ms comn.
260
8.2. Emacs
Ya mencionamos que Emacs es un editor para programadores hecho por programadores?
En esta seccin te demostramos por qu esto es cierto, ya que revisaremos uno de los ms
sofisticados modos para programar en Java que existen, JDEE, que son siglas en ingls de Java
Development Environment for Emacs .
8.2.1.
JDEE
Aunque hacemos una cobertura parcial de JDEE, esta seccin supone que ests familiarizado tanto con Emacs como con el lenguaje de programacin Java.
JDEE permite conectar a Emacs con aplicaciones para desarrollo de terceros, tales como
las que provee Sun Microsystems como parte de JDK. El resultado es un ambiente integrado de
desarrollo, tambin conocido como IDE, por sus siglas en ingls. Existen en el mercado muchos
IDE comerciales para desarrollar en Java, como Netbeans o Eclipse; JDEE est a la altura de
stos. Entre sus caractersticas ms importantes se encuentran:
Editar cdigo con resaltado de sintaxis y sangras automticas.
Completar de manera automtica campos y mtodos de clases.
Compilar con brincos automticos de mensajes de error a la lnea de cdigo responsable.
Generar esqueletos de clases y mtodos de manera automtica.
Ejecutar aplicaciones java en un buffer de Emacs de manera interactiva.
Integrar un depurador con un buffer para comandos interactivos y desplegar de manera
automtica el archivo/lnea mientras recorres el cdigo.
Posibilidad de navegar la documentacin de JDK utilizando el navegador de tu eleccin.
Navegar a travs del cdigo utilizando las herramientas etags de Emacs o bien las estructuras de rbol provistas por otra extensin de Emacs, speedbar.
Instalando JDEE
$ smart
Antes de poder utilizar JDEE con Emacs debes instalar una serie de extensiones y aplicaciones. Adems, por supuesto, debes contar en tu sistema con una implementacin de Java; aqu
install
sun-java5-jdk suponemos que ya est instalado JDK.
JDEE no es parte estndar de Emacs y utiliza otras herramientas que no lo son tampoco.
Estas herramientas son:
CEDET: en ingls, Collection of Emacs Development Enviromnent Tools, que es un proyecto
que incluye varios paquetes individuales:
EIEIO - capa CLOS para Emacs Lisp.
261
8.2 Emacs
Semantic - Infraestructura para parsear en Emacs.
Speedbar - Navegador de. . . cualquier cosa.
EDE - Manejador de archivos y generador de Makefile.
COGRE - Connected Graph Editor.
Una vez que obtienes e instalas la ltima versin, debes agregar lo siguiente a tu /.emacs:
( l o a d f i l e " ~ / e l i s p / c e d e t / common / c e d e t . e l " )
( s e m a n t i c l o a d e n a b l e codeh e l p e r s )
ELIB: Es una biblioteca estndar para programar en Emacs Lisp. Tiene cdigo para:
Estructuras de datos (colas, pilas, rboles AVL y otras).
Funciones para manejo de cadenas no incluidas en Emacs estndar.
Funciones para manejo del mini-buffer no incluidas en Emacs estndar.
Rutinas para manejar listas de galletas (cookies) en un buffer.
Una vez que obtienes e instalas la ltima versin, debes agregar lo siguiente a tu /.emacs
para que JDEE lo encuentre:
( addt o l i s t
JDEE: Finalmente estamos listos para JDEE, que sigue una ruta similar a las extensiones anteriores y debes poner lo siguiente en tu /.emacs
( addt o l i s t l o a d p a t h ( expandf i l e name " ~ / e l i s p / j d e / l i s p " ) )
( require jde )
A partir de este momento cada vez que visites un archivo relacionado con un proyecto o
programa Java, JDEE proveer sus controles para apoyarte en tu sesin de desarrollo.
262
M-x customize-variable;
teclea jde-jdk y vers un buffer con todos los JDK que registraste arriba;
haz click en el botn junto a la versin que deseas utilizar;
haz click en el botn State;
y a continuacin selecciona Save for Future Sessions;
selecciona el botn Finish para deshacerte del buffer.
y el punto est justo antes de la palabra reservada public. Cuando ejecutas C-c C-v j , JDEE
insertar lo siguiente:
/
D e s c r i b e c l a s s <code > MiClase < / code > h e r e .
263
8.2 Emacs
Para generar la documentacin del proyecto actual puedes abrir cualquier archivo fuente del
proyecto y ejecutar M-x jde-javadoc-make, lo que ejecuta el comando javadoc de JDK para
generar la documentacin.
Abreviaturas
JDEE te permite utilizar abreviaturas para algunas palabras clave y estructuras de control
de java. A continuacin te mostramos como utilizarlas.
Cuando escribes una de las abreviaturas definidas, seguidas de un espacio en blanco, JDEE
las expande en el buffer, siempre y cuando el modo de abreviaturas est activado. Para activar/desactivar este modo debes cambiar el valor de la variable jdeenableabbrevmode.
Esta extensin de JDEE est basada en abbrev-mode de Emacs, que es un sistema para
generar abreviaturas generales.
Dentro de las abreviaturas ms comunes encontrars las que tienen que ver con estructuras
de control, por ejemplo, if-then-else. Cuando escribes una de estas abreviaturas seguida de
espacio, JDEE la expande al esqueleto de la estructura de control correspondiente.
Por ejemplo, ife se expande a if () { } else { }. Aqu estn algunas ms de las abreviaturas
predefinidas:
Tabla 8.2 JDEE: abreviaturas de estructuras de control
Abreviatura
Enunciado
if
if-then
ife
if-then-else
fori
foriter
main
main method
tryf
try finally
264
Descripcin
jde-complete
jde-complete-in-line
jde-complete-menu
jde-complete-minibuf
Este comando utiliza el mini-buffer para desplegar las posibilidades e introduce al buffer la que t selecciones.
Generacin de cdigo
JDEE provee mecanismos para generacin de cdigo. Los hay de dos tipos: wizards y
basados en patrones. Tambin ofrece comandos para expandir paquetes (jde-import-expandimports).
Tabla 8.4 JDEE: enunciados import
Enlace
Descripcin
C-c C-v z
en los siguientes:
import java . io . BufferedReader ;
import java . io . InputStreamReader ;
import java . io . IOException ;
265
8.2 Emacs
y viceversa (jde-import-collapse-imports). JDEE adems incluye el comando jde-importorganize que acumula los enunciados import del buffer en dos bloques, uno que contiene todos
los java y javax y despus de una linea en blanco, todos los dems. Dentro de cada bloque
ordena alfabticamente, por ejemplo:
import
import
import
import
java . io . InputStreamReader ;
java . u t i l . Hashtable ;
j a v a x . s w i n g . JFrame ;
j a v a x . swing . J P a n e l ;
Descripcin
Sobrecarga de operadores
Interfaz
Delegado
Clase abstracta
Implementacin de los mtodos heredados de una clase abstracta por la clase que contiene al punto.
Get/Set
(jde-wiz-get-set-methods) Mtodos get y set para los campos privados de la clase que contiene al punto.
Existen otras maneras de generar cdigo, como clases patrn vacas, pero stas no tienen
un nico comando asociado y debes ejecutarlas desde el men de JDE. Por ejemplo, para crear
un buffer con una clase pblica genrica de Java, puedes utilizar Files JDE New Class.
266
( j d e a n t b u i l d ) )
Existen muchas variables para controlar el comportamiento tanto de make, como de Ant,
aunque en la mayora de las distribuciones de Linux no debe ser necesario que cambies los
valores por omisin de estas variables.
Navegando excepciones
Si ocurren excepciones durante la ejecucin de tu programa, la mquina virtual entrega
como salida un registro de excepcin. Este registro aparece en el buffer de ejecucin. 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:
267
8.2 Emacs
Una interfaz en Emacs para jdb, el depurador en lnea de comandos que se distribuye con
JDK.
JDEbug, un depurador desarrollado especficamente 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. En este trabajo
revisamos exclusivamente JDEbug.
JDEbug te permite ejecutar un programa Java paso por paso y despliega y modifica el
estado interno del programa. Entre sus caractersticas principales contamos:
Depuracin a nivel de fuente. JDEbug mantiene un apuntador a la linea 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 variable 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 sea vlida en el punto
actual de suspensin.
Por omisin JDEE est configurado para ofrecerte una interfaz de jdb, por lo que debes
indicarle que deseas utilizar JDEbug. Esto lo logramos asignando el valor JDEbug a la variable
jdedebugger:
( s e t q j d e d e b u g g e r
JDEbug se apoya en la biblioteca JPDA, que en Linux se distribuye 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 de JDEbug, con
lo que se inicia la ejecucin del depurador. Para depurar una aplicacin debes:
Iniciar la aplicacin dentro del depurador. Adelante te decimos cmo.
Aadir el depurador a tu aplicacin si es que sta fue ejecutada fuera del depurador.
Poner el depurador en modo de escucha e iniciar la aplicacin fuera de ste.
Es muy importante que cuando hayas terminado de utilizar el depurador, termines su ejecucin seleccionando Exit Debugger del men JDEbug. De otra manera, aun cuando termines la
ejecucin de Emacs, pueden quedarse procesos (mquinas virtuales) hurfanos ejecutados por
el depurador.
268
Iniciando procesos
JDEbug provee dos comandos para iniciar procesos:
1. JDEbug Processes Launch Process, que ejecuta un ejemplar de la aplicacin
sealada por jde-run-application-class y, en caso de que su valor sea nil , la aplicacin
correspondiente a la del buffer actual de java.
2. JDE Debug App; este comando realiza las siguientes acciones:
a)
b)
c)
d)
Nota: si no asignaste ningn punto de revisin, la aplicacin ser ejecutada 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 siguiente muestra el buffer fuente
o el archivo donde pusiste puntos de revisin y, finalmente, la ventana del 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
Otro modo muy importante para controlar versiones es PCL-CVS, que es 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 los primeros sistemas utilizados y, probablemente, aun hoy da sea el ms utilizado en el mundo del
software libre. Sin embargo, en nuestra opinin, subversion es un sistema ms verstil
y tiene varias ventajas sobre CVS.
Este sistema es una interfaz para el control de versiones subversion (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 siguiente a tu /.emacs:
( r e q u i r e psvn )
Una vez cargado el programa, puedes ejecutarlo con M-x svn-status; te preguntar en
el mini-buffer por el directorio con tu copia de trabajo. Por omisin te mostrar el directorio
269
8.2 Emacs
del archivo actual. Este comando ejecuta svn status en el directorio que tecleaste y te muestra
un buffer con el resultado que, como notars, se parece mucho a la salida del comando en una
terminal, pero a diferencia de sta, en este buffer cuentas con una serie de enlaces de teclas para
ejecutar rpida y cmodamente comandos de subversion.
Tabla 8.6
Descripcin
, p , C-p
, n , C-n
Enter
(svn-status-show-svn-diff) Ejecuta el comando svn diff del archivo (directorio) actual con la versin de la revisin en tu copia de trabajo.
(svn-status-set-user-mark) Pone una marca en el archivo o directorio. Esto te permite poner marcas a varios archivos y el siguiente comando se ejecutar sobre todos los archivos marcados. Por ejemplo, aadirlos, borrarlos,
comprometer los cambios y otros.
Extendiendo tu
ambiente
272
Extendiendo tu ambiente
que sean de inters para la ejecucin del programa y cuentan con estructuras de control de flujo,
algunas de las cuales veremos ms adelante.
En un guin de shell tambin podemos tener comentarios, que son mensajes para los que
lean el guin (en particular, nosotros mismos despus de algn tiempo). Los comentarios son
ignorados por el shell al momento de ejecutar, as que no hacen dao y sirven para dar mayor
claridad a nuestro guin de shell. Los comentarios son todo lo que siga al carcter # hasta el fin
de la lnea.
Los guiones de shell pueden ser ejecutados de manera autnoma simplemente cambiando
los permisos de ejecucin y poniendo un comentario especial en la primera lnea del archivo.
Esta lnea luce algo as #!/ bin /bash y le indica al shell que debe de usar el programa / 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 creacin 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 ciertos valores, por ejemplo
el mensaje a desplegar o los nombres de los archivos a borrar. Para las variables se utilizan
palabras formadas nicamente de maysculas1 y se les asigna valor por medio del operador =;
por ejemplo MENSAJE="saluditos por la maana"; despus, para usarlas recuperando su
valor, 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 Modifica el guin de shell anterior de manera que uses variables 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, hechos con base en los
comandos aceptados por el shell estndar de Linux, bash, y conectando la salida de algunos
1
273
con la entrada de otros. Ahora ests capacitado para emprender labores un poco ms complejas.
Aprenders cmo hacer programas ejecutables por bash, ms grandes y que ofrecen servicios
ms tiles.
Antes que nada y con vistas a organizar decorosamente tu actividad, debers crear en tu
directorio personal un subdirectorio donde puedas guardar todos tus programas 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 fin de la lnea que comienza: PATH=, lo siguiente:
:/$HOME/bin.
Ahora todos los programas que hagas y coloques en ese subdirectorio podrn ser llamados
desde cualquier otro directorio en el que ests. El sistema se encargar de ejecutarlos desde tu
directorio bin. Por supuesto todos los programas debern tener permiso de ejecucin (recuerda
el uso de chmod).
Actividad 9.3 Despliega la variable de ambiente $PATH luego de editar el archivo /.bashrc.
Compara el resultado con la que acabas de poner en el archivo. Que ocurri?
En general, todos los programas que elabores en esta seccin debern almacenarse en tu
directorio bin.
9.1.3.
274
Extendiendo tu ambiente
UNIX es du (disk usage). Puedes saber cuanto espacio ocupa tu directorio 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, pero sin desglosar
por subdirectorios.
Lo malo de hacer du -k . es que el listado de la cantidad de disco ocupada sale desordenado.
Si tienes muchos subdirectorios no es evidente cules son los que ms espacio 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 salida de
sort como entrada de more (o less si lo prefieres). sort ordena creciente y quisieras (aunque
en gustos se rompen gneros) que la salida fuera ordenada decreciente para que pudieras fijarte
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 lexicogrfico el
5 est despus del 4.
En sntesis, y agregando algunas lneas explicativas al programa, tienes lo siguiente:
1
2
3
4
5
6
7
8
9
# ! / bin / bash
#
# 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
# 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
# menor ( o r d e n i n v e r s o p a r a s o r t ) .
#
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 ) "
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 "
du k . | s o r t n r | more
Nota que est entre entre comilla invertida (acento grave, que est en la esquina superior
izquierda 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 la 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 mega bytes en vez de en
kilo bytes.
Actividad 9.7 Haz que la salida de sort sea en orden creciente y sea posible hacer paginacin.
2
275
9.1.4.
Listado de directorios
Por supuesto habrs notado que el listado de los elementos de un directorio incluye tanto
subdirectorios como archivos y que en dicho listado las entradas aparecen ordenadas alfabticamente. Esto hace que subdirectorios y archivos aparezcan mezclados en la lista, lo que dificulta
distinguirlos, 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 nombre 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 de los
programas que conocemos, es decir, ponindolos inmediatamente despus del nombre del programa que se quiere ejecutar. Cuando llamamos a ls por ejemplo, podemos decirle la ruta de
algn directorio del que deseamos ver el listado. Por ejemplo:
% ls /usr/include
te muestra el listado del directorio /usr/include que pusiste junto al nombre del programa.
bash tiene prevista la situacin en la que se dan parmetros de entrada a los programas.
En esencia slo se requiere guardarlos en algn lugar accesible al programa y ponerle nombre
a dicho lugar para poder referirse a lo que est guardado all desde el programa. 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
variables. 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 programas).
Pues bien, existen ciertas variables que existen siempre automticamente en todos los programas en shell y que se refieren a los parmetros de entrada de un programa:
Descripcin
$#
276
Extendiendo tu ambiente
Tabla 9.1
Variable
Descripcin
$?
Nota adems que existe un medio para contar cuntos parmetros de entrada se le dieron a
un programa. Basta con observar el valor que posea la variable $# para saber cuntas palabras
(separadas por espacios) se dieron frente al nombre del programa cuando ste fue llamado a
ejecutarse.
En nuestro programa requeriremos saber cuntos parmetros de entrada 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 objetivo. Si no existe parmetro
alguno entonces supondremos que el directorio objetivo es el actual. En caso de que s exista el parmetro, entonces deberemos cambiarnos al directorio objetivo especificado por dicho
parmetro y listar slo el nombre de sus subdirectorios.
Es decir, el esquema general de lo que debemos hacer es el siguiente:
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 capaz 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
277
Esto hace que las instrucciones entre el do y el done se repitan tantas veces como elementos
tenga el conjunto especificado a continuacin de la palabra in. En esencia, 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
instrucciones; 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
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ! / 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
# son s u b d i r e c t o r i o s .
#
# S i hubo un p a r m e t r o en l a l i n e a de comandos
# 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 .
i f [ $# ne 0 ] ; t h e n
cd $1
fi
# 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
e c h o " S u b d i r e c t o r i o s en pwd "
f o r i i n l s aA ; do
i f t e s t d $ i ; t h e n
l s l d $ i
fi
done
278
9.1.5.
Extendiendo tu ambiente
Recorridos recursivos
El patrn de descenso
Para resolver el problema que te ocupa tienes que ser capaz, primero, de poder descender
por un directorio y todos sus subdirectorios. Cmo haces esto? Conceptualmente hablando, 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 fijas en cada entrada del listado del directorio.
3. Si la entrada corresponde a un subdirectorio te introduces a l y haces lo mismo que
estabas haciendo en el nivel anterior (haces lo que deseas. . . fijarte 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 significa que haces exactamente lo mismo que estabas haciendo en el
directorio superior; es decir, ejecutas cada una de las acciones que estabas llevando a cabo, en
el mismo orden; esto es, ejecutas el mismo programa. Cuando un programa, como parte de sus
279
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
Para cada e n t r a d a del d i r e c t o r i o
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
Entramos a l s u b d i r e c t o r i o
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
Salimos del d i r e c t o r i o a l inmediato s u p e r i o r
S i no e s un s u b d i r e c t o r i o
Decimos s u nombre
Deseamos repetir al proceso de las lneas 3 a 8 para cada entrada del directorio. Esto se
dice for i in ls es decir para cada elemento del listado producido por 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 ests parados en la
entrada i del directorio, puedes preguntar si esa i corresponde a un subdirectorio o a un archivo.
Esto es posible hacerlo con los comandos if y test, tal como lo hiciste en el programa que lista
directorios. As:
1
2
3
4
5
6
7
8
9
10
11
12
# ! / 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 d o un r b 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 a del d i r e c 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 un d i r e c t o r i o
cd $ i
# n o s cambiamos a s t e
$HOME/ b i n / p a s e o _ r e c # Llamada r e c u r s i v a
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
echo " a r c h i v o : $ i "
fi
done
280
Extendiendo tu ambiente
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 modificar esa lnea para que pueda encontrarse a s mismo.
Actividad 9.12 Modifica el programa para que pregunte si realmente desea borrar cada archivo de respaldo de Emacs, (sugerencia: man rm).
Cdigo 9.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Un grep recursivo
Ya conoces el programa grep que te permite, en particular, buscar presencias de una cadena
cualquiera en conjuntos de archivos. En muchas situaciones es deseable conocer no slo en
cules archivos de un directorio aparece la cadena, sino en cules archivos de sus subdirectorios,
en cules de los subdirectorios de stos y as sucesivamente. Es simple pensar en una situacin
as; por ejemplo, si quisieras saber cuntos y cules de los archivos contenidos 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 cadena 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 archivos del directorio actual y luego proceda a la manera de paseo_rec, metindose a cada subdirectorio que
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 significan las opciones Hns de grep que se usan en rgrep en la lnea
11?
281
grep recursivo
# ! / 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 emulando
# 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 significa la opcin -r de grep (o mejor dicho de egrep, que ocup el
lugar del antiguo grep)?
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
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# ! / 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
# 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
#
i f [ $# eq 3 ]
then
for i in ls
do
i f t e s t d $ i
then
chown $2 $ i
c h g r p $3 $ i
# 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
chmod +x $ i
cd $ i
e c h o " D i r e c t o r i o a c t u a l : " pwd
# 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
# para a c c e d e r a e s t e programa
$HOME/ b i n / chmogr $1 $2 $3
cd . .
# 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
chmod $1 $ i
e l i f t e s t f $ i
then
echo "
A r c h i v o : "$ i
chown $2 $ i
chmod $1 $ i
c h g r p $3 $ i
fi
done
else
e c h o "USO : $0 [ perm ] [ p r o p ] [ g r u p o ] "
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 "
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. "
fi
283
Actividad 9.15 El programa recursivo de cambio de permisos propietario y grupo fue hecho
hace mucho cuando an no existan ciertas extensiones de los comandos tradicionales 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 actualice la fecha y hora
de cada archivo descendiendo recursivamente por los subdirectorios a partir 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 directorios completos
cuyos archivos 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 hecho, diferentes
de los que tienen el mismo nombre, contenidos en otro directorio.
En UNIX existe un comando para saber si dos archivos son diferentes: 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 vez 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 necesitars
saber cul es el resultado entregado por diff.
diff, como casi todos los comandos ejecutables en el shell, regresa un valor resultado de
su ejecucin. Es posible atrapar este resultado para poder tomar la decisin de incrementar el
contador de archivos iguales o el de archivos diferentes. Ya antes mencionamos la variable $?
que entrega el resultado del ltimo comando ejecutado, as que sa ser la manera de conocer
el valor entregado por diff. diff entrega un cero si los archivos que se le encomend comparar
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 IGUAL, DIFER y CONTADOR que nos permiten contar archivos iguales, diferentes y el total respectivamente. En la
lnea 23 se pregunta si el valor entregado por diff es cero, en cuyo caso incrementamos el valor
del contador IGUAL en uno (lnea 25) usando let. De no ser iguales los archivos (lo que significa que o bien son diferentes o no se pudieron comparar), entonces incrementamos el contador
DIFER y siempre incrementamos CONTADOR, el que cuenta todos los archivos.
284
Extendiendo tu ambiente
Cdigo 9.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
285
Actividad 9.20 Modifica el programa para que, en caso de que los archivos sean diferentes
diga cul es ms reciente (sugerencia: man test).
9.1.7.
. El primer parmetro de find es . (punto), busca a partir del directorio actual, previamente el
programa se cambia al directorio del usuario.
-name Encuentra archivos cuyo nombre coincida con el patrn que se establece 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, lo que
permitira eliminar archivos viejos.
core Archivos que se llamen core en este ejemplo; en otros casos de este mismo programa
se buscan aquellos que cumplan con el patrn *, por ejemplo, lo que significa los que
terminan con tilde (respaldos de Emacs).
-print Este ltimo parmetro le indica a find qu hacer con el archivo que encuentre; en este
caso -print significa imprime su nombre.
286
Extendiendo tu ambiente
Cdigo 9.4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(1/2)
287
Cdigo 9.4
(2/2)
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 tiene el prefijo Informe y
su nombre se construye en las lneas 9 y 14. Tambin elimina los directorios de cache de
Netscape y de depsito de basura Trash del ambiente de trabajo.
Actividad 9.21 Cul es el sufijo del nombre del archivo de informe que genera el programa?
Cmo se obtiene dicho sufijo?
Actividad 9.22 Modifica el programa para que te pregunte si deseas borrar cada archivo encontrado (Sugerencia: man rm).
Adicionalmente, este programa (la versin original, no la obtenida en el segundo ejercicio)
puede ser ejecutado a una hora determinada en das determinados usando el comando crontab.
Para usarlo primero debes hacer lo siguiente, tanto en tu terminal actual como en tu archivo
/.bashrc: hay que hacer que el editor de crontab por omisin sea nuestro conocido 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
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 direccin de correo
jose@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 . unam . 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 borra 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 redireccionar 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 cinco campos de la
lnea, que esencialmente indican cundo deber ejecutarse el resto de la lnea; en este caso todos
los viernes (da 6) a los 30 minutos despus de las 02 horas cualquier da (*) de cualquier mes
(*).
289
9.2 Emacs
archivos cuyo nombre (-name) cumpla con la condicin de ser core; una vez que se encuentra
uno de sos ordena la ejecucin (-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 find 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 documento HOWTO en el
Linux Documentation Project: http://www.linuxdoc.org.
9.2. Emacs
9.2.1.
290
Extendiendo tu ambiente
Por conveniencia, a lo largo de estas prcticas nos referiremos a Emacs Lisp, como elisp.
Tambin hablaremos del lenguaje de programacin LISP (LISt Processing) y en general no
haremos distincin entre este ltimo y elisp: para propsitos de este material, hablaremos 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 parntesis. Muchas veces
encontrars las listas precedidas por un apstrofo (). Las listas son la parte medular de LISP.
Listas en elisp
En elisp una lista luce como (rosa violeta clavel azucena). Esta lista est precedida
por un apstrofo. Los elementos de la lista son nombres de distintas flores, separados entre s
por un espacio en blanco, aunque cabe aclarar que el nmero de blancos (espacios 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 rodeadas por parntesis
(dado que los programas lucen como datos, pueden pasarse a otros programas; esto significa
que los programas en elisp tambin son elementos de primera clase y esto constituye 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 indivisibles, al igual que
los nmeros y carcteres como +. Por el contrario, las listas, como veremos ms adelante, 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 grficamente luce as: ( ); se llama la lista vaca,
tambin representada por nil. Esta lista vaca tiene la facultad de ser una lista y un smbolo al
mismo tiempo.
La representacin escrita de listas y tomos se conoce como expresin simblicas (symbolic
expression), o bien s-expression. Aclaramos que la representacin escrita 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 tipos
de tomos: nmeros, por ejemplo 13, 295 o 1763; y smbolos tales como +, foo, forwardline, etc.; todos los nombres que hemos usado en las listas de ejemplo, aqu arriba, tambin
291
9.2 Emacs
es una lista que tiene cuatro smbolos. En elisp todo el texto entre comillas, incluyendo el signo
de puntuacin y los blancos, es un tomo. Este tipo particular de tomo se conoce como cadena
y es el tipo de tomos que se utiliza para comunicar mensajes que un humano puede leer. Las
cadenas son un tipo distinto de tomo a los nmeros y smbolos y no slo por su forma, sino
tambin por su uso.
Dado que los blancos en una lista no importan, las siguientes son 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 casi todo lo que podemos ver en elisp! Todo lo dems son combinaciones de lo anterior, aunque posiblemente
usando listas ms largas y anidadas, pero ningn concepto nuevo. Hay muchas construcciones
esotricas en elisp que utilizan otro tipo de tomos, pero no son comunes y podemos avanzar
mucho sin conocerlas.
En resumen, no debes olvidar que: una lista va entre parntesis, una 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.
292
Extendiendo tu ambiente
Ejecucin de programas
Una lista en elisp es un programa listo para ser ejecutado. Si lo ejecutas (evalas en el cal
de elisp) har una de tres posibles cosas: nada, excepto regresar la lista misma; mandarte un
mensaje de error o tratar el primer smbolo en la lista como un comando para hacer algo.
El apstrofo sencillo que aparece en algunas de las listas de ejemplo en la seccin anterior
se llama quote (es una funcin). Cuando precede a una lista, le dice a elisp que no haga nada
con ella excepto tomarla tal y como est escrita. En cambio, si no aparece un apstrofo delante
de la lista, 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 tena 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 con un apstrofo,
por ejemplo, ( que bonito ) . Qu pasa?
Cuando una lista est precedida por un apstrofo, entonces el intrprete de 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 intrprete 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 mensajes
de error, ya que una vez que los entiendas te dars cuenta que son muy informativos. Puedes
pensar en estos mensajes de error como sealizacin para el viajero de las carreteras de elisp:
son crpticos al principio (como casi cualquier otro tipo de sealizacin), pero una vez que los
entiendes, te llevan de la mano a tu destino final.
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 definition is void: esta,
cierto? Dado que este tipo de mensajes es muy frecuente, a continuacin te presentamos una
explicacin, aunque ya debes tener una buena idea de lo que el mensaje significa.
Sabemos que el problema fue ocasionado por el smbolo esta; tambin se menciona la palabra function, una palabra muy importante. Para efectos prcticos, valga la siguiente definicin
293
9.2 Emacs
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 instrucciones a ejecutar.
Ahora s, estamos en posicin de entender en su totalidad el mensaje de error: el smbolo
esta no contiene la definicin de conjunto alguno de instrucciones para la computadora.
La extraa frase Symbols function definition is void tiene que ver con la forma en que
Emacs est implementado, ya que cuando un smbolo no tiene un conjunto de instrucciones
asociado, el lugar donde tal conjunto (de existir) debera estar, es ocupado por la funcin void,
que no hace nada.
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 obedece; esta instruccin
suman los dos nmeros.
Finalmente, debes saber que los smbolos tambin se usan para nombrar 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 dicen 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, haga referencia
a las mismas instrucciones que +.
El intrprete de elisp
Ya debes tener una buena idea de qu hace el intrprete de elisp cuando encuentra una lista:
si es inmutable, regresa la lista; si el primer elemento es un smbolo, busca 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 parntesis alrededor y sin
quote), en cuyo caso el intrprete intentar determinar el valor del 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 definir funciones. No hay muchas y las
iremos revisando conforme avancemos.
Si lo que el intrprete est tratando de evaluar no es una forma especial, 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, primero hace sa y
as sucesivamente. Una vez que concluye su trabajo (de evaluacin) con las listas internas,
hace lo que tiene que hacer con la lista actual.
294
Extendiendo tu ambiente
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 interesante de todas y la ms abstracta tambin. Por qu evala de adentro hacia afuera? La respuesta tiene dos partes: 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 expresiones
anidadas para usarlos. Por ejemplo, veamos que sucede cuando evaluamos (+ 2 (+ 3 4)) ; hazlo:
evala esa expresin.
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 realidad estuvieras
evaluando: (+ 2 7) .
Ahora ests en posicin de saber que C-x C-e evala el comando eval-last-sexp4
Actividad 9.26 Evala la expresin (+ 2 (+ 3 4)) , en distintas partes de la misma. Por ejemplo, pon el cursor al final y evala (debes obtener 9 otra vez); coloca el cursor sobre el ltimo
parntesis o detrs del parntesis que cierra (+ 3 4) y atrs de un nmero, etc. Qu pasa?
Puedes 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 instrucciones, 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 representan un
valor.
Algo muy importante es que un smbolo puede tener tanto un valor como una funcin
asociados. 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 contenido de
uno de los cajones sin perturbar al otro.
Por ejemplo, fill-column es una variable que existe en todos los buffers 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 valor: un nmero, como
70, una cadena "como esta" o a una lista (como esta otra ) . Incluso podemos enlazar una variable
a la definicin de una funcin.
Otra forma muy comn de evaluacin es M-: (eval-expression). Esta funcin viene desactivada por omisin, as que la primera vez que la ejecutes, en lugar de un prompt del estilo
Eval: en el rea de eco, Emacs te har preguntas que te permiten decidir qu hacer: activar
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.
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 dicha accin simplemente como evaluacin.
295
9.2 Emacs
Recapitulando, ahora sabes que una opcin para evaluar, que hemos usado mucho, es poner
la expresin en un buffer de Emacs, poner el cursor al final de la expresin y luego 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 las dos formas es
muy til y dependiendo del contexto puedes escoger la que ms te convenga.
Notaste que en la evaluacin de fill-column no usaste parntesis? Prueba evaluar
( fill column), por qu marca un error?
Ahora pon el cursor en el espacio en blanco despus del smbolo +, en la expresin (+ 2 2) ,
y evala. Qu error marca? Es igual a los errores anteriores? Si no son iguales, cul es la
diferencia entre ellos? Explica.
obtendremos "abcdef", es decir concat concatena todos sus argumentos (cadenas) en una sola
cadena.
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 cadena; el segundo es la posicin (dentro de esa cadena, empezando a contar desde 0) desde donde ser tomada la subcadena
resultado; el segundo nmero (tercer argumento) es la posicin a la derecha 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
entiendes algn resultado, evala las subexpresiones hasta que encuentres cul es el truco.
296
Extendiendo tu ambiente
( + 2 f i l l column )
( c o n c a t "wow , veo
( c o n c a t "wow , veo
(+)
()
(+ 1 2 3 4 5)
( + 1 ( 1 2 ) 4 ( + 2 f i l l column ) ( 1 2 10))
(+ 2 h o l a )
La funcin message
Al igual que la funcin +, message recibe un nmero variable de argumentos. 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 eco. 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 message en
tus programas, esto no suceder y el texto que vers se imprimir como un efecto secundario,
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 entrecomillado,
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 ) )
imprimir algo como: "El nombre de este buffer es : scratch " al ser evaluada, suponiendo que
s ests en un buffer llamado *scratch* cuando ejecutamos esto, s estbamos en uno llamado
as .
Si lo que quieres es imprimir un nmero en notacin decimal, entonces cambia 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 column )
297
9.2 Emacs
setq
Para asignarle a la variable flores la lista ( rosa violeta clavel azucena) puedes evaluar la
siguiente expresin:
( setq flores
( rosa v i o l e t a c l a v e l azucena ) )
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) flores 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 mismo tiempo. Por ejemplo,
para asignar una lista de flores a la variable flores y una lista de animales 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 azucena )
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 no hubiese cabido en
la pgina y adems los humanos podemos leer con mayor facilidad listas con un formato 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 apunte a la lista. Esto tambin
se llama referencia y es muy comn, as que a partir de este momento nos referiremos a este
tipo de asignaciones as.
Contador
En esta seccin construiremos un contador (muy sencillo) que usa setq. Dicho contador
puede ser usado para contar cuntas veces se repite una cierta parte de tu programa. 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 contador y dos
5
298
Extendiendo tu ambiente
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 n i c i a l i z a c i n
( s e t q c o n t a d o r (+ c o n t a d o r 1 ) )
; Incremento
contador
El texto que sigue a un carcter ; y hasta el fin de lnea, es un comentario que es ignorado
por el intrprete de elisp.
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 segunda
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 manera alternada;
despus 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 parte es la ms difcil. T
ya subiste esa parte, as que lo que sigue se ir haciendo ms sencillo conforme avancemos.
En resumen:
Los programas en elisp estn formados por expresiones, que son listas o tomos.
Las listas estn formadas por cero o ms tomos y listas interiores, separadas 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 smbolo 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 siguiente expresin tal y
como est escrita y no evaluarla.
Los argumentos son la informacin pasada a una funcin. Los argumentos de una funcin
se calculan evaluando el resto de los elementos de la lista, en la cual la funcin aparece
como el primer elemento.
Una funcin siempre regresa un valor cuando se evala (a menos que genere un error);
adems, tambin puede llevar a cabo alguna otra accin, llamada efecto secundario. En
muchos casos, el propsito principal de una funcin es crear un efecto secundario.
299
9.3 Evaluaciones
Actividad 9.30 Crea un contador que incremente de 2 en 2. Adems, escribe una expresin de
tal forma que cuando se evale despliegue un mensaje que diga El valor del contador es X,
donde X deber ser el valor actual del contador.
9.3.1.
Nombres de buffers
Las dos funciones, buffer-name y buffer-file-name, muestran la diferencia entre un archivo y un buffer. Cuando evalas ( buffer name), el nombre del buffer se despliega en el rea de
eco; cuando evalas ( buffer filename), el nombre del archivo visitado en el buffer se despliega. Usualmente el nombre del buffer es el mismo nombre del archivo que visita, mientras que
el nombre del archivo viene con su ruta completa al archivo.
Un buffer y un archivo son entidades completamente distintas. Un archivo es informacin
almacenada 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 cuando
mates el buffer). La distincin es importante porque nos permite distinguir entre acciones tiles
cuando hacemos programas. Sin embargo, muchas veces escuchars a gente decir estoy editando un archivo (en Emacs), en lugar de algo ms apropiado como estoy editando un buffer
que despus salvar a un archivo. Usualmente este tipo de ambigedades son comprensibles
por contexto para una persona, pero la computadora no es tan inteligente y cuando programas
en Emacs elisp es importante que le digas exactamente lo que deseas.
No todos los buffers de Emacs estn asociados a un archivo. Por ejemplo, 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*.
300
Extendiendo tu ambiente
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 )
Obteniendo buffers
La funcin buffer-name regresa el nombre del buffer, pero si lo que t quieres es el contenido del buffer, entonces debes usar current-buffer. Es decir, con current-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 recientemente seleccionado que no sea en el cual ests actualmente.
Actividad 9.32 Prueba las funciones buffer-name y other-buffer haciendo lo siguiente. Ve a
algn otro buffer en tu sesin actual de Emacs y de regreso a scratch; despus evalas las
dos funciones (recuerdas C-x b ?).
Cambiando de buffer
La funcin other-buffer es til cuando se utiliza con switch-to-buffer. De hecho, esta ltima es una de las funciones que debes usar con mayor frecuencia en Emacs, cuando 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 forma) la misma
funcin con los mismos argumentos.
En general, en programas preferimos set-buffer sobre switch-to-buffer; esto es porque los
humanos 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.
S tienen cerebros y bocas, por eso uno puede hablar con sus programas, incluso discutir, aplicarles
un correctivo o simplemente platicar con ellos.
301
buffer-size regresa el tamao del buffer, que no es otra cosa sino la cuenta de todos los
carcteres 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
primera posicin donde podemos trabajar en el buffer) y point-max la cuenta de caracteres
hasta la ltima posicin permisible del buffer.
Actividad 9.33 Evala las cuatro funciones nombradas en esta seccin. Despus 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 reducir nuestro espacio
de operacin a cualquier subconjunto del buffer actual; esto que se llama narrowing 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 preguntar cul es la primera posicin de esa seccin, y eso es lo que hace point-min.
point-max hace algo similar.
No desprecies estas funciones, ya que a pesar de su aparente simplicidad son sumamente tiles para hacer un gran nmero de funciones interesantes. De hecho, un gran nmero de
funciones de Emacs las utilizan y algunos de los ejemplos que veremos ms adelante tambin.
9.4.1.
302
Extendiendo tu ambiente
1. El nombre del smbolo al cual la funcin ser ligada, pegada, asociada7 .
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).
4. Opcionalmente, una expresin para hacer que la funcin sea interactiva, para que puedas
usarla tecleando M-x y el nombre de la funcin; o tecleando una combinacin de teclas
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, a continuacin te presentamos una funcin que multiplica su argumento (un
nmero) por 7:
( 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 . "
( 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 documentacin, " 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, evala
la definicin 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 )
Del verbo en ingls attach y que significa algo as como ligar, pegar o adjuntar.
303
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 primera versin, la instalas,
la pruebas y luego haces correcciones y vuelves a instalar, probar, en un ciclo hasta que quede
como la deseas.
304
Extendiendo tu ambiente
cleando 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-whole-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 de eco. La razn es que
muchas de estas funciones son hechas por sus efectos secundarios, como avanzar una lnea o
borrar una palabra, y no por el valor que regresan. Si el valor regresado apareciera en el rea de
eco distraera mucho al usuario.
Una versin de nuestra multi-citada funcin multiplica-por-7 puede 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 )
" 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 funcin de manera
interactiva: teclea C-u 6 M-x multiplica-por-7 Enter y vers el mensaje El resultado 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 prefijo 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 ligada la definicin,
como en C-u 3 M-e .
Ambos ejemplos mencionados hacen lo mismo: mueven el punto tres oraciones hacia adelante (dado que multiplica-por-7 no est ligado a ninguna tecla, entonces no podemos 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 prefijo 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, ejecutando
C-u M-x multiplica por7
En nuestro ejemplo, la expresin ( interactive "p") le dice a Emacs que pase el argumento
prefijo a la funcin y que use su valor (el del argumento prefijo) como argumento de la funcin.
305
La letra B le dir a Emacs que pida un nombre de buffer que ser pasado a la funcin.
No slo eso, sino que puedes usar una etiqueta para preguntar por el buffer y, adems, 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 forma 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 " )
le dice a Emacs que pida un buffer, que ser el primer argumento de la funcin, y que adems
pase el valor de la marca y el punto (la regin) como segundo y tercer valor (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 que la funcin,
as que a una funcin sin argumentos le corresponde una forma interactive sin argumentos,
( interactive ) .
9.4.2.
let
Una expresin let tambin es una forma especial que usars en muchas definiciones de
funciones. Su uso es til para ligar un smbolo a un valor, de forma tal que 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 cual t te refieres 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 oyes mi
casa piensas en tu casa, te confundirs sin lugar a dudas. Ahora imagina que dos funciones
usan una variable y que dicha variable se llama igual, pero debe tener distintos valores para
cada funcin.
let evita este tipo de confusiones. Lo que hace es crear un nombre que opaca, o mejor
dicho oculta, a cualquier referencia externa a ese mismo nombre en el cuerpo del let.
Una expresin let tiene tres partes: (let varlist cuerpo...). La primera parte es el smbolo
let, el segundo es una lista, identificada como varlist; cada elemento de la lista es un smbolo o
una lista de dos elementos, el primero de los cuales es un smbolo y el segundo 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 resultado.
Por lo tanto, una varlist puede lucir as: (num (sex f )) , en cuyo 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:
306
Extendiendo tu ambiente
( 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 imprime sus valores. El cuerpo
consiste slo de la llamada a message:
( l e t (( zebra rayas )
( tiger feroz ))
( 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 tiene 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 let para almacenar los
resultados intermedios. Tambin puedes hacer una funcin auxiliar que reciba dos nmeros
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 indispensable para escribir funciones, pero su uso es muy comn y por eso est aqu. La funcin beginning-of-buffer
la usa, por ejemplo.
La idea bsica detrs de if es que si (if) algo es verdadero, entonces algo se hace, por
ejemplo, si el cielo est despejado y hace calor, entonces ve a la playa. En elisp 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 conocida 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 . " ) )
307
La funcin > prueba si el primer argumento es mayor que el segundo y regresa verdadero
si lo es.
En la vida real, claro est, la prueba no es fija, usualmente depende de una variable. Por
ejemplo,
1
2
3
4
5
( d e f u n t i p o dea n i m a l ( c a r c t e r )
" 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 .
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 . "
( i f ( equal carc ter feroz )
( m e s s a g e " Es un t i g r e " ) ) )
Vamos no seas tmido, evala nuevamente la funcin y prubala con feroz , amistoso, y otros
smbolos que se te ocurran.
9.4.4.
save-excursion
La funcin save-excursion es la cuarta y ltima forma especial que revisaremos en este
material.
En elisp es comn hacer programas para editar; la funcin save-excursion es comnmente
usada, ya que guarda las posiciones del punto y la marca, ejecuta el cuerpo de la funcin y
luego regresa el punto y la marca a sus valores previos, si es que fueron cambiados por la accin
308
Extendiendo tu ambiente
de la funcin. Su nico propsito es evitar darle sorpresas inesperadas o molestas 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-excursion es una
buena prctica de programacin.
save-excursion incluso recupera los valores de la marca y el punto, 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 . . . )
aunque es usual que save-excursion ocurra dentro de una expresin let, como 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 especiales. Aqu las
describiremos brevemente, para que te acuerdes rpidamente cmo se usan y tambin mencionaremos algunas funciones ms que son parecidas.
eval-last-sexp Evala la ltima expresin simblica anterior a la posicin actual 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 comando est usualmente
ligado a C-x C-e .
defun Define function. Esta forma especial tiene hasta cinco partes: el nombre, un esqueleto para los argumentos que sern pasados a la funcin, documentacin, una declaracin
interactive opcional y el cuerpo de la definicin.
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 interactivamente. Esta
forma especial puede ir seguida de una cadena con una o ms partes que pasan informacin
a los argumentos de una funcin, en secuencia. Estas partes tambin le pueden indicar al
309
intrprete que solicite informacin del usuario. Las partes de la cadena se separan 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) prefijo. (Nota que esta p es minscula).
r El punto y la marca, pasados como dos argumentos numricos, el ms pequeo (cualquiera que ste sea) primero. ste es el nico carcter de control que especifica 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 fuera del let8 .
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 de 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
equal Prueba si dos objetos son el mismo. equal regresa verdadero si los objetos
eq
tienen la misma estructura y contenidos. eq regresa verdadero si los dos objetos son en
realidad el mismo objeto.
8
Esto representa un concepto muy importante en lenguajes de programacin, llamado alcance lxico,
pero 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
< <= La funcin < verifica si su primer argumento es menor que el segundo; las dems
> >= revisan respectivamente menor o igual, mayor y por ltimo mayor o igual. Las cuatro
funciones reciben argumentos numricos.
message Imprime un valor en el rea de eco. El mensaje slo puede ser de 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 por %s
debe ser una cadena. El argumento usado por %d debe ser un nmero. El argumento
usado por %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 mismo 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, como cadena.
buffer-file-name Sin argumentos, regresa el nombre del archivo que el buffer actual est
visitando.
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 distinto 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 corrern. 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
final 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 fill-column es mayor que
el argumento pasado a la funcin, y si lo es, que mande el mensaje apropiado al rea de eco.
311
9.5.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 ( )
" 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 ;
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 . "
( interactive )
( pushmark )
( g o t o c h a r ( p o i n t min ) ) )
Nota que tiene sus cinco partes como toda buena definicin. La parte que no conoces an,
es el cuerpo de la funcin, que en este caso consta de dos expresiones:
5
6
( pushmark )
( 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 intrprete lo que hace es poner la
marca en la posicin actual del cursor, en donde sea que ste est. Dicha posicin 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 parece obvio, pero en la
prctica uno usualmente desea regresar al inicio del buffer temporalmente, como por ejemplo
312
Extendiendo tu ambiente
para hacer un pequeo ajuste en las lneas iniciales, para revisar algn dato o alguna otra actividad. Sin embargo, el punto ms importante es usualmente el de edicin ms reciente, as que
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-char, recuerda que puedes
usar C-h f , seguido del nombre de la funcin, para terminar con Enter para obtener su
documentacin.
Actividad 9.38 Escribe la funcin simplified-end-of-buffer.
La definicin de mark-whole-buffer
Esta funcin, mark-whole-buffer, no es ms difcil que nuestra versin simplificada de
beginning-of-buffer y, a diferencia de aqulla, sta no est simplificada; veremos la versin
real.
Lo que hace mark-whole-buffer es poner el punto al inicio del buffer y la marca al final; no
es tan usada como las anteriores, pero es importante. Usualmente est ligada a C-x h . Luce
as:
1 ( d e f u n markwholeb u f f e r ( )
2
" Pone e l p u n t o a l i n i c i o y l a marca a l f i n a l 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 t min ) ) )
En esta funcin, las ltimas dos expresiones ponen la marca al final del buffer 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 de 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 dijimosq que pushmark empuja la marca a un anillo que puedes recorrer; por omisin C-x C-x te lleva a la
posicin 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
argumento prefijo, brinca a esa marca en el anillo local de marcas; vamos, intntalo! Ejecuta
dos veces C-u CSpace y ve lo que sucede!
La definicin de append-to-buffer
La funcin append-to-buffer copia una regin (la regin actual en el buffer actual) a un
buffer especificado. Usaremos la funcin insert-buffer-substring para copiar la regin; como
es de esperarse, esta ltima recibe dos posiciones, la inicial y la final, y el buffer del cual debe
extraer la subcadena comprendida entre dichas posiciones.
313
Esas posiciones no son otras que el punto y la marca (que rodean la regin) en el buffer
actual; aqu est nuestra definicin:
( 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 nuevas; 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 un buffer,
marca una regin (pon la marca y mueve el punto un par de lneas abajo, por ejemplo). Ahora
regresa al buffer *scratch*, copia y evala esta funcin y pon el punto al final del buffer.
A continuacin, regresa al buffer del archivo que acabas de abrir (donde 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*); presiona Enter
y vers aparecer la regin en el buffer *scratch*.
Muy bien. Ahora, qu es lo que pas? Vamos por partes:
1. Slo necesitamos tres argumentos, el nombre del buffer al que vamos 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 ") , solicita 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 insert-buffersubstring, que espera su segundo argumento sea menor o igual que su tercer argumento,
no tendremos ningn problema.
3. El cuerpo consta de una expresin let, que es la primera que vemos en accin. La usamos
para guardar el buffer actual (el fuente) en una variable local llamada 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 guarde la informacin
adecuada y nos regrese aqu cuando acabe la funcin.
5. set-buffer es nueva, aunque ya la habamos explicado en el la seccin 9.4.5. Lo que hace es cambiar la atencin de Emacs (si no est en la ventana, no aparecer por la accin
de esta funcin) al buffer que recibe como parmetro. En este caso, le dice a Emacs,
( set buffer ( getbuffercreate buffer )) , que se cambie al buffer destino, pero oh sorpresa! aqu nos encontramos con otra funcin nueva: get-buffer-create, y, para no variar con
314
Extendiendo tu ambiente
los nombres largos 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; finalmente, si es una cadena pero no hay ningn
buffer en Emacs con ese nombre, crea uno nuevo y se mueve a l.
6. Por ltimo, tenemos ( insert buffersubstring oldbuf start end) que lo nico que hace es
cortar la subcadena comprendida entre start y end en nuestro buffer origen (recuerda que
guardamos su contenido en la variable oldbuf) y luego insertarla en 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 variable.
describe-variable Usualmente estn ligadas a C-h f y C-h v , respectivamente.
push-mark Pone la marca en una localidad particular y almacena el valor de la marca anterior
en el anillo de marcas. La marca es una posicin en el buffer que mantendr su posicin
relativa aun cuando sea agregado o eliminado texto del buffer.
goto-char Pone el punto en la posicin especificada por el valor de su argumento, 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 se pasa como argumento
a la funcin en el buffer actual.
mark-whole-buffer Marca todo el buffer como una regin. Usualmente est ligado a C-x h .
set-buffer Cambia la atencin de Emacs a otro buffer, pero no cambia la ventana que est
siendo desplegada. Se usa cuando un programa (a diferencia de un humano) va a trabajar
en un buffer distinto.
get-buffer-create Encuentra un buffer nombrado o crea uno si un buffer con ese
get-buffer nombre no existe. La funcin get-buffer regresa nil si el buffer nombrado no existe.
Actividad 9.39 Usa if y la funcin get-buffer para construir una funcin interactiva que imprima un mensaje diciendo si un buffer dado existe o no.
315
La funcin cons es una abreviatura de la palabra construct y sirve justamente para construir
listas. Las otras dos funciones, desgraciadamente, tienen nombres esotricos, y desafortunados
porque no significan absolutamente nada til; por razones histricas se siguen usando y en
funciones de Emacs siguen apareciendo, as que aqu tambin los usaremos. Pero puedes pensar
en ellas como primer elemento, el car, y el resto de la lista, el cdr (que por cierto, 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 copyregion-as-kill, una funcin de Emacs muy til y relativamente ms compleja que todas las
anteriores.
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 first (y de
hecho este nombre tambin existe en Emacs elisp; est definido como un alias de car en 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 significa que car es una funcin no
destructiva.
cdr de una lista es el resto de la lista, esto es, cdr regresa la 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. Claramente, un mejor nombre
para cdr sera rest y al igual que first, rest tambin existe (en el paquete cl.el) y es un alias de
cdr.
Cuando car y cdr se aplican a listas de smbolos (como en los ejemplos 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 ejemplo:
( 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)).
316
Extendiendo tu ambiente
cons
La funcin cons construye una lista; es la inversa de car y cdr. Por 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
( cons
( cons
( cons
azucena
clavel
violeta
rosa (
())
( azucena ) )
( c l a v e l azucena ) )
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 lista vaca, pero recuerda
que es exactamente lo mismo que usar nil .
Los valores que obtendrs una vez que evales las expresiones, representan el nmero de
elementos 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 lista ( 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 destructiva). 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
ejemplo, el argumento 2 se pasa a la funcin nthcdr, junto con la lista, y el valor 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 ) )
317
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 aplica 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 setcdr (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 confirmar que la variable
animales ahora apunta a la lista ( girafa antilope tigre leon) . A continuacin, evala la funcin
setcar pasndole dos argumento, la variable animales y el smbolo citado hipo; es decir, evala:
( s e t c a r animales hipo )
Vers el smbolo hipo aparecer en el rea de eco. Ahora evala nuevamente la variable 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.
Por ejemplo, asigna el valor de una variable animalesdomesticables, evaluando la siguiente
expresin:
( 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
( gato cocodrilo ) )
Vers la lista (gato cocodrilo ) aparecer en el rea de eco. se es el valor de regreso de la funcin;
ahora verifica su efecto secundario, evaluando animalesdomesticables.
Actividad 9.41 Construye una lista de aves evaluando varias expresiones 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, claro, que la
variable donde guardaste tu lista se llama aves. Reemplaza la primera ave de tu lista con un
pez. Reemplaza el resto de las aves en la lista con peces.
318
9.6.2.
Extendiendo tu ambiente
La funcin cons puede usarse para aadir una pieza de texto a esta lista, 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 segundo 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 ")))
zap-to-char
La funcin zap-to-char elimina el texto en la regin comprendida entre la 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 prefijo, entonces elimina el texto hasta encontrar ese 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 prefijo fuese 2, Entonces, s sera eliminado.
Para determinar cunto texto tiene que ser eliminado, zap-to-char utiliza una funcin de
bsqueda. Las bsquedas se usan extensivamente en el cdigo que manipula texto en Emacs,
por lo que mientras revisamos estas funciones te rogamos pongas especial atencin en la funcin
de bsqueda y en la de borrado.
319
( 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 .
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
no e s e n c o n t r a d o . "
( i n t e r a c t i v e " p \ ncZap t o c h a r : " )
( k i l l r e g i o n ( p o i n t )
( progn
( 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 )
( point ) ) ) )
1
2
3
4
5
6
7
8
9
( 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 cuerpo 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 adelante, searchforward, 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 punto inmediatamente
despus del ltimo carcter en la cadena objetivo (en este caso, la cadena objetivo 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 verdadero,
por lo que mover el punto es un efecto secundario.
En zap-to-char, la llamada a la funcin search-forward luce como:
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 )
320
Extendiendo tu ambiente
b) El segundo argumento limita la bsqueda; es una posicin especfica en el buffer.
En este caso, la bsqueda puede ir hasta el final del buffer, por lo que no estamos
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 . Usar nil como tercer
argumento provoca que la funcin marque un error.
d) El cuarto argumento para search-forward es una cuenta de repeticin cuntas
presencias de la cadena debe buscar. Este argumento es opcional y si la funcin se
llama sin una cuenta de repeticin, la funcin recibe por omisin 1. Si este argumento
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
4. La funcin progn es tal que provoca que todos sus argumentos sean evaluados 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-region 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 localizacin 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 que
aqu te va un resumen de cmo funciona zap-to-char ahora que sabes cmo funcionan todas
las 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 despus 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 segundo como
el punto final de sta y elimina la regin.
La funcin progn es necesaria porque kill-region recibe slo dos argumentos; y fallara si
search-forward y point fueran escritas en secuencia, en lugar de como argumentos de progn.
Es decir que progn es el segundo argumento de kill-region y su valor de regreso es el valor que
regresa ( point ) .
Obviamente, sta no es la nica manera de hacer esta funcin: bien pudimos haber guardado
el valor regresado por search-forward en una variable local (con let) y luego usarlo en kill-
321
region. 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: progn.
9.6.3.
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
9.6.4.
Extendiendo tu ambiente
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 haber ejecutado un
kill-region, Emacs junta la seccin de texto recin copiada con la anterior. Esto significa 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 copia
el texto en una entrada separada en el anillo de la muerte.
Aqu est el cdigo de la funcin. Probablemente en versiones muy recientes de Emacs sea
distinto; de cualquier forma esta versin es lo suficientemente compleja e interesante para que
la analicemos aqu.
1
2
3
4
5
6
7
8
9
10
11
Si revisas con cuidado la definicin notars que tiene sus cinco partes. Los dos argumentos,
beg y end y el cdigo r de interactive (que regresa la regin, como dos argumentos numricos
consecutivos) deben darte una idea respecto a qu hacen referente al inicio (beg, por beginning) y
fin (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 exhaustivamente y
curiosamente stos son los nombre favoritos para nombres de parmetros en funciones que
manejan 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 ste 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 command 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 detallada y la mostramos a
continuacin:
El cuerpo
La funcin copy-region-as-kill fue escrita con sumo cuidado para poder:
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 esto, pero eventualmente
lo sabrs.
Todo lo que matas (o los comandos que matan hacia adelante) se aaden al final del texto
copiado 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 el valor de last command
al valor anterior de this command. Sin embargo, el comando copy-region-as-kill es diferente;
asigna el valor de this command a kill region, que es el nombre de la funcin que llama a
copy-region-as-kill.
En la primera parte del cuerpo de copy-region-as-kill, una expresin if determina si el valor
de last command es kill-region. Si lo es, la parte entonces del if se evala; usa la funcin killappend 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 no es
kill-region, entonces la funcin copy-region-as-kill agrega un nuevo elemento al anillo de la
muerte.
La funcin kill-append
La funcin kill-append que se usa en la definicin de copy-region-as-kill se muestra a
continuacin:
( d e f u n k i l l a p p e n d ( s t r i n g b e f o r e p )
( s e t c a r k i l l r i n g
( i f b e f o r e p
( c o n c a t s t r i n g ( c a r k i l l r i n g ) )
( c o n c a t ( c a r k i l l r i n g ) s t r i n g ) ) ) )
Como siempre, podemos analizarla por partes (nota que no tiene documentacin). La funcin setcar utiliza concat para concatenar el nuevo texto al car del anillo de la muerte. Si
pre-agrega o post-agrega, depende del resultado de la expresin if:
( i f b e f o r e p
( c o n c a t s t r i n g ( c a r k i l l r i n g ) )
( c o n c a t ( c 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 que est en
el car del anillo de la muerte.
324
Extendiendo tu ambiente
El smbolo beforep es el nombre de uno de los argumentos de kill-append. En la funcin
copy-region-as-kill su valor se calcula con (< end beg), lo que es verdadero cuando el texto que
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 funciona concat.
La funcin concat liga o une dos cadenas de texto. El resultado es una cadena. Por ejemplo,
( c o n c a t " abc " " def " )
regresa "abcdef".
Ahora s, podemos entender rpidamente cmo funciona kill-append: modifica 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 elemento del anillo
con un nuevo primer elemento que se obtiene concatenando el viejo texto con el nuevo (el texto
recin muerto, esto es). El nuevo texto se pone antes que el viejo o al revs, dependiendo de si
estaba antes o despus en el buffer, respectivamente.
( s e t q k i l l r i n g
( 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 sirve nicamente para
mantener 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. Esto se logra con
la seccin de cdigo:
8
9
( 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 )
( 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, entonces convierte en nil
el ltimo elemento del anillo de la muerte. Ya vimos las funciones setcdr y nthcdr as que esto
325
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:
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 inmediatamente 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 primer elemento a la lista que
recibe como segundo argumento. Si no recibe una lista como segundo argumento, entonces
crea lo que se conoce como una lista impropia, aunque todo lo 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 valor 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 argumento 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.
326
Extendiendo tu ambiente
delete-region Elimina el texto entre el punto y la marca del buffer y lo descarta. No puedes
recuperarlo.
copy-region-as-kill Copia el texto entre el punto y la marca al anillo de la muerte para que
puedas recuperarlo. La funcin ni corta ni mueve el texto del buffer.
Actividad 9.42 Escribe una funcin interactiva que busque una cadena. Si 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 funcin
existente que viene con Emacs. Usa un nombre como busca.)
Actividad 9.43 Escribe una funcin que imprima el tercer elemento del anillo de la muerte en
el rea de eco, si existe, claro. Si el anillo de la muerte no tiene un tercer elemento, manda un
mensaje apropiado.
9.7.1.
Quin o qu es ASCII?
Es comn imprimir la tabla de carcteres ASCII10 , pero obviamente hacerlo 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 hace 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 ) ) ) ) )
10
ASCII son las siglas de American Standard Code for Information Interchange, aunque se utiliza
para referirnos al conjunto de codificacin que predomin hasta hace un par de aos. Hoy da Unicode
es el estndar de facto para codificacin.
327
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 )
Evala BODY ligando VAR a un entero sucesivo desde 0 (cero) inclusive, 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: primero 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 imprimiendo cada valor numrico
y su correspondiente carcter. Esto lo hace la funcin format. Lo que sigue, sirve para agregar
una nueva lnea cada que hemos impreso diez parejas y no tiene mayor complicacin.
9.7.2.
328
Extendiendo tu ambiente
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-string (lnea 5) que convierte
un entero a una cadena. Todo lo dems debe ser medianamente obvio, salvo quiz por el detalle
de la variable llamada padding (lnea 5), que la usamos para saber de cuntas posiciones tiene
que ser la cadena que vamos a agregar.
El razonamiento que usamos fue el siguiente: si hay seis lneas en la regin, entonces el
grueso de la cadena que tenemos que agregar en cada lnea es: un carcter (para el 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 sucesivamente. Pues
bien, padding lnea 9 es justamente el nmero de carcteres que debe ocupar el nmero de
lnea, y format entiende ese parmetro y agrega los espacios en blanco necesarios a la izquierda
del nmero.
9.7.3.
Una de los aspectos ms interesantes de Emacs es que sabe cmo indentar el texto de mis
programas. Sin embargo, como casi cualquier otra cosa en esta vida, no es perfecto. Por ejemplo,
digamos que al final 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 lnea y luego, digamos
otros siete espacios en blanco para que comiences a poner el cuerpo del 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 final 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 veces 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 cursor 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 instintivo
si as lo prefieres, 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 modifican el comportamiento de la funcin que
se ejecuta cuando presionamos BackSpace , pero algunos no. Aqu est una versin 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
329
( d e f u n mye l e c t r i c d e l e t e ( a r g )
" B o 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 l a n c o s e s p a c i o s ,
t a b u l a d o r e s , y n u e v a s l i n e a s . S i myhungry d e l e t e key no
e s n i l , e n t o n c e s t o d o s l o s b l a n c o s que p r e c e d e n l a p o s i c i n
a c t u a l son b o r r a d o s . "
( i n t e r a c t i v e "P ")
( i f ( o r ( n o t myhungry d e l e t e key )
arg )
( 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 ) )
( l e t ( ( here ( point ) ) )
( s k i p c h a r s b a c k w a r d " \ t \ n " )
( i f (/= ( point ) here )
( d e l e t e r e g i o n ( p o i n t ) h e r e )
( f u n c a l l myd e l e t e f u n c t i o n 1 ) ) ) ) )
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: prefix-numeric-value que
regresa el valor numrico del argumento pasado a la funcin y funcall que evala 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-function, pero tal funcin no
existe y de existir probablemente no sera lo que nosotros buscamos. Es una variable, cuyo valor
es, as es adivinaste: el nombre de una funcin. Hablemos un poco sobre la razn de hacerlo as;
porque si lo piensas dos veces parece una complicacin innecesaria; por qu no ponemos ah
el nombre de la funcin que es el valor de my-delete-function? Porque hay muchas funciones
similares para borrar carcteres y quieres darle la oportunidad a los usuarios de utilizar la que
mejor les acomode.
Ahora, qu pasa si la condicin del if es falsa? Se ejecuta la siguiente 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 blancos (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 un carcter.
Nuevamente borramos con la funcin para borrar que el usuario quiera.
Por ejemplo, para programar en elisp, puedes poner esto en tu /.emacs:
330
Extendiendo tu ambiente
que bsicamente le dice a Emacs que cada vez que tecleas Enter , debe 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.
( 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 )
" 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
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 . "
( 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 ) )
( 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 )
" 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
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 . "
( l e t ( ( i n d e x ( i n d e x o f c h a r s t r 0 ) ) )
( i f ( n u l l index )
( i f ( s t r i n g e q u a l s t r " " )
( reverse res )
( r e v e r s e ( cons s t r r e s ) ) )
( 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 ) )
( cons ( s u b s t r i n g s t r 0 index )
res ) ) ) ) )
( d e f u n i n d e x o f ( c h a r s t r c o u n t )
" 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
en l a c a d e n a STR empezando en COUNT . "
( cond ( ( s t r i n g e q u a l s t r " " ) n i l )
( ( 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 )
( 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 ) ) ) ) )
331
string-tokenizer es la funcin interfaz y recibe dos parmetros, la cadena que vamos a seccionar y el carcter que separa las secciones. Por la pregunta con la que iniciamos 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 especializacin de string-tokenizer que sirva para separar palabras en una oracin.
Bien. Nota que esta funcin no hace ms que llamar a string-tokenizer-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 parmetro para ir
almacenando las secciones (o sub-cadenas).
Veamos entonces cmo funciona string-tokenizer-aux. Primero calcula 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 si 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 afirmativa, regresamos el resultado en reversa
(ms adelante explicar por qu en reversa). Si la cadena an no es la cadena vaca, quiere decir
que el contenido completo de la cadena debe ser la ltima parte del resultado (ya no se puede
separar ms); asi que lo agregamos al resultado y lo regresamos.
Como la funcin string-tokenizer-aux es una funcin recursiva, tiene dos partes importantes. La primera, la clusula de escape, que es la parte que acabamos de revisar 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
que 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 funcin misma, pero ahora usando como parmetros: (1) el mismo carcter separador; (2) el
resto de la cadena (despus del primer carcter separador y sin incluirlo) y (3) con la nueva lista
resultado que ya tiene en su primera posicin la cadena recin cortada.
Esto se repite tantas veces como carcteres separadores contenga la cadena inicial, hasta
que fnalmente termina y regresa la lista. Por ejemplo, supn que hacemos la siguiente llamada:
( s t r i n g t o k e n i z e r ?
La notacin ? (signo de interrogacin y espacio) le dice a Emacs que le estamos pasando un carcter, en este caso un espacio blanco. Lo que regresar es una lista de la forma
(" es" "una" " bonita " "cadena") . Nota cmo ninguna de las sub-cadenas (palabras) contiene al
carcter separador.
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 que estbamos
332
Extendiendo tu ambiente
buscando es encontrado. Su tercer parmetro es un contador, que si le pasamos 0 (cero) nos
regresar el ndice en la cadena donde se encuentra el carcter separador por primera vez. Los
siguiente ejemplos deben aclarar un poco la situacin:
( i n d e x o f ? " e s una b o n i t a c a d e n a " 0 )
2
( i n d e x o f ? " una b o n i t a c a d e n a " 0 )
3
que si cuentas desde 0 son los ndices del primer espacio en blanco en ambos casos. Para redondear la idea de la recursividad, estos ejemplos siguen el comportamiento de 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 ? " e s una b o n i t a c a d e n a " ( ) )
( s t r i n g t o k e n i z e r aux ? " una b o n i t a c a d e n a " ( " e s " ) )
( s t r i n g t o k e n i z e r aux ? " b o n i t a c a d e n a " ( " una " " e s " ) )
( s t r i n g t o k e n i z e r aux ? " c a d e n a " ( " b o n i t a " " una " " e s " ) )
( s t r i n g t o k e n i z e r aux ? " " ( " c a d e n a " " b o n i t a " " una " " e s " ) )
( r e v e r s e ( " c a d e n a " " b o n i t a " " una " " e s " ) )
( " e s " " una " " b o n i t a " " c a d e n a " )
Esto tambin debe aclarar por qu tenemos que regresar el resultado en reversa: porque fuimos metiendo las sub-cadenas al inicio de la lista. Si las furamos metiendo al final no habra
necesidad, pero lucira ms compleja la funcin.
Por ltimo, decimos que las funciones index-of y string-tokenizer-aux estn ambas en
forma recursiva de cola, primero porque son recursivas y segundo porque lo ltimo que hacen
es llamarse a s mismas. Una funcin recursiva puede hacer muchas llamadas a s misma, pero
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 llamadas 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, hasta COUNT (excluyndolo). Despus evala RESULT para obtener el valor de regreso, o regresa nil por
omisin.
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 , entonces 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 cadena 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 flotante.
funcall Evala el primer argumento como si fuera una funcin, pasndole el resto de los argumentos como sus parmetros. Por tanto, ( funcall cons x y) regresa (x . y) .
Apndices
Distribuciones de
Linux
Existen varias formas de instalar Linux en tu computadora. A lo largo de este libro se utiliz Ubuntu, pero hay muchas ms opciones. Segn www.distrowatch.com, en este momento
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 empezar a usar
Linux no necesitas instalarlo de forma permanente en tu computadora, ya que muchas 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
utilizas actualmente. A lo largo de este apndice te presentaremos algunas de las distribuciones
ms comunes 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 de 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 liberacin de nuevas
versiones. Para evitar eso, los desarrolladores de Ubuntu se han comprometido a liberar una
338
Distribuciones de Linux
nueva versin cada seis meses. Adems los principales objetivos de Ubuntu son:
Mantener por siempre su gratuidad, y que nunca haya un costo adicional 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 Ubuntu 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 de desempacar los
archivos, copiarlos a su destino y ejecutar las operaciones para que el nuevo software 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
interfaces, 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 que deseamos instalar;
para ello haremos uso de la herramienta apt-cache. Mediante sta podremos consultar la lista
de paquetes disponibles y ver cul de ellos es el que nosotros deseamos. Estas 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
339
A.2 Debian
% apt-cache search emacs
De esa forma le indicamos a apt que debe buscar la lista de paquetes y regresarnos todos
los que contengan la palabra emacs en su nombre o su descripcin. Esto regresar 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
Esa instruccin puedes ejecutarla con ms de un paquete para que encuentres cul es el que
deseas instalar. Una vez hecho eso, ser necesario ejecutar el comando de instalacin de apt:
% sudo apt-get install emacs21-common
Con lo cual apt te informar qu paquete se va a descargar y cunto espacio utilizar. En
caso de que existan dependencias no resueltas, te informar cules son los paquetes 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 distribuido por el Proyecto Debian. Su objetivo principal es distribuir un conjunto de software que sea capaz 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 tres estados:
stable (estable). Contiene los paquetes oficiales; 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 habr paquetes que no
funcionarn del todo bien, pero tambin tiene los paquetes ms nuevos.
Conforme va pasando el tiempo, los paquetes pueden pasar de una distribucin inestable a
una de prueba y de ah, despus de una revisin minuciosa, finalmente llegan a estable. Muchas
personas consideran a Debian como la distribucin ms robusta de Linux2 , siendo esto una consecuencia de la enorme cantidad de paquetes que tiene disponibles en sus repositorios, todas las
arquitecturas que soporta y la garanta de que en su versin estable todo est probado. Por desgracia, esto puede ocasionar que la versin estable sea obsoleta, pues revisar todos esos paquetes
para garantizar que todo es seguro lleva mucho tiempo. Esto puede no ser un problema si utilizas
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 el 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 desarrollados en contacto con la comunidad de software libre. Originalmente Red Hat tena una sola distribucin
2
341
A.3 Fedora
homnima a la compaa, pero en el 2003 sta desapareci. Red Hat dividi sus esfuerzos en
dos direcciones: el proyecto Fedora mantendra lo que antes era la distribucin del sistema operativo y Red Hat Enterprise se encargara de atender a los clientes empresariales. El propsito
del proyecto Fedora es y ha sido apoyar el rpido progreso del software libre y de su contenido. Esto incluye tener procesos abiertos al pblico, transparencia y rpida innovacin. Puedes
obtenerlo en http://fedoraproject.org/.
A.3.2.
Manejo de software
El manejo de paquetes de Fedora es mediante el uso de archivos . rpm, los cuales se instalan
haciendo uso de la herramienta rpm3 . Para resolver las dependencias 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 que 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 l f d 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 s p e 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 i s p ) , 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 i n g 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
5.0 3
installed
Matched from :
The R e a d l i n e l i b r a r y p r o v i d e s a s e t o f f u 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 n e s . Both Emacs and v i e d i t i n g modes
a r e a v a i l a b l e . The R e a d l i n e l i b r a r y i n c 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 a i n i n g a l i s t o f p r e 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 o r e d i t i n g t h o s e l i 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 n s i o n on p r e v i o u s commands .
Una vez que sabes cual es el nombre del paquete que quieres instalar, debes ejecutar como
root la instruccin:
3
4
342
Distribuciones de Linux
% yum install emacs.i386
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
344
Configurando la compilacin
Veamos cmo se configuran los parmetros de compilacin. Para hacer eso utilizamos herramientas de UNIX que se llaman automake y configure. El desarrollador que prepar los fuentes para instalar se encarg de utilizar un guin de instalacin con automake para que nosotros
podamos compilar con configure. De esa forma configure se encarga de buscar en dnde 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 configure tenga
permisos de ejecucin; en caso de que no sea as puedes otorgrselos con chmod +x configure;
una vez hecho eso ejectalo con ./ configure . Vers que empieza a revisar si tienes instaladas
todas 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 configure indica
que no puede encontrar el compilador de C, gcc; entonces vers algo como:
checking
checking
checking
checking
configure
f o r g c c . . . no
f o r c c . . . no
f o r c c . . . no
f o r c l . . . no
: 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 con suerte, bastar con
utilizar tu manejador de paquetes mientras que en el peor de los casos tendrs que compilar
tambin ese paquete. Para instalar gcc y de paso g++1 en Ubuntu basta con ejecutar sudo aptget install gcc g++. as que si una vez heco esto ultimo vuelves a ejecutar config, deber seguir
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
necesario para compilar amsn; cuando configure se detenga y nos indique que no encuentra
la biblioteca necesaria, recurrimos a apt para instalarla. En este caso es necesario instalar el
paquete de desarrollo, pues queremos compilar cdigo fuente. Los paquetes de desarrollo en
Linux tienen la terminacin dev. Ejecutamos entonces sudo aptget install tk8.4dev, y una
1
345
vez ms ./ configure . Ahora amsn debera compilar sin problemas2 . En caso de que quieras
modificar algn parmetro de la instalacin de amsn, puedes ejecutra ./ configure help, lo
cual te mostrar las opciones disponibles.
Compilando
Cuando configure termina exitosamente su ejecucin, puedes compilar el programa. Al
terminar, configure crea un archivo de nombre Makefile en el archivo en donde se encuentra el
cdigo fuente. Dentro de ese archivo se encuentran las opciones y rutas que se prepararon en
el seccin B.1. La herramienta que lee el archivo Makefile, lleva el mismo nombre, makefile, y
se invoca con el comando make. En caso de que no est instalada, nuevamente recurrimos a
apt, sudo aptget install make. Ahora, colocndonos en el directorio en donde se encuentra el
archivo Makefile, 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, sudo 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 puedes repetirlo para la
mayora del cdigo fuente que quieras compilar e instalar. Si existe un paquete para la aplicacin
que deseas instalar dentro del manejador de paquetes de tu distribucin, es mejor idea usarlo
y no compilar a pie. Si compilas e instalas pierdes las ventajas del manejador, como saber
fcilmente qu aplicaciones tienes instaladas y en qu versin estn, o el desinstalar fcilmente4 .
Emacs: archivos
de configuracin
A lo largo de este libro hemos revisado Emacs y muchas extensiones, subsistemas y paquetes para extender la funcionalidad bsica de Emacs. Conforme avanzamos, explicamos las
distintas opciones y lneas de configuracin, 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 un 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 l o c k
; ;
( 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 )
; ; C o l o r theme :
( addt o 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 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 )
( c o l o r themec h a r c o a l b l a c k )
348
; ; 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 Emacs , no
requieres 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 )
349
C.2 /.vm
( 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 matchwords )
; ; 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 )
; ; 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 . e l " )
( s e m a n t i c l o a d e n a b l e codeh e l p e r s )
( addt o l i s t l o a d p a t h ( expandf i l e name " ~ / e l i s p / j d e / l i s p " ) )
( addt o l i s t l o a d p a t h ( expandf i l e name " ~ / e l i s p / e l i b " ) )
( 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
necesites
; ; 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 .
350
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 muchsimos
paquetes 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 - java development environment for emacs.
http://jdee.sunsite.dk/.
[6] L UDLAM , E. Emacs: Cedet - collection of emacs development environment tools.
http://cedet.sourceforge.net/.
[7] M ITTELBACH , F.,
Wesley, 2004.
AND
AND
http://elib.sourceforge.net.
[13] WANG , P. S. An Introduction to Unix with X and the Internet. PWS Publishing Company,
1997.