Received:
by LISTSERV.REDIRIS.ES (LISTSERV-TCP/IP release 17.0) with spool id
6164550 for [log in para visualizar]; Thu, 28 Jul 2022 14:09:38
+0200
from mx01.puc.rediris.es (outbound4mad.lav.puc.rediris.es
[130.206.19.145]) by listserv.backend.rediris.es (Postfix) with ESMTP
id 778E6243C0B for < [log in para visualizar]>; Thu, 28 Jul 2022
14:09:38 +0200 (CEST)
from mout01.posteo.de (mout01.posteo.de [185.67.36.65]) by
mx01.puc.rediris.es with ESMTP id 26SC9bZW015632-26SC9bZY015632
(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO)
for < [log in para visualizar]>; Thu, 28 Jul 2022 14:09:37 +0200
from submission (posteo.de [185.67.36.169]) by mout01.posteo.de
(Postfix) with ESMTPS id ADE7124002E for
< [log in para visualizar]>; Thu, 28 Jul 2022 14:09:36 +0200 (CEST)
from customer (localhost [127.0.0.1]) by submission (posteo.de) with
ESMTPSA id 4LtqFr1smqz6tmG for < [log in para visualizar]>; Thu, 28
Jul 2022 14:09:36 +0200 (CEST)
Content-Type:
text/plain; charset=utf-8
X-FE-Policy-ID:
21:3:1:listserv.rediris.es
Date:
Thu, 28 Jul 2022 12:09:33 +0000
MIME-Version:
1.0
X-FEAS-DKIM:
Valid
Content-Transfer-Encoding:
quoted-printable
|
Juan Luis Varona Malumbres <[log in para visualizar]> escribió:
> ¡Qué chulo, Juan Manuel, gracias por contárnoslo!
¡Gracias, Juan Luis! Me alegro de que te parezca interesante.
Por cierto, al hilo de lo que comentaba en mi anterior correo, he
encontrado una forma rápida, casera y sencilla con Lua y el callback
post_linebreak_filter para reemplazar las ocurrencias de un determinado
carácter en el texto de forma aleatoria a partir de una lista de
candidatos. Además, si cada candidato está en una 'box', podemos meter
ahí cualquier código LaTeX arbitrario. Lo describo rápido por si lo
queréis probar. Creo que con esto se podrían añadir "imperfecciones"
aleatorias para distintas letras de un texto, independientemente de la
fuente usada.
Para esta prueba vamos a reemplazar cualquier ocurrencia de la letra "a"
aleatoriamente por un elemento de una lista de tres elementos. Cargamos
primero los paquetes necesarios (sólo es imprescindible 'luacode').
8<----------------------------
\documentclass{article}
\usepackage{luacode}
\usepackage{pgffor} % esto es para repetir texto
\usepackage{xcolor}
--------------------------->8
Y ahora definimos tres cajas para los tres elementos de nuestra lista de
candidatos. Cada candidato es una letra en un color distinto.
8<------------------------------------------
\newbox\caja
\newbox\cajabis
\newbox\cajatris
\setbox\caja=\hbox{{\color{red}y}}
\setbox\cajabis=\hbox{{\color{blue}x}}
\setbox\cajatris=\hbox{{\color{green}w}}
------------------------------------------>8
Y aquí el código Lua, que va comentado dentro. Para la función que reemplaza
la "a" necesitamos saber el "codepoint" de esta letra (97). Los usuarios
de Emacs pueden averiguarlo rápidamente situando el cursor sobre una "a"
y llamando a la función 'describe-char'. El codepoint sale en la segunda
línea de la descripción.
8<--------------------------------------------------------------
\begin{luacode}
-- Esta variable es una tabla de tres elementos, que llamará a cada caja.
vars = {tex.box.caja,tex.box.cajabis,tex.box.cajatris}
-- Por comodidad, definimos también esta función para picotear un elemento
-- aleatorio de la lista anterior. Su argumento es una lista:
function aleatorio (x)
z = x[ math.random( #x ) ]
return z
end
-- Esta función elimina la `a' y coloca en su lugar, aleatoriamente, una
-- de las cajas de nuestra lista de candidatos
function reemplaza_aleatoriamente(h,c)
for n in node.traverse_id(0,h) do
for x in node.traverse_id(node.id("glyph"),n.head) do
if x.char==97 then
local antes, despues = node.copy(w), node.copy(z)
n.head = node.insert_after(n.head,x,node.copy(aleatorio(vars)))
n.head = node.remove(n.head,x)
end
end
end
return h
end
-- Y, finalmente, registramos la función en el callback 'post_linebreak_filter'
luatexbase.add_to_callback("post_linebreak_filter",reemplaza_aleatoriamente,"reemplaza_aleatoriamente")
\end{luacode}
------------------------------------------------->8
Y ya sólo nos queda probarlo. Antes definimos este comando para repetir
50 veces una cadena que contenga muchas "a".
\def\texto{\foreach \n in {1,...,50}{salta las montañas altas }}
\begin{document}
\texto
\end{document}
El resultado de compilar todo eso tendría que quedar tal que así:
https://i.imgur.com/wW6i6UX.png
Saludos,
Juan Manuel
----------------------------------------------------
Para darse de baja ES-TEX pincha y envia el siguiente url
mailto:[log in para visualizar]
----------------------------------------------------
|