Apuntes mientras aprendo sobre software y computadoras.

Computación

Programar con LibreOffice: Macros, ideas de automatización y consejos prácticos

Cómo establecer objetivos de palabras usando Macros y LibreOffice Basic

Seguramente en algún momento tuviste que escribir una determinada cantidad de palabras. Tal vez por un trabajo, por cuestiones de estudio o porque te encontrás escribiendo un proyecto personal.

Por completar este ejemplo, digamos que necesitamos escribir 20.000 palabras.

Una cosa que podemos hacer es revisar de tanto en tanto el contador debajo de Libreoffice Writter para ver si estamos cerca del objetivo. O también podemos crear un macro que nos permita averiguar esa información simplemente apretando un atajo en el teclado.

La idea es tener un código que nos informe del porcentaje total de palabras que completamos al momento de invocar el macro.

El código

El siguiente código es muy sencillo, y hace exactamente lo que estoy buscando:

REM  *****  BASIC  *****
REM Macro para dar el porcentaje completado en palabras de un OBJETIVO_TOTAL.

Sub contador_objetivo()
    Const OBJETIVO_TOTAL As Long = 20000
    Dim doc As Object
    Dim wordCount As Long
    Dim porcentaje As Long

    doc = ThisComponent
    wordCount = doc.WordCount
    porcentaje = (wordCount / OBJETIVO_TOTAL) * 100

    MsgBox ("Ya hiciste el " & porcentaje & "% (" & wordCount & " palabras) de un total de " & OBJETIVO_TOTAL & " palabras.")

End Sub

La explicación:

La mayor parte del código se encarga de establecer las variables.

De todo, creo que lo más importante es esto:

Const OBJETIVO_TOTAL As Long = 20000

Donde se puede reemplazar “20.000” por la cantidad de palabras que se necesitan completar.

Y también esto otro:

MsgBox ("Ya hiciste el " & porcentaje & "% (" & wordCount & " palabras) de un total de " & OBJETIVO_TOTAL & " palabras.")

Ya que es lo que muestra el mensaje con el porciento terminado cuando invocamos el programa.

¿Cómo utilizar el macro?

Para ponerlo en funcionamiento es necesario:

1) Añadir el macro. Esto puede conseguirse en “Herramientas > Macros > Organizar Macros > Basic”

2) Asignarle un nuevo atajo al macro. Para esto voy a “Herramientas > Personalizar” y luego agregar la combinación de teclas en la pestaña “teclado”.

Macro para contar palabras bajo cada cabecera en LibreOffice Writer

Digamos que tenemos que escribir un proyecto con un total de 20.000 palabras. Escribir todas esas palabras es difícil, en especial cuando lo comparamos con escribir solamente 1.000 palabras.

Entonces decidimos dividir el texto en 20 secciones, para que se vuelva más fácil de completar. Creamos diferentes títulos, cabeceras o “headings” (H1, H2…) y podemos navegar entre esos headings. Pero en un principio no podemos saber cuantas palabras agregamos luego en cada uno.

Este macro que comparto a continuación, escrito en LibreOffice Basic, nos va a ayudar exactamente a eso.

La idea es tener un código que revise todo el texto y encuentre las cabeceras. Luego tiene que informarnos del nombre de la cabecera y su cantidad de palabras. Al final tiene que decirnos la cantidad total de palabras, aunque eso ya lo conocemos del contador dentro del documento.

El código:

Sub ContarPalabrasHeadings()
    Dim doc As Object
    Dim cursor As Object
    Dim para As Object
    Dim wordCount As Long
    Dim totalWordCount As Long
    Dim headingFound As Boolean
    Dim result As String

    doc = ThisComponent
    text = doc.getText()
    cursor = text.createEnumeration()

    headingFound = False
    result = ""
    wordCount = 0
    totalWordCount = 0

    While cursor.hasMoreElements()
        para = cursor.nextElement()

        If Left(para.ParaStyleName, 7) = "Heading" Then
            If headingFound Then
                ' Crea un string para reflejar el número de palabras entre cabeceras
                result = result & headingText & ": " & wordCount & " palabras" & Chr(10)
            End If
            
            headingText = para.getString()
            headingFound = True
            wordCount = 0
        Else
            If headingFound Then
                ' Contar el número de palabras entre cabeceras
                trimmedText = Trim(para.getString())
				wordsArray = Split(trimmedText, " ")
                wordCount = wordCount + UBound(wordsArray) + 1
                totalWordCount = totalWordCount + UBound(wordsArray)
            End If
        End If
    Wend

    ' Actualiza la variable result con el número de palabras
    If headingFound Then
        result = result & headingText & ": " & wordCount & " palabras" & Chr(10)
    End If

    If result = "" Then
        MsgBox "No se encontraron cabeceras en el documento"
    Else
        MsgBox result & Chr(10) & "Total de palabras: " & totalWordCount
    End If

End Sub

Posibles mejoras:

Se me ocurren en este momento dos mejoras que se le pueden agregar al programa:

1- Una forma de contar las palabras debajo de cada heading de forma más precisa. En la forma que se encuentra implementado, encontré que a veces el conteo por secciones puede tener algunas palabras de más o de menos con el conteo total. Nada exagerado de todas maneras, el programa sirve para conseguir una buena idea general de cuanto llevamos avanzado.

2- Se puede modificar el programa para que también nos informe que tipo de cabecera es cada una, H1, H2…

Pero el programa cumple con lo que promete sin necesidad de esas mejoras.

Consejos prácticos para usar en LibreOffice

¿Cómo puedo instalar nuevas tipografías en LibreOffice?

No es necesario instalar tipografías para LibreOffice, lo que hacemos es instalar tipografías a nivel del sistema.

Al instalarla en el sistema operativo, otros programas también pueden aprovecharlas. Una tipografía instalada en el sistema puede usarla LibreOffice, GIMP y otros programas.

En cada sistema operativo la instalación de nuevas fuentes puede variar ligeramente. Lo que es seguro es que por un lado vos descargás, creas o recibí la tipografía para agregar.

Luego buscá en el directorio de raíz la carpeta /usr/share/fonts y dejá el archivo ahi, para que no se pierda.

Acto seguido, dale doble click al archivo de la tipografía (puede ser de extensión .otf o .ttf por ejemplo) y luego dale click a instalar.

Con eso tendrías que tener la tipografía instalada y ubicada en el directorio correcto.

¿Cómo puedo usar la tipografía Times New Roman en LibreOffice en Linux?

Si tuviera que apostar, diría que esta es una de las preguntas más comunes cuando instalamos LibreOffice por primera vez.

Respuesta corta: No vas a encontrar la tipografía Times New Roman en LibreOffice, porque esa tipografía tiene un tipo de licencia que no permite su uso libre.

Lo mejor va a ser que uses una tipografía equivalente, por ejemplo Liberation Serif que si viene lista para usar. Puede servirte como un buen reemplazo y vas a evitarte vueltas.

Respuesta larga: Es posible usar la tipografía Times New Roman en GNU/Linux. Así podes hacerlo en algunas distribuciones, por ejemplo Ubuntu y Linux Mint. Los pasos son los siguientes:

Por medio de la linea de comandos: Descargá el siguiente conjunto de paquetes,

sudo apt-get install ttf-mscorefonts-installer

Y ahora dale aceptar a la licencia de acuerdo. Bueno, lee primero la licencia y dale aceptar.

¿Cómo darle aceptar? Si, yo tampoco supe en un primer momento. Presiona la tecla Tab y va a posicionarte sobre Aceptar.

Lo mejor ahora es reiniciar el equipo, aunque idealmente las tipografías fueron instaladas y ya están disponibles.

Cuando abras un nuevo programa y vayas a escribir, ya van a estar instaladas.

Por supuesto podes revertir la instalación con el comando:

sudo apt-get purge ttf-mscorefonts-installer

Instalar por medio de un instalador gráfico: La otra manera de instalar Times New Roman en GNU/Linux es utilizando el Software Manager. O Ubuntu Software, el nombre puede variar.

El objetivo es: buscar el paquete ttf-mscorefonts-intaller e instalarlo.

Listo, eso también tiene que conseguirte Times New Roman y otras tipografías que estas buscando. Por ejemplo Arial Black, Arial, Courier New y otras.

Pero en resumen… darle una oportunidad a las tipografías que ya trae el sistema GNU/Linux (u otras de licencias similares) no es mala idea. A menos que sea por algún tipo de obligación laboral/universitaria, en ese caso, ya sabes como conseguirlas.

¿mo quitar las cabeceras en LibreOffice?

El modo de remover las cabeceras personalizadas es muy sencillo, solo hay que encontrar el menu correcto. Dirigite hacia:

Formato > Estilo de página > Cabecera

Y desmarcá la opción “Activar Cabecera”.

Como es de esperar, en el mismo menú también vas a poder modificar sus parámetros.

¿Cómo puedo activar los backups automáticos en LibreOffice?

Para activar la opción de realizar respaldos automáticos del documento en que te encontrás trabajando, podes dirigirte al menú:

Herramientas > Opciones… > Cargar/guardar > General

Allí podes activar y modificar opciones como la de guardar datos de recuperación automática en intervalos de tiempo, y también la opción de Crear Copia de seguridad.

¿Cómo eliminar una página en blanco en Writer?

Digamos que terminaste el texto, pero sobra una página en blanco al final.

Poné el cursor al principio de esa hoja en blanco, y empezá a borrar. Si, borrar, con la tecla backspace del mismo modo que lo harías con el texto.

Eso tendría que eliminar la última página vacía en el documento.

Dicho de otra forma, lo que estamos haciendo es “eliminar” todo el espacio libre bajo el texto que termina el documento.

¿Cómo puedo recuperar un archivo que se borró accidentalmente?

Entre las preguntas de LibreOffice, esta realmente no tiene solución sencilla.

En un caso difícil, donde no hay ningún tipo de respaldo del archivo, la única solución posible sea tal vez usar algún tipo de programa al estilo Testdisk.

Ahora, en el caso de que tengas activadas copias de seguridad o guardados automáticos, busca en los directorios donde puedan haberse guardado.

Podes conocer esos directorios si revisás dentro de LibreOffice en el menú:

Herramientas > Opciones… > LibreOffice > Rutas > Copias de seguridad

O también en:

Herramientas > Opciones… > LibreOffice > Rutas > Archivos temporales

En esos dos lugares vas a averiguar sobre posibles espacios donde pudo guardarse una copia extra de tu documento perdido.

Si hay archivos de respaldo guardados, seguramente tengan la extensión .bak, por backup. Abrilo y guardalo con otro nombre.

Vale aclarar que tus chances de recuperar el documento aumentan cuanto más cerca a la fecha en que fue borrado comiences a buscarlo.

¿Cómo puedo insertar una página en el medio de un documento de Writer?

Para agregar una nueva página en el documento, posicioná el cursor al final o al principio de la página actual según donde sea que necesitas la nueva pagina.

Luego presiona el atajo Ctrl+Enter y con eso vas a agregar la nueva hoja.

También podes hacerlo desde el menú:

Insertar > Salto de página

O también desde:

Insertar > Más saltos > Salto manual