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.

sabato 7 agosto 2021

FreeCAD un modellatore parametrico


 Cominciamo questa avventura introducendo FreeCAD.


FreeCAD è un modellatore 3D parametrico.


Permette di creare modelli 3D (per questo è un modellatore), usando dei parametri, cioè permette di legare dimensioni ed altro a dei parametri che possono essere variati per fare in modo che l'intero modello cambi di conseguenza.


Questa parametricità però è poco spiegata e "poco visibile" ad un primo sguardo.


Gli oggetti che vengono creati non sono descritti semplicemente con "punti nello spazio",  ad esempio una linea dal punto A al punto B, che si unisce ad una altra linea ecc. fino a formare un cubo.


Al modellatore viene fornita l'informazione che si vuole creare un cubo con determinate dimensioni, altezza, larghezza, profondità, e che lo volgiamo posizionare con il vertice in basso a sinistra nella posizione X = 10, Y = 10, Z = 0.


Il motore geometrico di FreeCAD, cioè le funzioni di modellazione sono affidate alla libreria OCCT (Open Cascade Technology) che compie il lavoro di modellazione.


La visualizzazione invece è affidata alle librerie Coin3d che usano il formato OpenInventor


Queste informazioni sono basilari per comprendere alcune particolarità di FreeCAD, come la dicotomia tra il modello e la sua visualizzazione, soprattutto in termini di precisione del modello.


Mi spiego con una immagine:



La linea nera è la rappresentazione di una porzione di cerchio con la "normale precisione" impostata in FreeCAD.


La linea verde invece è lo stesso cerchio visualizzato con una precisione maggiore.


La differenza è evidente, tutte e due però non sono il vero "luogo dei punti" del cerchio, che è memorizzato come una curva di precisione "infinita", per cui ad ogni livello di zoom il "visualizzatore" di FreeCAD deve ricalcolare la "vista", partendo dai dati del modellatore.

 

La differenza è abbastanza importante, perché ad esempio in ambito della stampa 3D, FreeCAD è ritenuto un concorrente di OpenSCAD, ma il paradigma di modellazione è completamente diverso.

 

OpenSCAD è un modellatore di mesh, infatti per ogni oggetto dobbiamo impostare un parametro di precisione per indicare "quanto fine" deve essere la mesh generata (e calcolata dal modellatore).


In FreeCAD questo lavoro lo facciamo solamente al momento di trasformare il solido generato che ha linee curve definite come "funzioni infinite" nel modello mesh da dare in pasto allo Slicer per la stampa 3D.


Con questo abbiamo appena cominciato.


Nel prossimo articolo affronteremo più in dettaglio alcune cose:


- L'interprete Python di bordo di FreeCAD

- gli "oggetti" di FreeCAD



Saluti


Carlo D.