Script de shell (mi versión, hay otras) para convertir e instalar fuentes TTF, OTF o Type1 para ser usadas con Groff. Para realizar la conversión usa fontforge
Mis tres novelas están totalmente editadas con GNU roff, incluyendo gráficos y portadas.
Use roff plano, escribí mis propios macros, los que he ido perfeccionando a lo largo de los años. Como ejemplo este es el fichero tmac que hice para formatear mis novelas. (También escribí un script de shell para convertir mi fichero roff a HTML, ya vio el resultado).
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