Inserção de código fonte em LaTeX usando Bundles do TextMate

VN:RO [1.9.11_1134]
quarta-feira, 3 d novembro d 2010
Por Eduardo Russo, Coop10. Siga no Twitter

Um pouco depois de criar o comando para inserir PNGs no LaTeX usando os Bundles do TextMate, pensei que poderia fazer o mesmo para inserir códigos fonte.

Aliás, inserção de código fonte foi o que me fez querer usar LaTeX a primeira vez. Não fosse isso, estaria fazendo o TCC no Word, sou fã de GUI, prefiro GUI, mas a facilidade de deixar as coisas bonitas no LaTeX pra um texto monstro como a monografia de conclusão de curso me convenceram.Antes de tudo, algumas coisas em relação aos arquivos e definições: lí, sei lá aonde, que a melhor coisa é usar UTF-8 para os arquivos, mas, se você fizer isso em TODOS os arquivos, perceberá que acentuação não funcionará com códigos fonte! Então seus arquivos vão ficar meio misturados: Texto e Bibliografia em UTF-8 e códigos em Latin1.

Para isso, você precisa prestar atenção na hora de salvar os arquivos no TextMate:

Codificações do TextMate na hora de salvar

Agora vamos às definições que você precisa colocar no sue LaTeX pra poder inserir códigos fonte “bonitinhos”. Esses são os pacotes que você precisará para isso:

1
2
3
\usepackage[<strong>utf8</strong>]{inputenc}
\usepackage{color} % permite cores nos gráficos e códigos
\usepackage{listings} % para importação de códigos fonte

Depois disso, você precisará criar o comando de inserção de código (perceba que aqui foi selecionado latin1):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\renewcommand{\lstlistingname}{Código} % definição visual dos códigos fonte
\lstset{
 extendedchars=\true, % permite acentos
 <strong>inputencoding=latin1</strong>, % usa Latin1 nos códigos fonte
 commentstyle=\it, % deixa os comentários em itálico
 stringstyle=\bf, % não lembro o que faz, mas está funcionando
 belowcaptionskip=5pt, % não lembro o que faz, mas está funcionando
 numbers=left, % coloca a numeração na esquerda
 stepnumber=1, % passos da numeração
 firstnumber=1, % primeira linha
 numberstyle=\tiny, % tamanho da fonte da numeração
 breaklines=true, % permitir quebra de linha
 frame=tb, % borda em cima e em baixo
 basicstyle=\footnotesize, % estilo básico
 stringstyle=\ttfamily, % não lembro o que faz, mas está funcionando
 showstringspaces=false, % não mostrar os espaços
 mathescape, % não lembro o que faz, mas está funcionando
 tabsize=3 % tamanho da tabulação
}

Com isso, basta alguns comandos e você consegue inserir um código fonte no seu LaTeX e, para facilitar ainda mais a vida, um Bundle de drag and drop pro TextMate.

Essa inserção de código fonte reconhece algumas linguagens nativamente, mas, mesmo tipos não reconhecidos ficam bem com isso.

Seguindo os mesmos passos do artigo de inserção de PNGs, aperte CMD+OPTION+CNTRL+B, troque de “show all” para “drag commands”, vá até “LaTeX”.

Agora clique no botão de + e adicione um “New Drag Command”. chame como quiser… adicione as extensões de código fonte que prentende usar,  eu coloquei o seguinte: ada, ant, asm, as, c, cpp, htm, html, java, js, json, pl, php, py, rb, sh, sql, xml, vhdl.

Coloque no “Scope Selector”:

text.tex.latex

Agora insira o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env ruby
require 'pathname'
require "#{ENV['TM_BUNDLE_SUPPORT']}/lib/LaTeXUtils.rb"
filename = ENV["TM_DROPPED_FILEPATH"]
relative_to = ENV["TM_DIRECTORY"]
startfile = ENV['TM_LATEX_MASTER'] || ENV['TM_FILEPATH']
master = Pathname.new(LaTeX.master(startfile))
unless master.absolute?
 master = master.expand_path(ENV['TM_PROJECT_DIRECTORY'])
end
path = Pathname.new(filename).relative_path_from(master.dirname)
if ENV["TM_MODIFIER_FLAGS"].match(/SHIFT/)
 print "\\\\input{" + path + "}"
else
 ext = File.extname(path)
 file_type = case ext
 when ".ada" then "Ada"
 when ".ant" then "Ant"
 when ".asm" then "Assembler"
 when ".as" then "Assembler"
 when ".c" then "C"
 when ".cpp" then "C++"
 when ".htm" then "HTML"
 when ".html" then "HTML"
 when ".java" then "Java"
 when ".js" then "Java"
 when ".json" then "Java"
 when ".pl" then "Perl"
 when ".php" then "PHP"
 when ".py" then "Python"
 when ".rb" then "Ruby"
 when ".sh" then "sh"
 when ".sql" then "SQL"
 when ".xml" then "XML"
 when ".vhdl" then "VHDL"
 else "linguagem"
 end
 puts ["\\\\lstinputlisting[language=\${1:#{file_type}}, tabsize = \${2:4}, caption={\${3:caption}}, label = {code:\${4:#{path.to_s.gsub(/(\.[^.]*$)|(\.\.\/)/,"").gsub(/\//,"_")}}}]{#{path}}"].join("\n")
end

Se você entende um pouquinho de programação, percebeu que é só acrescentar mais uma linha no case para inserir outras linguagens.

O meu ficou assim:

Criação do Bundle para inserção de código fonte com drag and drop

Dessa forma, sempre que arrastar um código com uma dessas extensões, automaticamente a linha de inserção de código fonte já vai aparecer parcialmente preenchida, bastando apertar TAB para ir para o próximo campo.

VN:F [1.9.11_1134]
Rating: 0.0/5 (0 votes cast)
Related Posts with Thumbnails

Eduardo Russo
Eduardo Russo

Formado em Engenharia de Computação pela Poli (2010) e em Design pela Belas Artes (2001), cofundador do Bit a Bit, fundador do Tubelivery e do Faviconit, cofundador da Fábrica de Aplicativos e coordenador de produto do Scup.

Tags: , , , , , , ,

Deixe um Comentário

Spam Protection by WP-SpamFree

Get Adobe Flash playerPlugin by wpburn.com wordpress themes