ES-TEX Archivos

Usuarios hispanohablantes de TeX

ES-TEX@LISTSERV.REDIRIS.ES

Opciones: Vista Forum

Use Monospaced Font
Por defecto enseñar Text Part
Mostrar todas las cabeceras de correo

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

Print Responder
Subject:
Emisor:
Juan Manuel Macías <[log in para visualizar]>
Reply To:
Usuarios hispanohablantes de TeX <[log in para visualizar]>
Fecha:
Mon, 23 Aug 2021 15:18:18 +0000
Content-Type:
text/plain
Parts/Attachments:
text/plain (97 lines)
Hola a todos:

Llevo unos días trasteando con la aplicación texdoc, y me he dado cuenta
de algo obvio: que sólo busca por manuales (generalmente en PDF), pero
no dentro de los manuales. A mí me gustaría contar en LaTeX con algo muy
útil que tenemos en Elisp, donde podemos buscar rápidamente por
funciones o variables: ¿qué tal si se pudiese buscar también por
comandos, entornos o pasajes concretos dentro de los manuales de LaTeX?.

Me vino a la cabeza ripgrep, que es una aplicación excelente y
utilísima, una especie de grep vitaminado que busca a una velocidad que
mete miedo dentro de un directorio o de un proyecto git en el contenido
de los archivos de texto. De hecho, cuenta también con una interfaz para
Emacs, deadgrep, que funciona muy bien. Lo malo es que ripgrep sólo
busca en archivos de texto, no en PDF o similares. Pero he aquí que
tenemos también un ripgrep-all, que es una versión extendida de ripgrep
para buscar con igual diligencia dentro de PDF, documentos de word o
libreoffice, archivos comprimidos, etc.:
https://github.com/phiresky/ripgrep-all

Para Arch, por suerte, hay un paquete ya compilado en el AUR, así que
podemos instalarlo rápidamente ejecutando (si usamos trizen, por
ejemplo):

trizen -S ripgrep-all

Para otras distribuciones de GNU/Linux, en la página del proyecto se dan
también las instrucciones pertinentes.

Y con eso, en principio, ya bastaría: podemos usarlo simplemente en
línea de comandos situándonos en el directorio donde está la
documentación de TeX live y ejecutamos 'rga término a buscar'. La
búsqueda, insisto, es de vértigo. Por supuesto, se puede afinar lo
necesario para que no nos sepulte bajo los resultados.

Y otro plus para usuarios de Emacs. Usar la línea de comandos es un poco
latoso, así que me preguntaba si podía aprovechar la interfaz deadgrep,
pero cambiando el ejecutable localmente. Así que definí esta función:

(defun mi-busca-deadgrep-latex ()
  (interactive)
  (let
      ((deadgrep-executable "rga")
       (default-directory "/usr/share/texmf-dist/doc/latex/")
       (termino (read-from-minibuffer "Comando o pasaje en la documentación: ")))
    (deadgrep termino)))

Va bien, lo único es que no podemos abrir el pdf por la página de la
búsqueda, sino que siempre nos salta a la primera página del PDF. Para
solucionarlo, escribí lo siguiente (funciona solo si usamos el visor de
pdf de Emacs pdf-tools). Primero escribí esta función para saltar a la
página correcta:

(defun mi-open-function-deadgrep-latex (archivo)
  (let ((pag-pdf (save-excursion
                   (beginning-of-line)
                   (when (re-search-forward "Page\s+\\([[:digit:]]+\\):" nil t)
                     (match-string 1)))))
    (find-file archivo)
    (pdf-view-goto-page (string-to-number pag-pdf))))

Y acto seguido, definí también una versión personalizada de la función
de deadgrep para saltar a los resultados. Si en el búfer de resultados
está en el directorio de la documentación de TeX live, aplica mi
función, en caso contrario, aplica la función de fábrica:

(defun mi-deadgrep-visit-result ()
  (interactive)
  (if (save-excursion
        (goto-char (point-min))
        (re-search-forward "Directory: /usr/share/texmf-dist/doc/latex/" nil t))
      (deadgrep--visit-result #'mi-open-function-deadgrep-latex)
    (deadgrep--visit-result #'find-file)))

Y ya sólo faltaba sobreescribir la versión antigua por la nueva:

(advice-add 'deadgrep-visit-result :override #'mi-deadgrep-visit-result)

Ahora ya podemos invocar cosas como M-x mi-busca-deadgrep-latex RET
\babelprovide

y nos abre al momento la página de resultados con la aparición de ese
comando, en el manual de Babel o donde sea. Si damos al enter en cada
resultado, saltamos a la correspondiente página del PDF.

Aquí un pantallazo de muestra: https://ibb.co/h12FxWv

Saludos,

Juan Manuel

----------------------------------------------------
Si tiene algun problema con la utilizacion de la lista.
Pongase en contacto con nosotros a traves de:
[log in para visualizar]
----------------------------------------------------

ATOM RSS1 RSS2