venerdì 13 agosto 2021

Emacs, texlab e zathura come editor per Latex.

 Buongiorno, una cosa che esula dal solito, ma che penso potrà tornare utile a qualcuno.

Ho usato fino ad ora VsCode in Linux come editor di testi per Python e per LaTex.

Però la nota "stabilità" del prodotto VsCode, mi ha creato recentemente una serie di problemi, in quando la "catena di esecuzione" composta da VsCode (per Linux), alcuni plugin e texlab ha smesso di funzionare.

Ho dovuto cercare un'alternativa, ma c'era sempre qualcosa che mancava nella "catena" alla fine ho preso il "coraggio a due mani" è ho provato emacs, con la determinazione di riuscire a "piegarlo a miei voleri".

La mia catena di compilazione è relativamente "complessa", in quanto usa molti pacchetti aggiuntivi per ottenre i glossari, gli schemi e le figure, nonché il file sorgente di latex e diviso in uno o due file per ogni capitolo, per cui è necessario che la catena di compilazione e visualizzazione sia a prova di bomba.

uso Arara come aiuto alla compilazione, per cui anche texlab va configurato per non usare i valori per difetto in quanto usa "latexmk" come compilatore predefinito.

Non sono proprio riuscito a piegarlo completamente ai mie voleri, però il compromesso raggiunto è decisamente buono, la catena di compilazione del file Latex.

 

Per prima cosa vanno installati emacs e texlab ma di questo se ne occupa egregiamente il gestore dei pacchetti della distribuzione Linux.


La parte più complicata è fare funzionare tutto cioè il collegamento tra:


  • Emacs e TexLab
  • Emacs e Zathura per visualizzare il file pdf compilato e saltare al file pdf partendo da un punto preciso dei sorgenti.
  • Zathura ed Emacs per partire da un certo punto del file pdf e saltare al file sorgente per correggere errori od altro.

Emacs e TexLab

per prima cosa vanno istallati alcuni pacchetti usando il gestore dei pacchetti di Emacs.


 ;; packages settings  
 (require 'package)  
 (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")  
              ("melpa-stable" . "http://stable.melpa.org/packages/")  
              ("melpa" . "http://melpa.org/packages/")  
              ))  
 (package-initialize)  
 (unless package-archive-contents  
  (package-refresh-contents))  
 (unless (package-installed-p 'use-package)  
  (package-refresh-contents)  
  (package-install 'use-package))  
 (require 'use-package)  
Questo nel cappello del file init.el per impostare l'uso del pacchetto "package" come pre requisito per usare il resto. Se usate altri sistemi per emacs, non posso aiutarvi. Questa parte serve per installare i pacchetti lsp-mode e lsp-latex e configurarli per usare Arara come compilatore. Per lanciare la compilazione ho impostato la sequanza di tasti C-c b che nel gergo di emacs vuol dire premere CTRL e C e poi il tasto B.

;; LSP-MODE

(require 'lsp-mode)

;; LSP LATEX

(require 'lsp-latex)
;; "texlab" must be located at a directory contained in `exec-path'.
;; If you want to put "texlab" somewhere else,
;; you can specify the path to "texlab" as follows:
;; (setq lsp-latex-texlab-executable "/path/to/texlab")

;;(add-to-list 'lsp-enabled-clients 'texlab)

(with-eval-after-load "tex-mode"
 (add-hook 'tex-mode-hook 'lsp)
 (add-hook 'latex-mode-hook 'lsp))

;; For bibtex
(with-eval-after-load "bibtex"
 (add-hook 'bibtex-mode-hook 'lsp))

;; set C-c b as latex build
(eval-after-load "tex-mode"
    '(define-key latex-mode-map (kbd "C-c b") 'lsp-latex-build))

(setq lsp-latex-texlab-executable-argument-list
      '("-vvv"))

(setq lsp-latex-build-executable "arara")
(setq lsp-latex-build-args
      '("-v" "%f" ))

;; END LSP LATEX


Emacs e Zathura

La cosa prevede di settare il collegamento tra Emacs e Zathura, cioè di lanciare Zathura per visualizzare la parte di codice dove vi trovate nel file PDF appena compilato usando la sequenza dei comandi impostata precedentemente. La cosa non è automatica per cui dovete lanciare il comando a mano.


;; set C-c f to latex forward search
(eval-after-load 'tex-mode
    '(define-key latex-mode-map (kbd "C-c f") 'lsp-latex-forward-search))

(setq lsp-latex-forward-search-executable "zathura")
(setq lsp-latex-forward-search-args    
      '("--synctex-forward" "%l:1:%f" "%p"))
Il comando è C-c f e come potete vedere e cambiare se serve nella prima parte del codice. le due istruzioni che riportano setq lsp-latex-forward-search servono per impostare il "collegamento magico" in modo che il comando lsp-latex-forward-search avvii Zathura con i corretti comandi e la posizione da visualizzare.

Zathura e Emacs

Ora rimane da configurare il collegamento tra Zathura ee Emacs in modo da usare il comando "CTRL Click-sinistro" del mouse per andare al sorgente relativo alla parte del file PDF in oggetto. La cosa prevede due impostazioni, una nel file init.el di Emacs:

;; start a server 
(server-start) 
Questo serve per far partire Emacs come server per il comando che Zathura eseguirà quando useremo la sequenza "CTRL Click-sinistro". Per questo dovremo trovare il file zathurarc ed inserire queste due righe:

set synctex true
set synctex-editor-command "emacsclient +%{line} %{input}"
Che faranno in modo di lanciare una sessione emacsclient che aprirà una "finestra" nel nostro editor che visualizzerà il file e la posizione da cui abbiamo lanciato il comando in Zathura

Sperando di essere stato ragionevolmente chiaro per ora vi saluto. Carlo D.

Nessun commento:

Posta un commento

Per ovvi motivi di reponsabilità, ho deciso di moderare i commenti, come diceva Jannacci, "è un mondo difficile"

Saluti