Manual para la correcta maquetación de ePubs, escrito por y para los miembros de la comunidad del Proyecto Scriptorium.

Este segundo tomo pretende cubrir las dudas de carácter más avanzado que puedan surgir con respecto a las herramientas utilizadas, concretamente el uso de Sigil y de las RegEx. También ofrece algunas soluciones sencillas para esos libros con cientos de notas cuyo maquetado podría resultar eterno.

Por otro lado, también se han incluido algunas normas ortotipográficas básicas, que pueden resultar muy útiles a la hora de terminar de pulir nuestro ePub.

Si consideras que el Manual no abarca algún tema necesario, que en su redacción cierto punto no ha sido abordado con la suficiente claridad, que no es correcto o que tienes un método mejor de trabajo, por favor, ponte en contacto con la editora responsable: Fénix.

Proyecto Scriptorium

Aprende a maquetar II: Herramientas útiles

Manual para maquetar libros electrónicos - 2

ePub r3.0

Fénix 22.10.2018

Título original: Aprende a maquetar: Herramientas útiles

Proyecto Scriptorium, 2013

Edición revisada y actualizada, 2018

Diseño de cubierta: Diseñador

Editora responsable: Fénix

ePub base r2.0

A todos los editores,

del pasado, presente y futuro.

FÉNIX

¿Cómo usar este manual?

Este segundo tomo pretende ampliar los conocimientos del editor respecto algunas de las herramientas utilizadas durante la maquetación, por lo que nos encontraremos una amplia explicación de nuestro programa principal, Sigil, varias formas de crear notas rápidamente, un manual sobre las RegEx, y finalmente un compendio de algunas de las normas ortotipográficas más relevantes.

A diferencia del primer tomo, no es necesario leerlo entero (aunque sí puede ser aconsejable), sino que se pretende que sea una herramienta de consulta para situaciones y dudas puntuales. Para facilitar su uso se han elaborado dos métodos de organización complementarios:

Una TOC realmente amplia que permite localizar casi cada detalle del contenido.

Un Índice temático que recoge buena parte de los contenidos más interesantes.

Por último, ha de tenerse en cuenta que buena parte de este manual hace referencia a unas herramientas concretas, y es posible que algunas explicaciones pueden variar respecto a la versión que estés utilizando de las mismas.

Es imprescindible haber leído y dominado el primer tomo, Manual básico, antes de profundizar en la parte avanzada.

PREVIO AL EPUB: OBTENIENDO EL CONTENIDO

Escaneado

Es frecuente que el editor parta de contenido ya existente en la red a la hora de realizar sus maquetaciones. Si bien este sistema ahorra parte del trabajo más tedioso, también puede dar problemas en el caso de que el texto haya sido modificado o tenga capítulos o párrafos faltantes. Por ello, aunque no es estrictamente necesario, sí que es conveniente disponer del original en papel para poder cotejarlo, especialmente los saltos de línea, cursivas, nombres propios y términos en otros idiomas.

La otra opción es realizar el trabajo desde cero, escaneando el libro y convirtiendo las imágenes a texto nosotros mismos. En ese caso, antes de iniciar la digitalización es conveniente:

Comprobar el estado físico del libro. Un libro antiguo o en muy mal estado es posible que no sobreviva intacto a todo el proceso que vamos a realizar y esto es especialmente importante tenerlo en consideración si el libro no es nuestro o si es una edición valiosa.

Comprobar que tanto el hardware como el software se encuentra en perfecto estado de funcionamiento.

Además durante el proceso, conviene comprobar de vez en cuando que la encuadernación no se esté degradando, sobre todo en aquellos escáneres no diseñados para el escaneado de libros (la mayoría).

Cómo colocar el libro en el escáner

En función del tamaño del libro y de la superficie de digitalización del escáner la colocación del libro variará sensiblemente. Para la mayoría de libros «tamaño novela» el mejor sistema es colocarlo a doble página y pegar la región central del libro lo máximo posible al vidrio del escáner.

En la imagen tenemos un ejemplo del libro sin sujetar (dejando mucho espacio hasta el escáner), apretando de forma insuficiente y apretando correctamente. No apretar de forma correcta nos provocará un sombreado en el centro que puede afectar a la nitidez del texto adyacente (y por lo tanto, a su procesamiento posterior).

En la imagen se aprecia el sombreado en un libro que se dejó espacio en el centro al escanear.

También existen ocasiones en las que el libro es algo mayor que la superficie de escaneado, pero el texto queda dentro del área. En estos casos también se puede optar por escanear a doble página teniendo en cuenta que aquellas regiones adyacentes a las que se apoyen en los bordes del escáner, fuera del área de digitalización, quedarán afectadas por el sombreado de igual modo (en muchas ocasiones es donde se encuentran los números de página o el nombre del capítulo, por lo que compensa hacerlo así).

En la imagen se aprecia cómo el efecto del sombreado afecta a la nitidez del texto más exterior en un libro que no cabía totalmente en el área de escaneado.

En el mercado hay escáneres especiales para la digitalización de libros. Estos escáneres tienen un borde muy estrecho y permiten colocarlo sin abrirlo del todo pues la página que no se va a escanear queda fuera de la superficie del escáner.

Configuración del software para el escaneo

Es importante también la configuración del programa que utilicemos para escanear. Modificar los valores del programa va a afectar tanto al resultado final (ayudando en el posterior procesamiento) como a la velocidad de escaneo (permitiendo escanear más o menos páginas en el mismo tiempo).

En general, para libros en blanco y negro sin imágenes, una configuración de 300ppp (píxeles por pulgada, también llamados dpi —dots per inch—) en escala de grises de 8 bits y en JPG es suficiente.

Esta configuración permite un resultado óptimo, de suficiente calidad para el tratamiento posterior de las imágenes y, habitualmente, lo suficientemente «bajo» para que los escáneres tarden poco (entre 10 y 20 segundos) en escanear la superficie.

Limpieza y preparación de las imágenes

El segundo paso es el procesamiento de las imágenes, lo que facilitará después la identificación de caracteres. Para ello podemos usar la herramienta ScanTailor.

Para facilitar el trabajo, colocaremos todas las imágenes en la misma carpeta, numeradas de acuerdo con su orden en el libro. A continuación abriremos el programa y haremos clic en Archivo → Nuevo proyecto. Saltará una ventana como esta:

Indica la carpeta donde tienes las imágenes y también la carpeta donde se guardarán sus versiones modificadas. En este punto, se pueden dejar fuera algunas de ellas, si se desea, pero es más sencillo si ya las hemos separado y ordenado previamente.

A continuación, se pueden corregir los píxeles por pulgada (ppp o dpi). La mejor resolución de salida sería 600 dpi, para todas las hojas. Aunque se pueden utilizar 300 dpi, que redundaría en una mayor velocidad, esto podría originar más errores durante el posterior reconocimiento óptico de caracteres (OCR).

Una vez que se carga una página, aparecerán las opciones de edición disponibles en la esquina superior izquierda, la lista de imágenes está disponible en el lado derecho, mientras que la imagen que se está editando se puede ver en el centro de la interfaz principal.

Ahora viene el trabajo real de procesamiento, que se realiza mediante los 6 pasos o tareas que aparecen arriba a la izquierda. Aunque la opción automática funciona muy bien, conviene repasar las páginas para comprobar el resultado. Las teclas «AvPág/RePág» permiten ir rápidamente a la siguiente/anterior página, e «Inicio» y «Fin» a la primera y última página respectivamente.

Corregir orientación

Para orientar las páginas en horizontal o vertical. Basta con clicar en la flecha ajustando la primera y después, en «Extensión / Aplicar a…» seleccionar «Todas las páginas». De esta forma, se girarán todas automáticamente.

Dividir páginas

Sirve para dividir las páginas si se escaneó el libro a doble página. Normalmente basta con que lo haga de forma automática, aunque conviene repasar las páginas y desplazar la barra vertical de separación si fuese necesario.

Alineación

Para girar las páginas torcidas o inclinadas. Si se ha hecho un buen escaneo, no suele ser necesario.

Seleccione el contenido

Permite seleccionar solo el contenido, eliminando cabeceras y números de página.

Márgenes

Permite definir los márgenes y el tamaño de las páginas.

Salida

Permite ver el resultado de salida final de cada página. Aquí es donde se realizará el verdadero trabajo de limpieza. La configuración estándar sería:

Resolución de Salida: 300 dpi, para todas las hojas. Si tenemos imágenes, mejor 600 dpi.

Modo: Blanco y Negro para texto. Si hay imágenes, mejor Combinado.

Grosor: El que se adapte mejor al texto, aplicándolo por igual a todas las hojas.

Antideformación: Sirve para intentar arreglar una página que se ha arrugado ligeramente al ser escaneada. Al ser el modo automático experimental, lo mejor es usarlo de forma manual. Haciendo clic en la pestaña correspondiente y ajustando los puntos rojos hasta conseguir "aplanar" la imagen.

Eliminar Manchas: Dependerá del texto. Cuanto más nivel, más se limpiará, pero hay que tener cuidado porque puede eliminar parte del texto (si lo confunde con una mancha).

En el lado de la derecha también aparecen varias pestañas. A continuación se nombran someramente:

Salida: Muestra el resultado final de la página.

Zona de imagen: Permite seleccionar las zonas que se consideran imágenes. Solo disponible si se ha marcado el modo Combinado.

Zona de relleno: Permite eliminar manchas negras o añadir trozos de texto faltantes. Es una opción interesante pero poco útil, ya que conlleva mucho tiempo para el resultado obtenido.

Antideformación: Permite enderezar líneas de texto curvadas. Otro trabajo poco grato, especialmente si después vamos a utilizar un programa OCR.

Eliminar manchas: Muestra lo que se eliminará con el botón de limpieza. Es interesante para calibrar el nivel de limpieza más adecuado, ya que si es muy agresivo pueden desaparecer cosas como puntos y comas.

Además, suele ser interesante separar imágenes y texto, y realizar este proceso por separado, ya que la configuración para conseguir el mejor resultado no siempre coincide.

Con esto, ya tendríamos nuestras imágenes listas para pasarlas a texto.

Pasar las imágenes a texto: OCR

Para ilustrar este proceso vamos a usar uno de los programas más usados para este fin: el ABBYY FineReader. La documentación que sigue está tomada del manual oficial de la versión 11 de la aplicación que se puede encontrar en su web oficial, pero no hay grandes diferencias con otras versiones, ni el proceso básico es muy diferente del usado por otras aplicaciones de OCR.

Iniciar el proceso

Una vez terminado el escaneo y la limpieza de las imágenes, tendremos una carpeta con las páginas del libro correctamente escaneadas y numeradas.

En ABBYY FineReader, haz clic en «Abrir», o selecciona «Abrir archivo/imagen PDF…» del menú Archivo. En el cuadro de diálogo, selecciona Abrir imagen:

Seleccionar una o más imágenes…

Habilita la opción Detectar la orientación de la página para detectar automáticamente la distribución de la página cuando se abran las imágenes.

Activa la opción Dividir páginas opuestas para dividir automáticamente las páginas duales en imágenes separadas cuando se abran imágenes.

Habilita la opción Habilitar preprocesamiento de imagen para realizar el preprocesamiento automatizado de imagen cuando se abran las imágenes.

Para conseguir la mejor calidad OCR, selecciona las opciones apropiadas para el idioma de reconocimiento, modo de reconocimiento, y tipo de impresión del texto reconocido.

En la pestaña «Documento»:

El idioma de reconocimiento.

El tipo de impresión del documento.

El modo de color.

En la pestaña «Leer»:

La configuración del reconocimiento.

Las fuentes que se utilizarán.

Revisar y editar

Los resultados del reconocimiento se muestran en la ventana Texto. Los caracteres inciertos se resaltan en color en esta ventana. Esto hace que sea fácil localizar los errores y corregirlos rápidamente.

Puedes editar el documento de salida en la ventana Texto directamente, o en el cuadro de diálogo Verificación integrado (Herramientas → Verificación…), el cual le permite navegar por las palabras inciertas, encontrar errores ortográficos, agregar nuevas palabras a su diccionario, y cambiar el idioma del diccionario.

Ventana texto

Puedes comprobar, editar y formatear los resultados del reconocimiento en la ventana Texto.

La barra de herramientas de la ventana Texto, situada en la parte superior de la ventana, permite abrir el cuadro de diálogo Verificación. Este cuadro de diálogo activa el corrector ortográfico, que también puede ejecutarse mediante los botones de control correspondientes de la ventana Texto.

Utiliza los botones / para ir a la palabra o el carácter incierto siguiente/anterior. Si no aparecen resaltados de caracteres inciertos, haz clic en el botón en la barra de herramientas de la ventana Texto.

Para comprobar una palabra incierta en la ventana Texto:

Haz clic en la palabra en la ventana Texto. En la ventana Imagen se mostrará la ubicación de la palabra, mientras que, en la ventana Zoom, se mostrará una imagen ampliada de la palabra.

Realiza los cambios necesarios en la palabra en la ventana Texto.

Este método resulta conveniente si necesitas comparar el documento de origen y el resultante.

La barra de herramientas principal permite acceder al menú desplegable de las opciones de guardado.

Las herramientas para dar formato al texto reconocido están disponibles en:

El lado derecho de la barra de herramientas principal.

El panel Propiedades del texto (botón derecho del ratón y Texto → Propiedades).

NOTA: Utiliza los botones / para navegar a la izquierda y la derecha del panel de propiedades si la ventana Texto no es suficientemente ancha para mostrar el panel completo.

Diálogo de Verificación

Puedes revisar las palabras con caracteres inciertos en el cuadro de diálogo Verificación (Herramientas → Verificación…).

Guardar resultados

Los resultados del reconocimiento pueden guardarse en un archivo, enviarse a otra aplicación, copiarse en el Portapapeles o enviarse por correo electrónico. También puedes enviar los resultados del OCR a Kindle.com, donde se convertirán al formato Kindle y podrán descargarse a tu dispositivo Kindle.

Importante: Asegúrate de seleccionar las opciones de guardado adecuadas antes de hacer clic en Guardar.

Para guardar el texto reconocido:

Seleccione el modo de guardado del formato en el menú desplegable de la barra de herramientas principal.

Modos de guardado del formato del documento.

Copia exacta permite obtener un documento con el formato que corresponde al original.

Copia editable produce un documento en el cual el formato puede diferir levemente del original. Los documentos producidos en este modo son fáciles de editar.

Texto con formato retiene fuentes, tamaños de fuentes y párrafos, pero no retiene el espaciado exacto o la ubicación de los objetos en la página. El texto resultante se alineará a la izquierda.

NOTA: Los textos verticales cambiarán a horizontal en este modo.

Texto sin formato Este modo no retiene el formato del texto.

En la pestaña Guardar del Cuadro de diálogo Opciones, selecciona las opciones de guardado deseadas y haz clic en Aceptar.

Haz clic en la flecha situada a la derecha del botón Guardar en la barra de herramientas principal y selecciona la opción correspondiente, o bien utiliza los comandos del menú Archivo.

Una opción habitual en los editores es guardar el escaneado en formato RTF, que puede editarse con procesadores de texto del estilo Writer o Word, cuyas herramientas de corrección ortográfica y la facilidad de corrección de estilos y formatos son muy útiles para dar la primera limpieza al texto. Una vez realizado ese proceso, el documento RTF se puede pasar a ePub usando las herramientas disponibles para ello.

No obstante, las últimas ediciones de ABBYY FineReader incorporan también la posibilidad de guardar el documento directamente como ePub, con lo cual nos ahorraremos el paso de conversión del RTF, pero perderemos las herramientas de corrección de los procesadores de texto.

Para guardar el texto en FB2 o EPUB:

En la barra de herramientas principal, selecciona Texto con formato en la lista desplegable.

Selecciona Archivo → Guardar documento como → FictionBook (FB2) o → Electronic Publication (EPUB). También puedes utilizar el botón para guardar de la barra de herramientas principal. Haz clic en la flecha situada junto al botón para guardar y selecciona un formato. Si no ves el formato que necesita en la lista, selecciona Guardar en otros formatos… y selecciona el formato deseado en el cuadro de diálogo Guardar como.

NOTA: Puedes seleccionar opciones adicionales para guardar en la pestaña Libro electrónico del cuadro de diálogo Opciones (Herramientas → Opciones… → Guardar → FB2/EPUB).

SIGIL AVANZADO

Marcas de división

En el capítulo de Sigil básico hemos visto cómo dividir un fichero xhtml en dos usando el botón Dividir en el cursor, se trata de una forma inmediata de realizar la división, pero Sigil nos permite usar otro método menos inmediato que nos vendrá muy bien cuando queramos «programar» las divisiones.

El uso es muy simple: colocamos el cursor en los puntos adecuados donde se realizarán las posteriores divisiones y elegimos la opción Marca de división del menú Insertar. Repetimos esto por cada punto de división que vayamos a usar y en cada uno de ellos Sigil nos colocará la etiqueta <hr class="sigil_split_marker" />. Posteriormente, cuando decidamos realizar las divisiones, pulsamos en la opción Dividir en marcas del menú Edición (o bien pulsamos F6, la tecla rápida) y Sigil hará las divisiones automáticamente en los puntos indicados, creando los ficheros necesarios y borrando las marcas.

La advertencia que realizamos en el apartado Dividir en el cursor también vale para este caso: es conveniente colocar la marca en una línea vacía para controlar mejor el resultado final.

La aplicación más frecuente de esta utilidad es cuando nos vemos obligados a unir distintos ficheros que tenemos intención de volver a separar. Para ello colocaremos la marca al principio de cada fichero, excepto el primero, justo debajo de la etiqueta <body>; luego unimos todos los ficheros, realizamos las tareas para las que los unimos y, por último pulsamos F6, los ficheros volverán a estar como al principio (eso sí, habrá que renombrarlos).

Revisión ortográfica

Aunque Sigil no es precisamente un procesador de textos, nos permite revisar la ortografía de nuestros libros usando un diccionario.

El primer paso es instalar un diccionario adecuado. Sigil nos proporciona diccionarios en español, francés, alemán e inglés. Son diccionarios adecuados para hacer correcciones de textos en esos idiomas y, si no disponemos de otro mejor, podemos usarlos para nuestros libros.

Nuestra comunidad ha desarrollado un diccionario específico para nuestros trabajos, contiene un total de 1.101.661 palabras y está formado, como todos los diccionarios para Sigil por dos ficheros: c2c_1_epublibre.aff y c2c_1_epublibre.dic.

La forma de instalar este diccionario en Sigil es la siguiente:

Copiamos estos dos ficheros en la carpeta hunspell_dictionaries que está situada dentro de la carpeta de Sigil.

Ejecutamos Sigil y abrimos el apartado Preferencias del menú Edición.

En el cuadro de diálogo que nos aparece escogemos Diccionarios de ortografía.

En la parte derecha seleccionamos c2c_1_epublibre donde pone Diccionario.

Pulsamos en OK.

Este proceso solo tenemos que hacerlo una vez, la próxima vez que se abra Sigil tendrá seleccionado nuestro diccionario.

Ya estamos preparados para abrir un libro y corregir la ortografía.

Hay tres formas de revisar la ortografía de nuestros libros.

El primer método de revisión ortográfica es el más usado por los que escriben directamente en Sigil como si se tratara de un procesador de textos. Como puede verse en la imagen anterior, hemos dejado seleccionado Resaltar palabras con problemas de ortografía. Ello supone que si escribimos una palabra que no esté en el diccionario, quedará señalada en rojo si nos encontramos en la Vista de código, al igual que si abrimos un libro también en Vista de código nos aparecerán subrayadas en rojo todas las palabras que no aparezcan en el diccionario. De este modo nos daremos cuenta rápidamente de la palabra que hemos escrito mal.

También podemos usar este método con un libro ya escrito (por ejemplo al obtenerlo por OCR): Solo tenemos que ir desplazando el texto hacia delante y el subrayado en rojo dirigirá nuestra atención rápidamente hacia el error.

El segundo método es más usado cuando tenemos un texto en el que aparecen pocos errores ortográficos, con lo que desplazarnos por él puede ser tedioso. En vez de hacerlo manualmente, usaremos la opción Siguiente palabra con problemas del menú Revisión ortográfica que está situada dentro de Herramientas o, mucho mejor, usaremos la tecla rápida F4.

Eso nos irá llevando de una palabra no presente en el diccionario a la siguiente, permitiéndonos corregirlas una a una.

Estos dos primeros métodos son útiles cuando nuestro texto tiene pocas palabras con problemas o somos hábiles en distinguir una palabra correcta no incluida en el diccionario de otra que no es correcta. Si no es ese nuestro caso, podemos usar el último método, mucho más seguro.

El tercer método consiste en escoger la opción Ortografía del menú Revisión ortográfica situado en Herramientas (también se puede usar el botón correspondiente de la barra de herramientas o usar la tecla rápida Alt-Q), que nos muestra un cuadro de diálogo donde aparecen las palabras con problemas de una forma ordenada.

Este cuadro es muy útil, no solo porque nos muestra únicamente las palabras con problemas, eliminando todo lo demás, sino porque, al estar ordenadas, dos palabras similares con pequeñas variaciones aparecen próximas en la lista y son fáciles de localizar (lo cual resulta muy útil con palabras de otros idiomas), además de que nos da el número de veces que aparece cada una de ellas en nuestro libro.

Pero podemos hacer más cosas desde este cuadro de diálogo:

Podemos seleccionar una palabra con problemas y pulsar en el botón Ignorar, lo que hará que durante la sesión no nos la muestre como problemática.

Podemos pulsar en el botón Añadir a diccionario, con lo que esa palabra se incluirá en la lista de palabras del diccionario y ya nunca más aparecerá como problemática (cuidado con esta opción porque puede que nos incluya palabras incorrectas en el diccionario sin que nos demos cuenta).

Podemos corregir automáticamente todas las coincidencias de la palabra incorrecta con alguna de las palabras que nos propone el corrector con solo elegirla de la lista y pulsar el botón Cambiar palabra seleccionada a.

Podemos corregir manualmente la palabra haciendo doble clic sobre ella, lo cual nos llevará al punto de nuestro texto donde se encuentre. Si hay más de una, irá saltando de una a otra cada vez que hagamos doble clic.

Cuando usamos clases para cambiar el aspecto de una parte de una palabra (por ej. letras capitulares o versalitas), colocamos etiquetas entre las letras, lo que provocará que Sigil entienda que son palabras distintas y las señalará como erróneas si nos se corresponden con las del diccionario.

Validar el epub

La herramienta de validación de Sigil es el FlightCrew y se habla de ella ampliamente en este Manual. Para iniciarlo podemos elegir la opción Validar EPUB con FlightCrew del menú Herramientas, pulsar en el botón de validación o usar la tecla rápida F7.

Lo normal es que nos diga que todo está correcto, pero si aparecen errores, la ventana Resultado de la validación nos vendrá muy bien pues pulsando doble clic sobre la línea de descripción del error nos llevará al punto de nuestro ePub donde esté localizado (siempre que ello sea posible).

Tenemos que tener en cuenta que, en ocasiones, el error está situado en otro punto anterior y es en ese punto donde lo detecta Sigil. En todo caso, la aproximación es muy útil.

Informes

La herramienta informes de Sigil se abre desde el menú Herramientas escogiendo la opción Informes…

Se llama Informes, así en plural, porque en realidad se nos presentan unos cuantos informes distintos:

Todos los ficheros

Es un listado de cada uno de los ficheros que componen el libro, con información sobre el nombre del fichero, carpeta donde se sitúa, tamaño, tipo y concepto que se le haya activado. Por cualquiera de esos datos podemos ordenarlo haciendo clic sobre la cabecera de la columna. Haciendo doble clic sobre cualquier línea nos abrirá el fichero de que se trate.

Ficheros HTML

Nos da información sobre el nombre, tamaño, número de palabras que lo componen, número de palabras con problemas de ortografía, número de imágenes, videos y audios contenidos, número de hojas de estilos enlazadas (este número siempre tiene que ser uno) y la última columna, Formato válido, que nos informa si hay algún problema grave con el fichero en cuestión. Podemos ordenar la lista haciendo clic en la cabecera por cualquiera de estas columnas y haciendo doble clic sobre cualquiera de ellos nos lo abre.

Ficheros de imagen

Nos da información sobre el nombre del archivo de la imagen, tamaño, número de veces que se ha usado, anchura, altura, píxeles, color y vista en miniatura. Por cualquiera de estas columnas podemos ordenar la lista haciendo clic en la cabecera. Haciendo doble clic sobre cualquiera de ellos nos lo abre. La mayor utilidad de este informe es poder ver de un golpe los datos de las imágenes y detectar rápidamente cualquiera que supere las limitaciones (anchura, altura y tamaño) que le imponemos a las imágenes contenidas en nuestros libros.

Ficheros CSS

En los libros de EPL aparecerán al menos dos hojas de estilo: epl.css y style.css. Si alguna de las dos no aparece, hay que arreglarlo.

Clases en ficheros HTML

Nos muestra el fichero donde se encuentra aplicada la clase, elemento (etiqueta donde está aplicada), nombre de la clase, selector (nombre que se usó para definirla en la hoja de estilos) y fichero de hoja de estilos donde se encuentra la definición. Por cualquiera de estas columnas podemos ordenar la lista haciendo clic en la cabecera. Haciendo doble clic sobre cualquiera de ellas nos abre el fichero donde está aplicada. La mayor utilidad de este listado es localizar rápidamente las clases usadas y no definidas (tienen en blanco la columna Encontrado en).

Clases en ficheros CSS

Nos muestra Fichero CSS, Selector y Usado en el fichero HTML. Por cualquiera de estas columnas podemos ordenar la lista haciendo clic en la cabecera. Haciendo doble clic sobre cualquiera de ellas nos abre la hoja de estilos donde está definida. La mayor utilidad de este listado es localizar rápidamente todas las clases definidas y no usadas.

Enlaces

Nos muestra el fichero donde está situado, ID del enlace, texto que se muestra, fichero (o URL) de destino, ID del destino, ¿Existe el destino?, texto del destino, texto e ID del destino del destino (si es otro enlace), ¿Coincidencia? (cuando el destino del destino es el punto de origen). Por cualquiera de estas columnas podemos ordenar la lista haciendo clic en la cabecera. Haciendo doble clic sobre cualquiera de ellos nos abre el fichero donde se sitúa el enlace. La mayor utilidad de este informe radica en la columna ¿Existe el destino?, pues si no dice sí es que no hay una buena definición del enlace.

Caracteres en ficheros HTML

Nos hace una lista de todos los caracteres contenidos en los ficheros de nuestro libro. Al estar cada carácter una sola vez nos permite localizar rápidamente los que no deberían estar. Pulsando doble clic sobre cualquiera de ellos nos lleva al punto donde se ha usado, volviendo a hacer doble clic nos lleva a la siguiente coincidencia como si de una búsqueda se tratara. Este listado es especialmente útil para la localización de signos que son fácilmente confundibles, por ejemplo la semiraya y la raya, el signo de grado y la o volada, etc.

Búsquedas guardadas

Buscar (y sustituir) es una tarea habitual cuando trabajamos con textos. Al igual que cualquier editor de textos, Sigil permite buscar cadenas de texto en los ePub y sustituirlas por otra distintas, aunque hay tener en cuenta ciertas particularidades: La más importante es que las búsquedas se realizan en el código del ePub, no en el texto presentado; eso supone que debemos de tener en cuenta las etiquetas a la hora de buscar un texto.

Por ejemplo, en el código:

<p>F<small>ERNÁNDEZ</small></p>

Nunca se encontrará la palabra «Fernández» pues entre la F inicial y la segunda letra hay una etiqueta que es tratada como parte del texto a la hora de realizar la búsqueda.

Otra particularidad importante es que Sigil permite realizar búsquedas en distintos modos:

Normal: se buscará el texto indicado, ignorándose si está escrito en mayúsculas o minúsculas.

Distinguir mayúsculas y minúsculas: es idéntico al modo Normal, pero tratando las letras mayúsculas y minúsculas como si se tratara de letras distintas.

Expresión regular: este modo nos permite hacer uso del motor de búsqueda basado en PCRE (Perl Compatible Regular Expressions) que incorpora Sigil. Se trata de buscar texto que encaje en un patrón, que es lo que describe la expresión regular, en vez de un texto concreto.

Todas estas particularidades van encaminadas a facilitar el trabajo del editor, pero no son las únicas ventajas que nos proporciona Sigil respecto de otros editores de texto, tenemos otras tres que merecen la pena mencionar:

Herramienta de búsqueda: En cuanto realizamos una búsqueda (escogiendo cualquier opción del menú Buscar, usando la tecla rápida Ctrl-F o pulsando sobre el botón Buscar o sustituir situado a la izquierda del botón Vista de libro) se nos mostrará la herramienta de búsqueda con todos los botones y utilidades que necesitamos para realizar las búsquedas. Esta herramienta permanecerá visible hasta que la cerremos en esta o en futuras sesiones.

Histórico de búsquedas: En previsión de que tengamos que buscar lo mismo en varias ocasiones, Sigil guarda un registro de las últimas 25 búsquedas (y sustituciones) que se mostrarán en cuanto pulsemos sobre el botón desplegable.

Búsquedas guardadas: Debido a que el histórico de búsquedas es volátil (a medida que vamos haciendo búsquedas nuevas van desapareciendo las más antiguas) y limitado (por un lado solo se recuerdan 25 búsquedas, por otro no tenemos forma de ordenarlas de ningún modo), Sigil nos permite guardar adecuadamente las búsquedas que necesitemos.

Acceder a búsquedas guardadas

Escogiendo la opción Búsquedas guardadas o usando la tecla rápida Ctrl-Alt-F nos aparece el cuadro de diálogo de las Búsquedas guardadas.

En este cuadro nos aparecen las búsquedas guardadas en la parte de la izquierda. Si no hemos introducido ninguna de ellas solo aparecerán las que Sigil nos proporciona «de serie», útiles por ejemplo para cambiar los caracteres especiales por su código.

Usar las búsquedas guardadas

Para usar las búsquedas guardadas únicamente tenemos que seleccionar la que deseemos y pulsar el botón adecuado de la derecha (buscar, contar,…).

Advertencia: las búsquedas guardadas, sobre todo las más útiles, suelen contener expresiones regulares, por lo que hemos de cerciorarnos de que está seleccionado el MODO Expresión Regular en la herramienta de búsquedas y que se aplicará a TODOS los ficheros HTML o solo al fichero actual según nos convenga.

Este detalle suele olvidarse con frecuencia, así que si hacemos una búsqueda y no encontramos coincidencias, antes de pensar en lo bueno que somos editando sin dejar errores, pensemos en lo olvidadizos que seguramente somos y comprobemos que el modo de búsqueda es el adecuado.

Truco: El cuadro de diálogo ocupa buena parte de la pantalla, obstaculizando la visión del código de nuestro ePub y dificultando la corrección de errores. Para evitar tener que mantenerlo abierto, podemos hacer una búsqueda o un conteo de coincidencias de la expresión que sea (o pulsar el botón Cargar búsqueda) y luego cerrar el cuadro de diálogo. La búsqueda que hemos usado se ha almacenado en la herramienta de búsquedas, mucho más cómoda, y podemos continuar la corrección desde allí.

Otro truco: Cuando estamos localizando las coincidencias que nos muestran nuestras búsquedas guardadas, a veces es conveniente contarlas antes de buscarlas realmente (especialmente en los casos de un texto ya corregido con pocas coincidencias). Para agilizar este proceso podemos hacer búsquedas por grupos, seleccionando un grupo de la lista en vez de una búsqueda concreta, así se realizará el conteo por cada una de las búsquedas perteneciente a ese grupo.

Ordenar las búsquedas guardadas

Para ordenar a nuestro gusto las búsquedas guardadas solo tenemos que seleccionar la que nos interesa y usar los botones de navegación que aparecen a la derecha bajo los botones de búsqueda: Izquierda/derecha para aumentar/disminuir el nivel de jerarquía y arriba/abajo para subir/bajar la posición ocupada en la lista.

Añadir o borrar una búsqueda guardada

Borrar una búsqueda guardada es realmente sencillo: la seleccionamos, pulsamos el botón derecho del ratón sobre ella y elegimos Eliminar en el menú contextual que nos aparece.

Esto podemos hacerlo sobre una búsqueda concreta o sobre un grupo y desaparecerán todas las búsquedas que lo compongan.

Para añadir búsquedas podemos hacerlo manualmente o de manera masiva.

Añadir manualmente una búsqueda se hace pulsando el botón derecho sobre una parte de la lista y eligiendo la opción Añadir entrada (o grupo en su caso) en el menú contextual.

A continuación nos aparece una nueva línea con el texto «Search» en la columna del nombre de la búsqueda que se encuentra ya seleccionado para que se borre automáticamente al escribir un nuevo nombre para nuestra búsqueda. Tras modificar el nombre y aceptarlo podemos hacer doble clic en la columna Buscar (y también en la columna Sustituir) y se nos abrirá un recuadro para escribir el texto de la búsqueda (o el texto para sustituir), ahí escribiremos lo que nos interesa.

Por último, usaremos los botones de navegación para colocar nuestra búsqueda en el lugar adecuado de la lista que ya poseemos.

La opción de añadir búsquedas de forma masiva pasa por disponer de un conjunto de búsquedas ya preparadas (como es el caso de nuestra comunidad). Para añadirlas, debemos disponer del fichero donde se han almacenado (se trata de un fichero cuya extensión es ini, por ejemplo, sigil_searches.ini).

Localizado el fichero de las búsquedas guardadas, pulsamos de nuevo el botón derecho sobre la lista de búsquedas disponibles y, en esta ocasión, escogemos la opción Importar del menú contextual.

Se nos abre un cuadro de diálogo de selección de ficheros, buscamos el nuestro y pulsamos Abrir.

Sigil creará un grupo nuevo donde colocar el nuevo conjunto de búsquedas y nos pedirá que le demos un nombre. Si las búsquedas que hemos importado ya poseen su propio grupo, dejaremos como nombre «Imported» al nuevo grupo creado por Sigil, lo abriremos y sacaremos el grupo importado de dentro seleccionándolo y pulsando la flecha a la izquierda, con lo que aumentaremos su jerarquía, sacándolo del grupo no deseado. Por último seleccionaremos el grupo vacío y lo eliminaremos.

Guardar los cambios

Muy importante: mientras mantengamos el cuadro de diálogo de búsquedas guardadas abierto podemos realizar todos los cambios que queramos, pero si no pulsamos sobre el botón Save se perderán todos ellos tras cerrarlo. Sigil prevé que se nos pase guardar los cambios y nos avisa, dándonos la posibilidad de guardarlos o no en cuanto intentamos cerrar el cuadro de búsquedas guardadas.

Borrar archivos no usados

Sigil nos presenta esta herramienta muy útil para tener limpio nuestro libro. Para acceder a ella pulsaremos en la opción Borrar ficheros sin usar… del menú Herramientas y nos aparecerá un cuadro de diálogo con los ficheros no usados ya previamente marcados, para borrarlos solo tenemos que pulsar sobre el botón Borrar ficheros marcados (por supuesto, previamente podemos desmarcar los que no queramos borrar).

Hemos de tener en cuenta que esta herramienta solo afecta a ficheros de imagen, video o audio.

Más que para borrar los ficheros no usados, esta herramienta es útil para avisarnos de que se nos ha pasado usar alguna imagen, especialmente cuando las añadimos masivamente.

Borrar clases sin usar

Similar a la herramienta de borrar ficheros sin usar, esta nos permite borrar las clases definidas en nuestra hoja de estilos que no se usen.

Para activarla elegimos la opción Borrar clases sin usar en hojas de estilos… del menú Herramientas, se nos abre un cuadro de diálogo con todas las clases sin usar ya previamente marcadas; para borrarlas solo tenemos que pulsar sobre el botón Borrar estilos marcados (claro que podemos desmarcar las que no queramos borrar).

Las únicas clases que se han de borrar de nuestros libros son las clases personales, ubicadas en la página style.css. Las que pertenecen al epl.css han de quedar SIEMPRE aunque no se usen.

Al igual que en el caso anterior, la mayor utilidad de esta herramienta es servir de recordatorio para localizar las clases que hayamos creado y luego no usado por alguna razón.

Usar el histórico del portapapeles

El copy/paste o copia y pega es una de las herramientas más útiles y utilizadas en los últimos tiempos para todo aquel que use un ordenador.

Sigil, al igual que otras aplicaciones, ha querido ampliar un poco más esta herramienta, permitiéndonos el acceso al historial de copias para pegar cualquiera de ellas a nuestra elección.

El modo de usarlo es el siguiente:

Colocamos el cursor en el punto adecuado donde queremos incorporar la copia. Esto es importante, pues una vez abierto el historial del portapapeles no podremos mover el cursor.

Abrimos el historial, para ello elegimos la opción Pegar desde el historial de portapapeles… del menú Edición o también podemos usar la tecla rápida Ctrl-Alt-V.

Elegimos el elemento de la lista que nos convenga.

Pulsamos el botón Pegar.

La lista del historial se cierra automáticamente, dejándonos la copia en el lugar elegido.

Fragmentos

Botones de la barra de fragmentos

Los botones de la barra de fragmentos son una herramienta de ayuda al maquetado. Su uso es muy sencillo, tan solo pulsando uno de los botones de la barra de fragmentos se inserta una linea de caracteres predeterminados. Estos pueden ser texto, líneas de código, etc., ahorrándonos el tener que escribirlas a mano. Y es especialmente ventajoso cuando se usan para sustituir operaciones repetitivas por su rapidez.

En la imagen inferior se ve como trabajan esos botones en la barra de fragmentos en las que he añadido unos ejemplos.

Los botones están justo debajo del rectángulo verde. Y el resultado de pulsarlos aparece en las primeras veinte líneas del texto.

Barra y ventana de botones de fragmentos

Los fragmentos pueden ser usados desde la barra de fragmentos, pero también desde la ventana de fragmentos. Aunque la barra ocupa mucho menos pantalla y es más accesible. En la ventana contamos con la ventaja de que los fragmentos a mostrar son ilimitados a diferencia de los 20 que solo se muestran en la barra de fragmentos. Además también son visibles grupos de fragmentos si los hubiera. Y también se puede acceder a ellos haciendo clic derecho en donde queremos insertar el fragmento, seleccionaremos «fragmentos» y se abre un desplegable con todos los fragmentos que tengamos grabados.

Aquí hemos fusionado la ventana de fragmento con el explorador de contenidos y el índice de contenidos tan solo arrastrándola hacia la parte izquierda de la pantalla. Abajo hay unas pestañas que indican cual tenemos visible.

Si nos fijamos en la ventana de fragmentos aparecen más códigos que en la barra de fragmentos. Como hemos dicho antes la barra solo acepta 20 botones.

Accediendo al editor de fragmentos

Para añadir los fragmentos hay que acceder al editor de fragmentos. Vía menú o pulsando Ctrl+Alt+C.

Y estos pueden crearse uno a uno o importarse. Como podemos ver el funcionamiento es muy parecido al sistema de búsquedas guardadas.

En nuestro caso hemos hecho 26 códigos que nos parecían más interesantes. Aunque insisto, solo se van a mostrar los 20 primeros.

Aquí ya entran las necesidades de cada uno, pero como comienzo podéis tomar los míos.

Para importarlos hay que crear un documento de texto con este contenido y renombrarlo como queramos pero con extensión ini (fragmentos.ini por ejemplo).

Código:

[clip_entries]

1\Name=<p>

1\Text=<p>\\1</p>

2\Name=<em>

2\Text=<em>\\1</em>

3\Name=<str>

3\Text=<strong>\\1</strong>

4\Name=<img>

4\Text=<img>\\1</img>

5\Name=<class>

5\Text="<p class=\"XX\">\\1</p>"

6\Name=esp

6\Text=" "

7\Name=sangr

7\Text=asangre

8\Name=salto10

8\Text=salto10

9\Name=salto25

9\Text=salto25

10\Name=cursiva

10\Text=cursiva

11\Name=negrita

11\Text=negrita

12\Name=cita

12\Text=cita

13\Name=banner

13\Text=banner

14\Name=[nota*]

14\Text="<a href = "../Text/notas.xhtml#nt*" id ="rf*"><sup>[*]</sup></a></a>"

15\Name=Nota*

15\Text="<div class=\"nota\">\n<p id=\"nt*\"><sup>[*]</sup> *** <a href = \"../Text/Section0***.xhtml#rf*\" >&lt;&lt;</a></p>\n </div>"

16\Name=(\x2019)

16\Text=\x2019

17\Name=(\xab\xbb)

17\Text=\xab\\1\xbb

18\Name=(\x2026)

18\Text=\x2026

19\Name=(\x2014)

19\Text=\x2014

20\Name=br

20\Text=<br />

21\Name=Tit

21\Text=\\u\\1

22\Name=low

22\Text=\\L\\1\\E

23\Name=UP

23\Text=\\U\\1\\E

24\Name=h1

24\Text=<h1>\\1</h1>

25\Name=h2

25\Text=<h2>\\1</h2>

26\Name=h3

26\Text=<h3>\\1</h3>

size=26

Importar fragmentos

El siguiente paso es importarlos tal como se hace con las búsquedas guardadas. Botón derecho en cualquier sitio y darle a importar nuestro archivo fragmentos.ini.

A pesar de haber sido importadas los botones siguen sin aparecer en la barra de fragmentos, y es porque los códigos deben de estar en el editor de fragmentos sin formar parte de un grupo. Para ello hay que seleccionarlos todos y arrastrarlos arriba del todo en la lista y dejarlos fuera del grupo «Imported» como aparece en la imagen de abajo.

Por último solo nos resta eliminar el grupo vacío «Imported» y guardar cambios.

Ahora la barra debe estar como en la primera imagen del hilo con sus 20 botones.

Uso de fragmentos

Os muestro en detalle como funciona cada botón, aunque lo mejor es ir probando directamente sobre un texto en blanco.

Editar fragmentos

De un modo similar a como se hace en las búsquedas guardadas se pueden editar los fragmentos, creando, eliminando, modificando, etc., los ya existentes.

Otros fragmentos

Comentario

Como su nombre indica lo uso para insertar una llamada durante la maquetación a modo de marca o recordatorio, después solo hay que usar la primer Expresión Regular (0.01) y dar con la anotación. A mí este fragmento me resulta especialmente útil.

<!-- NOTA DE ATENCIÓN, REVISAR O INSERTAR -->

Divp

Inserta un final de párrafo y comienzo del siguiente. Es decir corta un párrafo en dos distintos.

</p>

<p>

Del mismo modo he incluido en mi barra dos etiquetas independientes de final y principio de párrafo porque me he dado cuenta que se usa mucho más que otras etiquetas.

<p

<p>

p>

</p>

[Nota*]

<a href = "../Text/notas.xhtml#nt*" id ="rf*"><sup>[*]</sup></a>

Nota*

<div class="nota">

<p id="nt*"><sup>[*]</sup> *** <a href = "../Text/Section0***.xhtml#rf*" >&lt;&lt;</a></p>

</div>

Versal

<small>\1</small>

Div.

<div class="**">\1</div>

NOTA: Si os fijáis he sustituido el empleo de la «X» por el «*» porque en búsquedas es más útil discriminar a los números romanos, y por si acaso se me ha pasado completar alguna etiqueta hago una búsqueda final incluyendo en el campo buscar un simple asterisco.

Plugins

A partir de la versión 0.8 Sigil ha incorporado la posibilidad de añadir plugins escritos en Python. En el momento en que se escribe este Manual aún es corta la lista disponible, pero se espera que vayan apareciendo variados e interesantes complementos próximamente.

La mejor forma de conseguir los plugins para Sigil que hay en estos momentos es visitar el foro de MobileRead que se ha abierto expresamente para ellos:

http://www.mobileread.com/forums/forumdisplay.php?s=30adc10ed720353d96a8b8c40f922b46&f=268

Como decíamos más arriba, están escritos en Python, por lo que es necesario tener instalado el intérprete de Python en nuestro sistema operativo. En realidad es conveniente tener instaladas las versiones 2 y 3 pues podemos encontrar plugins escritos en ambas.

Por definición, son aplicaciones externas que pueden funcionar junto con Sigil. Eso significa que cada desarrollador ha diseñado el suyo según sus propias preferencias y basándose en la existencia de las aplicaciones que haya creído necesarias. Esto quiere decir que, además de una u otra versión de Python, puede que necesitemos instalar otras aplicaciones para que funcione. La única forma de saber las limitaciones de cada uno de ellos es leer las instrucciones que sus desarrolladores acompañan al material descargable en el foro de MobileRead (o cualquier otro sitio donde se puedan encontrar).

El primer paso para su uso es, por supuesto, tener instaladas en nuestro sistema operativo las aplicaciones necesarias: Sigil versión 0.8 o superior, Python 2 y/o 3 y cualquier otra que pueda ser necesaria para su funcionamiento.

El segundo paso es conseguir el descargable del plugin, es decir, un fichero .zip que contiene su código. No hay que descomprimirlo, lo usaremos tal cual.

Por último, elegiremos la opción Manage Plugins del menú Plugins, lo que nos abrirá el cuadro de diálogo de Preferencias en la opción Plugins (eso quiere decir que también podemos llegar aquí a través del menú Edición → Preferencias).

Si no lo hemos hecho antes, veremos que en la parte de la derecha aparecen en blanco los cuadros donde hay que especificar la ruta de instalación de las dos versiones de Python. Pulsando los botones Auto se colocarán automáticamente las rutas (si lo tenemos instalado); si algo falla podemos pulsar los botones Set y buscar manualmente las rutas adecuadas.

Una vez aclarado el asunto de la ruta de Python, podemos pulsar el botón Add Plugin, se nos abrirá un cuadro de diálogo de Abrir documento que buscará los ficheros .zip en nuestro ordenador, localizamos nuestro plugin y pulsamos Aceptar, la instalación es automática e inmediata.

Cerramos por último el cuadro de Preferencias y ya lo tenemos disponible desde el menú Plugins.

Solo tenemos que pulsar y hará su trabajo.

CREACIÓN RÁPIDA DE NOTAS

Notas con la herramienta «Fragmentos» de Sigil

Si hay dos o tres no hay problema con hacerlo a mano, pero cuando hay muchas notas, puede ser eterno. En cambio, generar notas rápidamente con la herramienta «Fragmentos» es bastante sencillo.

El código para crear notas a pie de página es el siguiente:

<div class="nota">

<p id="nt\1"><sup>[\1]</sup> NOTA\1 <a href="../Text/FICHERO.xhtml#rf\1">&lt;&lt;</a></p>

</div>

Y para crear referencia a las notas:

<a href="../Text/notas.xhtml#nt\1" id="rf\1"><sup>[\1]</sup></a>

Para utilizarlos hay que escribir el número de la nota o referencia a nota, seleccionarlo y lanzar el fragmento correspondiente.

Notas super-rápidas en capítulos con expresiones regulares

Solo necesitas conocer cinco cosas de las expresiones regulares para editar las notas de forma rápida. Si necesitas más información, te recomendamos que consultes el apartado correspondiente en este mismo manual o preguntes por el foro.

Los siguientes caracteres son especiales y no se pueden usar directamente: [, \, ^, $, ., |, ?, *, +, ( ). Si tienes que usar alguno porque está en el texto que buscas, usa el carácter \ antes. Por ejemplo: \+.

Para buscar un número usamos [0-9]. [ ] se usa para buscar rangos, por ejemplo: A-Z, a-c, etc.

Para buscar X veces un carácter se usa el carácter *.

Para poder reemplazar en una búsqueda parte de lo encontrado usamos () y en reemplazar \1 para el primer grupo de paréntesis, \2 para el segundo y así sucesivamente.

No es fácil, pero vamos con ello. Las notas en este libro no tienen nada de código, solo [número de nota]. La expresión para cambiarlas será por tanto:

Buscar: | \[([0-9]*)]
Sustituir: | <a href="../Text/notas.xhtml#nt\1" id="rf\1"><sup>[\1]</sup></a>

Los corchetes, y luego cualquier número. Usamos el asterisco porque las notas por encima de 9 tendrán dos números.

Como veis, en la búsqueda hemos dejado los corchetes fuera de los paréntesis ya que en el reemplazo solo queremos el número para ponerlo en el href, en el id y como texto de la propia nota.

Si antes de ejecutar la expresión damos a contar, veremos que el número de notas que sale es el doble de lo esperado. El motivo es que en el fichero notas.xhtml las notas también se escriben como [número de notas]. Se puede hacer de dos formas, ir reemplazando todas las notas con el botón sustituir, o bien copiar notas.xhtml a UltraEdit antes de reemplazar todas.

Y las notas quedarán así y todas a la vez:

<a href = "../Text/notas.xhtml#nt1" id ="rf1"><sup>[1]</sup></a>.

Intentémoslo con otro ejemplo con más código y un poco más complicado. Vamos a suponer que tenemos un libro que sí tiene código de enlace con las notas, pero que no están según lo indicado en este Manual. Vamos a cambiarlas todas con una expresión regular.

Buscamos lo siguiente:

Buscar:
<a id="ref_footnotebookmark_start[0-9]*"></a><span class="sgc-1"><a href="#ref_footnotebookmark_end[0-9]*">([0-9]*)</a></span>

Donde [0-9]* sería cualquier número: 1, 2, 3… Nuestro objetivo es eliminar el texto con código no deseado, como por ejemplo:

ref_footnotebookmark_start

Como no hay ningún carácter especial en este caso no tenemos que usar \, solo marcamos con paréntesis uno de los números para luego usarlo en el reemplazo. El resto sí que hay que buscarlos con [0-9]* porque son diferentes para cada nota, pero los descartamos para el reemplazo.

Y reemplazamos por:

Sustituir:
<a href="../Text/notas.xhtml#nt\1" id="rf\1"><sup>[\1]</sup></a>

Notas más rápidas con UltraEdit

A continuación, te presentamos dos sencillos scripts de UltraEdit (seguramente con Sublimetext, Notepad++ u otros también pueda hacerse).

Documento 1: Que guardaremos con nombre «Crear notas de pie en capítulos.js».

function CreaNotasdeLibro() {

var num = UltraEdit.getValue("Número de notas a crear:",1);

var i = 1;

while (i <= num) {

UltraEdit.activeDocument.write("<a href=\"../Text/notas.xhtml#nt" + i + "\" id=\"rf" + i + "\"><sup>[" + i + "]</sup></a>\r\n");

i= ++i;

}

} //end creanotasdelibro

CreaNotasdeLibro();

Documento 2: Que guardaremos con nombre «Crear notas de pie en notas.js».

function CreaNotasenNotas() {

var i = 1;

UltraEdit.activeDocument.top();

UltraEdit.columnModeOff();

UltraEdit.insertMode();

do {

UltraEdit.activeDocument.key("HOME");

UltraEdit.activeDocument.write("<div class=\"nota\">");

UltraEdit.activeDocument.write("<p><a href=\"../Text/.xhtml#rf" + i + "\" id=\"nt" + i + "\"><sup>[" + i + "]</sup></a> ");

UltraEdit.activeDocument.key("END");

UltraEdit.activeDocument.write("</p></div>");

UltraEdit.activeDocument.key("DOWN ARROW");

i= ++i;

} while (!UltraEdit.activeDocument.isEof())

}

CreaNotasenNotas();

Una vez creados, sigue los siguientes pasos:

En el menú Scripting usa la función Scripts (la primera).

Se abrirá una ventana. Pulsa sobre el botón «Add» para añadir los dos ficheros que has creado previamente.

Ahora, para crear las notas de los capítulos crea un documento nuevo vacío y en el menú Scripting da a «crear notas de pie en capítulos.js»

El script nos preguntará el número de notas a crear. Introduce el número que corresponda.

Cuando termine tendremos una lista similar a la siguiente:

Ahora es cuestión de ir cambiando las notas creadas en los capítulos copiando el código de la nota y pegándolo en su lugar correspondiente:

… vuestra grandeza<a href = "../Text/notas.xhtml#nt2" id ="rf2"><sup>[2]</sup></a>.

Quedaría:

… vuestra grandeza[2].

Una vez insertadas las notas, las arreglaremos en notas.xhtml:

Copia las notas a UltraEdit en un documento nuevo:

Elimina todo excepto la nota (quita también la numeración). Con UltraEdit se hace muy rápido con buscar y reemplazar (permite hasta expresiones regulares) y con el modo de columna, de forma que quede algo como esto:

Una vez que tengas todas las notas limpias, ejecuta el script «Crear notas de pie en notas.js» (en el menú Scripting).

Y obtendremos la lista de notas. Lista para copiar y pegar en Sigil justo debajo del heading de notas si no fuese porque falta saber en que fichero está cada nota para ponerlo en el href, al que solo le falta el nombre del fichero.

Una forma de hacer esto es:

Busca la primera nota, averigua en qué fichero esta y edita en UltraEdit esa primera nota.

Vuelve a Sigil y busca la siguiente nota. Si está en el mismo fichero, sigue buscando hasta encontrar la primera nota que no esté en el mismo capítulo. Cuando la encuentres, ve a UltraEdit y pon el nombre del fichero en esa nota.

Ponte en «modo columna» (Alt+c) o menú «Column» (en ingles). Supongamos que las 10 primeras notas están en la section001.xhtml, y la 11 está en la section02.xhtml, en modo columna nos ponemos en la nota2 en ../text/, y desde aquí con Mayúsc y la flecha de abajo marcamos hasta la nota 10, soltamos Mayúsc y tecleamos section001. ¡Tachan!, las 9 notas se rellenan a la vez.

Y así con el resto. Luego, con todas las referencias completadas copiamos todo y lo pegamos en Sigil.

Si nuestro libro contiene notas extensas con VARIOS PÁRRAFOS NO PODREMOS USAR ESTE MÉTODO. La mejor solución es usarlo con textos pequeños (como el del ejemplo) y seguir todo el proceso. Una vez copiado todo al archivo notas.xhtml sustituiremos esos párrafos pequeños por el texto real.

Hemos terminado. Excepto por un detalle, las expresiones regulares. La primera parte se puede hacer mucho más rápido en algunos casos con las expresiones regulares. Si se explica la otra forma es porque habrá libros en los que no sea posible, por ejemplo porque las notas no estén numeradas.

Notas rápidas con hoja de cálculo

Una alternativa a UtraEdit a la hora de diseñar rápidamente las notas es usar una hoja de cálculo. Excel de Microsoft Windows o Calc de Open Office funcionan de forma muy similar y son perfectamente válidos para realizar este proceso.

Claro está que hacer esto para unas pocas notas no es realmente útil, pero si la cantidad de notas es elevada, sí que lo es.

El primer paso es colocar en una nueva hoja de cálculo las partes fijas de las notas, tal como se puede ver en la imagen:

Nótese que el texto situado en la celda B10 termina en espacio en blanco, al igual que comienza con espacio en blanco el texto situado en la celda B11.

Una vez escritos los encabezados (que son opcionales) copiamos y pegamos los textos de las notas en la celda D4 y siguientes:

A continuación copiamos el nombre del archivo .xhtml donde se sitúa la nota número uno en la celda E4 y justo debajo la fórmula =E4, finalmente hacemos un autollenado hacia abajo partiendo de la celda E5 (la que contiene la fórmula) hasta el final del listado de notas (autollenar es arrastrar desde el punto que hay en la esquina inferior derecha de la celda y equivale a copiar y pegar).

De forma similar actuaremos con la columna Número: ponemos un 1 en la celda F4, la fórmula =F4+1 en la celda F5 y, por último autollenamos la celda F5 hacia abajo.

En la columna Link nos aparecerá el texto que debemos poner en los capítulos para acceder al texto de las notas. Para ello colocaremos en la celda G4 la fórmula:

=$B$3&F4&$B$4&F4&$B$5&F4&$B$6

Y luego autollenamos hacia abajo. Nótese que las referencias a las celdas que contienen el texto fijo van acompañadas del signo $, mientras que las otras no. Eso significa que son referencias absolutas, mientras que las otras son referencias relativas.

En la columna Nota nos aparecerá el texto que debemos poner en el archivo notas. Para ello nos colocaremos en la celda H4 y escribiremos la siguiente fórmula:

=$B$8&F4&$B$9&F4&$B$10&D4&$B$11&E4&$B$12&F4&$B$13

Como en el caso anterior, los signos de $ indican una referencia absoluta. A continuación autollenamos hacia abajo.

Ya solo nos queda poner los nombres de los capítulos donde se sitúan nuestras notas (atención que, aunque le esté llamando capítulo para el ejemplo, me refiero al archivo .xhtml donde se sitúa el texto que se anota). En nuestro ejemplo vamos a suponer que las tres primeras notas se sitúan en el capítulo 3 (es decir, en el archivo capitulo3) y el resto en la bibliografía (es decir, en el archivo biblio), así que escribimos la palabra biblio en la celda E7, con lo cual todas las que están debajo se actualizan automáticamente:

Y ya hemos acabado de generar nuestras notas, solo tenemos que ir copiando uno a uno los links de la columna G y pegarlos en nuestro libro en los puntos indicados y luego copiar todas las notas de la columna Nota y pegarlas en el archivo notas.xhtml de nuestro ePub.

Aunque se tarda un momento en hacer esto, podemos guardarlo ya hecho y reutilizarlo en un futuro, ahorrándonos trabajo. Para ello copiaríamos los nuevos textos de las notas en la columna Texto, autollenaríamos si fuera necesario el resto de columnas hasta el número necesario de notas (cuidando de hacerlo con una celda que contenga la fórmula en el caso de la columna Capítulo) y pondríamos los nombres de los capítulos en los lugares adecuados.

Si nuestro libro contiene notas extensas CON VARIOS PÁRRAFOS NO PODREMOS USAR ESTE MÉTODO. La mejor solución es usarlo con textos pequeños (como el del ejemplo) y seguir todo el proceso. Una vez copiado todo al archivo notas.xhtml sustituiremos esos párrafos pequeños por el texto real.

Notas con Notepad++ y Python Script

Notepad++ es otra aplicación útil para generar el código de las notas rápidamente. Se trata de un editor de texto, gratuito y multiplataforma, que tiene la posibilidad de añadir funcionalidades mediante plugins.

La aplicación se puede descargar desde su página web: notepad-plus-plus.org. Una vez descargada e instalada se puede agregar el plugin que ejecuta los script de Python desde la misma aplicación.

Si el plugin da problemas de ejecución, se recomienda descargarlo directamente desde la página web del creador: npppythonscript.sourceforge.net

Hay que descargar cualquiera de los dos ficheros que tiene en el título «full». El archivo se descomprime en la carpeta de la aplicación y se sustituyen los archivos que ya existieran.

El siguiente paso es crear los «script» que van a generar el texto automáticamente. Dentro del menú «Plugins → Python Script» hay que seleccionar la opción «New Script».

El programa solicitará un nombre de archivo. Para las notas a pie de página se puede utilizar «notas.py». Inmediatamente después se creará un fichero nuevo. Aquí hay que copiar el siguiente código:

notepad.menuCommand(MENUCOMMAND.LANG_HTML)

numero_notas=notepad.prompt(notepad, 'Numero de notas')

texto_1=""" <div class=\"nota\">"""

texto_2=""" <p id=nt"""

texto_3="""><sup>["""

texto_4="""]</sup> """

texto_5="""NOTA"""

texto_6=""" <a href=../Text/FICHERO.xhtml#rf"""

texto_7=""">&lt;&lt;</a></p>"""

texto_8=""" </div>

"""

for i in range(0, int(numero_notas)):

print texto_1

print texto_2+str(i+1)+texto_3+str(i+1)+texto_4+texto_5+str(i+1)+texto_6+str(i+1)+texto_7

print texto_8

notepad.save()

Se repite la operación para crear el script que generará las referencias a las notas. El nuevo fichero se ha llamado «ref-notas.py». El texto que hay que copiar es el siguiente:

notepad.menuCommand(MENUCOMMAND.LANG_HTML)

numero_notas=notepad.prompt(notepad, 'Numero de notas')

texto_1="""<a href=\"../Text/notas.xhtml#nt"""

texto_2="""\" id="rf"""

texto_3="""\"><sup>["""

texto_4="""]</sup></a>"""

for i in range(0, int(numero_notas)):

print texto_1+str(i+1)+texto_2+str(i+1)+texto_3+str(i+1)+texto_4

notepad.save()

Una vez guardados los dos archivos con el código Python solo queda ejecutarlos. Para ello se partirá de un fichero vacío. Dentro del menú «Plugins → Python Script → Scripts» se selecciona uno de los dos «script» que se han creado.

El «script» pedirá el número de notas a generar. Se crearán tantas notas o referencias a notas como se hayan indicado y se guardará el resultado en disco.

EXPRESIONES REGULARES

Crear expresiones regulares

Las expresiones regulares se utilizan para encontrar combinaciones de caracteres dentro de un texto determinado empleando patrones.

El término «expresiones regulares» es una traducción errónea que no indica lo que realmente significan. «Regular» en inglés tiene varias acepciones y la más adecuada para este tema es «completo». Así pues se trata de «expresiones completas» en contraposición a las «expresiones simples».

Buscar en este caso consiste, por tanto, en comparar un patrón a lo largo de un texto. Ese patrón puede formarse de diversas maneras y en diferentes lenguajes, pero en todos realizará una comparación carácter a carácter de izquierda a derecha.

Sigil implementa un motor de búsqueda simple y otro completo. Este último se basa en PCRE (Perl Compatible Regular Expressions) que es el lenguaje de símbolos que se intentará explicar.

Las búsquedas pueden tener dos funciones: Buscar o remplazar. El hecho en sí de buscar viene establecido por las características propias de PCRE, pero el de remplazar depende de la forma en que los desarrolladores de Sigil lo introducen en sus versiones. En otras palabras: Si el reemplazo no es posible es debido a las limitaciones de Sigil.

Como se ha indicado más arriba hay dos tipos de búsquedas: las simples y las completas o avanzadas.

Las búsquedas simples cualquiera es capaz de realizarlas, se trata de escribir en la caja correspondiente lo que queremos buscar y el motor de búsqueda comprobará carácter a carácter de izquierda a derecha el patrón de búsqueda y nos devolverá lo encontrado.

Si sobre este texto se buscase «puede formarse» cualquier motor de búsqueda empezaría por buscar una «p» que estuviese seguida por una «u» y luego una «e» y una «d» y así sucesivamente y pararía en el tercer párrafo puesto que el patrón buscado se cumple y devolvería una coincidencia formada por las catorce letras y espacio que forman el texto buscado.

Parece una obviedad pero tiene su importancia: catorce caracteres escritos devuelven catorce caracteres encontrados. Cuando se escribe algo en PCRE se encontrarán tantos caracteres como símbolos se hayan puesto en la caja de búsqueda (con contadas excepciones).

Antes de empezar con los símbolos tengo que señalar que las RegEx son sensibles a mayúsculas y minúsculas por lo que no es lo mismo «A» que «a».

Caracteres generales

\

Carácter general de escape. Quiere decir que si precede a un símbolo RegEx, el símbolo deja de ser lenguaje PCRE para ser el símbolo en sí. Por ejemplo el cierre de interrogación es un carácter especial con significado, si en modo RegEx escribo en la caja de búsqueda

Buscar:
¿Hola?

no encontrará lo que se pretende buscar ya que «?» es un carácter especial del lenguaje PCRE y se obtendrá cualquiera de estas dos posibilidades: «¿Hola» u «¿Hol».

Se puede ver que nunca devuelve la «?».

Para buscar directamente cualquier símbolo PCRE hay que precederlo de «\» por lo que en el ejemplo sería:

Buscar:
¿Hola\?

^

Símbolo que localiza el inicio de una cadena de texto. O símbolo que representa negación dentro de una clase (Ver más abajo).

$

Símbolo que localiza el final de una cadena de texto.

.

Símbolo que representa cualquier carácter. El introducir un punto por tanto directamente en la caja de búsquedas no devuelve el punto en sí sino cualquier carácter. Si se hace la prueba se ve que se va obteniendo uno a uno todos los caracteres del texto. Para buscar el punto en sí tendría que ser «\.».

[ ]

Símbolos de apertura y cierre de clase. Las clases son estructuras del lenguaje que van entre dos corchetes (apertura y cierre). Su significado es sencillo ya que funcionan como operador lógico «O». Ocupando un único carácter.

Buscar:
[abc]

devuelve un único elemento que puede ser «a», «b» o «c».

Dentro de las clases se pueden llamar a los caracteres en sí mismos.

Buscar:
[.ab]

devuelve un único elemento, «.», «a» o «b», sin ser necesario dentro de ellas el uso de «\», con la única excepción del propio cierre de corchetes «]» que sí lo necesita.

Buscar:
[a\]bc]

devuelve «a», «]», «b» o «c».

Un error frecuente es pensar que algo como

Buscar:
[(Juan)(Pedro)]

puede devolver «Juan» o «Pedro». Una clase devuelve un único carácter por lo que el resultado será cualquiera de las letras y paréntesis que están dentro de los corchetes.

Este es el principal motivo de huir de las etiquetas HTML. [&mdash;] no devuelve la etiqueta en sí sino que se obtiene un único carácter que sería cualquiera de los elementos dentro de los corchetes: «&», «m», «d», «a», «s», «h» y «;».

Se señaló más arriba que dentro de una clase el símbolo «^» significaba negación, por tanto una búsqueda del tipo

Buscar:
[^a]

devolverá un único carácter que será cualquiera excepto la letra «a» minúscula.

|

Símbolo que significa el condicional «O».

En apariencia es similar a las clases entre corchetes; también realiza la función lógica «O» con los elementos. Pero las clases devuelven un único elemento, mientras que «|» compara cadenas completas y devuelve tantos elementos como tiene la búsqueda.

Buscar:
Juan|Pedro

localizará «Juan» o «Pedro» y se puede ver que devuelve el mismo número de caracteres que el número de caracteres que tenía la búsqueda.

?

Símbolo con varios significados, todos ellos relativos a la repetición. El más corriente es que el carácter al que acompaña se repita cero o una vez. Por ejemplo, la búsqueda

Buscar:
estas?

me devolvería «esta» o «estas». La «?» actúa sobre el carácter que le precede: en este caso la «s» y permite que ella aparezca cero o una vez.

Si aparece cero veces coincide con el patrón «esta» y si aparece una vez coincide con el patrón «estas».

Otro significado, sobre el que incidiré más abajo, es la cuantificación mínima que es muy utilizada en las RegEx.

( )

Símbolo de apertura y cierre de grupos o subpatrones.

El conjunto del grupo entre los paréntesis el motor de búsqueda lo interpreta como un solo carácter.

Son fundamentales a la hora de realizar los reemplazos; el elemento que se encuentre dentro de cada uno de ellos se invocará en la sustitución por la barra de escape «\» seguida de un número.

*

Símbolo cuantificador de repetición que implica que el carácter al que acompaña se repita cero o más veces.

Si se efectúa la búsqueda

Buscar:
ca(ll)*e

el motor de búsqueda, como se dijo al principio, busca secuencialmente carácter a carácter de izquierda a derecha: Localizaría la «c» seguida de «a» seguida de dos «l», que al estar entre paréntesis es un único grupo y a efectos de búsqueda un único carácter, con la posibilidad de que se repita cero o más veces y seguida de «e».

Esto nos podría devolver: «calle» que cumple el patrón y en la que «ll» se repite una vez. También «cae» ya que «ll» se repite cero veces.

También «caer» que cumple el patrón. Busca secuencialmente cuatro caracteres, «c», «a», «ll» (que se puede dar cero o más veces) y «e», y de lo que venga a continuación no se ha señalado nada por lo que todo lo que pueda seguir es válido.

También devolvería «calllle» ya que «ll» se repite dos veces.

+

Símbolo cuantificador de repetición que implica que el carácter al que acompaña se repita una o más veces.

Si se busca

Buscar:
(ja)+

se obtienen como resultados: «ja» «jaja» «jajaja» etc.

A efectos de la búsqueda «ja» es un único carácter al estar agrupado por los paréntesis.

Si la búsqueda es del tipo:

Buscar:
.+

encontraría la totalidad del texto de una sección ya que el «.» es cualquier carácter y el «+» implica que cualquier carácter se produzca una o más veces.

Si se dispone del texto:

El Newton (unidad de fuerza) es distinto del Kg. (unidad de masa).

Y se realiza esta búsqueda (cuando se buscan los propios paréntesis hay que precederlos de «\» ya que son símbolos propios del PCRE):

Buscar:
\(.+\)

el resultado obtenido sería:

(unidad de fuerza) es distinto del Kg. (unidad de masa)

En la búsqueda se han puesto como fronteras de ellas un paréntesis de apertura y otro de cierre y dentro cualquier carácter el número de veces necesario hasta encontrar la frontera final.

La existencia del «+» hace que no se detenga en el «)» que sigue a fuerza. Busca todo hasta la última coincidencia del patrón. Si se quiere poner límite a la búsqueda se debe usar el símbolo «?» como se indicaba más arriba.

Si en el texto del ejemplo quisiese obtener solo (unidad de fuerza) tengo que poner límite al símbolo «+» y la búsqueda quedaría

Buscar:
\(.+?\)

en el que «?» le obliga al motor de búsqueda a parar en la mínima coincidencia posible.

{ }

Símbolo de apertura y cierre de cuantificador de repetición que implica que el carácter al que acompaña se repita el número de veces indicado en los valores interiores: {n.º mínimo,n.º máximo}

Una búsqueda del tipo

Buscar:
(ja){1,2}

le indica al motor de búsqueda que considere primero «ja» como un único carácter al estar entre paréntesis y que lo localice en textos donde aparezca un mínimo de una vez y un máximo de dos veces.

Se obtendrían paradas en «cejas» puesto que se da una vez y en «jaja» al darse dos veces, pero no en «jajaja» ya que se da tres veces.

-

Símbolo que significa rango.

Una búsqueda del tipo

Buscar:
[a-z]

devolvería un único carácter al ser una clase de cualquier letra minúscula comprendida entre la «a» y la «z», pero no nos devolvería «B» o cualquier mayúscula.

Caracteres precedidos de «\» (backslash) (1)

En el apartado anterior se señaló que el carácter general de escape «\» (backslash) tenía como objetivo informar al motor de búsqueda que un carácter concreto, que constituía un símbolo de las búsquedas, se quería que fuese considerado como carácter en sí y no como lenguaje.

Teniendo en cuenta que los símbolos empleados en PCRE abarcan prácticamente la totalidad de signos tipográficos (mayúsculas y minúsculas), es evidente que también hay que informar al motor de búsqueda de cuando un carácter deja de ser tal para convertirse en símbolo. Eso también se consigue con la barra invertida «\».

Como se acaba de indicar, casi todos los elementos de un teclado tienen un sentido simbólico en PCRE. No se van a repasar todos ya que muchos no se han llegado a usar todavía y es posible que excedan el ámbito de su aplicación en Sigil.

Se empezará con los caracteres no imprimibles que aunque son varios (control de alarma, de escape, salto de línea, retorno, tabulación…), solo unos pocos tienen interés.

\n

Símbolo que se refiere y localiza el salto de línea.

En informática se conoce como LF (Line Feed). Su significado es claro y sencillo: Busca el final de una línea.

Si se prueba este símbolo en cualquier texto se verá que va saltando, línea a línea, a su final, que queda como seleccionado. Pero si se presta atención se ve que en realidad el cursor queda posicionado al principio de la línea siguiente (no al inicio de la etiqueta de párrafo <p>).

Es interesante entender qué es una línea en Sigil ya que al presentar todo el texto ajustado a la ventana puede parecer que un párrafo son varias líneas cuando en realidad es una sola. Si se mira a la izquierda del texto, dentro de Sigil, aparece la numeración de líneas y observamos que la etiqueta <body> ocupa las mismas líneas que el mayor de los párrafos posibles, es decir, una.

Haciendo uso de lo visto en el apartado anterior, el símbolo

Buscar:
\n{2}

representaría la búsqueda de dos saltos de línea contiguos (que es la separación que utiliza Sigil por defecto entre párrafos) y que es totalmente equivalente a

Buscar:
\n\n

Si se escribe

Buscar:
\n{1,2}

se estaría señalando al motor de búsqueda que localizase uno como mínimo y dos como máximo saltos de línea. Si se prueba en cualquier texto se ve que siempre elige dos y eso es debido a que muchas de las instrucciones de búsqueda son lo que se conoce con el término «greedy» (tragonas o glotonas), es decir, abarcan lo máximo posible. Ya se había visto que «+» también lo era y había que ponerle coto haciéndolo «vago» o «lazy» mediante «?».

\xhh

Símbolo que localiza cualquier carácter mediante su numeración hexadecimal.

Se usa poco pero a veces es necesario (en la tabla de búsquedas se usa para localizar el símbolo «shy» que es invisible pero existe).

Todos los caracteres existentes tienen una numeración decimal y su equivalente hexadecimal (que es como trabajan los ordenadores internamente). Decimal proviene de diez y para el uso corriente implica que cualquier número posible lo podemos formar en base a diez dígitos (del 0 al 9). Hexadecimal proviene de dieciséis e implica que cualquier número se puede representar en base a dieciséis dígitos (del 0 al 9 y de la A a la F).

En la página «ascii-code» aparece la equivalencia entre cualquier carácter y sus respectivos sistemas de numeración.

Si se escribe

Buscar:
\x41

se estaría buscando la letra «A».

Este método en teoría permitiría localizar cualquier símbolo por su código. En teoría porque en Sigil no se han conseguido resultados para algunos códigos, al menos desde Linux que es donde se ha trabajado regularmente.

Este sistema de búsqueda no debe confundirse con el sistema de reemplazo, que para el que haya usado ya las RegEx se forma mediante «\» y un número. Las expresiones «\1» a «\9» Sigil no las interpreta como búsquedas hexadecimales sino como llamadas a algo en algún momento seleccionado (Back reference).

Ya se señaló en el apartado anterior que lo encerrado entre paréntesis forma un grupo. Estos grupos Sigil los numera internamente de izquierda a derecha y siempre podemos hacer referencia a ellos a través de ese número.

Buscar:
(este es el grupo1)(este el dos)(este el 3)

Si se necesita el resultado de lo que se obtuviese en el paréntesis del grupo 1 puedo llamarlo mediante «\1»; si fuese necesario el grupo 2 lo llamaría «\2» y así sucesivamente. Esto es imprescindible en los reemplazos pero también nos puede servir en la caja de búsqueda. Si se tiene una búsqueda del tipo:

Buscar:
(comandos1)(comandos2)(comandos1)(comandos3)(comandos2)

se podría dejar como

Buscar:
(comandos1)(comandos2)\1(comandos3)\2

Todo esto que parece sencillo se complica cuando hay paréntesis anidados (ya que se tiene que adivinar qué numeración interna les da Sigil si luego los quieres referenciar) o cuando se usen estructuras propias de las búsquedas que van entre paréntesis pero que no ocupan «lugar» en la numeración por ser eso: estructuras.

\g

En aquellos casos que la búsqueda sea muy compleja y requiera más de 9 grupos, si se tiene que hacer referencia a dichos grupos, deberemos usar «\g{nº de referencia}». Se recuerda que los nueve primeros se referencian directamente. Por ejemplo «\3», pero el grupo undécimo sería «\g{11}».

\s

Símbolo que localiza cualquier espacio en blanco.

A medida que se vayan relacionando los símbolos del lenguaje PCRE se irán teniendo las herramientas necesarias para construir nuestras búsquedas, del mismo modo que el carpintero se dota de los materiales y utensilios para hacer cualquier trabajo. Pero al igual que él sabe por adelantado lo que quiere construir, se debe tener claro qué es lo que se quiere buscar antes de empezar a poner símbolos.

Lo complicado de las expresiones regulares (RegEx) no es su lenguaje, es la lógica del lenguaje.

Para hacer una búsqueda siempre se tendrá que apoyar en elementos fijos existentes en el texto y establecer los criterios lógicos alrededor de esos puntos fijos.

Como en todos los ámbitos solo la práctica, las pruebas y el aprendizaje de los errores que se comentan (que serán muchísimos) hará que se vaya mejorando la lógica.

Hay que tener siempre presente que buscar es sinónimo de seleccionar y que el reemplazo trabaja sobre lo buscado, es decir, sobre lo seleccionado. Las búsquedas resaltarán una determinada parte del texto y sobre esa parte se aplicará el reemplazo según los criterios determinados, por eso siempre hay que tener muy presente qué es lo que se quiere hacer con todo lo que se ha seleccionado ya que no se puede usar solo una parte de la selección.

Con lo visto hasta aquí se pueden localizar bastantes cosas de las que se usan cotidianamente en los textos. En el siguiente ejemplo:

<p class="clase1">Si en este tipo de párrafo de la longitud que sea.</p>

<p>Que va seguido de este otro con el texto que resulte.</p>

Se necesita eliminar la clase «clase1» del primer párrafo y añadir «clase2» al principio del segundo párrafo. Lo primero que se debe comprender es que no puede hacerse con búsquedas simples. Se podría eliminar con ellas todas las «clase1» pero se habría perdido la posición (es decir la referencia) para detectar dónde se debe situar «clase2».

Para poder hacer lo que se pretende se necesita trabajar con ambos párrafos a la vez: Eso es lo que se quiere decir con la lógica del lenguaje.

Lo segundo que se tendrá que establecer son los puntos fijos de apoyo que también entran en el campo de la lógica y no del conocimiento del lenguaje PCRE: puesto que se quiere eliminar lo que está al lado de un «<p» y añadir algo al lado de otro «<p», esos dos «<p» serán nuestras referencias.

Antes de continuar se quiere dejar claro que en la gran mayoría de las ocasiones las búsquedas no serán únicas. Se pueden construir distintas expresiones que produzcan el mismo resultado, solo con el tiempo se conseguirá la capacidad de optimizarlas y simplificarlas.

Volviendo a la búsqueda; se tiene que trabajar con dos párrafos simultáneamente y el motor de búsquedas trabaja de izquierda a derecha. Además se tiene que seleccionar para trabajar sobre ello desde la primera «<p» del primer párrafo hasta la primera «<p» del segundo. No se puede seleccionar independientemente cada «<p»; se tiene que seleccionar todo lo que hay entre ellas y trabajar el reemplazo sobre el conjunto. Está claro que lo primero que formará la búsqueda será:

Buscar:
<p class="clase1">

Si se buscase esto solo se iluminaría eso mismo y sobre esa selección se aplicaría el reemplazo. Sobre lo que se selecciona con la búsqueda se tiene que decidir qué se va a hacer con ello: si se necesita que continúe como estaba o si se quiere remplazar por algo o añadir cualquier cosa. Es fundamental comprender esto, no hay selección por trocitos, la selección es continua y se selecciona tanto partes que no hay que cambiar como partes que sí hay que modificar.

¿Se necesita poner entre paréntesis «<p clase="clase1">»? No. Ya que esto es algo que no se quiere que quede, una vez que se haya efectuado el reemplazo se va a sustituir por <p>; es como se quiere que quede el principio del primer párrafo y por tanto no tiene ningún interés almacenarlo en un grupo.

Ahora se tiene que seleccionar todo el texto que está en ese primer párrafo (se recuerda que la búsqueda abarca dos párrafos y para llegar al principio del segundo párrafo el motor de búsquedas tiene que pasar secuencialmente por todo el primero de izquierda a derecha).

Ese texto se puede seleccionar con:

Buscar:
.+

A pesar de que «+» es tragón su voracidad acaba en el salto de línea (que es justo lo que se quiere, salvo que se active la opción multilínea de Sigil que casi nunca debe emplearse) por lo que no se necesita ponerle coto con «?». ¿Y se necesitará poner «.+» entre paréntesis? Sí, ya que esa parte de texto no se quiere que se pierda. Este es el inconveniente de las RegEx: sobre todo lo que se selecciona en la búsqueda se trabaja, es decir, se tiene que decidir qué se hace con lo que se ha buscado. Como para llegar al principio del segundo párrafo se necesita pasar por todo el texto del primero hay que incluirlo en la búsqueda y seleccionarlo, y después decidir qué se hace con ello. Como el texto del primer párrafo interesa se almacena entre paréntesis:

Buscar:
<p class="clase1">(.+)

Donde «(.+)» es el primer grupo al que, si se necesita, se puede llamar con «\1» o «\g{1}».

Si se buscase solamente eso se vería que Sigil selecciona todo el primer párrafo y se para al final de él. Se debe por tanto seguir ampliando la búsqueda.

Entre el final del primer párrafo y el segundo hay dos saltos de línea (en Sigil). Estos saltos se localizan mediante:

Buscar:
\n{2}

Si se presta atención a la tabla de las expresiones, muchas veces se usa «\n{1,3}» que es la forma de curarse en salud por si existen más de dos saltos de línea.

Buscar:
<p class="clase1">(.+)\n{2}

Esto dejaría el cursor al inicio del segundo párrafo pero lejos de la etiqueta <p> del que la separa una serie de espacios en blanco. ¿Cuántos? Pues depende. La mayoría de las veces son dos, pero si los párrafos se encuentran dentro de estructuras tipo <div> son más. El buscar más de un espacio en blanco se realiza exactamente igual que el buscar más de cualquier carácter: haciendo uso de los símbolos de repetición.

Buscar:
\s{1,5}

localizaría de uno a cinco espacios seguidos en blanco.

Buscar:
<p class="clase1">(.+)\n{2}\s{1,5}

La expresión seleccionaría todo el primer párrafo, los dos saltos de línea y todos los espacios en blanco (con un máximo de cinco) hasta la «<» del inicio de etiqueta <p>. ¿Y se necesita poner «\n{2}\s{1,5}» entre paréntesis? Uno mismo se responde pensando si lo que ha seleccionado el motor de búsqueda lo necesita o puede desecharlo: se necesita pues si no le decimos a Sigil que lo use lo elimina y se perderían los dos saltos de línea y los espacios en blanco. ¿Y se necesitan dos grupos entre paréntesis? Se podría dejar perfectamente, pero al estar lo seleccionado contiguo realmente con uno solo es suficiente.

Buscar:
<p class="clase1">(.+\n{2}\s{1,5})

Se debe continuar con la búsqueda puesto que se quiere añadir la clase 2 a continuación del «<p» del segundo párrafo y para ello se tiene que llegar hasta ese punto con la selección:

Buscar:
<p class="clase1">(.+\n{2}\s{1,5})<p

Nuevamente hay que preguntarse si es necesario el paréntesis para «<p». Nuevamente la respuesta es sí ya que se quiere que se mantenga en el resultado final, y como es contiguo a todo lo que se ha ido seleccionando, se agrupa en el mismo paréntesis.

Buscar:
<p class="clase1">(.+\n{2}\s{1,5}<p)

Y así se ha llegado con la búsqueda al punto donde se quiere insertar class="clase2", por tanto no se debe buscar más. Como se indicó al principio, la búsqueda se apoya en dos «<p» y como tal aparecen en ella. La selección realizada por la búsqueda e iluminada es grande y hay que fijarse en lo que se quiere hacer con todo ello: partes se quieren eliminar, partes que sigan como estaban y en otra parte añadir algo que no existía.

¿Cómo sería el reemplazo?

El reemplazo en Sigil funciona como la búsqueda: secuencialmente de izquierda a derecha sobre todo el texto seleccionado. Si el reemplazo se dejase en blanco Sigil determinaría que toda la selección hay que remplazarla por nada: es decir hay que eliminarla. El reemplazo actúa sobre toda la selección realizada de izquierda a derecha sustituyéndola secuencialmente de izquierda a derecha por lo que aparezca en la caja de reemplazo.

Como no interesa <p class="clase1"> no es necesario ponerlo en el reemplazo, al contrario se quiere que se sustituya por <p>. Sin embargo todo el texto que lo sigue en el párrafo, los saltos de línea, los espacios en blanco y el inicio de etiqueta «<p» sí interesa que sigan tal como estaban; luego habrá que incorporarlos al reemplazo, y como todo ello se tenía en el primer (y en este caso único) paréntesis, se referencia todo de golpe con «\1».

Buscar: | <p class="clase1">(.+\n{2}\s{1,5}<p)
Sustituir: | <p>\1

Y si no se añadiese nada más en el reemplazo lo único que se conseguiría es dejar el primer párrafo sin clase y el segundo como estaba porque «\1» llega justamente hasta la «p» del segundo párrafo, por lo que se debe colocar en el reemplazo la clase que se quiere que aparezca a continuación:

Buscar: | <p class="clase1">(.+\n{2}\s{1,5}<p)
Sustituir: | <p>\1 class="clase2"

Con un espacio en blanco antes de «class» para que se separe la «p» de la «class». (Aquí no vale representar ese espacio como «\s»; el reemplazo se efectúa como se escribe).

Hay que fijarse que el uso de la simbología es simple y lo que puede dificultarlo no es su lenguaje sino, como se señaló al principio, la lógica que se aplica a la búsqueda. También es evidente que explicar esto a través de un texto es infinitamente más complicado y tedioso que verlo puesto en práctica, y que muchas veces no se consigue clarificar lo que se pretende. Déficit siempre del escribiente.

Caracteres precedidos de «\» (backslash) (2)

En este apartado se va a repasar otro grupo de símbolos que se obtienen precediendo letras de la barra invertida y que son muy conocidos por aquellos que usan las expresiones regulares ya que mediante ellos se hace referencia a los distintos tipos de caracteres: Textos y números.

Aunque son muy corrientes, resultan un poco escasos para el español ya que no tienen en cuenta particularidades propias de nuestro idioma como son los acentos y la eñe, motivo por el que no se suele hacer uso de ellos de una forma general prefiriendo en su lugar los símbolos de propiedades que se verán en un apartado posterior.

\d

Mediante este símbolo se localiza cualquier dígito.

Únicamente es necesario resaltar que «\d» se refiere a un solo dígito, por lo que buscar números de más de una cifra requiere el uso de alguno de los símbolos que hacen referencia a repeticiones.

Si se usa como RegEx «\d», se encontrarán cada uno de los dígitos que forman parte del texto pero no se realizará ninguna búsqueda selectiva con él.

Análogamente

Buscar:
\d{2}

localizaría grupos de dos dígitos en los números del texto. Si se tiene por ejemplo

123 4567

y se efectúa la búsqueda

Buscar:
\d{2}

se encontraría primero «12» y posteriormente «45» y «67». Es importante darse cuenta de algo que ya se comentó en un apartado anterior: la búsqueda es secuencial de izquierda a derecha y por eso nunca se obtendrá como resultado «23» ya que la búsqueda se realiza siempre desde donde se posiciona el cursor tras cada localización. Al localizar «12», el cursor se posiciona tras el «2» de forma que la siguiente búsqueda se realiza desde allí y para en «45», quedando el cursor tras el «5», y continúa con «67».

También es importante darse cuenta que por ejemplo

Buscar:
\d{3}

no localiza tres dígitos idénticos y que con ella se obtendrán resultados tanto para «111» como para «123».

¿Cómo se realizaría la localización de dos dígitos idénticos? Podéis intentar hacerlo escribiendo en Sigil varios números y repitiendo cifras en ellos.

Se está de nuevo en lo que también se señaló en el apartado anterior: la lógica de la búsqueda.

Se había comentado que para los reemplazos se utilizaban referencias a los paréntesis que se llamaban de la forma «\1», «\2», etc. Esas back references no solo se usan en los reemplazos, se pueden utilizar en la propia caja de búsqueda.

Si se escribe

Buscar:
\d\1

no se obtendrá ningún resultado ya que «\1», que es la llamada al primer grupo referenciado, no encuentra nada debido a que es necesario agrupar aquello a lo que se quiere referir posteriormente.

Buscar:
(\d)\1

sería el comando adecuado. «\d» localiza un dígito cualquiera, al encerrarlo entre paréntesis se le está diciendo al motor de búsqueda que lo almacene como grupo 1 y al referenciarlo con «\1» se le está indicando que vuelva a localizar el mismo dígito que habíamos guardado obteniendo como resultado dos dígitos iguales consecutivos.

\D

Símbolo que localiza cualquier carácter que no sea un dígito.

Esta es una característica muy común en las RegEx: El uso de letras en mayúscula suele referirse a la negación del símbolo en minúsculas.

El uso del símbolo es completamente análogo a «\d» solo que se obtendrán muchos más resultados ya que se detendrá en todos aquellos caracteres que no sean un dígito.

\h

Este símbolo localiza cualquier espacio horizontal.

Es muy parecido a «\s» pero presenta frente a él una única salvedad que es fácil de entender con un ejemplo, en este tipo de situación:

<p>Un texto en un párrafo</p>

<p>Otro texto en otro párrafo</p>

Que es el caso que se da dentro de Sigil, el uso de «\s» localizaría todos los espacios en blanco dentro del primer párrafo, luego el espacio en blanco entre ambos párrafos (correspondiente a la línea en blanco) y finalmente cada uno de los espacios en blanco en el segundo párrafo.

En cambio «\h» solamente localizaría los espacio en blanco en cada uno de los párrafos pero no así el correspondiente a la línea en blanco que se interpreta como un espacio vertical.

\H

Símbolo que niega el símbolo anterior: cualquier carácter que no sea un espacio en blanco horizontal.

\S

Es el símbolo correspondiente a la negación de «\s», es decir cualquier carácter que no sea un espacio en blanco.

Es un símbolo muy útil. Por ejemplo en la detección de comillas inglesas de apertura es claro que lo que tiene que seguirlas es cualquier cosa (entre otras) que no sea un espacio en blanco ya que en ese caso serían de cierre:

En esta situación

“texto”

tras las comillas de apertura no puede ir un espacio; sin embargo tras las de cierre uno de los caracteres que sí puede ir es un espacio en blanco aunque no el único.

\v

Este símbolo localiza cualquier espacio vertical.

Su uso es completamente similar a «\h» solo que en este caso no se obtendrían los espacios en blanco dentro de cada párrafo (que son horizontales; un párrafo se ve en Sigil ajustado a la ventana aunque en realidad es una única línea horizontal) sino los espacios entre párrafos.

\V

Símbolo que niega el símbolo anterior: Cualquier carácter que no sea un espacio en blanco vertical.

\w

Símbolo que localiza cualquier carácter de texto.

En otras palabras: cualquier letra dentro del alfabeto inglés. No localizará las letras acentuadas, ni las eñes, ni otros caracteres que no son texto como interrogaciones, exclamaciones, guiones, comillas, puntuaciones, etc.

Como se ha indicado, la no detección de letras con acento limita mucho su uso con nuestro idioma, de ahí que no se emplee casi nunca ya que para que se ajustase al español la búsqueda de cualquier carácter de texto debería ser:

Buscar:
[\wáéíóúÁÉÍÓÚñÑü]

Que abarca «\w» y los demás propios de nuestro idioma dentro de una clase.

En otro apunte se verá que todo ello se simplifica mediante «\pL».

\W

Símbolo que niega el símbolo anterior: cualquier carácter que no sea de texto.

En él entrarían las letras con nuestros acentos y el resto de caracteres del teclado.

A pesar de las limitaciones que se acaban de señalar, con la simbología revisada hasta el momento es posible realizar ya una gran cantidad de búsquedas de todo tipo. El resto de símbolos que se explicarán no dejan de ser simplificaciones de los vistos que no les confieren más potencia sino que ayudan a estructurar mejor las búsquedas.

También queda detallar las herramientas más potentes de las RegEx: las afirmaciones. Que vienen a introducir aspectos lógicos en las búsquedas.

Todo ello se irá revisando en apuntes posteriores.

Para seguir practicando y a modo de ejemplo se desarrollará la forma de detectar comentarios entre guiones mal formados. De las muchas posibilidades que hay se van a elegir aquellos que lo están porque al principio o al final del comentario hay un espacio en blanco. Se elige esta porque se quiere demostrar que también el planteamiento de la búsqueda debe ser el adecuado: no siempre se puede hacer lo que se intenta.

<p>Son situaciones como esta en las que el comentario — que va entre los guiones largos — como se ve está mal formado por la existencia de espacio posterior al de apertura y anterior al de cierre.</p>

Como siempre la dificultad no está en el conocimiento de la simbología sino en cómo se plantee la situación y se aplique la lógica. Lo que se buscan son errores, no situaciones correctas. Con esa idea se tiene que empezar y como siempre apoyándose en elementos fijos, que para el ejemplo serán los propios guiones largos.

Casi siempre antes de un guion de apertura se va a encontrar un espacio en blanco (cuando el guion lo es de comienzo de diálogo no es ese caso, de ahí que en las búsquedas completas de la tabla haya que estar limitando varias cosas a la vez).

El principio de la búsqueda podría ser por tanto:

Buscar:
\s—

¿Y nos valdría?

Buscar:
\s—.+—\s

La instrucción anterior busca un espacio en blanco seguido de un guion largo seguido de cualquier carácter el número de veces que fuese (indicado por el «+»), seguido de un guion largo y seguido de otro espacio en blanco. Esta búsqueda no sería válida ya que pararía en todos los guionados válidos, que estarían bien formados y cumplirían el patrón de búsqueda. Se buscan los mal formados, con espacios en blanco donde no debiera haberlos.

¿Valdría por tanto?

Buscar:
\s—\s.+\s—\s

Esta instrucción ya empezaría a dar resultados erróneos pues busca un espacio en blanco inmediatamente posterior al guion de apertura y otro inmediatamente antes del de cierre, situaciones que se sabe que son erróneas. Sin embargo la búsqueda no está bien formada ya que hay que recordar que el «+» era greedy, no tiene límite en su voracidad, por lo que si el párrafo tiene varios «—» pararía en el último pero englobaría en su interior los intermedios.

¿Serviría entonces?

Buscar:
\s—\s.+?\s—\s

Aparentemente se limita las ansias de «+» pero tampoco valdría ya que entre los dos guiones no puede haber cualquier carácter. Son válidos cualquiera excepto el propio «—» (es evidente que entre dos guiones explicativos no puede haber otro guion).

¿Entonces esto nos puede servir?

Buscar:
\s—\s[^—]+\s—\s

Con esta se ha establecido que entre los guiones largos puede haber cualquier carácter excepto el propio guion largo (el símbolo «^» significaba negación dentro de una clase limitada por «[ ]»), repetido el número de veces que sea, que además tras el guion de apertura hay un espacio y otro antes del de cierre. Además la propia negación «[^—]» pone límite al «+».

Sin embargo la búsqueda no es del todo completa ya que no siempre tras el guion de cierre tiene que haber un espacio en blanco: Pueden ir símbolos de puntuación («.», «,», «:» o «;»).

Buscar:
\s—\s[^—]+\s—

podría valer y también

Buscar:
—\s[^—]+\s—

ya que no se tiene por qué forzar que antes del guion de apertura tenga que haber un espacio.

Sin embargo esta búsqueda pararía en este caso:

<p>—Se tiene un diálogo iniciado con el párrafo — en el que se incluye esta explicación.</p>

<p>Y continúa la narración —en otro párrafo.</p>

La búsqueda

Buscar:
—\s[^—]+\s—

pasa de un párrafo al otro ya que cumple el patrón: El primer guion es el de «— en el […]» (con su espacio en blanco mal colocado) y el segundo guion sería «[…] la narración —» con el espacio en blanco tras narración. «[^—]+» no ha frenado el salto línea y el motor de búsqueda ha continuado con la siguiente (que estaba en blanco) y la siguiente (que era un nuevo párrafo).

Buscar:
—\s[^\n—]+\s—

solventaría este problema ya que ahora establece que entre los guiones puede haber cualquier carácter excepto otro guion largo y un salto de línea.

Pero tampoco sería la ideal ya que de esta manera solo parará la búsqueda si se dan ambos espacios en blanco, tras el guion de apertura y previo al de cierre, a la vez. Si se quiere que pare cuando se dé alguna de las dos posibilidades hay que acotarlas, con expresiones del tipo que se dé un espacio en blanco o ninguno, lo que se conseguía con el símbolo «?».

Buscar:
—\s?[^\n—]+\s?—

Establece que los espacios en blanco pueden darse o no (ya que van seguidos de «?»). Pero esta aparente solución en el fondo no sirve ya que se detendría en guionados válidos ya que en ellos no se dan los espacios en blanco posteriores o previos y las «?» han establecido que pueden darse o no.

Este es el motivo por el cual en la tabla de las RegEx se detecten por separado ambos espacios, revisando con una expresión el de apertura y con otra el de cierre. Esto es lo que se quería explicar con el ejemplo: No siempre es posible hacer lo que se quiere en una única expresión.

Suponiendo válida la última RegEx (que no lo es por lo que se acaba de señalar) faltaría agrupar las partes de la búsqueda que se quiere que permanezcan en el reemplazo, que serían todas excepto los espacios en blanco:

Buscar:
(—)\s?([^\n—]+)\s?(—)

Con lo que se tendrían tres grupos a los que referenciar.

Como se puede ver, la complicación de las RegEx no son los símbolos, muchas veces tampoco la propia lógica de la búsqueda, sino el no seleccionar elementos válidos. El aprendizaje de la RegEx no puede ser global, se debe empezar por cosas sencillas, que abarquen situaciones particulares y concretas, evitando en los primeros pasos la multiplicidad de detecciones: Es preferible tener tres búsquedas distintas que una que englobe a todas.

Caracteres precedidos de «\» (backslash) (3): Propiedades y subpropiedades

Hasta este apartado se han relacionado expresiones regulares para las que, a excepción de la inclusión de repeticiones, solamente era necesario el empleo de un único símbolo.

Entre ellas se ha visto un grupo que referenciaba tres tipos de caracteres posibles: letras, números y espacios en blanco y que se correspondían con «\w», «\d» y «\s» respectivamente. Ya se había comentado alguna limitación de ellas como la exclusión de la letra «ñ» y de acentos en todas las letras. Pero además resulta que los textos se componen de más caracteres como son guiones, comillas, puntos, etc., que no pueden encuadrarse en ninguno de los tres grupos que he señalado más arriba. Si bien es cierto que se puede hacer referencia a cualquier carácter mediante su inclusión directa, no es menos cierto que ello conlleva la dificultad de no olvidarse de ninguno que se quiera relacionar.

Para solventar esta situación y para ampliar el rango de búsquedas se puede hacer uso de las propiedades y, de ser necesario, de sus subpropiedades.

Al igual que para los símbolos RegEx ya vistos, hay que recordar que cada símbolo indicativo de propiedad nos devuelve una única coincidencia (se localiza e ilumina un único carácter), por lo que localizar varios caracteres mediante el empleo de propiedades implicará también el uso de los métodos de repetición ya vistos.

Las propiedades en RegEx se invocan siempre mediante «\p{xx}» (la «p» obviamente indica propiedad) que irá seguida de un máximo de dos letras «{xx}» para hacer referencia la primera de ellas a la propiedad y la segunda a la subpropiedad. Un ejemplo sería

Buscar:
\p{Lu}

en el que «\p» solo señala que se trata de una propiedad, la «L» indica la propiedad Letter (letra) y la «u» la subpropiedad uppercase (mayúscula). Es decir, con ella se localizarían exclusivamente letras mayúsculas con o sin acento.

El uso de la subpropiedad es opcional, para el ejemplo anterior si no se quisiese especificar que se trata de una letra mayúscula se podría usar

Buscar:
\p{L}

lo que señalaría al motor de búsqueda que solo se buscan letras. En los casos en los que no se especifica la subpropiedad es posible prescindir de las llaves por lo que estas dos opciones son igualmente válidas:

Buscar:
\p{L}

Buscar:
\pL

pero cuando se especifica la subpropiedad no son iguales:

Buscar:
\p{Lu}

Buscar:
\pLu

Ya que la primera expresión se refiere a una letra mayúscula y la segunda a una letra cualquiera seguida de la letra «u».

Si en lugar de «\p» se emplea «\P» se estaría realizando la negación de la propiedad que se desea.

La principal dificultad en el uso de las propiedades estriba en saber qué es lo que se busca con ellas, ya que si bien hay algunas evidentemente claras, otras no lo son tanto. Un método inicial de aprendizaje podría ser escribirlas en Sigil para cualquier texto y fijarse en lo que se va obteniendo.

Propiedades y sus subpropiedades

Las distintas propiedades que se pueden invocar desde las RegEx son variadas y bastantes no tienen utilidad dentro de Sigil. Lo mismo sucede con las subpropiedades. Por ello solo van a explicarse las que realmente tienen interés en la edición de textos:

\pL

Esta propiedad localiza cualquier letra.

\pP

Esta propiedad localiza cualquier carácter de puntuación.

\pN

Esta propiedad localiza cualquier carácter numérico.

\pS

Esta propiedad localiza cualquier símbolo.

Se entiende por símbolos, entre otros: «+», «<», «>» o «=».

Es un grupo ambiguo ya que aunque teniendo como subpropiedades símbolos matemáticos no selecciona la barra de división «/» ni el producto «*».

Las principales subpropiedades que podemos usar para las cuatro propiedades señaladas en la tabla superior son:

Letter «\pL»

\p{Ll}

Esta subpropiedad localiza cualquier letra minúscula (lower case letter).

\p{Lo}

Esta subpropiedad localiza cualquier letra catalogada como otra (other) como son las letras voladas «ª» y «º».

\p{Lu}

Esta subpropiedad localiza cualquier letra mayúscula (upper case letter).

Number «\pN»

\p{No}

Esta subpropiedad localiza números especiales como son los superíndices «³» o números fraccionarios «½» «¼» y «¾».

Punctuation «\pP»

\p{Pc}

Esta subpropiedad localiza caracteres de puntuación que actúen como conectores.

En los textos solo se ha parado en el guion bajo «_».

\p{Pd}

Esta subpropiedad localiza caracteres de puntuación dash (guiones).

Por tanto obtendremos resultados con los mdash «—», ndash «–» y el signo menos «−».

\p{Pe}

Esta subpropiedad localiza caracteres de puntuación de cierre (ending).

Entendiendo como tales los cierres de paréntesis «)», de corchetes «]» o de llaves «}».

\p{Pf}

Esta subpropiedad localiza caracteres de puntuación final.

Se entiende como finales los caracteres de cierre de comillas angulares (»), tipográficas dobles (”) o tipográficas simples (’).

\p{Pi}

Esta subpropiedad localiza caracteres de puntuación iniciales.

Entendemos como iniciales los caracteres de apertura de comillas angulares («), tipográficas dobles (“) o tipográficas simples (‘).

\p{Po}

Esta subpropiedad localiza otros caracteres de puntuación.

Esta propiedad es un cajón de sastre ya que engloba símbolos variados como las puntuaciones propiamente dichas («.», «,», «:», «;»), los puntos suspensivos («…»), las comillas inglesas («"»), la barra de división («/»), los asteriscos («*»), las aperturas y cierres de interjecciones e interrogaciones, «%», «&», señaladores de viñetas «•» o caracteres aún menos frecuentes como «¶», «§», «‡», «†», etc.

\p{Ps}

Esta subpropiedad localiza caracteres de puntuación de apertura (aunque se trata de caracteres opening al estar ya utilizada la subpropiedad «o» se habrá querido indicar starting).

Se entienden como tales las aperturas de paréntesis «(» de corchetes «[» o de llaves «{».

Symbol «\pS»

\p{Sc}

Esta subpropiedad localiza cualquier símbolo monetario (currency).

Es decir, se encontrarían coincidencias como «$», «€», «£» o «¥».

\p{Sk}

Esta subpropiedad localiza cualquier modificador de símbolos.

Se encontrarían principalmente tildes aisladas «´», diéresis «¨» u otro tipo de tildes como «˜».

\p{Sm}

Esta subpropiedad localiza cualquier símbolo matemático.

Entre ellos los señalados al principio «<», «>», «=», «+» y también otros menos frecuentes: infinito «∞», aproximado «~», implicación «→», ambivalencia «±», producto «×» o división «÷».

\p{So}

Esta subpropiedad localiza otros símbolos no expresamente relacionados en las anteriores como los grados «°», copyright «©», marca registrada «®» o marca comercial «™».

Negar una propiedad

Para finalizar solo recordar que, como ya se ha señalado, todas las propiedades pueden negarse mediante «\P», por lo que por ejemplo

Buscar:
\PL

indicaría al motor de búsqueda que localizase cualquier carácter que no fuese una letra y análogamente

Buscar:
\P{Po}

localizaría cualquier carácter que no fuese del grupo «otros signos de puntuación».

En apartados anteriores se había visto que la negación se podía realizar también mediante el acento circunflejo «^» pero únicamente si este iba en el interior de una clase delimitada por corchetes «[ ]» que actuaba como operador lógico «O».

Por tanto estas dos búsquedas son completamente iguales

Buscar:
[^\pL]

Buscar:
\PL

pero estas dos búsquedas no lo son:

Buscar:
[^\pL\pN]

Buscar:
\PL\PN

Ya que la primera expresión localizaría un único carácter que no fuese o letra o número mientras que la segunda expresión localizaría dos caracteres seguidos de forma que el primero no fuese una letra y el siguiente no fuese un número.

Caracteres precedidos de «\» (backslash) (y 4)

En el apartado anterior se expusieron los distintos símbolos que se encuadran dentro de las llamadas propiedades y subpropiedades; pero aunque se denominen de esa manera en el fondo no dejan de ser letras precedidas del backslash «\».

En este apartado se va a terminar de ver los comandos que se obtienen precediendo una letra con la barra invertida «\».

Con cada símbolo RegEx se obtiene una única coincidencia (salvo que se emplee alguno de los elementos que se refieren a la repetición).

Buscar:
\w

devuelve una letra (cualquiera de ellas pero solo una) lo mismo sucede con

Buscar:
\p{Lu}

que nos encuentra una a una cada mayúscula del texto y así con cualquiera de los símbolos RegEx vistos hasta ahora.

Sin embargo hay símbolos RegEx que no ocupan ningún lugar, es decir, por sí mismos no seleccionan nada del texto, lo cual no quiere decir que no sean útiles.

En la siguiente situación:

¿Cómo?

Se quiere seleccionar el texto que se encuentra entre las interrogaciones pero prescindiendo de los propios signos de interrogación. Como cualquier búsqueda RegEx hay que apoyarse en elementos fijos que sirvan de referencia (en este caso los de apertura y cierre de interrogación) pero al usarlos el motor de búsqueda también los va a seleccionar.

Una de las posibles formas de buscar el contenido entre esas interrogaciones es:

Buscar:
¿.+?\?

En donde «¿» es el primer punto de apoyo; el «.» es cualquier carácter; el «+» significa que se repita ese cualquier carácter cualquier número de veces; la primera «?» se encarga de poner coto al «+»; y «\?» es la forma de escribir el segundo punto de apoyo que debe ir precedido de «\», ya que «?» es en sí un carácter de las RegEx.

Si se prueba esa expresión en cualquier libro, se obtendrá como resultado cualquier texto que se encuentre entre interrogaciones, incluyéndose estas en la selección buscada. ¿Y si no se quiere que se seleccionen los dos signos? En ese caso se tendrá que hacer uso de otros símbolos especiales de las RegEx que se usan para ello.

Solo se va a especificar cómo se evitaría la selección del símbolo de apertura. No por nada en especial, sino porque en este apartado se relacionarán lo que se denominan sentencias simples (simple assertions) que es el último conjunto de caracteres precedidos por «\» dentro del que se encuentra el que permitirá anular todo lo que se encuentra al principio de la selección. En otro apartado se tratarán el resto de sentencias (assertions) que permitirán anular partes seleccionadas al final de la selección.

Deseleccionar «\K»

\K

Este símbolo permite anular o reiniciar (o deseleccionar) todo lo que el motor de búsqueda hubiese encontrado hasta la posición en la que aparezca, de manera que en el resultado final de la búsqueda, no aparecerá iluminado en Sigil todo lo que se hubiese encontrado hasta ese «\K».

Si en el ejemplo que se puso arriba se añadiese «\K» de esta forma:

Buscar:
¿\K.+?\?

Lo que se señala al motor de búsqueda es que no seleccione (aunque lo tenga en cuenta en la búsqueda) todo lo que se halle a la izquierda de «\K» (en este ejemplo solo «¿»).

Si en un texto se tienen, por ejemplo, frases del tipo:

¿Qué hora es?

¿Cuál es tu color favorito?

¿Cómo te encuentras?

¿Cuánto llevo aprendido?

Y se quisiese extraer de ellas todo el texto excepto el símbolo de apertura de la pregunta y la partícula interrogativa que le acompaña (o sea, todo excepto «¿Qué», «¿Cuál», «¿Cómo» y «¿Cuánto»). ¿Valdría la expresión anterior?:

Buscar:
¿.+?\?

No, ya que esta expresión no distingue partes del texto entre interrogaciones y le da lo mismo cuál sea la partícula inicial de la frase. Por lo tanto hay que empezar por desarrollar la lógica de la búsqueda.

Hay que apoyarse en el símbolo de apertura «¿» y luego hay que tener en cuenta que se quiere la primera palabra. ¿Hasta dónde? Hasta el primer espacio en blanco tras ella.

El primer elemento de la búsqueda es «¿» (punto de apoyo).

Luego hay que buscar cualquier carácter hasta el primer espacio en blanco. Ese cualquier carácter es cualquiera excepto «\s» el número de veces que sea. Es decir

Buscar:
[^\s]+

con lo que la búsqueda quedaría por ahora:

Buscar:
¿[^\s]+

¿Se necesitaría poner límite a ese «+» mediante «?» para que su búsqueda quedase circunscrita al primer espacio en blanco que aparezca? No, ya que la búsqueda siempre es secuencial de izquierda a derecha mientras se dé el patrón buscado

Buscar:
[^\s]+

va encontrando caracteres uno a uno que sean distintos de un espacio en blanco (indicado por el «+») hasta que se encuentra dicho espacio en blanco en cuyo caso ya no se cumple el patrón de búsqueda y ahí se para.

Con la expresión escrita arriba aplicada a los ejemplos anteriores se obtendría como resultado:

¿Qué

¿Cuál

¿Cómo

¿Cuánto

Que es justamente lo que no se quiere encontrar. Pero se necesita para poder establecer el punto desde el que se quiere obtener lo que se desea: el resto de la frase.

Ese resto lo puedo obtener mediante:

Buscar:
.+?\?

La primera «?» limita la búsqueda de «+» ya que si no se pusiese incluiría todas las «?» intermedias hasta la última de la sección.

Con ello la búsqueda completa quedaría:

Buscar:
¿[^\s]+.+?\?

Esta búsqueda encuentra exactamente lo mismo que la inicial

Buscar:
¿.+?\?

aunque en el fondo se ha disgregado la oración en dos partes: la interrogación de apertura y la primera palabra por un lado y el resto de la frase hasta el signo de cierre por el otro. Y una vez que se tiene disgregada se puede decir al motor de búsqueda que «se olvide» de una parte mediante «\K».

Buscar:
¿[^\s]+\K.+?\?

Ese «\K» anula o reinicia lo que se encuentra hasta su posición. Es decir deselecciona lo que se encuentra mediante «¿[^\s]+» que es lo que hay a su izquierda, aunque lo tiene en cuenta en la búsqueda en sí.

«\K» lo único que hace es no mostrarlo como seleccionado.

De esta forma para los ejemplos anteriores se obtendría como resultado:

hora es?

es tu color favorito?

te encuentras?

llevo aprendido?

Todos ellos con el espacio previo también seleccionado.

«\K», al contrario que los símbolos vistos hasta ahora, no ocupa un espacio de selección. Su presencia es transparente para el motor de búsqueda. Si se cambiase su ubicación a:

Buscar:
¿[^\s]+.+?\?\K

No seleccionaría nada ya que se le está diciendo al motor que deseleccione todo lo que haya a la izquierda de «\K» (que es todo) y aunque lo haya usado para realizar la búsqueda finalmente no muestra nada porque así se le ha indicado.

Recuerdo que el reemplazo solo actúa sobre lo que se ha seleccionado por lo que en el caso de «\K» aunque todo lo que le preceda se tenga en cuenta en la búsqueda, como no queda seleccionado, el reemplazo no hace nada sobre ello.

Si en la búsqueda:

Buscar:
¿[^\s]+\K.+?\?

dejo el reemplazo en blanco y lo aplico en cada coincidencia, las frases de ejemplo quedarían truncadas, eliminándose la selección y resultando:

¿Qué

¿Cuál

¿Cómo

¿Cuánto

Sentencias simples

Otros símbolos que al igual que «\K» no ocupan un lugar de selección son las denominadas sentencias simples. Estas sentencias son condiciones de contorno que se deben dar para delimitar la búsqueda. Su comprensión puede resultar algo confusa ya que actúan como «delimitadores» (boundaries) del elemento que les precede o sigue. Estos símbolos miran lo que hay inmediatamente antes y después de ellos para comprobar si esos caracteres son del tipo que se trata.

\b

Símbolo que permite verificar si estamos en un límite, contorno o frontera (boundary) que no sea de texto.

Es un concepto extraño para lo que es preferible poner ejemplos:

\ba

«\b» observa lo que le sigue (una «a») y se establece a sí mismo como frontera o límite de texto de manera que lo que haya antes de esa a no debe ser texto ya que «\b» marca esa frontera. Se obtendrían paradas en:

vamos allí

pasó a la primera

declaró el autor

En cambio

Buscar:
a\b

daría como resultado:

pasó a la primera.

Ya que ahora el límite de texto se ha puesto por la derecha. A la derecha de las dos primeras aes hay un espacio en blanco y a la derecha de la última a hay un punto. Nada de ello es texto.

«\b» trabaja con los mismos criterios que «\w» y «\W» es decir no considera texto la «ñ» y las letras acentuadas entre otras. Por lo que con

Buscar:
a\b

tendría en la frase que sigue las paradas resaltadas:

Una araña roja.

«\b» al estar a la derecha se marca como límite de texto por ese lado y parará en todas las aes del texto seguidas por un carácter que no sea texto (que incluye la ñ).

En este otro ejemplo:

Buscar:
\ba\b

Teóricamente solo detectaría aes aisladas ya que se han puesto fronteras de no texto a ambos lados sin embargo en español se obtendría parada en:

carecía de sentido

Ya que a efectos RegEx el carácter que precede y sigue a la «a» no es texto.

\B

Símbolo opuesto al anterior que establece por tanto una frontera que sea texto

Buscar:
a\B

realizaría paradas en:

vamos allí

declaró el autor

También actúa con las mismas limitaciones que «\w» y «\W».

Existen otros tipos de sentencias delimitadoras pero no tienen utilidad dentro de Sigil, así que no se va a hacer referencia a ellas.

Otros caracteres y opciones internas

Con este sexto apartado se finalizá la relación de símbolos del lenguaje PCRE que son de alguna utilidad dentro del uso de Sigil. Como ya se ha referido en algún otro apartado, existen símbolos diferentes a los reflejados que los creadores de Sigil no implementaron dentro del programa o que no son de utilidad para su finalidad. Este es el caso por ejemplo de dos símbolos «^» y «$» que pudiendo tener un potencial más elevado en PCRE, dentro de Sigil sus tareas son las más básicas de las posibles.

^

Este símbolo, cuando se encuentra fuera de una clase —se recuerda que una clase es el conjunto de símbolos que se incluyen entre dos corchetes «[ ]», en cuyo interior su presencia implicaba negación—, le indica al motor de búsqueda que se dirija al principio de una línea para realizar desde allí la continuación secuencial de las instrucciones RegEx que le sigan.

«^» no busca en sí mismo nada, solo lleva al motor de búsqueda al inicio de línea. En este sentido hay que señalar que el principio de una línea en Sigil no sería el símbolo «<» que inicia la etiqueta de párrafo sino el primer espacio en blanco al principio de cada línea. Por tanto buscar con «^» hace que las instrucciones que sigan a este «^» secuencialmente se realicen desde la primera columna de cada línea.

En Sigil, salvo las líneas vacías, todas las demás están relacionadas con los párrafos <p> (aparte de las cabeceras), por lo que desde el inicio de cada línea existen dos espacios en blanco hasta el principio de la etiqueta.

$

Este símbolo es muy similar al anterior solo que en este caso se refiere al final de línea. Y al igual que «^», por sí mismo no busca nada, solo le informa al motor de búsqueda que la secuencia de símbolos RegEx que le preceden debe detenerse en el final de línea, que en Sigil es el «>» de cierre de la etiqueta de párrafo con carácter general.

Por tanto una búsqueda del tipo

Buscar:
[^\s]+$

que es análoga a

Buscar:
\S+$

devolvería siempre la última palabra del párrafo junto con el posible signo de puntuación final y el conjunto de la etiqueta </p>.

Finalmente se van a relacionar las opciones internas que pueden modificar el comportamiento ordinario del proceso de búsqueda. Aunque son cuatro solo interesan dos; una de las cuales se tiene como opción a marcar en el cuadro de búsquedas: La opción multilínea.

La opción multilínea modifica el comportamiento ordinario de las RegEx que siempre detienen su búsqueda al acabar cada línea.

Aunque pueda parecer que los párrafos ocupan más de una línea, realmente solo ocupan una, como se puede comprobar mirando la numeración que aparece a la izquierda, por lo que una búsqueda del tipo «.+» devolvería cada línea al completo: una a una.

Si se activa la opción multilínea la búsqueda no finaliza con el final de línea; continúa una línea tras otra hasta el final de la última, por lo que «.+» selecciona, con multilínea activada, la totalidad de la sección.

La forma de invocar las opciones internas desde la línea de comandos es siempre la misma:

Buscar:
(?letra)

Esa letra, dentro de las posibles, será una de estas:

i

Con esta letra la instrucción quedaría

Buscar:
(?i)

lo que le indicaría al motor de búsqueda que el resto de símbolos que le sigan (la propia búsqueda en sí) no distinga en los resultados entre mayúsculas y minúsculas.

s

Con esta letra la instrucción quedaría

Buscar:
(?s)

lo que le indicaría al motor de búsqueda que el resto de símbolos que le sigan (la propia búsqueda en sí) no finalice al final de la línea, sino que continúe hasta la última línea. Es decir, efectúa lo mismo que marcar la opción multilínea en las opciones (DotAll en la edición inglesa del programa) solo que sin necesidad de marcarla y así no se está pendiente de si se ha hecho o no.

Estas opciones internas pueden combinarse entre sí, es decir, es perfectamente válido

Buscar:
(?is)

y el motor de Sigil sabría que se le imponen ambas condiciones.

Es muy interesante saber que no siempre tienen que aparecer las opciones internas al principio de la búsqueda. Por ejemplo:

Buscar:
(a(?i)b)c

encontraría tanto «abc» como «aBc». Es importante fijarse que colocar las opciones internas en otra parte que no sea el inicio de la instrucción solo puede hacerse si se encuentran dentro de un grupo (conjunto de instrucciones limitadas por paréntesis). No es válida por tanto esta estructura:

Buscar:
a(?i)bc

También hay que saber que cuando aparece en un grupo actúa sobre todas las instrucciones del grupo que le siguen. Por ejemplo

Buscar:
(a(?i)b|c)

devuelve «aB», «ab» o «c» o «C» ya que la opción «(?i)», al estar en el grupo delimitado por paréntesis, alcanza a «c».

También es interesante saber que si se ha establecido una opción interna puede anularse para alguna parte del código que le sigue, precediéndola del signo menos. Quedando de la forma

Buscar:
(?-i)

por ejemplo. La expresión 8.02 hace uso de esta posibilidad.

Con esto se termina la revisión de los principales símbolos RegEx. En los siguientes apartados se empezará con la parte, que dentro de las limitaciones, da más potencia a las búsquedas.

Subpatrones y su numeración. Numeración duplicada.

Tal como se señaló en el apartado anterior, se da comienzo a la parte de la expresiones regulares, que dentro de las limitaciones que siempre se ha indicado que supone el tener que escribir toda la instrucción en una sola línea y sin el empleo de variables intermedias, dotan de mayor potencia a las RegEx.

Las RegEx son muy potentes gracias a las instrucciones que se verán de aquí en adelante.

En uno de los primeros apartados se había visto el significado de encerrar algo entre paréntesis. Además de suponer una clarificación en nuestro sistema de búsqueda, el objetivo principal del agrupamiento mediante paréntesis es almacenar su contenido para posteriormente poderlo invocar en un reemplazo.

En el primer apartado también se había mencionado la utilidad del símbolo «|» como operador lógico «O».

En este apartado se intentará explicar cómo pueden combinarse ambos y qué se puede conseguir con ello.

Almacenar en un mismo subgrupo varias opciones

Si dentro de un grupo delimitado por paréntesis se introduce el comparador «O» es evidente que lo que se pretende es seleccionar alguna de las condiciones que se imponga. Entre un par de paréntesis se puede introducir el número de comparadores que se quiera, de la misma manera que dentro de un grupo se pueden poner grupos anidados (subgrupos).

Una expresión del tipo:

Buscar:
cara(melo|col|)

Puede devolver tres resultados diferentes teniendo en cuenta que «|» produce una búsqueda lógica equivalente a «O». El grupo entre paréntesis que sigue a «cara» buscará que esté seguido de «melo» o de «col» o de nada. El comparador final no tiene a su derecha nada más que el cierre del grupo: no hay nada, por lo que al realizar la búsqueda aceptará las coincidencias que solo se refieran a «cara». Recordatorio: las búsquedas en Sigil mediante RegEx siempre buscan secuencialmente de izquierda a derecha en la expresión.

El resultado de la búsqueda, por tanto, devolverá coincidencias del tipo: «caramelo», «caracol» o «cara». El dejar el comparador en solitario no implica que acepte cualquier cosa, es decir, si tuviésemos un texto del tipo:

Esta mantelería es muy cara. No voy a comprarla

Al utilizar la búsqueda que se ha escrito solo obtendría «cara» no «cara.». El comparador «|» en solitario no ocupa un espacio de búsqueda, solo señala que, además de las posibilidades de elección de lo que haya en el grupo entre paréntesis, hay otra posibilidad que es únicamente el texto o símbolo que precede al grupo.

En la búsqueda de ejemplo anterior solo hay un grupo por lo que no hay duda de que, si hay que referirse a él, solo se necesitará usar «\1».

Un reemplazo del tipo:

Sustituir:
<em>\1</em>

Localizaría «cara» y lo remplazaría por:

<em></em>

(ya que «cara» no está entre paréntesis y por tanto no se ha almacenado).

Localizaría también «caramelo» y lo remplazaría por:

<em>melo</em>

(«cara» se eliminaría).

Y localizaría «caracol» y lo remplazaría por

<em>col</em>

(«cara» se eliminaría).

Lo importante es fijarse que todas las opciones posibles dentro del grupo se almacenan como «\1».

Si se escribe una búsqueda de este tipo:

Buscar:
el ((chocolate|café) (negro|caliente))

Se tiene un grupo (o patrón) general delimitado por los paréntesis exteriores y dos subgrupos (o subpatrones) delimitados por los paréntesis anidados (entre los que hay un espacio en blanco).

Una búsqueda con esa expresión devolvería: el «chocolate negro», el «chocolate caliente», el «café negro» o el «café caliente».

La existencia de tres grupos de paréntesis implica el almacenamiento de tres elementos. La apertura de paréntesis se contabiliza de izquierda a derecha empezado por «1». Por tanto en el ejemplo todas las combinaciones «chocolate negro», «chocolate caliente», «café negro» o «café caliente» formarían parte del paréntesis exterior y se almacenarían como «\1». Mientras que «chocolate» o «café» lo harían como «\2» (al estar en el segundo subpatrón empezando por la izquierda) y «negro» o «caliente» lo harían como «\3» (al estar en el tercer subpatrón empezando desde la izquierda).

Este criterio es importante comprenderlo y comprender por tanto la dificultad que entraña en expresiones largas y complejas contabilizar la numeración de cada grupo. En muchas ocasiones no queda más remedio que probar con reemplazos para saber si se está refiriendo adecuadamente a la numeración de un grupo.

Subgrupos NO almacenables

Si por cualquier razón la agrupación entre paréntesis se ha realizado por claridad o lo que se haya considerado y no se necesite su almacenamiento, existe la posibilidad de indicarle al motor de búsqueda que no lo almacene mediante la combinación «?:» dentro del grupo que no quiere referenciarse.

Buscar:
((?:chocolate|café) (negro|caliente))

Le indicaría que el subgrupo «(chocolate|café)» no se almacenase por lo que el grupo exterior seguiría siendo «\1» pero ahora el subgrupo «(negro|caliente)» se referenciaría como «\2».

De igual manera:

Buscar:
(?:(chocolate|café) (negro|caliente))

Indicaría que el grupo exterior no se almacenase y que «(chocolate|café)» fuese ahora «\1» y «(negro|caliente)» «\2».

Numeración duplicada de los subgrupos

Una característica fundamental y de la que constantemente se hace uso en RegEx es la posibilidad que otorga el lenguaje PCRE de que cuando en un grupo o patrón se tienen varios subgrupos o subpatrones, poder referirse a todos estos últimos con el mismo número de referencia en un posible reemplazo. Es lo que se conoce como numeración duplicada de subgrupos.

La estructura que hay que emplear tiene esta forma:

Buscar:
(?|(instrucción)|(instrucción))

Y siempre tiene que comenzar con «(?|» pudiendo ir seguida del número de subgrupos que queramos. Por lo tanto es válida también:

Buscar:
(?|(instrucción)|(instrucción)|(instrucción)|etc.)

Se quiere aclarar que no hay necesidad de delimitar con paréntesis los subgrupos, la estructura puede ser también:

Buscar:
(?|chocolate|café|negro|caliente)

Sería útil como búsqueda de las palabras pero dejaría de tener sentido ya que el resultado no se podría emplearlo en un reemplazo al no tener ningún elemento almacenado. Surge entonces la pregunta: ¿Pero no hay un paréntesis exterior que establecería el grupo «\1»? Pues no. Los paréntesis de la estructura son propios de la estructura, no se refieren por tanto a ninguna agrupación.

Si se dispone de una búsqueda del tipo:

Buscar:
(?|(class="salto25)|(class="salto10))

(las comillas de cierre no interesa incluirlas).

Su ejecución dentro de Sigil nos devolverá coincidencias con:

class="salto25

class="salto10

Como «class="salto25» y «class="salto10» están entre paréntesis el motor de Sigil se apercibe de que se tiene intención de usarlos en algún reemplazo y por estar dentro de la estructura que comienza con «(?|» a ambos le asigna internamente la referencia «\1», es decir duplica la referencia al subgrupo, de manera que un reemplazo del tipo:

Buscar: | (?|(class="salto25)|(class="salto10))
Sustituir: | \1 asangre

(con un espacio en blanco entre ellos).

Produciría un reemplazo que dejaría

class="salto25 asangre

class="salto10 asangre

independientemente de que unas veces encuentre «salto25» y otras «salto10».

Cuando haya encontrado «salto25» lo almacenará como «\1» y cuando sea «salto10» también lo almacenará como «\1» puesto que la estructura «(?|» así se lo informa al motor PCRE.

La ventaja de esta estructura es el no tener que desglosar las búsquedas en función de lo que se encuentre ya que Sigil mantiene para todos los subgrupos en ella la misma referencia.

Un caso aún más avanzado de esta estructura sería una búsqueda del tipo:

Buscar:
<(?|(em)|(strong))>[^<]+</\1>

lo que persigue es encontrar un «<» seguido de «em» o de «strong» y seguido de un «>».

La instrucción:

Buscar:
[^<]+

Busca repetidamente cualquier carácter distinto de «<» (seleccionará todo el texto que siga a estas etiquetas hasta que encuentre «<»), seguidamente seleccionará «/» y como a continuación aparece «\1» Sigil recuerda que había almacenado o «em» o «strong» en «\1», los dos con la misma referencia «\1» por el uso de la estructura «(?|», y usa su correspondiente valor «em» o «strong» y los finaliza con «>».

En definitiva la expresión selecciona las etiquetas de apertura y cierre de «em» o «strong» y todo el texto entre ellas.

<em>Aquí se tiene un texto.</em>

<strong>Aquí se tiene un texto.</strong>

Como se ve, no solamente pueden emplearse las referencias en los reemplazos sino también en la propia caja de búsquedas.

Si la búsqueda hubiese sido:

Buscar:
(?|(<em>)|<(strong>))[^<]+</\1>

No se encontraría nada ya que «\1» lo que tiene almacenado es o «<em>» o «<strong>» y nunca en el final de la etiqueta se encuentra con «</<em>>» ni «</<strong>>» que es lo que significaría «</\1>».

Declaraciones

En los anteriores apartados sobre RegEx se ha manifestado, casi machaconamente, las limitaciones del lenguaje PCRE dentro de Sigil al tenerlo que aplicar en una única línea de búsqueda. Sin embargo se sabe que aun en esas condiciones las expresiones regulares son muy potentes y permiten la localización de una enorme cantidad de situaciones referidas a un texto. Si ello es posible se debe en gran medida a la capacidad de acotación que presenta un pequeño grupo de cuatro instrucciones: las declaraciones.

El término declaraciones posiblemente no exprese en español el concepto exacto de lo que realizan. Para los que son legos en estos temas informáticos podría ser más clarificador una nomenclatura que las refiriese como condiciones o incluso como condicionales, porque aparentemente imponen condiciones a la búsqueda. Pero no se ha querido denominar de esa forma porque en PCRE existe una estructura condicional como tal.

Las declaraciones son el esqueleto fundamental sobre el que debe construirse una búsqueda avanzada, por lo que su conocimiento abre al usuario posibilidades que de otra manera serían imposibles de alcanzar.

¿Qué es lo que hacen por tanto las declaraciones? Básicamente lo que efectúan es una comprobación, desde las coincidencias que se encuentran, de los caracteres que hay hacia adelante o hacia atrás de ellas. Es importantísimo darse cuenta desde el principio que las comprobaciones son en primer lugar eso: comprobaciones y en segundo lugar que la comprobación se realiza una vez posicionados en aquello que se quiera que detecte el lenguaje PCRE y que por tanto no forman parte del resultado obtenido.

Un ejemplo muy simple: se quiere buscar «pelota», pero no todas las coincidencias posibles, solo aquellas en las que después aparezca «azul» y previamente «una».

Es evidente que este tipo de búsqueda no necesita una declaración, puede hacerse con una búsqueda normal, lo que se pretende señalar es que la búsqueda armada en esas condiciones solo devolverá «pelota» (que es la coincidencia de la que se ha hablado antes) y no «una pelota azul». Esto es lo que significa que las declaraciones realizan una comprobación desde la coincidencia en la que nos encontramos («pelota») de los caracteres que hay hacia adelante («azul») o hacia atrás («una»). Y que tanto ni «azul» ni «una» forman parte del resultado obtenido.

Se pueden dividir las declaraciones en dos grupos conforme a lo que se acaba de indicar:

Declaraciones que comprueban caracteres hacia adelante.

Declaraciones que comprueban caracteres hacia atrás.

En ambos grupos se dispondrán de las mismas dos opciones o instrucciones que se invocan mediante una agrupación especial de símbolos entre paréntesis.

Declaraciones que comprueban hacia adelante

De los dos grupos este es el más versátil ya que permite situaciones (uso de instrucciones de repetición) que dentro del otro grupo no están permitidas.

Declaraciones positivas

La estructura de búsqueda se escribe de esta forma: «(?=)» en donde «?=» tiene como significado «comprueba si lo que viene a continuación de la coincidencia es igual a». Y es obligatorio encerrarlo entre paréntesis, paréntesis que no se computan a la hora de hacer los reemplazos. El paréntesis de estas estructuras no es un grupo que almacene algo para luego usarse como reemplazo numerado.

Ejemplo:

Buscar:
\pL+(?=\.)

«\pL+» es una repetición de cualquier número de letras mayor que uno. «(?=\.)» le indica al motor de búsqueda que una vez encontrada esa coincidencia tiene que comprobar que al grupo de letras le sigue un punto. (Se recuerda que la forma de codificar un punto fuera de una estructura «[ ]» es mediante la barra invertida «\» ya que el signo «.» sin más significa «cualquier carácter»).

Por tanto, si se aplicase esa búsqueda al párrafo anterior, se obtendrían dos coincidencias: «uno» y «punto» (marcadas en negrita) que son los únicos casos a los que a un grupo de letras le sigue un punto. Y en ambos casos el punto no forma parte del resultado obtenido.

En cursiva se han marcado dos lugares en los que no se detendría la búsqueda: a «signo» no le sigue un punto sino un espacio y lo mismo sucede con «carácter» ya que a la «r» final le sigue un cierre de comillas angulares.

Declaraciones negativas

La estructura de búsqueda es: «(?!)», en donde «?!» tiene como significado «comprueba si lo que viene a continuación de la coincidencia no es igual a». Y es aplicable lo mismo señalado para las declaraciones positivas en lo relativo a los paréntesis.

Ejemplo:

Buscar:
ex(?!preso)

Encontraría prefijos «ex» que no estuviesen seguidos de la palabra «preso».

Antes de continuar se quiere advertir de la dificultad de uso de las declaraciones negativas conjuntamente con los caracteres de repetición.

Si el ejemplo que se ha puesto para las declaraciones positivas se reescribe para declaraciones negativas quedaría:

Buscar:
\pL+(?!\.)

Que significaría: «busca grupos de letras que no estén seguidos de un punto».

Si esa expresión se usa revisando el mismo párrafo anterior, cabría esperar que fuera deteniéndose palabra por palabra:

[…]

letras

mayor

que

Y que llegados a este punto se saltase «uno» ya que esa palabra sí está seguida por un punto. Sin embargo no sucede así ya que PCRE se detendría en «un» que sigue cumpliendo la búsqueda impuesta: varias letras seguidas («un») que no estén seguidas por un punto («o»). El carácter de repetición «+» ha funcionado adecuadamente y no como se quería. Lo mismo sucedería en el resto del párrafo para finalmente detectar «punt» que al estar seguido de «o» no lo está de un punto que era la declaración impuesta.

Así pues hay que tener siempre en consideración para las declaraciones negativas el alcance de las condiciones de repetición.

Y si para el párrafo de ejemplo se quisiesen detectar todas las palabras no seguidas de punto ¿qué se tendría que hacer para evitar esas detecciones indeseadas? La respuesta siempre será limitar más la búsqueda, y ahí es donde nuevamente cobra importancia la lógica en las búsquedas. En este caso la lógica dice que al final de cada palabra no puede seguirle otra letra por lo que:

Buscar:
\pL+(?!\.)(?!\pL)

Evitaría esas detecciones indeseadas ya que si bien «punt» cumpliría la primera parte de la instrucción «\pL+(?!\.)» el hecho de añadir «(?!\pL)» obliga a que después de «punt» no aparezca una letra.

Pero para incidir aún más en lo complicado del uso de repeticiones con las declaraciones negativas, si esa misma expresión:

Buscar:
\pL+(?!\.)(?!\pL)

Se pasase por el susodicho párrafo del primer ejemplo, se podría pensar con criterio: «Por qué me selecciona por ejemplo “mayor”». Y el razonamiento podría ser este: «“\pL+” selecciona hasta “mayor”, luego “(?!\.)” obliga a que “mayor” no vaya seguido de un punto, cosa que sucede pues va seguido de un espacio en blanco, pero “(?!\pL)” obligaría a que tras ese espacio no hubiese ninguna letra y sin embargo está la “q” de “que”. ¿Qué pasa aquí?».

Pues la respuesta es el comportamiento de dos declaraciones seguidas, en las que se impone una doble comprobación sobre la coincidencia: en este caso que el grupo de letras no vaya seguido de un punto y que el grupo de letras no vaya seguido de otra letra. En estas condiciones «\pL+» efectivamente selecciona «mayor» pero tanto «(?!\.)» como «(?!\pL)» son declaraciones que comprueban el mismo carácter que sigue a la coincidencia («mayor»), que en este caso es un espacio en blanco y efectivamente ese espacio en blanco no es un punto y no es una letra: se cumplen todas las condiciones y el motor de búsqueda se detiene en ella. Y en cambio al analizar la expresión «uno.» «\pL+» selecciona «uno», pero ahora las dos comprobaciones de las declaraciones sobre el siguiente carácter (el punto) no se cumplen (en concreto la primera) por lo que el motor de búsqueda pasará por encima de ella.

Explicar esto es complicado por la lejanía del lenguaje. Entenderlo lo es aún más por la falta de proximidad. Pero frente a ello no quedan más opciones que practicarlo y comprobar que lo que se pretende conseguir es lo que se obtiene.

Las comprobaciones hacia adelante son simples si no se usan caracteres de repetición. Cuando se usen muchas veces se obtendrán resultados inesperados por no evaluar convenientemente hasta dónde llega la repetición que se ha forzado. Si en alguna parte del empleo de las RegEx es importante la lógica, sin duda lo es aquí.

Declaraciones que comprueban hacia atrás

Como se ha indicado más arriba, este grupo permite menos juego que el anterior ya que no es posible usar caracteres de repetición con él.

Aunque parezca que esto beneficia por su simplicidad constructiva, en el fondo es una losa cuando la única manera de acotar lo que se busca está en lo que hay antes.

En varios momentos se ha comentado que determinadas RegEx oficiales estaban limitadas por las propias limitaciones del lenguaje cuando se escribe en una sola línea; y todas ellas están motivadas por la imposibilidad de emplear declaraciones hacia atrás con caracteres de repetición.

En palabras sencillas: no se pueden construir de forma directa búsquedas del tipo: «encuentra un grupo de letras que formen un número romano y que no estén precedidas de cualquier nombre propio en mayúsculas».

Este tipo de búsquedas tienen que armarse mediante una declaración que comprueba hacia atrás ya que una vez que se obtiene la coincidencia (el número romano) se tiene que determinar que lo que le precede no sea un nombre propio. Un nombre propio tiene una estructura simple: un espacio en blanco seguido de un carácter de texto en mayúsculas y seguido de un número variable de caracteres en minúscula. Y esta es la condena: el hecho de que tenga un número variable de caracteres, hecho que con RegEx solo puede evaluarse con alguno de los sistemas de repetición, nos impide utilizar una declaración de búsqueda hacia atrás.

Se podrá obtener el número romano pero no se puede prefijar en una declaración un número determinado de letras que no sean mayúsculas antes del primer espacio en blanco previo, que sería la estructura lógica de búsqueda de una palabra que no sea nombre propio.

Declaraciones positivas

La estructura de búsqueda se escribe de esta forma: «(?<=)», en donde «?<=» tiene como significado «comprueba si lo que aparece antes de la coincidencia es igual a». Y es obligatorio encerrarlo entre paréntesis. Para estos paréntesis es aplicable lo que se ha señalado para las declaraciones que comprueban hacia adelante.

Tal como se ha indicado no es posible por tanto una búsqueda de este tipo:

Buscar:
(?<=\p{Ll}+)\s

Que hipotéticamente vendría a decir: «encuentra un espacio en blanco (nuestra coincidencia) que esté precedido por un número variable de letras minúsculas que como mínimo sea una».

Al incluir en la declaración que comprueba hacia atrás un carácter de repetición «(+)» que no limita, o lo que es lo mismo, que permite un número indeterminado de caracteres previos a la coincidencia, el resultado siempre será que no encuentra nada, que no deja de ser una forma de Sigil de decir: error en tiempo de ejecución.

Lo mismo sucedería con esta búsqueda:

Buscar:
(?<=\p{Ll}{2,5})\s

Que traducida a palabras sería algo como: «encuentra un espacio en blanco que esté precedido por un número variable de letras minúsculas que como mínimo sea dos y como máximo cinco». Ahora quien no determina con exactitud el número de caracteres previos a la coincidencia es la estructura «{2,5}».

Por analogía tampoco es posible el uso de «?» o de «*» ya que todos quedan asociados a repeticiones de caracteres.

Sin embargo esta búsqueda sí es posible:

Buscar:
(?<=\p{Ll}{5})\s

Que nuevamente traducida sería: «encuentra un espacio en blanco que esté precedido por cinco letras minúsculas». En esta situación ya no existe una indeterminación puesto que se establece con precisión qué se quiere que se compruebe antes de nuestra coincidencia (el espacio en blanco).

Declaraciones negativas

La estructura de búsqueda es: «(?<!)», en donde «?<!» tiene como significado «comprueba si lo que aparece antes de la coincidencia no es igual a». Y es aplicable lo mismo señalado para las declaraciones positivas en lo relativo a los paréntesis, y en la imposibilidad de usar caracteres de repetición que indeterminen la longitud de lo que precede a la coincidencia a encontrar.

A pesar de estos inconvenientes, las cuatro estructuras que conforman las declaraciones son potentísimas. La práctica de su empleo hará que poco a poco se consiga aquello que se pretenda y cada fallo que se reciba de ellas también permitirá comprender mejor cómo funcionan y por qué lo hacen de esa manera.

No se va a negar que su uso es complejo, pero lo es más por la estructura lógica que se tiene que desarrollar que por la dificultad en sí que suponen. La mayoría de las veces es preferible comprobar hacia adelante que no hacerlo hacia atrás. En el ejemplo que se ha puesto de los números romanos es siempre más fácil buscar primero la palabra y después trabajar con la que la sigue (el número romano), que primero buscar la coincidencia del número romano y luego comprobar hacia atrás lo que le precede.

Pero si no queda más remedio, habrá de valerse de pequeños trucos para poder usar las repeticiones cuando se quiera comprobar hacia atrás; trucos consistentes en introducir los caracteres de repetición fuera de las estructuras «(?<!)» o «(?<=)».

Básicamente algo como:

Estructura de comprobación hacia atrás + estructuras que permitan repeticiones + coincidencia a buscar.

Se advierte que en estos casos acertar a la primera con lo que se pretende es prácticamente imposible.

Con las declaraciones pueden combinarse la totalidad de comandos que se han visto hasta ahora lo que las dota de una capacidad enorme, si bien es cierto que con alguna limitación en las declaraciones que comprueban hacia atrás que resulta sorprendente y que todavía no se ha determinado si es problema de Sigil o del lenguaje PCRE.

Como simple curiosidad comentar que una combinación de este tipo es posible:

Buscar:
(?<!comando|comando|comando|comando)

Y por tanto también lo es por ejemplo:

Buscar:
(?<!comando\s|comando\s|comando\s|comando\s)

En donde en cada instrucción «OR», junto a lo que se quiere comprobar, se ha seguido de un espacio en blanco. Pero curiosamente no se puede sacar factor común a ese espacio en blanco, por lo que:

Buscar:
(?<!(comando|comando|comando|comando)\s)

No produce ninguna coincidencia ya que para el motor de búsqueda es un error.

Hay más casos con este tipo de comportamiento que con el tiempo irán apareciendo y que en ocasiones desconcertarán.

Declaraciones múltiples

Una vez conocidas y aplicadas las declaraciones que vimos en el apartado anterior, en cuanto el usuario ha aprendido a manejarse con algo de soltura suele surgir en su cabeza una idea de forma casi inevitable: «¿Puedo anidar las declaraciones? ¿Simultáneamente es posible imponer restricciones a lo que pretendo buscar?».

Por supuesto que es posible, e incluso en muchas ocasiones inevitable el tener que emplear varias declaraciones en un mismo punto para discriminar lo que se pretende encontrar.

Cuando me refiero al uso de declaraciones múltiples debe interpretarse en el sentido correcto del término. Una expresión con esta estructura: Símbolos RegEx + (declaración) + símbolos + (declaración) + símbolos no es una expresión en la que podamos decir que se empleen declaraciones múltiples aunque haya más de una en su conjunto.

Nuevamente tengo que recordar el concepto básico de una declaración: es una comprobación que realiza la expresión desde la coincidencia en la que nos encontramos. Este hecho también se produce cuando se anidan o se emplea más de una declaración: las comprobaciones se hacen desde el punto donde «ha parado» internamente la expresión.

Por tanto para que podamos decir que nuestra expresión se ha escrito usando múltiples declaraciones su estructura tiene que ser alguna de estas dos:

1er grupo de símbolos + (declaración) + (declaración) + 2º grupo de símbolos

1er grupo de símbolos + (declaración + (declaración)) + 2º grupo de símbolos

Es sencillo apreciar que el concepto de declaración múltiple implica el uso de dos o más declaraciones consecutivas. Obviamente esas declaraciones podrán estar en cualquier parte de la expresión, no necesariamente tras una serie de instrucciones, su posición puede estar en el principio o final de la RegEx o en cualquier otro lugar.

El primer tipo de estructura que he puesto de ejemplo es lo que sería una declaración múltiple a secas, mientras que la segunda sería una declaración múltiple anidada.

Declaración múltiple

Es aquella formada por más de una declaración, actuando cada una de ellas de forma independiente sobre la coincidencia encontrada.

Para simplificar los ejemplos usaré las declaraciones que buscan hacia adelante ya que intuitivamente son más claras que las que buscan hacia atrás aunque el funcionamiento es idéntico para ambas. También utilizaré casos muy simples que en la mayoría de las ocasiones pueden resolverse de forma más sencilla, pero que pueden clarificar su uso.

Un ejemplo muy claro de un uso incorrecto de las declaraciones múltiples podría ser el siguiente. Tengo este tipo de frase:

He estado viendo <em>Lo que el viento se llevó.</em>

Quiero localizar en mi texto los signos de puntuación que lleven adosados etiquetas, por lo que impongo que a una letra le siga un signo de puntuación y una etiqueta; y lo hago de esta forma:

Buscar:
\pL(?=\pP)(?=<[^>]+>)

Como he comentado, esta no sería la forma más sencilla de realizar lo que se quiere, pero pretendo incidir en el uso incorrecto de la declaración múltiple.

Teniendo en cuenta lo que significa la declaración (?=) y que se comprueba desde la coincidencia en la que nos encontramos cuando aparece la declaración, el motor de búsqueda localiza la letra \pL (en mi ejemplo la «ó»), secuencialmente se encuentra con dos declaraciones seguidas. La primera (?=\pP) le dice al motor que compruebe que a esa letra le siga un signo de puntuación (como efectivamente sucede). La segunda (?=<[^>]+>) le indica que compruebe si sigue una etiqueta (como por ejemplo </em>) y podemos pensar que así es y ahí es donde reside el error ya que las declaraciones se comprueban desde la coincidencia que en este caso sigue siendo \pL es decir la «ó». Por tanto la expresión no se detendría en el ejemplo ya que lo que estoy imponiendo en la búsqueda es que a la letra «ó» le siga un signo de puntuación y a la misma letra «ó» le siga una etiqueta y eso no es posible.

Si en cambio usase este otro tipo de expresión:

Buscar:
\pL(?=\pP)(?!<[^>]+>)

Y la aplicase al mismo ejemplo, ahora sí tendríamos una detección por parte de la RegEx. El motor de búsqueda recibe la indicación de localizar una letra que esté seguida de un signo de puntuación y que no esté seguida (esa misma letra) de una etiqueta. ¿Cuál sería la selección efectuada por la expresión para la frase de ejemplo? Pues únicamente la letra «ó» ya que las declaraciones solo son comprobaciones por lo que a efectos de selección solo se tiene en cuenta \pL.

De este ejemplo se obtiene una conclusión evidente: nunca debe emplearse una declaración múltiple formada por el mismo tipo de declaración ya que pueden unificarse en una única que sí produzca resultados:

Buscar:
\pL(?=\pP<[^>]+>)

Esta expresión le transmite al motor de búsquedas que localice una letra seguida de un signo de puntuación y de una etiqueta y volveríamos a obtener como resultado nuestra letra «ó».

Otro ejemplo podría ser:

Buscar:
(?<=\pL{4})(?<!rm)ir

Esa expresión, cuando el motor de búsqueda la analiza, llega internamente a la primera declaración y al apreciar que se trata de una declaración que busca hacia atrás continúa hacia la coincidencia. Como vuelve a encontrarse con una segunda declaración que busca hacia atrás continúa de nuevo hacia la coincidencia que es «ir» y una vez alcanzada analiza las dos declaraciones: «ir» debe de estar precedido de cuatro letras (?<=\pL{4}) y también «ir» no debe de estar precedido de «rm».

Por tanto nunca se detendría en el verbo dormir en el que si bien «ir» está precedido de cuatro letras no cumple la segunda declaración: que previamente no exista «rm». Tampoco se detendría la búsqueda en gemir ya que aunque se cumple que previamente a «ir» no aparezca la combinación «rm» no se cumple la primera comprobación ya que no hay cuatro letras antes de «ir».

En cambio en el caso del verbo seguir se cumplirían ambas comprobaciones y obtendríamos como selección de la búsqueda el sufijo «ir».

Varias declaraciones seguidas son sencillas de analizar si se tiene siempre presente que cada una de ellas se efectúa respecto a la coincidencia encontrada por la expresión.

Declaración múltiple anidada

Es aquella formada por más de una declaración, actuando cada una de ellas de forma conjunta sobre la coincidencia encontrada.

Este tipo de declaraciones múltiples es algo más complejo de analizar mentalmente, sobre todo en el caso de emplear declaraciones que buscan hacia atrás: (?<!) (?<=)

La forma de escribirlas es la propia de los anidamientos:

(Declaración1(declaración2))

He escrito una declaración tipo anidada formada solo dos declaraciones pero podrían emplearse más:

(Declaración1(declaración2 (declaración3)))

(Declaración1(declaración2)(declaración3))

…

El primer caso sería un doble anidamiento mientras que el segundo sería un anidamiento de dos declaraciones consecutivas.

No es necesario indicar que cuanto más profundo es el nivel de anidamiento mucho más complejo es el seguimiento mental de lo que realiza la expresión.

Como siempre que se trabaja con declaraciones es mucho más sencillo trabajar con las que comprueban hacia adelante que con las que comprueban hacia atrás. Empezaré con las primeras:

Supongamos que queremos localizar iniciales seguidas de punto con un espacio entre ellas: del tipo a. C. con el fin de colocar en el espacio en blanco intermedio la etiqueta html &nbsp; para evitar su división en dos líneas de texto en un lector electrónico.

Podría usar de prueba una expresión del tipo:

Buscar:
\pL\.\K\s(?=\pL\.)

El motor de búsqueda al analizar esa expresión trata de localizar una letra (\pL) seguida de un punto (\. hay que preceder a ese punto de una barra para que sepa el motor que es un punto y no un carácter cualquiera). Luego se encuentra \K que lo que le dice es que cuando haga la selección prescinda de seleccionar lo que precede a dicha \K. A continuación buscaría un espacio en blanco (\s) y comprobaría si le sigue una letra seguida de otro punto (?=\pL\.).

Al encontrarse con el ejemplo a. C. la expresión escrita no seleccionaría «a.» ya que precede a \K y esta anula esa selección. Tampoco seleccionaría «C.» ya que forma parte de una declaración y nunca se produce la selección de lo que se comprueba. El resultado por tanto sería la selección en exclusiva del espacio en blanco intermedio. El reemplazo sería el mencionado &nbsp; y nos quedaría:

a.&nbsp;C.

Y hasta aquí todo correcto.

Pero supongamos que en el texto a analizar existe <span class="unido">a. C.</span> donde "unido" es una clase que se encarga de que no exista esa separación de las iniciales en el lector. Por tanto en este tipo de situaciones sería redundante colocar la etiqueta html.

Al pasar la expresión anterior se seguirán cumpliendo las condiciones impuestas en la búsqueda por lo que al realizar el reemplazo nos quedará:

<span class="unido">a.&nbsp;C.</span>

Como en este tipo de casos no queremos que la expresión se detenga, tendríamos que modificar la búsqueda empleando declaraciones anidadas:

Buscar:
\pL\.\K\s(?=\pL\.(?!</span))

Hemos anidado dos declaraciones, de forma que ahora su comprobación no se realiza de forma independiente para cada una de ellas sobre el espacio en blanco que les precede (\s) sino en conjunto. Y al llegar a dicho espacio el motor de búsqueda comprueba si está seguido de un punto (\.) y si ese punto no está seguido de </span>. Al anidarlas hemos conseguido que la segunda declaración no se compruebe sobre el espacio en blanco (\s) sino sobre el punto (\.). Al correr esa búsqueda cuando se encuentre con <span class="unido">a. C.</span> el motor de las RegEx detecta «a.» (letra seguida del punto \pL\.), luego prescinde de ello a efectos de seleccionarlo (\K), a continuación localiza un espacio en blanco (\s) y una declaración anidada (que se inicia con una comprobación hacia adelante) (espacio seguido de letra seguido de punto no seguido de </span>); y como el punto sí estaba seguido de <span> no se consigue el patrón buscado y la expresión no se detiene en ella, con lo que hemos conseguido evitar las detecciones en iniciales cuando se ha empleado un <span> en ellas.

El análisis de las expresiones anidadas con declaraciones que comprueban hacia adelante no suele ser complicado y es bastante intuitivo. Cuando ese anidamiento se realiza con declaraciones que comprueban hacia atrás es algo más confuso.

Para intentar simplificar su comprensión voy a utilizar un ejemplo numérico que no tiene ninguna utilidad salvo la de entender el funcionamiento de la estructura:

Supongamos que tengo combinaciones de letras y números del tipo 123456ABCDEF donde los números y las letras pueden ser cualesquiera, repetirse y puede incluso no aparecer ningún número previo a las letras (que siempre serán 6). Quiero localizar por ejemplo los grupos que solo tengan tres números que vayan seguidos por tres caracteres que no sean X y acaben en AAA. Es decir localizar 583zYzAAA o 000xxxAAA o 925bcAAAA y no 65324587XXXAAA ni 12aBCAAA.

La forma de organizar esta búsqueda es fijando la coincidencia y realizando después comprobaciones sobre ella. La coincidencia será AAA que es lo que sé con seguridad que debo encontrar siempre y lo que tengo que comprobar es lo que le precede. Una búsqueda con declaraciones anidadas que buscan hacia atrás resuelve sencillamente la cuestión:

Buscar:
\s(?<=\pN{3}(?!XXX)...)AAA

Analicémosla: el motor de búsqueda recorre secuencialmente de izquierda a derecha la expresión y lo primero que se encuentra es que tiene que localizar un espacio en blanco, luego viene una declaración anidada que comprueba hacia atrás (ya que es la primera declaración en el «nido») por lo que sigue buscando una coincidencia desde la que realizar las comprobaciones hacia atrás y localiza AAA (obviando por ahora la otra declaración ya que el motor ha visto una declaración que comprueba hacia atrás y sigue la búsqueda de la coincidencia desde el paréntesis de cierre de esa declaración) .

Llegado aquí analiza las declaraciones y comprueba sobre AAA.

Del conjunto anidado (?<=\pN{3}(?!XXX)...) que lo precede lo primero que hay que darse cuenta es que todo él está formado por declaraciones (en este caso dos) y que no hay código que no sea parte de la declaración.

Para su comprensión voy a desanidarlo.

Si solo apareciese (?<=\pN{3}...) tendríamos claro que lo que hay que comprobar sobre la coincidencia AAA es que esté precedida de 3 dígitos (\pN{3}) y 3 caracteres cualesquiera (...). Pero con esa declaración sola obtendríamos coincidencias del tipo 123XXXAAA que queremos evitar, por lo que es necesario comprobar algo más de esos 3 caracteres cualquiera y de ahí viene la necesidad del anidamiento. Y la forma más simple es obligar a que tras los tres dígitos no siga XXX y ello se consigue mediante (?!XXX) formando el conjunto (?<=\pN{3}(?!XXX)...)

Por ello al analizar el motor la expresión en conjunto primero busca el espacio en blanco (y lo «memoriza») sigue hasta encontrar AAA («recordando» que cuando lo encuentre tiene que comprobar la declaración que comprueba hacia atrás). Una vez encontrado el grupo AAA comprueba que esté precedido de tres dígitos y tres caracteres (un total de 6 caracteres) (primera declaración en el «nido») y que además los tres dígitos no estén seguidos de XXX (segunda declaración del «nido»). El patrón buscado se cumplirá en 583zYzAAA, 000xxxAAA, 925bcAAAA pero no en 1000xxxAAA o 222XXXAAA.

Como puede apreciarse las declaraciones anidadas que comprueban hacia atrás son más complejas en cuanto a su análisis que las que comprueban hacia adelante y eso hace que haya que prestar mucha atención en caso de necesitarlas.

En este otro tipo de expresión:

Buscar:
(?<=(?<!com)pro)bar

Lo que interpreta el motor RegEx es que necesita encontrar «bar» que esté precedido por «pro» (?<=pro) (primera declaración en el «nido») y que «pro» no esté precedido de «com» (?<!com) (segunda declaración en el «nido») en la idea de localizar aprobar, reprobar, probar…

Si las declaraciones en sí dotaban de potencia a las expresiones a la hora de acotar lo buscado, el hecho de anidarlas nos permite llegar a exprimir al máximo esa potencia siendo en ocasiones la única forma de llegar a encontrar lo que se precisa.

Para finalizar este apunte recordar de nuevo que tanto en las declaraciones simples, como en las anidadas los paréntesis forman parte de su codificación por lo que no son tenidos en cuenta a la hora de efectuar un reemplazo.

NORMAS ORTOTIPOGRÁFICAS

Normas tipográficas a tener en cuenta

A continuación se presentan una serie de normas tipográficas a tener en cuenta a la hora de maquetar un ePub. Se incluyen tanto las reglas específicas de la Real Academia Española (RAE) como otras de uso común.

La tipografía debe ser flexible y adaptarse a las necesidades de cada escrito.

Las reglas que siguen a continuación han de entenderse como orientativas. Por ejemplo si en un escrito donde abundan tanto los énfasis como los neologismos, se puede optar en ese caso por usar la cursiva para el énfasis y las comillas para los neologismos (siempre manteniendo la coherencia), o utilizar otro resalte tipográfico diferente de la cursiva para el énfasis.

Cursiva, negrita y redonda

Cursiva

Aparte del énfasis, el principal uso de las cursivas es señalar las palabras que, sin ser nombres propios, no tienen un uso conforme al léxico español.

En textos íntegramente compuestos en cursiva las funciones de la redonda y la cursiva se intercambian (dedicatorias, epígrafes, …).

Énfasis

Palabras o frases a las que el autor quiere dar un énfasis especial (al no romper el gris tipográfico, destacan únicamente durante la lectura). [→COMILLAS] [A ver si te enteras: si lo hizo fue porque quiso, no porque se lo pidieran.]

Nombres propios [→REDONDA]

Los sobrenombres, alias vulgares y apodos cuando siguen al nombre o cuando se intercalan en el mismo. Si lo preceden o van sólos, se escriben en redonda. [Dolores Ibárruri, la Pasionaria. Leopoldo Alas Clarín, pero: La regenta es una obra de Clarín. Ernesto Che Guevara, pero Che Guevara o el Che.]

Los nombres de aviones, barcos, naves espaciales, trenes, … Se incluyen los nombres de ejemplares individuales de los vehículos, bien sean parte de una serie, bien sean singulares. [el Titanic, la Numancia, el Cruz del Sur.]

Los nombres dados a huracanes y ciclones individuales. [el Katrina.]

Los nombres de las mascotas. Excepción: Los nombres de mascotas que actúan como personajes y los nombres de animales clásicos deben ir en redonda. [Mi gata Dara es de raza persa, pero: Pato Donald, Tom y Jerry, Ayudante de Santa, Cerbero, Rocinante, Platero.]

Nombres científicos de animales y plantas (género y por debajo) y en bacteriología (a todos los niveles). [→ZOOLOGÍA Y BOTÁNICA] [→BACTERIOLOGÍA] [Artemisia campestris subsp. inodora. Felis silvestris catus. Pseudomona aeruginosa.]

Títulos de obras (unidades físicas o temporales) [→CONSIDERACIONES ADICIONALES]:

Escritos: libros (cómics, ensayo, narrativa, poesía, teatro, ya sean publicados o inéditos), periódicos, semanarios, revistas, enciclopedias, fascículos, … Excepción: Los títulos de los escritos sagrados y los libros de los que se componen. [Ecosistemas de los Andes colombianos, Hamlet, pero: Biblia, Vedas Génesis, Epístolas a los Corintios]

Obras artísticas: escultura, música (salvo alusiones a género o forma), pintura, fotografías, … [→MUSICA] [Las meninas.]

Obras teatrales, películas y los programas de radio y televisión. [La venganza de don Mendo. Desayuno con diamantes. Informe semanal. ]

Nombre (tema) de congresos, encuentros y simposios (van entre comillas si hacen alusión a uno solo de la serie), exposiciones (como alternativa pueden ir entre comillas). [XI Congreso La unidad en la diversidad. La exposición 100 años, 50 acontecimientos. Palau de la Música Catalana se inauguró ayer, también: La exposición «100 años, 50 acontecimientos. Palau de la Música Catalana» se inauguró ayer.]

Títulos de obras: consideraciones adicionales [→TÍTULOS DE OBRAS].

Cuando lo que ha de ponerse en cursiva es un título de una obra que a su vez tiene originalmente una cursiva, esta última se reemplaza por comillas. [Acabé de leer Ensayos sobre «Lo que el viento se llevó» ayer mismo.]

Una parte del título puede sustituir al total. En este caso solo va en cursiva la parte que queda del título original. [Estoy leyendo el Quijote.]

Los títulos extranjeros conservan las mayúsculas que les correspondan. [When I was a German.]

Extranjerismos, jergas y neologismos

Extranjerismos crudos (no asimilados al castellano), incluidas las locuciones latinas (expresiones fijas en latín) (RAE 2010). En caso de estar incluidos en el diccionario de la RAE, están identificados respectivamente como «Voz + idioma» y «Loc. lat.». [→EXTRANJERISMOS ADAPTADOS] [apartheid, pendrive, piercing, pizza, reggae; grosso modo, numerus clausus, peccata minuta, post mortem, vox populi, curriculum vitae (pero currículum como latinismo asimilado al español).]

En traducciones deben ir en cursiva las expresiones y palabras que en el original aparezcan en español, se aconseja además añadir una nota aclaratoria).[—Sí, señora[1]. / 1.En español original.]

Jergas, dialectos o palabras intencionadamente mal escritas. [→COMILLAS] [Tenía un helao de cocholate, pero me se cayó.]

Neologismos. [contranovela, blogósfera]

Otros usos de la cursiva

Palabras o expresiones usadas como metalenguaje (se autorreferencian), salvo cuando es un nombre propio (ya son de por sí autorreferenciales). [¿Una palabra que tenga cinco íes? La respuesta es dificilísima, pero: La persona que está sentada en la silla se llama María.]

En textos didácticos, el nombre de los conceptos cuando se introducen o explican. [Una fuente es una colección de glifos, que son representaciones gráficas de caracteres.]

En diccionarios, la función gramatical, los ejemplos, comentarios, etc., del significado. [durante prep. Denota simultaneidad de un acontecimiento con otro. Durante los días de invierno.]

Las indicaciones escénicas en obras de teatro o guiones de cine, radio y televisión, incluyendo los paréntesis. [Félix. (Gritando y yendo hacia él.) ¡Hable usted!]

Sustitución por otros símbolos tipográficos [→COMILLAS]

Manuscritos: no existe la cursiva, por lo que se sustituye por comillas o subrayado.

Prensa: la cursivas no es adecuada para titulares, se recomienda sustituir por comillas.

Webs: la cursiva tienen problemas de legibilidad, por lo que se reemplazan por negrita o comillas.

Negrita

Títulos, epígrafes, voces en diccionarios y similares. [Capítulo 1: Flores, abejas y miel]

Énfasis: destacar un texto para encontrarlo fácilmente (al romper el gris tipográfico centra de inmediato la atención, siempre que no se abuse de este recurso) […como se puede observar en la fig. 1, en contraposición…]

Advertencias. [PROHIBIDO BAÑARSE.]

Redonda

Es la forma básica en el cuerpo del texto.

Los nombres propios (incluso si son de otras lenguas), los alias y sobrenombres cuando preceden al nombre o van solos. Los nombres propios de objetos inanimados, mascotas, … van en cursiva. [→CURSIVA]. [The Rolling Stones, Bundesgtang, la ponencia «CTAN progress report» fue breve.]

Extranjerismos adaptados o derivados de extranjerismos crudos que siguen reglas de la ortografía española (por ejemplo que han incorporado algún sufijo). Se incluyen los latinismos asimilados. Están incluidos en el diccionario de la RAE como una palabra más, o precedidos de «Del + idioma» para indicar su origen. [→EXTRANJERISMOS CRUDOS] [→ACENTUACIÓN] [baipás (por by-pass), yogur (por yogourt), airbag, darwinismo, washingtoniano, whiskería (pero whisky como extranjerismo crudo); exabrupto, exlibris (pero ex libris como locución latina).]

Onomatopeyas e interjecciones. [Onomatopeyas: ja, ja, ja; pio pio; tic, tac, tic, tac; zigzag; mpfmmmpppff; achís (estornudo). / Interjecciones: ¡Eh!,¡ay!, ¡jo!, ¡vaya por Dios!, ¡anda ya!]

Casos especiales (¿cursiva o redonda?)

Signos de puntuación y llamada a notas (no RAE)

Esta norma es común en tipografía, pero no es una norma de la RAE (su aplicación es opcional).

Los signos de puntuación simples siempre llevan el mismo formato que la palabra a la que se unen (en cursiva, negrita o redonda según corresponda). [Estoy leyendo El amor en los tiempos del cólera; es una novela magnífica → <i>colera;<i> / Estamos explicando normas sencillas de ortotipografía. → <b>ortotipografía.<b> ]

Los signos dobles de puntuación (tanto el de apertura como el de cierre) llevarán el mismo formato que el enunciado que encierran. Si solamente una parte del enunciado que está dentro de los signos dobles lleva cursiva y/o negrita los signos irán en redonda. [Quieren reeditar la primera novela de ese famoso autor (El dolor) → <i>(El dolor)<i> / Quieren reeditar la primera novela de ese famoso autor (titulada El dolor) → (titulada <i>El dolor<i>) ]

La llamada a nota tiene resalte tipográfico si también lo tiene la palabra que la soporta (la nota al pie no conserva el resalte). [Estamos explicando normas sencillas de ortotipografía[1]. → <b>ortotipografía<sup>[1]</sup>.</b> / [1] Se llama ortotipografía a…]

Música

En redonda:

En títulos de obras musicales, cuando aluden a la forma o el género. [→TÍTULOS DE OBRAS] [la Sinfonía núm. 6 en fa menor, Pastoral, de Beethoven]

En cursiva:

Notas musicales: para evitar confusión con el texto normal. [→MINÚSCULAS] [En esta partitura está en sol sostenido.]

Tiempos o movimientos musicales. [El Allegro enérgico e passionato — Più allegro de la Cuarta Sinfonía de Brahms.]

Títulos de las obras: melodías, discos, … [→TÍTULOS DE OBRAS] [Las cuatro estaciones. Descanso dominical.]

Zoología y botánica [→MAYÚSCULAS]

En redonda:

Nombres científicos de plantas y animales de niveles superiores al género. [Pinophyta, Animalia, Cordada.]

Las abreviaturas var., sp., subsp. [Cichorium intybus var. foliosum Hegi.]

El nombre de autor o su abreviatura. [var. foliosum Hegi.]

En cursiva:

Nombres científicos de plantas y animales correspondientes con género, especie y subespecie. [→CURSIVA] [Artemisia campestris subsp. inodora. Felis silvestris catus.]

Bacteriología

Nombres científicos de todos los niveles. [→CURSIVA] [Pseudomona aeruginosa.]

Matemáticas y física

Siempre en redonda (aunque el texto en el que van esté en cursiva):

Las cifras. [Un recipiente contiene H₂ a 20 °C y 12,0 atm.]

Los símbolos de las unidades. [… a 20 °C y 12,0 atm.]

Los símbolos matemáticos que representan funciones y operaciones concretas (como sen y lím) y los que tienen su propio signo (como + o ·). [El seno de la suma de dos ángulos es sen(2α) = 2 sen α cos α.]

Los paréntesis, los corchetes y las llaves que formen parte de la expresión matemática. [… sen(2α) = 2 sen α cos α.]

Siempre en cursiva (aunque el texto en el que va esté en cursiva):

los símbolos de una letra que representan conceptos matemáticos o magnitudes físicas (como velocidad, energía o temperatura). [Si a = b y b = c, entonces a = c.]

Versales y versalitas

Las versales son mayúsculas de tamaño normal, las versalitas son mayúsculas del tamaño aproximado de las minúsculas.

VERSALES, VERSALITAS, minúsculas

Usos de las versalitas

Como mayúsculas disminuidas.

En las siglas: para evitar «manchas» visuales en el gris tipográfico que distraen al lector (las versales tienen por lo general trazos más gruesos que las minúsculas).[→MAYÚSCULAS]

Números romanos: cuando acompañan a sustantivos escritos en minúscula, se recomienda escribirlos en versalitas, si van solos o acompañan a sustantivos escritos con inicial mayúscula se dejan en versales. [→MAYÚSCULAS] [siglo V, páginas XIX-XXIII; pero: II Congreso Internacional, Alfonso X.]

En firmas, epígrafes, lemas, versos, documentos en recuadro que ilustran un tema y textos semejantes.

En los titulillos de los folios (encabezamiento repetido en cada página indicando el título de la obra / capítulo y autor, sin formar parte del texto).

Como minúsculas enfatizadas:

En obras de teatro, los nombres de los personajes.

En referencias bibliográficas, los nombres y apellidos de los autores (opcional).

En diccionarios, glosarios y obras lexicográficas, en las remisiones a otro artículo dentro de la misma obra.

En leyes, decretos y textos semejantes, la palabra artículo se escribe en versalita, ya sea que aparezca completa o abreviada. En ocasiones la inicial se deja en versal.

Usos de las versales

En todos los demás casos en los que se usan mayúsculas.

Diálogos y pensamientos

Diálogos

Uso de la raya

Marca el inicio del diálogo del personaje (raya de apertura). Va pegada a la primera palabra del diálogo. [—¿Qué fue eso?]

Marca los incisos del narrador en el diálogo: si la intervención del personaje continúa, son dobles (apertura y cierre), en caso de no ser así, solo la de apertura. Van pegadas a la primera y última palabra del inciso. [—¿Qué fue eso? —preguntó Beregond. Nadie le contestó. / —¿Qué fue eso? —preguntó Beregond—. ¿También tú oíste algo?]

Diálogos en varios párrafos: cuando un diálogo se reproduce en varios párrafos, al inicio de los párrafos auxiliares se colocarán comillas de cierre (»).

—Hay un hombre nuevo en el King’s College que está causando mucho revuelo —prosiguió la doctora Blackwell—. El señor Lister afirma haber obrado milagros en la Royal Infirmary de Edimburgo. Dice que unas heridas que atendió, heridas que se hubieran gangrenado y provocado la muerte del paciente, han sanado en pocas semanas porque las lavó con ácido fénico.

»Me han comentado un caso sorprendente de un niño de diez años que se aplastó el brazo en el taller de un tornero. Tenía el brazo tan destrozado […]. Siete semanas después del accidente, el chico fue enviado a casa con su brazo en perfecto funcionamiento.

Mayúsculas y minúsculas

Minúsculas: cuando el inciso del narrador va introducido por un verbo de habla (decir, añadir, asegurar, preguntar, exclamar, responder, …). [—¡Qué le vamos a hacer! —exclamó resignada doña Patro.]

Mayúsculas: en los demás casos [→MAYÚSCULAS]. [—No se moleste. —Cerró la puerta y salió de mala gana.]

Puntuación

Intervención del personaje interrumpida por el narrador: el signo de puntuación que corresponda al enunciado interrumpido se debe colocar tras la raya que cierra el inciso del narrador. [—Está bien —dijo Carlos—, lo haré, pero que sea la última vez que me lo pides.]

En las intervenciones del personaje no interrumpidas por el narrador, el signo de puntuación va antes de la raya que marca el inciso. Si tras el inciso continúa el parlamento del personaje, el punto que marca el fin del inciso narrativo o los dos puntos que indican la continuación del parlamento (según el caso) se escribe tras la raya de cierre.[—No se moleste. —Cerró la puerta y salió de mala gana. / —¿Puedo irme ya? —Se puso en pie con gesto decidido—. No hace falta que me acompañe. / —Anoche estuve en una fiesta —me confesó, y añadió—: Conocí a personas muy interesantes.

Pensamientos

Uso de las comillas

Enmarcan los pensamientos de los personajes. Si dentro de los mismos se ha de resaltar texto con comillas, deben usarse las inglesas (“ ”) y dentro de ellas de ser necesarias las simples (‘ ’). [→COMILLAS]

Pensamientos en varios párrafos: cuando un pensamiento se reproduce en varios párrafos, al inicio de los párrafos auxiliares se colocarán comillas de cierre (»).

Ella se mareó al contemplar las ruinas del palacio de Corazones, y los recuerdos se le agolparon en la cabeza. «Cuando mi padre y yo jugábamos al corre que te pillo por los pasillos, y siempre me hacía reír para pillarme. “Con las letras de mi nombre, si las cambias de orden, se pueden escribir cosas como ‘alnon’, ‘onnal’ o ‘lonan’”, decía. “Pero si esas no son palabras”, replicaba yo, y al oír mi voz, él descubría dónde estaba yo, y después de pillarme, contestaba: “Pero, Alyss, yo no he dicho que fueran palabras de verdad”.

»Y había toda clase de recovecos donde esconderme para espiarlos a él y a mamá, y yo lo veía dándole a ella un masaje en la nuca mientras ella estaba en el trono, alzando el rostro hacia él para besarlo».

Durante la maquetación de libros electrónicos hay que cambiar las comillas rectas por su símbolo tipográfico correspondiente ( " " → “ ” / ' ' → ‘ ’ ).

Puntuación

Los signos de puntuación correspondientes a la frase en la que va inserto el pensamiento se colocan siempre después de las comillas de cierre. [Sus palabras fueron: «No lo haré»; pero al final nos ayudó. ¿De verdad ha dicho «hasta nunca»?]

El texto que va dentro de las comillas tiene una puntuación independiente y lleva sus propios signos ortográficos (si el enunciado entre comillas es interrogativo o exclamativo, los signos de interrogación y exclamación se escriben dentro de las comillas). Únicamente el punto final de enunciado va detrás de las comillas de cierre (incluso si el enunciado no lo precisara de no llevar las comillas, como en el caso de llevar un signo de interrogación, de exclamación o puntos suspensivos). [«¡Qué ganas tengo de que lleguen las vacaciones!», pensó. / «Si pudiera decirle lo que pienso realmente…». A Pedro no le resultaba fácil hablar con sinceridad.]

Llamadas a notas

Existen dos modos de colocación de estas llamadas con respecto a los signos de puntuación, ambos igualmente correctos (es más un asunto tipográfico que ortográfico, de ahí que la RAE se limite a informar sobre los dos sistemas más generalizados, sin que prescriba uno de los dos). Sea cual sea la opción elegida, lo que sí es deseable es que el uso sea coherente, de manera que, dentro de un mismo escrito, el criterio sea siempre el mismo.

En EPL se prefiere el sistema francés por su mayor versatilidad.

Sistema francés

Signos de puntuación simples: la llamada de nota se sitúa inmediatamente antes del signo de puntuación, excepto en el caso de los puntos suspensivos en que la llamada a nota va detrás, seguido de un punto de cierre del enunciado.

Los resultados no son satisfactorios en los estudios realizados hasta el momento[1]. El mismo año expuso en la Bienal de Venecia[2], en el Guggenheim, en el Moma… [3].

Signos de puntuación dobles: la llamada de nota se sitúa antes o después del cierre de un signo doble en función de que se refiera solo a la última palabra o a todo el segmento enmarcado por esos signos. Si va detrás, tras la nota hay que poner un punto de cierre del enunciado.

—¿Cree que sería posible recuperar una forma como Mastrique[1]? / [1] Actualmente se utiliza la forma Maastricht.

—¿Cree que sería posible recuperar una forma como Mastrique?[2]. / [2] Pregunta realizada a quince expertos en toponimia.

Rafael señalaba que «es muy discutido el posible influjo de las lenguas indígenas»[1]. Las «meigas»[2] no tuvieron nada que ver.

Lenz llegó a afirmar que el habla vulgar de Chile era «principalmente español con sonidos araucanos[3]».

Sistema inglés

La llamada se sitúa siempre tras el signo de puntuación, sea cual sea. No permite diferenciar cuándo la nota se refiere a la palabra que precede al signo de puntuación y cuándo a un segmento mayor.

¿Has sufrido alguna vez el mal de «güeyo»?[1] Este tipo de pensamiento mágico,[2] propio del pensamiento infantil, aflora en nuestros comportamientos a lo largo de toda la vida.[3] / [1] … (la nota podría referirse a la palabra «güeyo» o bien a toda la frase interrogativa).

Normas ortográficas a tener en cuenta

A continuación se presentan una serie de normas ortográficas a tener en cuenta a la hora de maquetar un ePub. Dada la extensión de la gramática y ortografía, solo se abordarán los aspectos más frecuentes y que generan mayores dudas. Para cualquier duda añadida, consultar la Real Academia Española (RAE).

Signos de puntuación

Signos de puntuación simples ( . , : ; ; … )

Se escriben siempre pegados a la palabra o el signo que los precede, y separados por un espacio de la palabra o el signo que los sigue.

El punto (.)

Enunciados que terminan en comillas, paréntesis o rayas de cierre, llevan siempre punto detrás. [«¡Tú y yo hemos terminado!». Tras estas palabras se marchó, dando un portazo. (¡Vaya genio que tiene!). En la calle la esperaba Emilio —un buen amigo—. Este, al verla llegar, sonrió.]

Enunciados que terminan en puntos suspensivos, signos de cierre de interrogación / exclamación no llevan nunca punto detrás. Igualmente en abreviaturas cuando coinciden dos puntos seguidos. [Quieres darte prisa? ¡Vamos a llegar tarde por tu culpa! Este libro tiene 250 pág. Mírame… —pero: «Si pudiera decirle lo que pienso realmente…». Se volvió sin decir palabra.]

Enunciados que terminan en abreviatura: nunca se escribe el punto final si coincide con el de la abreviatura para evitar escribir dos puntos seguidos. Sí se escribe en aquellas abreviaturas que no terminan en punto. [«Le avergonzaba admitir que solo había leído 2 págs. No quería decir el n.º. Pasó un mal trago».]

Nunca tras títulos y subtítulos de libros, artículos, capítulos, obras de arte, etc. y nombres de autor cuando aparecen aislados y son el único texto del renglón. [Cien años de soledad]

Los puntos suspensivos ( … )

Abreviaturas: cuando coinciden los puntos suspensivos con una abreviatura, se escriben los 4 puntos. [admón…., págs…., etc.]

Entre corchetes […] o entre paréntesis (…) los puntos suspensivos indican la supresión de una palabra o un fragmento en una cita textual. Si está al principio o final del enunciado no necesitan ponerse los corchetes o paréntesis. [«… un confesor que me confiese y […] que haga mi testamento…».]

Durante la maquetación de libros electrónicos hay que cambiar los tres puntos seguidos por su símbolo tipográfico correspondiente ( ... → … ), visualmente se muestran de forma similar ( ... vs. … ).

La coma ( , )

Nunca detrás de «pero» cuando precede a una interrogación o exclamación. [Pero ¿dónde vas a estas horas?]

El uso de la coma tras las fórmulas de saludo en cartas y documentos es un anglicismo ortográfico que debe evitarse; en español se emplean los dos puntos. [Querido amigo[,] te escribo esta carta…]

Abreviaturas: Cuando coinciden con una abreviatura, la coma se coloca a continuación del punto de la abreviatura. [admón., págs., etc.]

Signos de puntuación dobles ( ¿ ?, ¡ !, ( ), [ ], — —, « » )

Se escriben pegados a la primera y la última palabra del período que enmarcan, y separados por un espacio de las palabras que los preceden o los siguen.

Si se siguen de otros signos de puntuación (simple o doble), este va pegado al signo de apertura-cierre correspondiente. [«¡Alto! ¡No sigas!», pensó.]

Los signos de puntuación correspondientes a la frase en la que va inserto el inciso (texto entre los signos dobles), se colocan siempre después del signo de cierre del mismo. No debe colocarse ningún signo de puntuación que no fuera necesario si se suprimiera el inciso. [Sus palabras fueron: «No lo haré»; pero al final nos ayudó = Sus palabras fueron esas; pero al final nos ayudó. / ¿De verdad ha dicho «hasta nunca»?]

El texto contenido dentro del signo doble tiene su propia puntuación independiente. El punto final de enunciado se colocará siempre detrás del signo doble, independientemente de que el texto entre el signo doble abarque todo el enunciado o solo parte de este. [Le preguntó al conserje: «¿Dónde están los baños, por favor? Señor…». No le contestó.]

Excepción: Nunca se escriben seguidos los signos de cierre de interrogación o exclamación y el punto final de un enunciado (se obvia el último). [¿Alguien más lo sabría? Ester miró a su alrededor. / Pero: «¡Menudo golpe!». Marcos no reaccionaba.]

Raya, semirraya y guion

Cómo escribirlos

| Sigil (Caract. esp.) | Windows | Mac
Guion (&hyphen;) | - (teclado) | - (teclado) | - (teclado)
Raya (&mdash;) | — | Alt+0151 | opc+Shift+-
Semirraya (&ndash;) | – | Alt+0150 | opc+-
S. Menos (&minus;) | − | no hay | no hay

La raya «—» (&mdash;)

Su longitud es igual a la de la letra M. Es el más largo de todos. Indica «separación».

Usos

Intervenciones de personajes (diálogos): marca el inicio de la intervención del personaje. Va pegada a la 1.ª palabra sin espacios. [—¿Qué fue eso?]

Incisos del narrador

En los diálogos: si la intervención del personaje continúa, son dobles (apertura y cierre), en caso de no ser así, solo la de apertura. [→MAYÚSCULAS Y PUNTUACIÓN] [—¿Qué fue eso? —preguntó Beregond. Nadie le contestó. / —¿Qué fue eso? —preguntó Beregond—. ¿También tú oíste algo?]

En textos narrativos: marca una pausa mayor que las comas, pero menor que los paréntesis. Siempre es doble (apertura y cierre), aunque caiga al final de la frase.[Se publicaron varias obras —todas de su primera época—. Se esperaba a Emilio —el autor—, que al final no vino.]

En una cita entrecomillada [→COMILLAS], para indicar la autoría de la misma (siempre es doble: apertura y cierre). Si se indica fuera del entrecomillado, se utilizará la coma (,). [«Es imprescindible —señaló el ministro— reforzar los sistemas de control»; pero: «Es imprescindible reforzar los sistemas de control», señaló el ministro.]

Para reemplazar a una palabra o grupo de palabras que no se quieren repetir.

La semirraya «–» (&ndash;)

Su longitud es equivalente a la de la letra N (la 1/2 de la raya).

Es frecuente que se confunda con el signo menos, pero son dos símbolos diferentes: el signo menos (−) dependiendo de la fuente tipográfica, puede variar en altura, anchura y longitud [tiene las misma dimensiones del signo más (+)].

– − + → Si no aprecias la diferencia, utiliza Sigil en vista normal.

En español no suele utilizarse. En maquetación de ePub, se puede utilizar con la clase precapitular acompañando a una capitular, ya que la raya quedaría exageradamente larga, como se aprecia en el ejemplo.

—Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tellus nunc. Phasellus imperdiet leo metus, et gravida lacus. Donec metus ligula, elementum at pellentesque pellentesque, suscipit ac nunc.
–Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tellus nunc. Phasellus imperdiet leo metus, et gravida lacus. Donec metus ligula, elementum at pellentesque pellentesque, suscipit ac nunc.

El guion «-»

Su longitud es 1/4 parte de la raya. Indica «unión».

Para unir palabras. [científico-técnico.]

Cuando se siguen varios prefijos para una misma palabra. [intra- o extrabdominal.]

Silabeo (para separar una palabra por alguna de sus sílabas) al final de una línea. [pa- / labra.]

Signos matemáticos «− × ÷» (&minus; &times; &divide;)

Tienen la longitud, el ancho y el alto del signo «+».

+ − × ÷

El signo menos «−» (&minus;) no debe confundirse con la semirraya (&ndash;). Sirve para:

Indicar restas.

Indicar números negativos.

Comillas

Orden de empleo (« “ ‘ ’ ” »)

En los textos impresos, se recomienda usar en primer lugar las comillas angulares (« »), quedando las inglesas (“ ”) y las simples (‘ ’) en este orden para entrecomillar texto ya entrecomillado. [«Antonio me dijo: “vaya ‘cacharro’ se ha comprado Julián”».]

Durante la maquetación de libros electrónicos hay que cambiar las comillas rectas por su símbolo tipográfico correspondiente.

(" ") por (“ ”)

(' ') por (‘ ’)

Usos de las comillas

Reproducir los pensamientos de los personajes: el pensamiento va encerrado entre las comillas angulares. [«¡Hasta en latín sabía maldecir el pillastre!», pensó el padre.]

Puede sustituir a la cursiva [→CURSIVA]:

Indicando palabras impropias, vulgares. [Dijo que la comida llevaba muchas «especies». ]

Enfatizados con carácter irónico o sentido especial. [Parece que últimamente le va muy bien en sus «negocios».]

Indicando extranjerismos (en este caso se recomienda el uso de la cursiva por encima de las comillas). [En el salón han puesto una «boiserie» que les ha costado un dineral.]

En textos manuscritos (por inexistencia de la cursiva) y en titulares de prensa o páginas web (por legibilidad).

Para enmarcar la reproducción de citas textuales (actualmente se prefiere reproducir la cita en un párrafo aparte con sangrado respecto del resto del texto y generalmente en un cuerpo menor, lo que hace innecesarias las comillas). En estos casos, si se intercala un comentario del transcriptor, debe encerrarse entre rayas. [→RAYA] [Dice Rafael Lapesa a propósito de los germanos: «En el año 409 un conglomerado de pueblos germánicos atravesaba el Pirineo y caía sobre España». / «Es imprescindible —señaló el ministro— reforzar los sistemas de control».]

Cuando una cita textual se reproduce en varios párrafos, al inicio de los párrafos auxiliares se colocarán comillas de cierre (»).

Al citar títulos de partes de una publicación (el título de la obra va en cursiva): un artículo, un poema, un capítulo de un libro, un reportaje, … [Ha publicado un interesante artículo titulado «El léxico de hoy» en el libro El lenguaje en los medios de comunicación.]

En obras de carácter lingüístico, las comillas simples se utilizan para enmarcar los significados. [La voz apicultura está formada a partir de los términos latinos apis ‘abeja’ y cultura ‘cultivo, crianza’.]

Comillas y otros signos de puntuación

Ver signos de puntuación dobles.[→PUNTUACIÓN]

Mayúsculas y minúsculas

Mayúsculas [→ACENTUACIÓN]

Al inicio de un texto

La primera palabra de un texto (salvo citas que se inician con puntos suspensivos (…) o tras un número). [… y los sueños, sueños son. / 1080 recetas de cocina.]

Exigidas por la puntuación

La primera letra de la primera palabra va en mayúscula en las siguientes circunstancias.

Tras un punto (.). [Estuvieron aquí Juan, Miguel, Ana. Todos preguntaron por ti.]

Tras puntos suspensivos (…) cuando estos cierran el enunciado. [Estuvieron aquí Juan, Miguel, Ana… Todos preguntaron por ti.]

Detrás de dos puntos (:) en los siguientes casos:

Si a continuación se reproduce una cita (palabras textuales), salvo cuando se inicia con puntos suspensivos (…). [Comenzó a dar voces, diciendo: «Aquí, aquí».]

Cuando cierran los epígrafes o subtítulos de un texto. [TÍTULO I: / En este título se va a desarrollar…]

Tras el encabezado de una carta o mail. [Querido Andrés: Recibí ayer tu carta…]

Si introducen una explicación en párrafos independientes precedidos de «a continuación, siguiente, …». [La receta se elabora como se indica a continuación: / Se baten los huevos…]

Si se preceden de palabras como «ejemplo, advertencia, nota, …» cuando preceden a frases con plena independencia sintáctica y de sentido. [ADVERTENCIA: Película no apta para menores.]

En documentos administrativos o jurídicos, si se preceden de verbos como «certificar, exponer, solicitar, …» escritos enteramente en mayúsculas. [CERTIFICA: / Que…]

En relación a los signos de interrogación / exclamación:

Detrás de los signos de interrogación (?) o exclamación (!) cuando cierran un enunciado (el signo de cierre interrogante o exclamativo equivalen a un punto). [¿Cómo? Hable más alto, pero ¿Cómo?, preguntó.]

Detrás de los signos de interrogación (¿) o exclamación (¡) cuando inician un enunciado. [Se nos hizo de noche mientras bajábamos de la montaña. ¡Qué miedo pasamos!, pero Ay, ¡qué alegría tan grande verte por aquí!]

En los incisos del narrador en diálogos, tras la raya de inicio (—) cuando no son introducidos por un verbo de habla [→RAYA]. [—No se moleste. —Cerró la puerta y salió de mala gana.]

Nombres propios y expresiones denominativas

Los nombres propios (personas, lugares, entidades, instituciones, marcas comerciales, festividades, premios, distinciones científicas, periodos geológicos, …). [Luis Fernández, Ministerio de Asuntos Exteriores, Escuela de Artes y Oficios, Francia, África, paseo de Recoletos, el cinturón de Orión, Navidad, la Feria de Abril, el Premio Cervantes, el Jurásico.]

Las expresiones pluriverbales denominativas cumplen funciones análogas a las del nombre propio, llevando mayúscula en la primera palabra. Si además incluyen un nombre propio, este irá también en mayúscula. [Últimas tardes con Teresa.].

Títulos de un libro, artículo, película o pieza teatral (además van en cursiva). [Lo que el viento se llevó.]

Códigos de leyes (son subtítulos de leyes), salvo cuando se habla de ellos de forma genérica. [el Código Civil, pero los códigos civiles europeos.]

Pueden ir con mayúscula inicial (no es obligatorio) los títulos, cargos y nombres de dignidad y títulos de la nobleza referidos a una persona concreta sin mención expresa de su nombre propio (o complemento), salvo en el caso de la familia reinante en España, que va con mayúscula por razones de respeto y solemnidad. En textos religiosos, suelen escribirse con mayúscula, en señal de respeto, los pronombres personales referidos a Dios y a la Virgen [→M. EN NOMBRE COMÚN] [→MINÚSCULAS]. [Su Majestad, Su Excelencia, el Jefe del Estado; Su Santidad (pero su santidad Benedicto XVI); fue recibido por los Reyes, pero los reyes mueren igual que los esclavos; el zar Nicolás, la duquesa de Alba, pero el Rey Felipe, Don Felipe, la Infanta Doña Cristina; Tú, Ti, Sí, Vos, Él, Ella (en textos religiosos).]

Desde 2010, los cargos, nombres de dignidad y los tratamientos de cortesía van en minúscula tanto si se acompañan del nombre propio como si no, incluyendo la familia real (RAE 2010).

Un nombre común cuando tiene consideración de nombre propio (mayúscula diacrítica). Se incluyen aquí los sobrenombres o apodos que sustituyen a nombres propios o los acompañan (entre otros: los apelativos a Dios, a Jesucristo y a la Virgen [→M. EN EXPRESIONES DENOMINATIVAS] y áreas geopolíticas). [Luis el Calvo, el Manitas; la Muerte (ente antropomorfo) vs. la muerte (final de la vida); la Iglesia (institución) vs. la iglesia (edificio); el Barroco (época histórica) vs. el barroco (corriente artística); el Salvador, el Creador (Dios), la Virgen de Guadalupe; la Península (por el territorio peninsular español), el Estrecho (por el estrecho de Gibraltar), Oriente Medio, Hispanoamérica; el Nuevo Mundo (adjetivo + sustantivo), el Muro de Berlín (por el muro que separaba los sectores oriental y occidental); el Cisma de Occidente, la Primera Guerra Mundial, el Renacimiento, la Revolución francesa, el Imperio romano.]

Otras consideraciones:

Artículo previo: solo va con mayúscula inicial si forma realmente parte del nombre propio. El artículo en apodos y sobrenombres siempre va en minúscula. Como truco: si forma parte del nombre no se pueden separar por otras palabras ni se puede contraer el artículo con una preposición. [El Cairo (el extravagante El Cairo, a El Cairo) vs. el Amazonas (el caudaloso Amazonas, al Amazonas); el Magnánimo [Alfonso V] (…viendo al Magnánimo). ]

Mayúscula inicial en todos los sustantivos y adjetivos que formen parte del nombre propio.

En publicaciones periódicas, la mayúscula se aplica además a todos los sustantivos y adjetivos que formen parte del nombre (el nombre va además en cursivas). [Revista de Ideas Estéticas.]

Documentos oficiales o históricos, como leyes o decretos, cuando se cita el nombre oficial completo. [Declaración Universal de los Derechos Humanos; Ley para la Ordenación General del Sistema Educativo (pero: la ley de educación).]

Premios y galardones. La categoría se escribe con mayúscula en los grandes premios internacionales y en minúscula en el resto. Cuando se alude al objeto que representa el premio o a la persona premiada, se escribe con minúsculas (RAE 2010). [los Juegos Olímpicos, el Premio Nobel de Física, el Óscar a la mejor dirección, entrevistan al premio nobel de literatura, el director posó con su óscar.]

Genérico categorizador:

Cuando forma parte del nombre propio, lleva mayúscula inicial. [Ciudad Real; Río de la Plata; Teatro Monumental; la Academia de Bellas Artes, la Orden del Temple, Edicto de Nantes.]

Cuando no forma parte del nombre propio va en minúscula. [el río Ebro, la cordillera de los Andes, restaurante El Mesón del Abuelo, la organización de Amnistía Internacional.]

Los de origen extranjero en ocasiones conservan las mayúsculas que tienen en su idioma original (incluso aunque se traduzcan al español): en inglés, los nombres de las vías o espacios urbanos. [Oxford Street, Central Park, Quinta Avenida.]

Otros usos de las mayúsculas

En siglas y en algunos acrónimos, símbolos y abreviaturas. [→SIGLAS ET AL.] [→MINÚSCULAS]

Los números romanos, salvo cuando se usan para marcar elementos de listas. [→NÚM. ROMANOS] [→VERSALITA] [Felipe II, siglo XVII. Esta lista se compone de: i)… ii)… iii)… iv)…]

En textos pertenecientes a ámbitos particulares se escriben con mayúscula las palabras que designan conceptos de especial relevancia dentro de esos ámbitos por razones de respeto o expresivas. [las palabras Bandera o Patria en textos militares.]

Opcional, en textos cortos a destacar dentro de un escrito: se pueden escribir por completo en mayúsculas.

Carteles de aviso. [PROHIBIDO BAÑARSE.]

Títulos y divisiones internas de un libro (partes, capítulos, escenas, …), periódico o revista, etc. [periódico LA NACIÓN, sección EL TIEMPO.]

Inscripciones de monumentos y lápidas.

En textos jurídicos y administrativos: el verbo que presenta el objetivo fundamental del documento. [CERTIFICA, EXPONE, SOLICITA.]

En textos informativos: las frases que expresan el contenido fundamental del documento. [Por orden expresa de la dirección, se comunica a todos los empleados que, a partir de ahora, ESTÁ PROHIBIDO FUMAR DENTRO DE LAS DEPENDENCIAS DE LA EMPRESA.]

Minúsculas

Se escriben con minúscula inicial las palabras en las que no hay una regla que establezca la mayúscula.

Por ser motivo frecuente de equívoco, analizamos algunos puntos más en detalle, teniendo en cuenta que en casos excepcionales pasan a ser nombres propios (y por lo tanto se escribirán con mayúsculas). Se añadirán algunos ejemplos donde corresponda para mayor claridad.

Las palabras en que se descomponen las Siglas. [→MAYÚSCULAS] [SNC = sistema nervioso central, pero BCE = Banco Central Español (nombre propio de una entidad)]

Lenguas, pueblos, etnias, religiones, monedas [→CASOS ESPECIALES (SÍMBOLOS)]. [el suajili, los mayas, los pueblos indígenas, el Senado estadounidense, el judaísmo, el dolar, pero Parlamento Europeo, Gobierno Vasco (nombres propios)]

Lexicalizaciones de nombres propios (incluye los gentilicios). [unos quevedos (tipo de gafas y no solo las de Quevedo), un jeep (vehículo todoterreno, y no solo de la marca Jeep), me tomé un martini (vermú, no solo de la marca Martini), mi vecina es una auténtica celestina, su marido es un auténtico donjuán, el darwinismo, el marxismo, los madrileños, grouchesco, cervantino, la península arábiga (península de Arabia).]

Los usos metonímicos conservan la mayúscula (Metonimia: Designar algo con el nombre de otra cosa tomando el efecto por la causa o viceversa, por ejemplo el autor por sus obras). [Se compró un Picasso]

Días, meses, estaciones del año (en cualquier calendario). [septiembre, siván, safar, pero la Primavera de Praga, el Primero de Mayo (nombres propios).]

Se admite la mayúscula en Ramadán por su significación religiosa.

Disciplinas: artes, ciencias y oficios, terapias y técnicas, fármacos genéricos, … Aunque la disciplina va en minúscula, los nombres de cursos, asignaturas, licenciaturas y similares se tratan como nombres propios.[la tipografía, la artesanía, la traumatología, la fontanería, la acupuntura, la osteopatía, paracetamol, la historia, la medicina, pero el curso de Historia, licenciado en Medicina]

Títulos de autoridad, dignidad y nobiliarios cuando acompañan al nombre propio (o se siguen de complemento) o se utilizan como genérico. [→MAYÚSCULAS] [El papa, el rey, el duque están sujetos a morir, como lo está cualquier otro hombre; el duque de Osuna, la familia real, el heredero, doctor, licenciado, reverendo, usted, excelencia, (su) señoría, su santidad Benedicto XVI pero el Rey, Su Santidad, Su Excelencia, Ilmo., Dr., Lic.]

Tratamientos de cortesía, salvo cuando por tradición forman parte del nombre propio. Sus abreviaturas van con mayúscula inicial. [→ABREVIATURAS] [don, doña, fray, sor, san(to), señor pero Fray Luis (por fray Luis de León), Santa Teresa (por santa Teresa de Jesús), Ud. Sr., Fr.]

Lenguaje y escritura: tipos de documentos, nombres de las partes y divisiones de una obra u otro escrito, partes de la oración. [el informe sobre…, el presente manual, el capítulo 7, la figura 9.5, el apéndice B, el índice, el libro I, el artículo 45, la sección 12.1, el verbo, el adjetivo]

Tipos de productos comerciales, aunque vayan acompañados de la marca. [yogures Danone]

Deportes, artes marciales y los nombres genéricos de juegos. [el esquí, la fórmula 1, el kung-fu, el taichí, el ajedrez, el bingo]

Nombres descriptivos de dependencias de un edificio. [el claustro del monasterio, el altar de la catedral]

Gastronomía: ingredientes y los nombres de platos. [pimientos, agua, harina, mejillones a la marinera, ternera a la bourguignon.]

Geografía: las divisiones territoriales (políticas, judiciales, religiosas,…), salvo las alemanas, que conservan la mayúscula. [el distrito, el oblast, los Länder.]

Historia, sociedad y arte:

las épocas históricas, las corrientes artísticas y las de origen extranjero (que funcionan como adjetivos), las que se basan en el nombre de un artista o que terminan en –ismo. Excepción: las alemanas, que conservan la mayúscula. [el gótico, el cubismo, el art déco, el ars nova, el Sturm und Drang.]

Guerras, campañas, batallas, conquistas: cuando son adjetivos que aluden a países, pueblos o personas implicadas y los ordinales. Se exceptúan algunos casos en que se consideran nombres propios. [la primera guerra púnica, las guerras napoleónicas; pero: La guerra del Golfo, la guerra de Secesión, la guerra de la Independencia; excepción: la Primera Guerra Mundial, la Segunda Guerra Mundial.]

Música: las notas musicales. [→CURSIVA] [Sinfonía en si bemol.]

Casos especiales

Por el contexto

Palabras que se usan con mayúscula o minúscula según el contexto más que por su significado. Obedece en la mayoría de los casos a que se considere nombre propio vs. genérico, aunque a veces tal distinción no es fácil. A continuación se exponen algunos de estos casos.

En astronomía, palabras como Sol, Tierra, Luna: cuando se refieren a sí mismos como astros celestes, van con mayúsculas. Utilizados como genérico, con minúscula. [La Luna es el satélite de la Tierra. Hoy brilla el sol.]

Los puntos cardinales y del horizonte (Norte, Sur, Este, Oeste, Noroeste, …): se escriben con minúscula salvo cuando forman parte de un nombre propio (RAE 2010). [→SÍMBOLOS] [La brújula señala el Norte, Corea del Norte; el sur de Europa, el viento norte, latitud norte, hemisferio sur, rumbo nornoroeste.]

Para las líneas imaginarias, tanto de la esfera terrestre como celeste, se recomienda el uso de la minúscula. [ecuador, eclíptica, trópico de Cáncer.]

En religión conceptos como Paraíso, el Infierno, el Purgatorio, etc.: con mayúscula cuando se usan en su sentido religioso originario; con minúscula en usos derivados o metafóricos. [Permítenos Señor entrar en el Cielo… pero: aquella isla era un paraíso, la noche pasada fue un infierno.]

Los signos del zodiaco: con mayúscula cuando nos referimos propiamente a ellos; con minúscula cuando designan genéricamente a las personas nacidas bajo cada signo. [Libra, la Balanza, el Dragón, el Tigre; en el zodiaco, Aries es el signo que… pero Raquel es sagitario, los géminis son muy volubles.]

Textos de carácter publicitario, propagandístico y similares: el uso de las mayúsculas y minúsculas no sigue otra regla que la de llamar la atención, obviando muchas veces las reglas ortográficas.

Zoología y botánica [→CURSIVA]

Nombre científico de las especies: va con mayúscula inicial en la palabra correspondiente al género, con minúscula la especie. [Pimpinella anisum]

Nombres de los grupos taxonómicos superiores al género: con mayúscula inicial cuando se usan en aposición; con minúsculas si se usan como nombres comunes o como adjetivos. Van además en redonda. [orden Roedores, familia Leguminosas; pero: el castor es un mamífero roedor, hemos tenido una buena cosecha de leguminosas.]

Siglas, acrónimos, abreviaturas y símbolos

Definiciones

Sigla: Palabra formada por las iniciales de los términos que integran una denominación compleja. [DNI (documento nacional de identidad).]

Acrónimo: Siglas que se leen tal como se escriben o términos formado por la unión de elementos de dos o más palabras. [radar (radio detection and ranging), teleñeco (de televisión y muñeco).]

Abreviatura: Es la representación gráfica reducida de una palabra o grupo de palabras, obtenida por eliminación de algunas de las letras o sílabas de su escritura completa y que siempre se cierra con un punto. [Sr. (Señor).]

Símbolos: Son abreviaciones de carácter científico-técnico, constituidos por letras o por signos no alfabetizables. Son fijados convencionalmente por instituciones de normalización y poseen validez internacional (hay excepciones restringidas a ámbitos geográficos limitados). [W (de West), en España: O (de Oeste).]

Siglas

La primera vez que aparecen en un texto es conveniente añadir el nombre completo al que reemplaza:

Escribiendo la sigla y poniendo la traducción o equivalencia a continuación entre paréntesis. [DEA (Drug Enforcement Administration, departamento estadounidense de lucha contra las drogas).]

Escribiendo primero la traducción o equivalencia y la sigla entre paréntesis. [la Unión Nacional Africana de Zimbabue (ZANU).]

Siempre que sea posible, se adaptarán al español. [OTAN (Organización del Tratado del Atlántico Norte) y no NATO (en inglés: North Atlantic Treaty Organization).]

Excepciones

Por la amplia difusión de la sigla extranjera. [CD-ROM (Compact Disc Read-Only Memory).]

Por dificultad de hispanización.

Nombres comerciales. [IBM (International Business Machines).]

Siglas de realidades que se circunscriben a un país extranjero, sin correspondencia en el propio. [IRA (Irish Republic Army); KGB (Komitet Gosudárstvennoy Bezopásnosti).]

Ortografía

Se escriben en mayúscula todas las letras que la componen (excepto los dígrafos, en que la 2.ª letra va en minúscula: Ch, Ll). [DNI, ISO, PCCh (Partido Comunista de China).]

No llevan puntos salvo cuando el texto donde están integradas está en mayúsculas, en ningún caso llevan blancos de separación. [En este texto se habla del CSIC. / MEMORIA ANUAL DEL C.S.I.C.]

Acentuación (tilde): no llevan. [CIA (Central Intelligence Agency).]

Plural: son invariables en la escritura (se marca en la lengua oral) [ONG [oenejés] = ‘organizaciones no gubernamentales’) y no ONGs. CD y no CD’s.]

Silabeo: nunca deben dividirse con guion al final de línea (silabeo).

Tipografía

En redonda:

Derivadas de nombres propios o expresiones comunes que van en redonda. [DGT (‘Dirección General de Tráfico’)]

Las siglas que designan conceptos comunes, aun cuando estén formadas a partir de otra lengua. [TDT (‘televisión digital terrestre’), SMS (‘short message system’).]

En cursiva:

Derivadas de nombres propios o comunes que van en cursiva (como por ejemplo títulos de obras), excepto cuando se refieren a conceptos comunes. [NZfM (la publicación Neue Zeitschrift für Musik), pero CD-ROM (‘Compact Disc Read-Only Memory’).]

Acrónimos derivados de siglas

Al formar parte del léxico común, se someten a las reglas ortográficas habituales: uso de las mayúsculas, plural (-s / -es), acentuación (tilde), silabeo (se pueden dividir con guion al final de línea). [Ovni - ovnis. Rádar. Lá-/ ser.]

Mayúsculas y minúsculas

Nombres comunes: se escriben con minúsculas. [uci, ovni, sida.]

Nombres propios: forman acrónimo solo si tienen 5 o más letras. En este caso conservan la mayúscula inicial como cualquier otro nombre propio. [Unicef, Unesco (pero OTAN, ONU).]

Abreviaturas

Siempre llevan un punto detrás. Si se compone de varias palabras, el punto sigue a la abreviatura de cada una, y entre unas y otras hay un espacio. En las abreviaturas que llevan letra volada, el punto se escribe delante de la letra volada. Si acompañan a cifras, van separadas de ellas por un espacio. [Sr., Sr.ª, n.º, 3.er, b. l. m. (besa la mano), D. E. P. (Descanse en Paz), 15 págs. (páginas).]

Excepciones

En algunos casos el punto se sustituye por una barra (« / »). Si se compone de varias letras, la 2.ª no se separa de la anterior, ni lleva punto (salvo final de enunciado). [c/ (calle), c/c (cuenta corriente).]

Cuando es una abreviatura que va entre paréntesis. [Enrique (a) el Calvo = (a) - alias.]

El vuelto y recto de un folio, van pegadas al n.º. [15v.º, 15r.º.]

Las abreviaturas que se leen como letras (pasarían a comportarse como siglas y por lo tanto sin punto) (RAE 2010). [S. L. pero también SL / S. A. pero también SA.]

No admiten silabeo (no se pueden dividir mediante guion de final de línea).

Acentuación (tilde): la mantienen si incluye la vocal que la llevaba en la palabra desarrollada. [pág. (página).]

No deben quedar como único componente de una línea de texto (en ese caso hay que usar la palabra completa y no la abreviatura), ni se deben separar de la palabra / cifra de la que dependen. [Es incorrecto: Ad-/ món.; p./ ej.; 15/ págs.; Sr./ Pérez; En las librerías se venden libros, carpetas, bolígrafos, / etc.]

Mayúscula y minúscula

Según corresponda a la palabra abreviada. [EE. UU. (Estados Unidos), Bs. As. (Buenos Aires), pág. (página).]

Excepción:

Tratamientos de cortesía: siempre en mayúsculas. Los tratamientos de cortesía solo se pueden utilizar abreviados si anteceden a un nombre propio. [D., Dra., Fr., Lic., Ilmo., Sr., Sto., Ud.]

Mayúscula por tradición. [P. V. P. (precio de venta al público), D. L. (depósito legal).]

Uso indistinto. [Q. D. G. / q. D. g. (que Dios guarde).]

Abreviaturas y puntuación

Los signos de puntuación (simples o dobles) se escriben a continuación de la abreviatura, es decir tras el punto de la misma (incluyendo los puntos suspensivos, en cuyo caso habrá 4 puntos seguidos). [¿Cuántas págs.? Pasa hasta la 1.ª, luego busca donde pone EE. UU.… ]

Si el punto final del enunciado coincide con una abreviatura, solo se escribe un punto para evitar duplicarlo (por lo tanto, no aplica cuando hay letras voladas o la abreviatura es una excepción que no lleva punto). [Pasa la pág. Ve hasta la 3.ª. Luego al párrafo 5.º.]

Abreviaturas y números

No debe ponerse una cantidad escrita en numerales (palabras) seguida del concepto cuantificado escrito mediante abreviatura. [Correcto: veinte centavos / Incorrecto: veinte cts.]

Abreviatura de los ordinales: se utiliza la cifra (símbolo) seguida de letra volada (como todas las abreviaturas lleva un punto entre la cifra y la letra(s) volada(s)). [23.ª, 1.er.]

Símbolos

No llevan punto final, salvo por motivos de puntuación (final del enunciado). [cl (centilitro), N (Norte), He (helio).]

Acentuación (tilde): no llevan. [a (área), ha (hectárea).]

Plural: no se modifican. [25 km (veinticinco kilómetros), 2 C (2 carbonos).]

Mayúsculas y minúsculas

Puntos cardinales: en mayúsculas todas sus letras. [→CONTEXTO] [SE (Sureste).]

Monedas: cuando el símbolo son letras, se escriben todas en mayúsculas. [→MINÚSCULAS] [ARP (peso argentino), ECS (sucre ecuatoriano).]

Elementos químicos: con mayúscula inicial. [Hg (Mercurio).]

Unidades de medida:

Se escriben normalmente con minúscula, salvo las derivadas de nombre propio. [g (gramo), N (newton, por Isaac Newton).]

Prefijos para formar múltiplos: en mayúscula excepto los correspondientes a kilo- (k-), hecto- (h-) y deca- (da-). [M- (mega-), G- (giga-), T- (tera-).]

Prefijos utilizados para formar submúltiplos: con minúscula. [d- (deci-), c- (centi-), m- (mili-).]

Símbolos y cifras

Se posponen, separados por un espacio, incluyendo el símbolo del porcentaje (RAE 2010). [18 $, 4 km, 125 m2, 4 H, 25 %.]

Excepciones:

Se exceptúan los símbolos y números volados, que es escriben pegados a la cifra a la que acompañan. En el caso de los grados (°), en caso de explicitarse la escala, irá pegada a esta y no a la cifra. [12° pero 12 °C / 52° 2' 20" / 10⁻³.]

Monedas: en América (por influjo anglosajón), se admite que precedan a la cifra, pegados a ella. [3 £, 50 $. Pero también: £3, $50.]

No se deben separar en diferentes renglones. [Incorrecto: 5 / €.]

Símbolos frecuentes

Unidades de medida. [m, kg, lx.]

Elementos químicos. [Ag, C, Fe.]

Operaciones y conceptos matemáticos. [+, ×, ÷, %]

Monedas. [$, £, ¥, €, CLP.]

Puntos cardinales. [N, S, SE.]

Libros de la Biblia. [Gn (Génesis), Ex (Éxodo), Lv (Levítico).]

Acentuación (tilde)

La tilde es el acento gráfico u ortográfico.

Reglas generales de acentuación

Palabras agudas (sílaba final tónica): llevan tilde en la sílaba tónica cuando terminan en vocal, -n o -s (no precedida de consonante). [sofá, desván, burgalés (pero: robots, virrey).]

Palabras llanas (la sílaba tónica es la penúltima): llevan tilde en la sílaba tónica cuando terminan en consonante que no sea -n o -s (salvo que esté precedida de otra consonante). [ángel, césped, álbum, fénix, cómics, póney.]

Esdrújulas y sobresdrújulas: siempre llevan tilde en la sílaba tónica. [fábula, pelícano, déjamelo.]

Hiatos vs. diptongos y triptongos

Hiatos: las vocales se articulan en distintas sílabas. Además de las reglas generales de acentuación, llevan tilde en caso de combinarse una vocal abierta (a, e, o) y una cerrada tónica (i, u). [línea, taoísta, reír.]

Diptongos y triptongos: las vocales se articulan dentro de la misma sílaba.

Diptongo: la combinación de una vocal abierta con una cerrada (o viceversa), o de dos cerradas átonas. No se acentúan. [diario, afeitar, acuario, viento, huir, viuda.]

Triptongo: la combinación de una vocal abierta entre dos cerradas átonas. Llevan tilde siguiendo las reglas generales de acentuación (la tilde se coloca sobre la vocal abierta). [estudiáis, despreciéis, iniciéis, guau.]

Hay palabras que pueden ser tanto hiatos (bisílabas) como diptongos (monosílabas), por lo que admiten que se escriban con o sin tilde. [rio / rio; guion / guion; Sión / Sion.]

Desde 2010 no obstante se consideran monosílabos y por lo tanto no se acentúan gráficamente (RAE 2010).

Mayúsculas

Las letras mayúsculas, tanto si se trata de iniciales como si se integran en una palabra escrita enteramente en mayúsculas, deben llevar tilde si así les corresponde según las reglas de acentuación, excepto en las siglas. [Ángel, CÉSPED.]

Siglas, acrónimos, abreviaturas y símbolos [→SIGLAS ET AL.]

Siglas y símbolos: No se acentúan. [Siglas: CIA. / Símbolos: Ex (Éxodo).]

Acrónimos: Se acentúan. [Rádar.]

Abreviaturas: Se acentúan cuando la letra que lleva la tilde en la palabra original está presente en la abreviatura. [pág. (páginas).]

Palabras compuestas

Palabras compuestas sin guion: Se comportan como las palabras simples y siguen las reglas de acentuación, con independencia de cómo se acentúen gráficamente sus formantes por separado. [dieciséis (diez + seis), baloncesto (balón + cesto), vendehúmos (vende + humos).]

Palabras compuestas con guion o en varias palabras: Conservan la tilde de sus palabras individuales. [Teórico-práctico, María José, vigésimo séptimo.]

Adverbios terminados en -mente: Al tener dos sílabas tónicas, conservan la tilde del adjetivo del que derivan (si la tenía). [fácilmente (fácil), rápidamente (de rápido); pero: cordialmente (cordial), bruscamente (brusco).]

Formas verbales con pronombres enclíticos (se unen al verbo): Llevan tilde siguiendo las reglas de acentuación normales. Se aplica también a las formas del voseo. [mírame, dáselo, fíjate, oídme, salíos, reírte; pero dilo, suponlo, deles. / Voseo: decímelo, ponételo; pero decime, andate, ponelo, buscanos.]

Tilde diacrítica

Se llama tilde diacrítica al acento gráfico que permite distinguir palabras con idéntica forma, pero que pertenecen a categorías gramaticales diferentes, o para evitar anfibologías (dobles sentidos en una misma frase). [Te (pronombre), té (sustantivo: infusión). Había llegado solo para comer (solamente) / Había llegado solo para comer (en soledad).]

Demostrativos

Este/-a, ese/-a, aquel/-lla

No van acentuados salvo que exista riesgo de ambigüedad, en cuyo caso se acentuarán si funcionan como pronombres y nunca cuando funcionan como adjetivos.

No se acentúan: Eligió este (pronombre). Ese ganará (pronombre). Esas actitudes nos preocupan (adjetivo). El jarrón este siempre está estorbando (adjetivo).

Se acentúa: ¿Por qué compraron aquellos libros usados? (= esas personas, pronombre) vs. ¿Por qué compraron aquellos libros usados? (= libros, adjetivo)

NOTA: las formas neutras de los demostrativos (esto, eso y aquello) se escriben sin tilde, puesto que solo pueden funcionar como pronombres. [Eso no es cierto; No entiendo esto.]

Desde 2010 se recomienda eliminar la tilde diacrítica de los pronombres demostrativos en todos los casos (RAE 2010).

Interrogativos y exclamativos

Adónde, cómo, cuál, cuán, cuándo, cuánto, dónde, qué, quién

Se acentúan cuando tienen valor interrogativo o exclamativo, bien de forma directa (introducen la interrogación / exclamación) o de forma indirecta. [Adónde vamos? ¡Cómo te has puesto! ¡Qué suerte ha tenido! Pregúntales dónde está el ayuntamiento. No tenían qué comer. Imagínate cómo habrá crecido que no lo reconocí. Verá usted qué frío hace fuera.]

También se acentúan cuando funcionan como sustantivos. [Se propuso averiguar el cómo, el cuándo y el dónde de aquellos sucesos.]

Se escriben sin tilde cuando funcionan como relativos o como conjunciones. [El lugar adonde vamos te gustará. Quien mal anda, mal acaba. El que lo sepa que lo diga.]

Solo

No va acentuado salvo que exista riesgo de ambigüedad, en cuyo caso se acentuará si funcionan como adverbio y nunca cuando funciona como adjetivo.

No se acentúa: Solo nos llovió dos días. Contesta solo sí o no.

Se acentúa: Estaré solo un mes (adjetivo: ‘en soledad, sin compañía’) vs. Estaré solo un mes (adverbio: ‘solamente, únicamente’).

Desde 2010 se recomienda eliminar la tilde diacrítica del adverbio solo en todos los casos (si hubiera ambigüedad por le contexto se recomienda sustituir por solamente / únicamente). (RAE 2010).

Aún / aun

Aún = Todavía. [Aún (todavía) la espera. Este modelo tiene aún (todavía) más potencia.]

Aun = Hasta / también / incluso / (ni) siquiera. [Puedes quejarte y aun (hasta) negarte a venir, pero al final iremos. Ni aun (ni siquiera) de lejos se parece a su hermano.]

Aun (cuando) = Aunque (sea). [Aun cuando (aunque) no lo pidas, te lo darán. Me esmeraré, pero aun (aunque sea) así, él no quedará satisfecho.]

Otros monosílabos

de (preposición) / dé (v. dar).

el (artículo) / él (pronombre).

mas (pero) / más (adverbio, adjetivo o pronombre).

mi (posesivo) / mí (pronombre).

se (pronombre) / sé (v. ser o saber).

si (condicional) / sí (afirmación).

te (pronombre) / té (sustantivo: infusión).

tu (posesivo) / tú (pronombre).

Extranjerismos (incluyendo voces latinas) (RAE 2010)

Extranjerismos crudos: Conservan su grafía original (incluyendo los acentos gráficos correspondientes), van además en cursiva. Incluyen las locuciones latinas y latinismos crudos (en latín no hay acentos). [→CURSIVA] [disc-jockey, catering, gourmet, paddle, habeas corpus, delirium tremens, curriculum vitae, quorum.]

Extranjerismos adaptados (incluyendo los latinismos adaptados): Deben someterse a las reglas de acentuación y a la grafía del español. [béisbol (del ingl. baseball), bidé (del fr. bidet), Milán (del it. Milano), Icíar (del eusk. Itziar), pádel, delírium, currículum, cuórum.]

NOTA: Las transcripciones de palabras procedentes de lenguas que utilizan alfabetos no latinos, incluidos los nombres propios, se consideran adaptaciones.

Letra «o» entre cifras

Se acentúa para evitar confusión con el n.º 0 (cero). [1 ó 2 vs. 102.]

Desde 2010 se elimina la tilde en este caso al considerarse que no hay posibilidad de confusión. (RAE 2010) [1 o 2.]

Números, cifras y ordinales

Numerales (palabras)

Cardinales

Expresan cantidad (el cero, que expresa ausencia de cantidad). Se incluyen: Millar, millón, millardo, billón, trillón, cuatrillón, … [He leído cinco libros este verano. Tráeme dos. Has escrito un nueve un poco raro. El número premiado es el mil trescientos veintidós.]

Ordinales

Indican el lugar que ocupa el elemento al que se refieren dentro de una serie ordenada. [Vivo en el primer piso; Acabo de terminar el capítulo segundo de mi nueva novela. He llegado la cuarta en la prueba de natación. Primero ordena tu habitación.]

Las cifras (símbolos)

Numeración arábiga (0-9)

La parte entera se agrupan de 3 en 3 empezando por la derecha, separados por un espacio en blanco para facilitar su lectura (se suprime el espacio en documentos contables en los que la separación arriesgue la seguridad). La parte decimal se separa mediante una coma (normativa internacional), aunque se admite el uso anglosajón del punto extendido en algunos países latinoamericanos. [8 327 451 (incorrecto: 8.327.451 ó 8,327,451). El valor de π es 3,1416 (3.1416).]

No llevan blanco de separación los números referidos a años, páginas, versos, portales de vías urbanas, códigos postales, apartados de correos, números de artículos legales, decretos o leyes. [año 2001, página 3142, código postal 28357.]

Debe ir todo el número en la misma línea. [Incorrecto: 8 327 / 451.]

No deben separarse en distintas líneas de la abreviatura o símbolo al que acompañan. [Es incorrecto: Madrid dista 40 / km de Guadalajara. Mañana se alcanzarán los 35 / °C. Tiene 45 / págs.]

Uso abreviado:

Podrán mezclarse cifras y numerales (números y letras) al usar sustantivos como millón, millardo, billón, … (para ello al menos las 3 cifras finales deben ser 000). Este método abreviado no es válido para las cantidades en miles (adjetivo). [3,6 billones, 2 cuatrillones.]

Ordinales: se utilizan cifras seguidas de letras voladas. Como corresponde a las abreviaturas, se escribirá punto entre la cifra y la letra volada. [1.º, 3.er]

Numeración romana (I, V, X, L, C, D, M)

Deben utilizarse solo letras con forma mayúscula. Cuando se refieran a sustantivos escritos en minúscula, se recomienda escribirlos en versalitas, y en versales cuando van solos o se refieren a sustantivos escritos con inicial mayúscula. [siglo V, páginas XIX-XXIII, Alfonso X, II Congreso Internacional.]

Cuando los números romanos se usan con valor ordinal, no deben acompañarse de letras voladas. [Incorrecto: II.ª Guerra Mundial.]

No debe repetirse hoy más de tres veces consecutivas una misma letra.

¿Qué usar? ¿Cifras o numerales?

La elección de cifras o de palabras en la escritura de los números depende de varios factores: el tipo de texto de que se trate, la complejidad del número que se deba expresar y el contexto de uso.

Numerales

En obras literarias y textos de carácter general, es preferible y más elegante el uso de numerales (salvo que se trate de números muy complejos, que exigen el empleo de 4 o más palabras en su escritura).

No es recomendable mezclar en un mismo enunciado números y letras (por lo que si hay números complejos, en ese caso se aconseja usar cifras para todos). [En la Biblioteca de Palacio hay 35 manuscritos y 135 226 volúmenes impresos, 134 de ellos incunables.]

Los números que forman parte de frases hechas van siempre en numeral. [Es el número uno. Éramos cuatro gatos en la fiesta. Te da lo mismo ocho que ochenta. A mí me pasa tres cuartos de lo mismo.]

Cifras

Numeración arábiga

En textos científicos y técnicos, generalmente se prefiere las cifras por su concisión y claridad. Obligado si el manejo de números es constante y constituye la parte fundamental de lo escrito.

En carteles, etiquetas, titulares periodísticos y textos publicitarios, se prefieren las cifras por concisión y claridad.

Los números que exigirían el empleo de cuatro o más palabras en su escritura con letras. [En verano la población asciende a 32 423 habitantes (más claro y de comprensión más rápida que treinta y dos mil cuatrocientos veintitrés).]

Los números formados por una parte entera y una decimal. [El índice de natalidad es de 1,5.]

Los números que acompañan a abreviaturas o signos (por ejemplo unidades de medida). Si se desarrolla la abreviatura o signo, se escribe la cantidad en numeral. [Tiene 15 págs. pero Tiene quince páginas. / Está a 20 km pero Está a veinte kilómetros.]

Los porcentajes superiores a diez no se suelen escribir en numeral. [Votó un cinco por ciento de la población, pero: Votó un 84 % de la población.]

Los números pospuestos al sustantivo al que se refieren usados para identificar un elemento concreto dentro de una serie. [número 37 (o núm. 37), tabla 7, gráfico 9.]

Numeración romana: siempre con valor ordinal.

Antepuestos al nombre: Dinastías (también se admite el ordinal arábigo); denominación de congresos, campeonatos, certámenes, festivales, … (se admite también el ordinal arábigo, sobre todo si la numeración es excesivamente compleja). [los faraones de la XVIII dinastía / la 18.ª dinastía. XXIII Feria del Libro de Buenos Aires pero 78.º Campeonato Mundial de Ajedrez.]

Pospuestos al nombre: Siglos; nombres propios de papas, reyes y emperadores; en divisiones de obras literarias o teatrales (se admite también el ordinal arábigo); en secciones preliminares de una obra para diferenciarlas del cuerpo central (prólogo, introducción, …). [siglo XXI. Juan XXIII, Napoleón III, Felipe IV. El tomo III vs. tomo 3.º vs. 3er tomo. El autor cita a Cervantes en la página XVII del prólogo.]

Otros: Indicar los años (en monumentos o lápidas conmemorativas); representar el mes (en la expresión abreviada de las fechas).

Prefijos (RAE 2010)

Soldados a la base

Cuando la base es univerbal y comienza por minúscula. [antiadherente, cuasidelito, exalcohólico, exnovio, prepago, posventa, provida, probritánico, vicealcalde, supermodelo, superbién; requetesuperguapo, antiposmodernista. Incorrectos: anti-cancerígeno / anti mafia.]

Separados de la base

Separados por guion

Cuando la base es univerbal y empieza con mayúscula (sigla o nombre propio). [mini-USB, pos-Gorbachov, pro-Obama.]

Cuando la base es una cifra. [sub-21, super-8.]

Separados por espacio

Cuando la base es pluriverbal (constituida por varias palabras). [anti pena de muerte, pro derechos humanos, pre Segunda Guerra Mundial, super en forma, vice primer ministro, ex relaciones públicas, ex cabeza rapada, ex número uno.]

Prefijos coordinados (varios prefijos y una misma base)

Base univerbal: se les añaden guiones salvo al último si no le corresponde. [anti- y proalemán; anti- y pro-Bush.]

Base pluriverbal: se deja un espacio en blanco. [anti y pro George Bush.]

Índice temático

Si tienes dudas, nosotros tenemos las preguntas.

Sobre el escaneado

¿Cómo se escanea? >>

¿Cuál es la mejor configuración del escáner? >>

¿Cómo arreglo las imágenes del escáner cuando no han salido muy bien? >>

Sobre Sigil

¿Hay alguna forma de que se dividan los capítulos de mi libro donde yo diga de forma automática? >>

¿Cómo se corrige la ortografía con Sigil? >>

¿Cómo se valida el libro con FlightCrew? >>

¿Cómo se usan los informes de Sigil? >>

¿Qué son las busquedas guardadas de Sigil y qué tienen que ver con las RegEx? >>

¿Hay una forma rápida de borrar los archivos no usados? >>

¿Se pueden borrar las clases sin usar, cómo se hace? >>

¿Qué es el histórico del portapapeles, cómo se usa? >>

¿Qué son los fragmentos de Sigil, cómo se usan? >>

¿Qué son los plugins de Sigil, cómo se usan? >>

Sobre la corrección del libro

¿Cuándo debo usar las cursivas? >>

¿Cuándo debo usar las negritas? >>

¿Cuándo debo usar la letra «redonda», es decir, la normal? >>

¿Cuándo debo usar las versalitas? >>

¿Cuándo debo usar las versales? >>

¿Cómo represento los diálogos? >>

¿Cómo represento los diálogos interiores, cuando los personajes piensan? >>

¿Cuál es la forma correcta de usar los signos de puntuación? >>

¿Cuántas clases de rayas y guiones hay? >>

¿Cuándo se usa la raya? >>

¿Cuándo se usa la semiraya? >>

¿Cómo se usa correctamente la tilde? >>

¿Cómo se representan correctamente los números? >>

¿Cómo se usan correctamente los prefijos? >>

¿Cuándo se usa el guion? >>

¿Cuándo se usa el signo menos? >>

¿Cuál es la forma correcta de usar las comillas? >>

¿Cuál es la forma correcta de usar las mayúsculas? >>

¿Cuál es la forma correcta de usar las minúsculas? >>

¿Cómo se representan correctamente las siglas? >>

¿Cómo se representan correctamente los acrónimos? >>

¿Cómo se representan correctamente las abreviaturas? >>

¿Cómo se representan correctamente los símbolos? >>

Sobre las RegEx

¿Dónde están las búsquedas guardadas? >>

¿Cómo se usan las búsquedas guardadas? >>

¿Puedo añadir o borrar búsquedas guardadas? >>

¿Dónde puedo aprender a diseñar mis propias RegEx? >>

Sobre las notas

¿Qué métodos hay para representar las notas a pie de página? >>

¿Cómo se usa UltraEdit para crear el código de las notas? >>

¿Cómo se usan las RegEX para crear el código de las notas? >>

¿Cómo se usa una hoja de cálculo para crear el código de las notas? >>

¿Cómo se usa Notepad+Python para crear el código de las notas? >>

¿Cómo se usa la herramienta fragmentos de Sigil para crear el código de las notas? >>

Agradecimientos (Ed. 2018)

Quisiera dar las gracias a barbanegra y Rusli por tomarse la molestia de revisar la documentación existente y organizar las pruebas para el nuevo ePub Base, sin cuya actualización este nuevo manual no hubiera sido posible (o hubiera sido totalmente diferente). Y especialmente a Horus, por redactar el manual sobre las etiquetas HTML.

También agradecer a Sagitario y Sedna su intensa revisión de todo el manual, a la búsqueda de aquellas cosas ya obsoletas o incompatibles con el nuevo estándar, actualizando etiquetas, eliminando estilos no usados y renovando algunas imágenes.

Y, como siempre, a todos aquellos que han colaborado en las pruebas del ePub Base, el ePLValidator y demás herramientas en el foro, o bien reportando erratas y errores del propio manual. Sin vuestra ayuda, esto no hubiera sido posible.

Muchas gracias a todos los que con vuestro tiempo e ilusión hacéis posible este Proyecto. Espero que podamos seguir compartiendo nuestra afición por muchos años y veamos muchas y mejoradas revisiones de todas las herramientas EPL.

Más libros, más libres.

Fénix

Agradecimientos (Ed. 2015)

Este manual ha sido elaborado por y para la comunidad del Proyecto Scriptorium, y no habría sido posible sin la colaboración desinteresada de muchas personas, algunas de las cuales paso a nombrar. No están todas las que son, pero son todas las que están. Espero que aquellas que inadvertidamente he omitido, me perdonen por ello.

Para empezar, quisiera dar las gracias a TaliZorah, por organizarlo cuando yo no tenía tiempo para ello, y a Mowgli, Cthulhu e Insaciable, por su colaboración inicial. A Sedna por su incansable búsqueda de códigos CSS para una maquetación avanzada. A gertdelpozo y a los demás integrantes del equipo gráfico, por los apartados de portadas y edición de imágenes. A emiferro, Horus, triangulín y Áuryn, por encargarse entre todos de darle forma. A Trujano, por su breve pero intensa colaboración a la hora de redactar los apartados que no quería nadie. A barbanegra, por tomarse la molestia de revisar y unificar el desaguisado que habíamos montado entre todos. Y finalmente, a aquellos colaboradores que han preferido permanecer en el anonimato, y que espero sigan colaborando en futuras revisiones.

Asimismo, quisiera agradecer también a todos aquellos que con sus consejos y manuales en el foro, y su deseo de mejorar continuamente las herramientas existentes, han ayudado a mejorar la calidad de la biblioteca e, inadvertidamente, también la del presente manual. Y muy especialmente a los encargados de crear y mantener dichas herramientas: Carlos., Jugaor, betatron, Tarloth, Mcphist y capitancebolleta.

Por último, pero no por ello menos importante, me gustaría nombrar a Werth, cuyo manual inicial, en una página ya desaparecida, fue la semilla que sirvió de base para crear la excelente herramienta para la maquetación que tienes ahora entre tus manos.

Muchas gracias a todos los que con vuestro tiempo e ilusión hacéis posible este Proyecto. Espero que podamos seguir compartiendo nuestra afición por muchos años y veamos muchas y mejoradas revisiones de todas las herramientas EPL.

Más libros, más libres.

Fénix

PROYECTO SCRIPTORIUM (23 de abril de 2013).

El Proyecto Scriptorium surgió cuando un grupo de editores fueron expulsados de la página en la que se encontraban por protestar por los cambios que, tras la venta de la página, se realizaron sin consultarles. Cambios que incluían la implantación de malware en las descargas, lucro (para los nuevos dueños) y censura.

Por ese motivo, en octubre de 2012 se creó un foro de emergencia (conocido como el «tk», ya que esa era su extensión), para tratar de seguir con su hobby, la maquetación de libros electrónicos, y para buscar una forma de ponerlos a disposición de todo el mundo de forma libre y gratuita.

El 23 de abril de 2013, tras 7 meses de gestación y coincidiendo con la celebración del día del libro, el escaparate del proyecto, la web epublibre.org, abrió sus puertas.

En el tiempo transcurrido, ha habido gente que se ha distanciado del proyecto, y otros nuevos han llegado para ocupar su lugar, convirtiéndose en algo dinámico y vivo, y que esperamos permanezca mucho tiempo, bajo la forma que sea, como un faro de referencia a nivel cultural y de calidad en las maquetaciones.

Más libros, más libres.