Al final del presente artículo encontrará un script de shell que convierte e instala fuentes TTF, OTF o Type1 para ser usadas con Groff, cuya instalación por defecto no trae muchas opciones. Para realizar la conversión usa FontForge.
Mis tres novelas están totalmente editadas con GNU roff, incluyendo gráficos y portadas.
Usé roff básico, escribí mis propios macros, los que he ido perfeccionando a lo largo de los años. Por ejemplo, éste es el fichero tmac (t-mac: troff macro) que diseñé para dar formato a mis novelas, aquí se aprecia el resultado. También escribí un script de shell para convertir mi fichero roff a HTML, éste es el resultado. Aprovecho para hacer un comentario al margen: habra notado que no hay gran diferencia de calidad entre el PDF y el HTML. Sorprende lo que se puede lograr con sólo HTML y estilos en cascada, ¿no? Lo que lleva a uno a preguntarse ¿cuál es la la razón de ser de los formatos ebook?, además de su obvia inferior calidad de formato son incómodos de navegar, más pesados y exigen un software exclusivo para poder ser leídos y editados (sin mencionar los de código cerrado, que complican aún más el trámite).
Volviendo al tema de Groff. No soy necesariamente un esteta, pero últimamente, aburrido de la fuente Times, que viene por defecto con groff, quise probar la EBGaramond de Georg Duffner, que a mi parecer es más adecuada para una novela, y lo que es más importante, al ser más redonda y no tener los trazos verticales demasiado reforzados, como es el caso de la Times, disimula mejor los huecos en el justificado del texto.
Buscando en la web cómo convertir e instalar fuentes en Groff encontré tres scripts de shell. El primero de Peter Schaffter (creador de los macros mom), que viene con una detallada explicación. Un segundo que es un comprensible intento de simplificar el script de Schaffter y un tercero del cual no incluyo enlace dado que no vale la pena molestarse en leerlo. De toda esta información destilé lo que a mí al menos me resultó efectivo y volqué en mi propio script de shell, que pego abajo.
#!/bin/sh # groff-install-font.sh - (c) 2023 Walter Alejandro Iglesias # # Convert and install OTF, TTF or PFA font to use it with Groff. You need # fontforge installed. # Directory where you want the font installed (a custom path needs to # be added to GROFF_FONT_PATH). To install the font in the default # system wide groff location just leave this empty (you'll need to run # this script as root in this case). sitefont=$XDG_DATA_HOME/groff/site-font prefix=/usr/local/share/groff if [ "`uname`" = "Linux" ]; then prefix=/usr/share/groff fi if [ "$sitefont" = "" ]; then sitefont=$prefix/site-font if [ "`whoami`" != "root" ]; then echo "You must be root to install the font in $sitefont" exit 1 fi elif [ ! -d $sitefont/devps ] || [ ! -d $sitefont/devpdf ]; then mkdir -p $sitefont/dev{ps,pdf} fi if ! echo $1 | grep -E '.*(R|I|B|BI)+$' || ! echo $2 | grep -E '\.(otf|ttf|pfb)$'; then echo "Usage: `basename $0` <groffname> <fontfile>.(otf|ttf|pfb)" echo " groffname must be <name>(R|I|B|BI)" exit 1 fi which fontforge >/dev/null 2>&1 || { echo "This script uses fontforge to convert fonts" exit 1 } textmap=$prefix/current/font/devps/generate/textmap enc=$prefix/current/font/devps/text.enc groffname=$1 font=$2 name=`basename "$font" | sed -E 's/\.(otf|ttf|pfb)$//'` fontforge -lang=ff -c "Open(\"$font\");Generate(\"$name.pfa\");" fontforge -lang=ff -c "Open(\"$font\");Generate(\"$name.t42\");" afmtodit -e $enc $name.afm $textmap $groffname if ! grep -q '^ligatures' $groffname ; then sed -i '/kernpairs/i\ ligatures fi fl 0\ \ ' $groffname fi mv $name.t42 $groffname $sitefont/devps mv $name.pfa $sitefont/devpdf rm $name.afm ln -s $sitefont/devps/$groffname $sitefont/devpdf/$groffname printf "$name\t$name.t42\n" >> $sitefont/devps/download printf "\t$name\t$name.pfa\n" >> $sitefont/devpdf/download # End of groff-install-font.sh