[GUFSC] HOWTO: busca inversa TeX <-> DVI com (X)Emacs no linux (fwd)
Rafael Machado Casali
gufsc@das.ufsc.br
Mon, 11 Nov 2002 08:23:57 -0500 (EST)
Apos nossa palestra de sexta... Nao me lembro de falarem algo sobre
isto...
Rafael Casali
-------------------------------------------------------------------------------
"Do not worry about your difficulties in mathematics;
I can assure you that mine are still greater."
Albert Einstein
-------------------------------------------------------------------------------
Rafael Machado Casali rmcasali@mtm.ufsc.br
-------------------------------------------------------------------------------
/"\
\ / CAMPANHA DA FITA ASCII - CONTRA MAIL HTML
X ASCII RIBBON CAMPAIGN - AGAINST HTML MAIL
/ \
---------- Forwarded message ----------
Date: Fri, 8 Nov 2002 17:20:06 +0100 (MET)
From: Miguel Frasson <frasson@math.leidenuniv.nl>
Reply-To: tex-br@listas.furg.br
To: TeX-br <tex-br@listas.furg.br>
Subject: [TeX-BR] HOWTO: busca inversa TeX <-> DVI com (X)Emacs no linux
Ola, lista.
Este e-mail interessaria apenas a usuarios de LaTeX e (X)Emacs em linux.
Usuarios de MikTeX ja tem essa "feature" disponivel.
Esse e-mail eh um HOWTO de como instalar isso no linux para usuarios de
xdvi e (x)emacs.
Obs para usuarios de vim: tambem funciona para vim! mas esse howto nao se
aplica. Vejam como configurar o xdvi com vim na pagina do xdvik:
http://xdvi.sourceforge.net/inverse-search.html
Que feature estou falando a respeito:
* Busca DVI -> TeX: Voce usa Ctrl+click no xdvi e emacs (ou xemacs,
dependendo da configuracao) mostra o arquivo NA LINHA correspondento ao
lugar que voce clicou.
* Busca TeX -> DVI: Tambem, agora no emacs, voce posiciona o cursor em
um ponto do arquivo, executa um comando (ou uma tecla de atalho) e
o xdvi abre apontando o local correspondente ao do seu arquivo TeX.
Ps: (se ja tem emacs e xdvi rodando, NAO abre outra janela se
configurar certo)
Eh muito loco!
Usuarios de windows (teoricamente) sabem muito bem do que estou falando,
com o Yap e o um editor competente (como winedt). (Alias, essa eh uma
vantagem do Window$, eles querem "easy to use" e fazem, nao importa se nao
eh impecavelmente estavel, como em unix. As vezes, quem nao arrisca, nao
petisca...)
Consegui fazer isso funcionar no meu linux e decidi compartilhar minha
experiencia por que tem gente comentando sobre um bom ambiente para TeX no
linux. Eu nao tenho computador proprio, sou usuario da rede aqui da minha
universidade e portanto nao tenho permissoes de instalar nada no sistema.
Ha um tempo, fiquei sabendo que saiu uma versao de TeX para unix que
tambem acrescenta os famigerados "source specials" no DVI. Para quem nao
sabe do que estou falando, um source special eh a informacao da linha e do
arquivo fonte dentro do DVI (incluido por exemplo com o comando
\special{}). Os source specials podem ser inseridos atraves de um pacote
(acho que o nome eh srcltx.sty) ou de uma versao de TeX que os adiciona
automaticamente em alguns lugares (como todo fim de linha, toda equacao,
etc). Tambem, voce precisa ter um DVI viewer apto para ler os source
specials.
Depois de conseguir ambos, ainda vai um pouco mais de suor para configurar
o emacs (ou xemacs, os dois funcionam bem)
O que eu fiz aqui foi pedir a versao de TeX e o xdvi que suportassem. O
pessoal daqui eh "tinhoso" com esse negocio de estabilidade e seguranca.
Finalmente, um dos raazes do Help Desk tomou uma noite e recompilou (para
uma pasta local) uma versao (beta acho) de TeX que funciona, e a ultima
versao do xdvi que tambem ja suporta isso faz um tempo.
Tendo ja as aplicacoes, eu fiquei encarregado de fazer funcionar. Eh o que
eu vou contar aqui.
----------
1 - Conseguir uma versao de TeX que insira os source specials.
Voce pode ateh ja ter essa versao e nao saber!. Num terinal, digite
tex -help
veja se no help aparece a linha (quase no fim)
-src-specials insert source specials into the DVI file
Se apareceu, seu TeX eh capaz. Se nao, voce tem duas opcoes: ou instala
uma versao de TeX capaz (eh melhor por que nao precisa pacotes) ou usa o
pacote srcltx (acho que tem na CTAN).
Ps: Aqui a galera usa RedHat. A RedHat nao fornece rpm's com a versao
capaz de TeX por causa do suporte ao japones. Eh por isso que o pessoal
teve que recompilar tudo.
-----------
2 - Conseguir um DVI viewer capaz de interpretar src specials.
Sei que o novo Kdvi eh capaz, mas aqui, com meu antigo KDE 2.2, nao tem
novo Kdvi. Tive que usar xdvi mesmo. Agora ja me acostumei :-) Esse e-mail
eh com configuracao para XDVI!
As versoes novas do XDVI (ou XDVIK, que eh o que usa kpsepath para achar
os caminhos) tem isso.
Voce pode descobrir se seu xdvi ja tem isso abrindo um arquivo dvi e
segurando o Control e clicando em algum ponto do texto. Se abrir uma
janela reclamando que seu arquivo nao tem source specials, eh que seu xdvi
suporta isso.
------------
3 - gnuserver
Quem usa so XEmacs ou so Emacs pode pular esse passo. Veja ultimo
paragrafo deste topico para detalhes.
Eu nao sou muito sabido sobre linux. O que acontece eh que no Window$,
existe um tipo de protocolo para dar "mensagens" para aplicacoes. Por
exemplo, quando voce arrasta um arquivo para algum lugar (um arquivo
.doc dentro de uma janela do Word, por exemplo), o que acontece
eh uma mensagem do windows para uma aplicacao (provavelmente com o nome
do arquivo). Se a aplicacao sabe interprear mensagens, ela faz algo com os
dados (por exemplo, abrir o arquivo).
Acho que no linux nao tem um standard para isso. Note bem: *acho* nao sei,
nao sou computeiro...
Entao voce precisa fazer "aplicacoes servers" para isso.
Vamos fazer uma experiencia: abra o xemacs com o seguinte comando:
xemacs -f gnuserv-start <algum arquivo> &
(-f executa um comando lisp)
Uma janela do XEmacs aparecera. Agora, no terminal, digite
gnuclient -q <outro arquivo>
Voce vai ver que a MESMA janela do XEmacs abre o outro arquivo. Isso eh
o que o gnuserver faz. Nao precisa chamar outra janela. Isso eh legal se
voce quer trabalhar com essa funcao.
O GNU Emacs tem uma versao meia boca parecida, chamada emacsclient, mas
tem varias limitacoes.
O bom do gnuserv eh que ele funciona para ambos XEmacs e GNU Emacs.Mas
para fazer funcionar no Emacs voce tem que compilar (gozado, eu nao achei
o aplicativo gnuserver no Xemasc, sera que eh interno do Xemacs?).
Voce pode pegar o fonte do gnuserver que funciona para Emacs na pagina
http://meltin.net/hacks/emacs/
Junto com o programa, vem um arquivo lisp gnuserv-compat.el para ser usado
com Emacs.
Vou supor que cada um leia os README's e documentacao e instale.
Volto a falar nisso na hora de configurar o xdvi.
Quem nao quiser instalar isso, pode quebrar o galho com emacsserver
(configura o xdvi para funcionar SO com Emacs), ou usar o gnuserv do
XEmacs (dai, xdvi funciona SO com XEmacs). Se instala o gnuserve para
Emacs, dai o xdvi funciona com ambos Emacs E Xemacs.
A instalacao do gnuserv para GNU Emacs esta feita quando:
* com um XEmacs aberto (rode xemacs -f gnuserv-start) , voce executa
gnuclient -q <algum arquivo>
e o arquivo aparece aberto na janela do XEmacs
E
* com um GNU Emacs aberto (rode emacs -f gnuserv-start), voce executa
gnuclient -q <algum arquivo>
e o arquivo aparece aberto na janela do GNU Emacs
ou seja, funciona igual para os dois.
----------
4 - script startxdvi e pacote lisp xdvi-search.el
Na pagina do xdvik,
http://xdvi.sourceforge.net/inverse-search.html
tem o link para esses arquivos. Os links sao:
http://xdvi.sourceforge.net/startxdvi
http://xdvi.sourceforge.net/xdvi-search.el
Coloque o script startxdvi em algum lugar do PATH (ele deve estar com
permissao de execucao).
Quanto ao pacote para (x)emacs, xdvi-search.el, voce pode colocar em algum
lugar onde ambos emacs e xemacs o vejam. Por exemplo, colocar uma copia no
diretorio <diretorio do emacs>/lisp e uma no <diretorio do xemacs>/lisp
O que eu fiz foi colocar num local como /public/emacs/ e coloquei uma
linha no .emacs para ler o pacote ai. Acho que eh a melhor solucao.
Ps.: voce ve o path onde o (x)emacs procura arquivo fazem o seguinte: abre
o (x)emacs no buffer *scratch*, digite
load-path
em algum lugar e depois da letra h faca C-u C-x C-e. O caminho aparecera.
Provavelmente a interseccao entre os caminhos do emacs e xemacs eh vazia
:-)
----------
Pronto.. ja temos todos os ingredientes. Ufa. Agora vamos as
configuracoes.
---------
5. Configuracao no arquivo .emacs
(essa configuracao funciona tanto para Emacs quanto para Xemacs)
Nesse ponto do HOWTO, os arquivos xdvi-search.el, gnuserv.el e
gnuserv-compat.el (esses dois ultimos so sao necessarios para quem
instalou gnuserv par Emacs) devem estar disponiveis. Eu os coloquei no
diretorio /public/emacs e acrescentei o diretorio no path do emacs
Para chamar a busca TeX -> DVI, eu fiz um keybind na tecla f5, que em
geral eh nao usada. Esta no final d arquivo. Quem quer outra coisa, muda.
Abre o seu arquivo .emacs.
Acrescente ao arquivo:
;; acrescentando /public/emacs no caminho dos pacotes para (x)emacs
(add-to-list 'load-path (expand-file-name "/public/emacs"))
;; qual emacs esta rodando?
(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
(cond ((not running-xemacs)
;-------------- so para emacs ------------------
(require 'gnuserv-compat)
)(
;-------------- so para xemacs ------------------
)); end cond
; inverse search with both emacs and xemacs
(require 'gnuserv)
(gnuserv-start)
(setq-default gnuserv-frame t)
(add-hook 'gnuserv-visit-hook '(lambda () (raise-frame) (recenter)))
(require 'xdvi-search)
;; mapeando f5 para busca TeX -> dvi
(add-hook 'LaTeX-mode-hook 'set-local-keys-for-laTeX)
(defun set-local-keys-for-laTeX ()
(local-set-key [f5] 'xdvi-jump-to-line)
)
;; fim da configuracao do .emacs
Salve o arquivo.
-----------
6 - configurando TeX
Crie o arquivo texmf.cnf contendo a linha
src_specials = auto
Acrescente ao seu shell rc seguinte variavel:
TEXMFCNF
contendo o caminho para esse arquivo.
Eu uso tcsh, e acrescentei ao meu arquivo .tcshrc a linha
setenv TEXMFCNF $HOME/tex
Nao sei fazer isso no bash... :-(
Feito isso, seu TeX (que eu suponho seja capaz de por source specials) os
inserira automaticamente.
----------
7 - Configurando xdvi
7.1 - voce instalou o gnuserv para GNU Emacs.
Eu aconcelho a voce criar esses dois scripts. O caso eh que o gnuserv so
funciona se uma verso do (x)emacs esteja rodando. O que os scripts fazem
eh "se nao tem (x)emacs rodando, rode e chama de novo o gnuclient". Um
abre o emacs por default e outro abre o xemacs por default. (como eu
configurei isso para muita gente e cada um tem uma preferencia, deixei os
dois disponiveis...)
--- script gnuclientemacs ---
#!/bin/sh
if gnuclient -batch -eval t >/dev/null 2>&1
then
exec gnuclient ${1+"$@"}
else
emacs &
until gnuclient -batch -eval t >/dev/null 2>&1
do
sleep 1
done
exec gnuclient ${1+"$@"}
fi
--- script gnuclientxemacs ---
#!/bin/sh
if gnuclient -batch -eval t >/dev/null 2>&1
then
exec gnuclient ${1+"$@"}
else
xemacs &
until gnuclient -batch -eval t >/dev/null 2>&1
do
sleep 1
done
exec gnuclient ${1+"$@"}
fi
--- fim dos scripts
Claro, faca-os executaveis e no PATH.
Abre o seu arquivo .Xresources e acrescente
xdvi.editor: gnuclientemacs -q +%l %f
ou
xdvi.editor: gnuclientxemacs -q +%l %f
ou, se voce nao quer acrescentar os scripts
xdvi.editor: gnuclient -q +%l %f
Ps: Os scripts SO fazem diferenca quando tem um xdvi aberto e nenhum
(x)emacs aberto. Caso contrario, o funcionamento eh exatamente o mesmo.
7.2 - voce nao instalou gnuserv para emacs e quer usar so XEmacs
Abre o arquivo ~/.Xresources e acrescente a linha
xdvi.editor: gnuclient -q +%l %f
7.3 - voce nao instalou gnuserv para emacs e quer usar so GNU Emacs
Abre o arquivo ~/.Xresources e acrescente a linha
xdvi.editor: emacsclient --no-wait +%l %f
-------------
FIM.
Agora, reinicie a secao para aplicar todas as modificacoes.
-------------
Testando para ver se funcionou...
Abra um arquivo latex com (x)emacs.
Rode o latex nesse arquivo (para que a nova versao acrescente os source
specials)
No (x)emacs, coloque o cursor em algum ponto do texto e tecle <f5>
(ou M-x xdvi-jump-to-line RET)
Se o xdvi mostrar o texto correspondente no DVI, como num passe de magica,
funcionou a busca TeX -> DVI.
Agora, no xdvi, segure o Control e clique em algum ponto do texto.
Se o (x)emacs aparecer (a janela do emacs nao ganha foco, so vem para
cima), pode ir para o abraco! Olhe a posicao do curso no emacs, que deve
estar no local correspondente. A busca DVI -> TeX funcionou.
Deu pau, da uma revisada no processo.
-------------
Comentarios finais.
Para os usuarios de Kdvi: desculpem, mas os caas aqui sao osso duro de
roer e nao atualizam software. Nao sei como fazer o emacs funcionar com
kdvi.
--
Se o seu arquivo .tex inclui arquivos (como capitulos separados), a busca
TeX -> DVI so funciona se voce seta o arquivo TeX-master sendo o raiz do
seu documento. O que eu faco eh, em CADA arquivo que eh incluido, coloco
no final (suponha que o documento mestre eh "tese.tex")
%%% Local Variables:
%%% TeX-master: "tese.tex"
%%% End:
O gozado eh que isso so fnciona no GNU Emacs :-( Se alguem tem um modo de
setar o TeX-master de um jeito que funcione para os dois, eu agradeco se
me disser.
--
Desculpe a "biblia" que eu escrevi. Espero que os usuarios se beneficiem
dessa feature.
Um abraco.
Miguel.
--
=======================================
Miguel Vinicius Santini Frasson
=======================================
PhD student at Leiden University
e-mail: frasson@math.leidenuniv.nl
mvsfrasson@bol.com.br
http://mvsfrasson.vila.bol.com.br
--
TeX-BR Homepage: http://biquinho.furg.br/tex-br/
Para sair da lista mande um mail com unsubscribe
no corpo para tex-br-request@listas.furg.br