ES-TEX Archivos

Usuarios hispanohablantes de TeX

ES-TEX@LISTSERV.REDIRIS.ES

Opciones: Vista Forum

Use Monospaced Font
Por defecto enseñar Text Part
Esconda cabeceras de correo

Mensaje: [<< Primero] [< Prev] [Siguiente >] [Último >>]
Tema: [<< Primero] [< Prev] [Siguiente >] [Último >>]
Autor: [<< Primero] [< Prev] [Siguiente >] [Último >>]

Print Responder
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
References:
Date:
Thu, 28 Jul 2022 12:09:33 +0000
Subject:
Emisor:
Juan Manuel Macías <[log in para visualizar]>
X-FEAS-SPF:
spf-result=pass, ip=185.67.36.65, helo=mout01.posteo.de, [log in para visualizar]
Sender:
Usuarios hispanohablantes de TeX <[log in para visualizar]>
Reply-To:
Usuarios hispanohablantes de TeX <[log in para visualizar]>
Delivered-To:
MIME-Version:
1.0
Message-ID:
In-Reply-To:
<[log in para visualizar]> (Juan Luis Varona Malumbres's message of "Wed, 27 Jul 2022 21:18:21 +0000")
X-FEAS-DKIM:
Valid
Content-Transfer-Encoding:
quoted-printable
Parts/Attachments:
text/plain (114 lines)
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]
----------------------------------------------------

ATOM RSS1 RSS2