Ciao Rodolfo,
con qualche giorno di ritardo, eccoti i risultati delle ulteriori prove effettuate sull’abbinata emacs-xdvi. A patto di rispettare un certo ordine nelle operazioni, l’interazione tra emacs e xdvi sembra funzionare anche meglio di quella tra lo stesso emacs e kdvi!
Caro Andrea,
Bene, mi sembra che, a meno della modifica del file .el per attivare la ricerca in avanti direttamente da dentro emacs (ammesso che sia questo l’editor di tua preferenza), per il resto dovremmo esserci.
❓ vuoi dire che è possibile attivare la ricerca in avanti anche direttamente da dentro emacs?
Sì.
Si tratta di modificare leggermente il file kdvi-search.el (io l’ho rinominato xdvi-search per evitare confusioni, aggiornando poi il .emacs nella mia home così che carichi xdvi-search anziché kdvi-search e associ la sequenza di ricerca in avanti alla funzione giusta). Più nel dettaglio, si può procedere come segue:
0) copiare kdvi-search.el in xdvi-search.el; aprire xdvi-search.el con emacs
1) sostituire tutte le occorrenze di “kdvi” con “xdvi”
2) intervenire sulla funzione xdvi-jump-to-line sostituendo le linee 53-56
(start-process “xdvi”
“xdvi-output” “xdvi” ;;; src-arg
;;; args for -sourceposition:
“–unique” (concat “file:” dvi-file “#src:” current-line filename)
“-sourceposition” (concat current-line filename ” ” dvi-file)
)))))
(Nelle quali xdvi ha già preso il posto di kdvi 😉 )
con
(shell-command
(concat
“xdvi -sourceposition ”
current-line filename ” ”
dvi-file ” -editor ‘emacsclient +%l %f’”)
nil “xdvi-errors”)))))
[Nota 0: Il linguaggio di controllo di (Xe|E)macs è il LisP, pertanto tutte le parentesi sono importanti.
Nota 1: dopo svariati tentativi di avviare un processo per il controllo di xdvi, tutti andati male, ho deciso di optare per una shell. Questo comporta delle restrizioni d’uso, riportate più avanti (4.3).
Nota 2: Gli spazi sono importanti (determinano la giusta separazione tra gli argomenti della chiamata a shell).]
3) Salvare e uscire
4) IMPORTANTE: nell’uso dell’accoppiata emacs-xdvi così impostata occorre
4.1) Avere già un’istanza di emacs in esecuzione (o aprirla ad hoc, senza argomenti).
4.2) Lanciare xdvi sul file da editare, con le opzioni di ricerca inversa stabilite o tramite linea di comando (“-editor +%l %f”) o tramite l’assegnazione della medesima stringa a una variabile d’ambiente tra XEDITOR, o ViSUAL, o EDITOR (in quest’ordine di priorità) [consultare la pagina di man di xdvi per ulteriori informazioni].
4.3) (Questo è il punto veramente IMPORTANTE.) Lanciare PRIMA una ricerca inversa da xdvi, così che emacs abbia un canale aperto col visualizzatore, e poi da emacs le eventuali ricerche in avanti. In questo modo si mantiene un controllo asincrono sia su xdvi, sia su emacs.
X.0) Nella “malaugurata” ipotesi che si sia lanciata prima una ricerca in avanti, che dovrebbe aver aperto una propria istanza di xdvi, finché non si termina quell’istanza non sarà possibile riprendere il controllo di emacs.
X.1) Nell’ancor più malaugurata ipotesi che fosse stata lanciata una ricerca inversa dall’istanza di xdvi lanciata da emacs al passo X.0) chiudere l’istanza di xdvi e digitare C-g (cioè Control g) nella finestra di emacs. Ripartire dal passo 4.3.
😀 Il programma xdvi sarà anche vetusto,
ma è proprio vero che a volte le cose antiche funzionano meglio di quelle nuove.
Infatti ho l’impressione
(anche se, per esprimere un giudizio definitivo, devo continuare a testare)
che, eseguendo alla lettera tutti i comandi da te specificati nell’ultimo messaggio,
la ricerca avanzata e quella inversa funzionino, almeno per quanto riguarda plain TeX,
decisamente meglio con l’xdvi che non col kdvi.
Confermo.
Non ho ancora sperimentato la funzionalità della cosa quando ci sono i file \input,
poiché come ti dissi avevo rinunziato a \input-tare file.
Per quel poco che ho provato, sembra funzionare egregiamente. L’importante, lo ricordo ancora una volta, è usare \Input anziché \input se si sta usando TeX.
8) Comunque adesso, tra ricerca inversa e avanzata e hyperlinks,
ho la possibilità di spaziare in tutto il documento
con giochi di sponda e triangolazioni mai viste.
Se una importuna ustioncella all’avambraccio non mi avesse funestato le ultime settimane,
mi verrebbe voglia di brindare!Riassumo qui di seguito tutte le operazioni
nel caso che possano tornare utili a qualcuno.😯 Ricerca inversa e avanzata per TeX e LaTeX,
con xdvi ed Emacs,
in Mandrake Linux 9.0.1)Hai controllato l’effettiva presenza di emacs? Riesci a lanciarlo?
In quanto segue assumo di sì.
2)Usa emacs per modificare il file .emacs: digita
emacs ~/.emacs
dalla Shell di Linux.
3)Vai in fondo al file (potrebbe verosimilmente essere vuoto: nessun problema)
e aggiungi la riga
(server-start);
salva il file e esci da emacs.
4)Impartisci i comandi
mkdir -p ~/lib/emacs (invio)
ln -s /usr/share/doc/HTML/en/kdvi/kdvi-search ~/lib/emacs (invio).
5)Apri il tuo file sorgente impartendo il comando
emacs ~/…/filename.tex (invio)
e aggiungi all’inizio del file il comando
\input /usr/share/texmf/tex/latex/srcltx/srctex.sty
se stai usando plain TeX, ovvero il comando
\usepackage[active]{srcltx}
se stai usando LaTeX, poi salva il file.
6)Apri una nuova Console di Shell, col comando cd accedi alla directory che contiene i due file, quello sorgente e quello .dvi, e impartisci il comando
xdvi -editor “emacsclient +%l %f” filename.dvi (invio).
7)In un punto qualsiasi del file .dvi clicca Ctrl-mouse-1 e voilà: la ricerca inversa.
8)Apri una nuova Console di Shell, col comando cd accedi alla directory che contiene i due file, quello sorgente e quello .dvi, e impartisci il comando
xdvi -sourceposition “linenumber filename.tex” filename.dvi (invio)
e voilà: la ricerca avanzata.A te, Andrea, eventuali correzioni e aggiunte.
Ciao,
Rodolfo
Ora devo scappare, aggiornerò la lista di passi in un messaggio successivo.
Ciao,
Andrea.