Autor Tema: Generando una tabla de contenidos a los libros de Carlos Ivorra

0 Usuarios y 1 Visitante están viendo este tema.

29 Noviembre, 2024, 03:40 pm
Leído 710 veces

Jesús Gautier

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 41
  • País: co
  • Karma: +0/-0
Generando una tabla de contenidos navegable a los libros de Carlos Ivorra (o cualquier archivo PDF no escaneado): Quiero compartir unos comandos que uso para generar automáticamente las tablas de contenido a archivos PDF que son auténtico texto y no archivos de sólo imágenes, y así convertirlos en documentos más navegables. Es un tutorial algo extenso así que solo hace falta una pizca de paciencia. He probado este método tanto en mi SO basado en Linux como en Windows. Allí, lo primero que hay que hacer es instalar Python o verificar si ya lo tienes (en GNU/Linux y similares usualmente viene por defecto). Abre la interfaz de la línea de comandos (e.g. CMD.exe) y escribe (tanto en Windows como en Linux):
Código: (Bash, Powershell) [Seleccionar]
python -m --version
Si no está instalado en Windows, puedes hacerlo directamente desde la tienda de aplicaciones o siguiendo este tutorial. En segundo lugar (tras reiniciar el CMD) o si ya lo tienes instalado, hay que verificar la instalación del comando Pip Instalador de Paquetes (que usualmente viene con la instalación anterior, en caso contrario ver este otro tutorial):
Código: (Bash, Powershell) [Seleccionar]
pip --version
Si lo anterior no funciona probar (y en adelante modificar los comandos que comienzan por "pip" para que comiencen por "python -m pip"):
Código: (Bash, Powershell) [Seleccionar]
python -m pip --version
A continuación hay que instalar el paquete pdf.tocgen, el quid de lo que quiero compartir en este mensaje. Simplemente, ejecutar:
Código: (Bash, Powershell) [Seleccionar]
pip install -U pdf.tocgen
Usuarios GNU/Linux
Tal vez no puedan instalar el paquete en todo el sistema, en tal caso toca apartar una carpeta especial y con la terminal allí abierta instalar pdf.tocgen utilizando los comandos.
Código: (Bash) [Seleccionar]
python -m venv my-venv
Código: [Seleccionar]
my-venv/bin/pip install -U pdf.tocgenA partir de acá hay que cambiar los comandos posteriores, en vez de escribir
Código: (Bash) [Seleccionar]
pdfxmeta -p 11 -a 1 TC.pdf "El lenguaje" >> receta.tomlHay que insertar
Código: (Bash) [Seleccionar]
$ my-venv/bin/pdfxmeta -p 11 -a 1 TC.pdf "El lenguaje" >> receta.tomlPara aprender más sobre los entornos virtuales leer también el tutorial.
[cerrar]
Ahora vamos a abrir CMD en la carpeta donde se encuentra el PDF que nos interesa, por ejemplo con el comando cd o arrastrando la carpeta desde el explorador de archivos a la ventana de CMD. Voy a utilizar como ejemplo el Teoría de Conjuntos de Carlos Ivorra aprovechando el interés en el reciente hilo. El procedimiento consiste de tres partes: identificar el tamaño y el tipo de fuente que tienen los títulos y subtítulos con un comando, generar el texto para la tabla de contenidos basado en el anterior criterio con un segundo comando y, finalmente, insertar la tabla de contenidos en el archivo PDF.
Para generar la receta que necesita el segundo comando, identificamos en el documento aquella página donde aparezca el primer título, usualmente un texto en negritas y con un tamaño mayor al texto plano. En el caso de Teoría de Conjuntos, se trata de la página 11 (según el lector de PDF y no la numeración al pie de página, que sería la 1):
Código: (Bash, Powershell) [Seleccionar]
pdfxmeta -p 11 -a 1 TC.pdf "El lenguaje" >> receta.toml
Se verifica que la receta no haya quedado vacía o no haya copiado más de lo necesario. Para editarlo, simplemente se arrastra el archivo receta.toml a un ventana del Bloc de Notas, que revela lo siguiente:
receta.toml
[[heading]]
# El lenguaje de la teoría de
level = 1
greedy = true
font.name = "SFBX2488"
font.size = 24.787099838256836
# font.size_tolerance = 1e-5
# font.color = 0x000000
# font.superscript = false
# font.italic = false
# font.serif = true
# font.monospace = false
# font.bold = true
# bbox.left = 99.8949966430664
# bbox.top = 237.81134033203125
# bbox.right = 400.0419616699219
# bbox.bottom = 268.4977722167969
# bbox.tolerance = 1e-5
[cerrar]
Lo mismo, pero con el primer subtítulo, que se encuentra en la página 13. Noten la diferencia con el comando anterior en la opción "-a 2":
Código: (Bash, Powershell) [Seleccionar]
pdfxmeta -p 13 -a 2 TC.pdf "1.1" >> receta.toml
Al verificar la receta con el Bloc de Notas surge un problema:
receta.toml
[[heading]]
# El lenguaje de la teoría de
level = 1
greedy = true
font.name = "SFBX2488"
font.size = 24.787099838256836
# font.size_tolerance = 1e-5
# font.color = 0x000000
# font.superscript = false
# font.italic = false
# font.serif = true
# font.monospace = false
# font.bold = true
# bbox.left = 99.8949966430664
# bbox.top = 237.81134033203125
# bbox.right = 400.0419616699219
# bbox.bottom = 268.4977722167969
# bbox.tolerance = 1e-5

[[heading]]
# 1.1. Clases y conjuntos
level = 2
greedy = true
font.name = "SFSL1000"
font.size = 9.962599754333496
# font.size_tolerance = 1e-5
# font.color = 0x000000
# font.superscript = false
# font.italic = true
# font.serif = true
# font.monospace = false
# font.bold = false
# bbox.left = 99.8949966430664
# bbox.top = 97.53406524658203
# bbox.right = 203.81484985351562
# bbox.bottom = 110.0670166015625
# bbox.tolerance = 1e-5

[[heading]]
# 1.1
level = 2
greedy = true
font.name = "SFBX1440"
font.size = 14.346199989318848
# font.size_tolerance = 1e-5
# font.color = 0x000000
# font.superscript = false
# font.italic = false
# font.serif = true
# font.monospace = false
# font.bold = true
# bbox.left = 99.89498901367188
# bbox.top = 121.70526123046875
# bbox.right = 120.06575012207031
# bbox.bottom = 139.3654327392578
# bbox.tolerance = 1e-5
[cerrar]
Tenemos dos encabezados de nivel dos, uno cuyo tamaño de fuente es 14.346 y otro mas pequeño, de 9.962. Si usáramos el segundo comando para generar el texto de la tabla sería inútil, porque tendría un ítem para cada página. Resulta que toda página en este documento tiene una cabeza de página, y por eso la fuente pequeña de 9.962. Simplemente eliminamos ese bloque de la receta, que debe quedar así:
receta.toml
[[heading]]
# El lenguaje de la teoría de
level = 1
greedy = true
font.name = "SFBX2488"
font.size = 24.787099838256836
# font.size_tolerance = 1e-5
# font.color = 0x000000
# font.superscript = false
# font.italic = false
# font.serif = true
# font.monospace = false
# font.bold = true
# bbox.left = 99.8949966430664
# bbox.top = 237.81134033203125
# bbox.right = 400.0419616699219
# bbox.bottom = 268.4977722167969
# bbox.tolerance = 1e-5

[[heading]]
# 1.1
level = 2
greedy = true
font.name = "SFBX1440"
font.size = 14.346199989318848
# font.size_tolerance = 1e-5
# font.color = 0x000000
# font.superscript = false
# font.italic = false
# font.serif = true
# font.monospace = false
# font.bold = true
# bbox.left = 99.89498901367188
# bbox.top = 121.70526123046875
# bbox.right = 120.06575012207031
# bbox.bottom = 139.3654327392578
# bbox.tolerance = 1e-5
[cerrar]
Otra ventaja que tiene el texto de Ivorra es que hay una diferencia en el tamaño de los subtítulos y el texto plano. En el caso que la única diferencia sea que los subtítulos (o los subsubtítulos, usando el comando pdfxmeta con opcion "-a 3") son en negrita o cursiva, hay que saber que las lineas de la receta que comienzan por almohadilla "#" son comentarios y no se tienen en cuenta a no ser que se borre ese carácter inicial.
Todo listo para generar el texto de la tabla de contenido con el comando:
Código: (Bash, Powershell) [Seleccionar]
pdftocgen TC.pdf < receta.toml > tocTC
Lo cual resulta en un archivo que también podemos abrir arrastrando al Bloc de Notas. En algunos casos hará falta pulirlo un poco, por ejemplo cuando se separan los acentos de sus respectivas vocales, algo como en "cancio´n".
tocTC
"TEORÍA DE CONJUNTOS" 1
"Índice General" 5
"Introducción" 9
"El lenguaje de la teoría de conjuntos" 11
    "1.1 Clases y conjuntos" 13
    "1.2 Funciones" 23
    "1.3 Formación de conjuntos" 30
    "1.4 La teoría de conjuntos NBG ∗" 34
    "1.5 Equipotencia" 34
    "1.6 Relaciones" 37
    "1.7 Leyes de composición interna" 44
"El sistema numérico" 53
    "2.1 Los números naturales" 53
    "2.2 Conjuntos finitos" 65
    "2.3 Sumas finitas" 70
    "2.4 Conjuntos numerables" 75
    "2.5 Los números enteros" 78
    "2.6 Los números racionales" 83
    "2.7 Los números reales" 89
    "2.8 Los números complejos" 101
"Ordinales" 103
    "3.1 La construcción de los ordinales" 104
    "3.2 Inducción y recursión transfinita" 112
    "3.3 Ordinales y buenos órdenes" 115
    "3.4 Funciones normales" 119
    "3.5 La aritmética ordinal" 120
    "3.6 La forma normal de Cantor" 128
"La teoría de conjuntos NBG" 135
    "4.1 Relaciones bien fundadas" 135
    "4.2 El axioma de regularidad" 141
    "4.3 El axioma de elección" 146
"Cardinales" 159
    "5.1 Números cardinales" 159
    "5.2 La aritmética cardinal" 166
    "5.3 Sumas y productos infinitos" 175
    "5.4 Cofinalidad" 179
    "5.5 Exponenciación de cardinales" 184
    "5.6 La hipótesis de los cardinales singulares" 190
    "5.7 Cardinales fuertemente inaccesibles" 195
    "5.8 Aplicaciones sobre el axioma de elección" 200
"Conjuntos cerrados no acotados y estacionarios" 207
    "6.1 Conjuntos cerrados no acotados" 207
    "6.2 Conjuntos estacionarios" 212
    "6.3 Un teorema de Silver" 216
    "6.4 Cardinales de Mahlo" 221
    "6.5 Principios combinatorios" 223
    "6.6 Puntos fijos de funciones normales" 237
"Álgebras de Boole" 245
    "7.1 Propiedades algebraicas" 245
    "7.2 Espacios de Stone" 254
    "7.3 Álgebras completas" 260
    "7.4 La compleción de un álgebra de Boole" 268
    "7.5 Distributividad en álgebras completas" 278
    "7.6 Medidas" 282
    "7.7 Las álgebras de medida y categoría" 287
    "7.8 Cardinales medibles" 292
"Cardinales característicos del continuo" 299
    "8.1 Cardinales puramente conjuntistas" 300
    "8.2 Medida y categoría" 307
    "8.3 El axioma de Martin" 321
    "8.4 Condiciones de cadena en productos" 334
    "8.5 Ejemplo: Intercambio de integrales" 345
"Árboles" 357
    "9.1 Conceptos básicos sobre árboles" 357
    "9.2 El problema de Suslin" 361
    "9.3 La independencia de la Hipótesis de Suslin" 367
    "9.4 Árboles de Aronszajn" 374
    "9.5 Árboles de Kurepa" 382
    "9.6 Álgebras de Suslin" 385
"Elementos de teoría de modelos" 389
    "10.1 Lenguajes y modelos" 389
    "10.2 Teorías formales" 397
    "10.3 Submodelos, inmersiones" 410
    "10.4 Ultraproductos" 417
"El cálculo de particiones" 427
    "11.1 Particiones" 427
    "11.2 Cardinales débilmente compactos" 433
"Bases de espacios vectoriales" 443
    "A.1 Existencia y equicardinalidad de bases" 443
    "A.2 Equivalencia con el axioma de elección" 447
    "A.3 La dimensión del espacio dual" 450
"Subconjuntos de R y el axioma de elección" 455
    "B.1 El ejemplo de Vitali" 456
    "B.2 Conjuntos finales" 457
    "B.3 Conjuntos de Bernstein" 459
    "B.4 Números hiperreales" 462
    "B.5 Filtros rápidos" 464
"Bibliografía" 475
"Índice de Materias" 477
[cerrar]
Antes del tercer y último paso quiero notar que la misma receta sirve para generar la tabla a buena parte de los libros de Ivorra. Solo hay que generar una receta nueva en alguna edición más antigua. Probemos si la misma receta sirve con Introducción al Calculo Diferencial, que previamente he bajado a la misma carpeta.
Código: (Bash, Powershell) [Seleccionar]
pdftocgen IC.pdf < receta.toml > tocIC
tocIC
"INTRODUCCIÓN AL CÁLCULO DIFERENCIAL" 1
"Índice General" 5
"Introducción" 7
"Derivadas" 47
    "1.1 La derivada de una función" 49
    "1.2 Cálculo de derivadas" 57
    "1.3 Máximos y mínimos" 68
    "1.4 Propiedades de las funciones derivables" 72
    "1.5 La regla de L’Hôpital" 89
    "1.6 Continuidad de la derivada" 96
    "1.7 Ecuaciones diferenciales I" 98
    "1.8 La diferencial de una función" 109
"El cálculo integral" 113
    "2.1 Integrales definidas e indefinidas" 115
    "2.2 Cálculo de primitivas" 125
    "2.3 Las leyes de Kepler" 138
    "2.4 El teorema de aproximación de Weierstrass" 141
    "2.5 La longitud de un arco" 144
    "2.6 Cálculo de volúmenes" 154
    "2.7 Áreas de sólidos de revolución" 163
    "2.8 Ecuaciones diferenciales II" 170
    "2.9 El teorema de Arzelà" 185
"Integrales impropias" 189
    "3.1 Definición y ejemplos" 190
    "3.2 Criterios de convergencia" 197
    "3.3 Derivación de integrales paramétricas" 206
    "3.4 Integrales dobles" 212
    "3.5 La transformada de Laplace" 217
    "3.6 La función factorial" 234
"La dinámica newtoniana" 247
    "4.1 Cinemática" 247
    "4.2 Las leyes de Newton" 267
    "4.3 La ley de gravitación universal" 282
    "4.4 Sistemas de referencia no inerciales" 297
"Diferenciabilidad" 327
    "5.1 Funciones diferenciables" 328
    "5.2 Ejemplos y resultados fundamentales" 337
    "5.3 Teoría básica" 362
    "5.4 La energía mecánica" 371
    "5.5 El problema de la braquistócrona" 390
"Integrales y funciones elípticas" 399
    "6.1 Las integrales de primera y segunda especie" 399
    "6.2 La lemniscata de Bernoulli" 410
    "6.3 Las funciones elípticas lemniscáticas" 415
    "6.4 Las funciones elípticas de Jacobi" 422
    "6.5 El péndulo simple" 434
    "6.6 El péndulo esférico" 439
    "6.7 La media aritmético-geométrica" 448
"Introducción al análisis complejo" 461
    "7.1 Funciones holomorfas" 462
    "7.2 La integral curvilínea" 467
    "7.3 Propiedades de las funciones holomorfas" 479
    "7.4 El teorema de Cauchy" 494
"Geometría analítica tridimensional" 499
"Ejemplos de curvas" 513
    "B.1 La cicloide" 513
    "B.2 La cardioide" 518
    "B.3 La nefroide" 520
    "B.4 La tractriz" 523
    "B.5 La lemniscata de Bernoulli" 527
    "B.6 Los óvalos de Cassini" 529
"Cálculo de primitivas" 535
    "C.1 Integrales inmediatas" 535
    "C.2 Funciones racionales" 538
    "C.3 Integración por partes" 544
    "C.4 Integración por sustitución" 549
"Índice de Materias" 555
[cerrar]
Concluimos el procedimiento con lo que nos importa, generar el documento PDF navegable. Usualmente hay que presionar F6 en el lector de documentos para encontrar la tabla o explorar las opciones en las barra superior si abrimos el documento con un navegador web:
Código: (Bash, Powershell) [Seleccionar]
pdftocio TC.pdf < tocTC
Espero este método les mejore un poco la calidad de vida al estudiar desde textos eléctronicos extensos.


01 Diciembre, 2024, 03:47 am
Respuesta #1

Masacroso

  • “Lo que oigo, lo olvido; lo que veo, lo recuerdo; lo que hago, lo aprendo” (antiguo proverbio chino)
  • Moderador Global
  • Mensajes: 5,483
  • País: es
  • Karma: +0/-0
¡Muy interesante! Desconocía pdfxmeta, siempre he usado un editor de pdfs para estas cosas.