hifenizacao para portugues desabilitada. Execute o programa de configuracao
do TeX e habilite a hifenizacao para portugues.
- Se a distribuicao for a teTeX, execute o programa texconfig,
-selecione a opcao HYPHEN, a seguir selecione latex. Na janela de edicao que
-surgira', remova o comentario da linha portuges. Saia do editor (se for o
-vi, digite ESC : q) e selecione EXIT para sair do texconfig.
+Se a distribuicao for a teTeX, execute o programa texconfig, selecione a
+opcao HYPHEN, a seguir selecione latex. Na janela de edicao que surgira',
+remova o comentario da linha portuges. Saia do editor (se for o vi, digite
+ESC : q) e selecione EXIT para sair do texconfig.
- Outra opcao e' editar diretamente o arquivo de configuracao, que
-normalmente esta' em /usr/share/texmf/tex/generic/config/language.dat.
+Outra opcao e' editar diretamente o arquivo de configuracao, que normalmente
+esta' em /usr/share/texmf/tex/generic/config/language.dat.
===============================================================================
Q3 - Nao sei como seria o equivalente do \citeasnoun{} do pacote Harvard
cita-se apenas o sobrenome do primeiro autor, seguido de "et al.". O
\citet{} e' realmente o equivalente ao \citeasnoun{} do pacote Harvard e
obedece ao formato adotado pelo PPGEE. Provavelmente o teste que gerou estas
-questao foi feito com menos de 4 autores. Por outro lado, convem notar que a
-citacao textual dos autores nao e' um formato recomendado pelo PPGEE.
+questao foi feito com menos de 4 autores.
===============================================================================
Q4 - Nao sei bem por qual motivo algumas expressoes do tipo $blabla$ tendem a
A4 - Ainda nao foi determinado se isto e' um problema do pacote DeLeTeX ou
um problema do LaTeX em si'. Exemplos demonstrando o problema sao bem
-vindos. Muitas vezes incluir o pacote ae resolve esse prolema.
+vindos. Muitas vezes incluir o pacote ae resolve esse problema.
===============================================================================
Q5 - O checklist do PPGEE usa palavras fortes, como "EXATAMENTE IGUAL" e ao
as descricoes das abreviaturas, enquanto que na lista gerada pelo DeLeTeX
sim.
-A9 - vide A8
+A9 - vide A8.
===============================================================================
Q10 - No item 11 do checklist do PPGEE, le-se que o tamanho da fonte deve
grafica sera' em frente e verso. Assim, parece mais coerente fazer tudo em
frente e verso. E' dificil justificar a geracao do documento eletronico em
forma diferente do oficial que e' o feito pela grafica.
+
===============================================================================
Q14 - O checklist do PPGEE nao recomenda utilizacao de ":" para separar as
descricoes das figuras enquanto que o DeLeTeX o faz.
A16 - Nao e' uma numeracao dos trabalhos, mas a numeracao da disciplina.
Existe a disciplina TI-I e a discipina TI-II. Assim, quem fizer doutorado
-pode fazer TI-I no mestrado e TI-II no doutorado.
+pode fazer TI-I no mestrado e TI-II no doutorado. Note que atualmente não
+existem mais disciplians de TI no PPGEE.
===============================================================================
Q17 - Estou usando o DeLeTeX para fazer apresentacoes e o pacote subfigure
IEEEtran para a versao 1.6c.
===============================================================================
+Q19 - Em referências com mais de três autores, deve-se utilizar a
+abreviatura et. al.. Por ser uma expressão em outro idioma não deveria ser
+em itálico?
+
+A19 - Segundo o item 8.1.1.1 da NBR 6023, o et. al. não deve ser em itálico.
+
+===============================================================================
+Q20 - Conversando com um colegas escreventes de dissertação, um deles me
+disse que no deletex há uma modificação para uso do \cite e \citep. Esse
+aluno disse que teve de por uma "relaxação" (não lembro o nome do comando)
+para se poder usar o \cite e o \citep como definidos antes das definições do
+DeLeTex.
+
+A20 - Se o aluno colocou uma relaxação para usar o \cite e \citep, fez bobagem!
+
+O comando \cite é um comando tradicional do LaTeX, existente por exemplo
+nos estilos book e report, que sã básicos do LaTeX. Este comando, quando
+usado com um estilo de bibliografia que cita por autor e data, como o
+adotado pelo PPGEE, faz citações na forma (Lages, 2016).
+
+O DeLeTeX usa o pacote natbib para formatar as referências. Este pacote
+define os comandos \citep, que faz citações na forma (Lages, 2016) e \citet,
+que faz citações na forma Lages (2016), além de outros comandos para outros
+formatos de citação.
+
+O natbib também (re-)define o comando \cite, mas para fazer citações na
+forma Lages (2016), ao contrário do formato tradicional do LaTeX.
+Provavelmente isso foi feito porque o natbib foi criado para ser usado nas
+Ciências Naturais, onde é muito mais comum fazer citações explícitas do que
+em Engenharia. Ainda assim, o natbib considera o uso do seu comando \cite
+como deprecated e recomenda usar \citet.
+
+O que foi feito no DeLeTex foi simplesmente fazer com que o \cite voltasse a
+citar na forma tradicional do LaTex, ou seja, na forma (Lages, 2016) porque
+assim fica mais fácil para "portar" textos escritos usando os estilos
+tradicionais do LaTex e a maioria dos outros estilos.
+
+Note que isso não representa restrição alguma, pois se for necessário fazer
+uma citacao na forma Lages (2016), basta usar o comando \citet.
+
+Ou seja, o erro e' o aluno querer usar \cite e \citep, quando deveria usar
+\citet e \cite ou \citet e \citep.
+
+===============================================================================
+Q21 - Haveria uma variação do \cite para que eu posas citar sem o parênteses?
+
+A21 - Basta usar o comando \citet. Vide Q20 para mais detalhes sobre este
+assunto.
+
+===============================================================================
+Q22 - Em algums referências aparece o texto "Anais...", não sei como sumir
+com ele, e ele aparece como norma da ABNT. Isso eu realmente não entendi.
+Pedi ajuda para os colegas mas eles também não sabem muito sobre. Inclusive
+estão nas demais dissertações.
+
+A22 - O texto "Anais..." ou "Proceedings..." são colocados automaticamante
+onde devem ser, mas para isso os campos no .bib tem que ser preechidos
+corretamente, em especial o campo booktitle da macro @inproceedings.
+
+Se o evento for internacional, o campo deve comecar com "Proceedings of".
+
+Se o evento for nacional, o campo deve comecar com "Anais do"
+
+===============================================================================
+Q23 - Estou querendo citar um artigo cujo um dos autores é o prof. João
+Manoel Gomes da Silva Jr. Se no .bib faço o campo author="Jo{\~a}o Manoel
+{GOMES DA SILVA JR.}", a referência fica sempre em letras maiúsculas, mesmo
+quando o estilo usa letras minúsculas. Se faço author="Jo{\~a}o Manoel
+{Gomes da Silva Jr.}", a referência fica sempre em letras minúsculas, mesmo
+quando o estilo usa letras maiúsculas.
+
+A23 - O correto é colocar assim:
+
+author="Jo{\~a}o Manoel Gomes{~}da{~}Silva{~}Jr."
+
+e aí o BiBTeX converte para letras maiúsculas ou minúsculas conforme o estilo.
+
+===============================================================================
+Q24 - Estou gerando o pdf com o verso de algumas páginas em branco e
+alternando o lado do número da página, está errado? A dissertação de um
+colega está diferente, sem páginas em branco e com os números sempre do
+mesmo lado da página. Qual seria a forma correta de gerar o pdf?
+
+A24 - As duas formas estao corretas, depende do objetivo.
+
+A forma como está a tua dissertação é para impressão em frente e verso e é
+selecionada quando se usa a opcao openright no \documentclass.
+
+A forma como está a dissertação do seu colega é para impressão somente em
+frente e é selecionada quando se usa a opcao oneside no \documentclass.
+
+Note que a numeração das páginas, não só a posição dos números, é diferente
+em um caso e no outro, devido à inclusão dos versos em branco em algumas
+páginas.
+
+A gráfica da UFRGS vai produzir as cópias da versão final em frente e verso,
+portanto é mais adequado usar frente e verso desde agora. Além de poupar
+papel faz, com que os números das páginas na versão pdf fiquem consistentes
+com os da versão impressa pela gráfica.
+
+Porém, há quem prefira que as versões preliminares sejam impressas só em
+frente, para que o verso das folhas possa ser usado para anotações.
+
+===============================================================================
\ No newline at end of file
--- /dev/null
+%==============================================================================
+% deletabnt.bst
+% Estilo BibTeX para formatação de referências no padrão ABNT
+%
+% O deletabnt.bst é um fork do estilo abnt.bst
+%
+% Copyright (C) 2014 Walter Fetter Lages
+%==============================================================================
+% abnt.bst
+% Estilo BibTeX de formatação de referências bibliográficas no padrão ABNT
+%
+% UFRGS TeX Users Group
+% Informatics Institute --- UFRGS
+% Porto Alegre, Brazil
+% http://www.inf.ufrgs.br/utug
+% Discussion list: utug-l@inf.ufrgs.br
+%
+% $Id: abnt.bst,v 5.7 2003/04/15 15:09:10 avila Exp $
+%
+% Copyright (C) 2001-2003 UFRGS TeX Users Group
+%==============================================================================
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+%==============================================================================
+%
+% Changes by Walter Fetter Lages:
+%
+% 2014.07.01 Included the event year in the type @inproceedings
+% (regression to bibabnt-5.0.1)
+%
+%==============================================================================
+% Definição dos campos das entradas
+%==============================================================================
+ENTRY
+{
+ author
+ editor
+ title
+ booktitle
+ chapter
+ pages
+ address
+ publisher
+ year
+ journal
+ month
+ number
+ edition
+ howpublished
+ institution
+ key
+ note
+ organization
+ school
+ series
+ type
+ volume
+}
+{}
+{
+ label
+ year.char
+}
+
+INTEGERS {i j n}
+STRINGS {s t last.label last.year.char current.letter names new.pages}
+
+%==============================================================================
+% Definicao dos nomes dos meses
+%==============================================================================
+MACRO {jan} {"Jan."}
+MACRO {feb} {"Feb."}
+MACRO {mar} {"Mar."}
+MACRO {apr} {"Apr."}
+MACRO {may} {"May"}
+MACRO {jun} {"June"}
+MACRO {jul} {"July"}
+MACRO {aug} {"Aug."}
+MACRO {sep} {"Sept."}
+MACRO {oct} {"Oct."}
+MACRO {nov} {"Nov."}
+MACRO {dec} {"Dec."}
+
+%==============================================================================
+% Definicao de strings usados na elaboracao das referencias
+%==============================================================================
+FUNCTION {str:mastersthesis} {"Disserta{\c{c}}{\~a}o (Mestrado em Engenharia El{\'e}trica)"}
+FUNCTION {str:phdthesis} {"Tese (Doutorado em Engenharia El{\'e}trica)"}
+FUNCTION {str:chapter} {"Cap."}
+
+%==============================================================================
+% Definicao das abreviaturas padrao
+%==============================================================================
+MACRO {acmcs} {"ACM Computing Surveys"}
+MACRO {acta} {"Acta Informatica"}
+MACRO {cacm} {"Communications of the ACM"}
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+MACRO {ibmsj} {"IBM Systems Journal"}
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+MACRO {ipl} {"Information Processing Letters"}
+MACRO {jacm} {"Journal of the ACM"}
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+MACRO {scp} {"Science of Computer Programming"}
+MACRO {sicomp} {"SIAM Journal on Computing"}
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+MACRO {tods} {"ACM Transactions on Database Systems"}
+MACRO {tog} {"ACM Transactions on Graphics"}
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+MACRO {tcs} {"Theoretical Computer Science"}
+
+%==============================================================================
+% Exibe warning quando um campo ``required'' esta' faltando. Recebe na pilha o
+% tipo do campo.
+%==============================================================================
+FUNCTION {show.missing.field.warning}
+{
+ "Falta o campo " swap$ " em " cite$ * * * warning$
+}
+
+%==============================================================================
+% Funcoes logicas
+%==============================================================================
+FUNCTION {not}
+{
+ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{
+ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{
+ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {is.numeric.char}
+{
+ #1 #1 substring$
+ duplicate$ "" =
+ {pop$ #0}
+ {
+ duplicate$ chr.to.int$ #47 >
+ swap$ chr.to.int$ #58 <
+ and
+ }
+ if$
+}
+
+FUNCTION {is.uppercase.char}
+{
+ #1 #1 substring$
+ duplicate$ "" =
+ {pop$ #0}
+ {
+ duplicate$ chr.to.int$ #64 >
+ swap$ chr.to.int$ #91 <
+ and
+ }
+ if$
+}
+
+%==============================================================================
+% Escreve no arquivo o comando que gera o item
+%
+% Parm:
+% um string com a formatacao do item
+%==============================================================================
+FUNCTION {write.item}
+{
+ "\bibitem[" label * "]{" * cite$ * "} " *
+ swap$ *
+ write$ newline$ newline$
+}
+
+%==============================================================================
+% Separa o titulo em titulo e sub-titulo, empilhando o sub-titulo e o titulo,
+% nessa ordem
+%
+% Parm:
+% o titulo
+%==============================================================================
+FUNCTION {extract.subtitle}
+{
+ #1 'i :=
+
+ duplicate$
+ i #1 substring$
+ {
+ duplicate$ ":" = not
+ swap$ "" = not
+ and
+ }
+ {
+ #1 i + 'i :=
+ duplicate$
+ i #1 substring$
+ } while$
+
+ duplicate$ i #999 substring$
+ swap$
+ #1 i #1 - substring$
+}
+
+%==============================================================================
+% Separa a primeira palavra do texto, empilhando o resto e a palavra, nessa
+% ordem
+%
+% Parm:
+% o texto
+%==============================================================================
+FUNCTION {extract.first.word}
+{
+ #1 'i :=
+
+ duplicate$
+ i #1 substring$
+ {
+ duplicate$ " " = not
+ swap$ "" = not
+ and
+ }
+ {
+ #1 i + 'i :=
+ duplicate$
+ i #1 substring$
+ } while$
+
+ duplicate$ i #999 substring$
+ swap$
+ #1 i #1 - substring$
+}
+
+%==============================================================================
+% Enfatiza um string
+%
+% Parm:
+% o string
+%==============================================================================
+FUNCTION {emphasize}
+{
+ "\textbf{" swap$ * "}" *
+}
+
+%==============================================================================
+% Adiciona um texto (se nao-empty$) ja' formatado ao item, separando-o por
+% ponto.
+% Ex.: NOME. Titulo. data. ano.
+%
+% Parm:
+% um string representando o item (pode ser vazio, para iniciar o item)
+% o texto a ser adicionado
+%==============================================================================
+FUNCTION {add.to.item}
+{
+ duplicate$ empty$
+ 'pop$
+ {
+ swap$
+ duplicate$ empty$
+ 'skip$
+ {" " *}
+ if$
+ swap$ add.period$ *
+ }
+ if$
+}
+
+%==============================================================================
+% Adiciona um item (se nao-empty$) a uma lista do tipo "a, b, c, ..."
+%
+% Parm:
+% um string representando a lista (pode ser vazio, para criar uma lista)
+% o item a ser adicionado
+%==============================================================================
+FUNCTION {add.to.list}
+{
+ duplicate$ empty$
+ 'pop$
+ {
+ swap$
+ duplicate$ empty$
+ 'skip$
+ {", " *}
+ if$
+ swap$ *
+ }
+ if$
+}
+
+%==============================================================================
+% Adiciona um nome a uma lista de nomes (separados por ponto-e-virgula)
+%
+% Parm:
+% um string representando a lista (pode ser vazio, para criar uma lista)
+% o nome a ser adicionado
+%==============================================================================
+FUNCTION {add.to.namelist}
+{
+ swap$
+ duplicate$ empty$
+ 'skip$
+ {"; " *}
+ if$
+ swap$ *
+}
+
+%==============================================================================
+% Formata uma lista de nomes.
+%
+% Parm:
+% os nomes a serem formatados
+%==============================================================================
+FUNCTION {format.names}
+{
+ duplicate$ num.names$ 'n :=
+ #1 'i :=
+ "" 'names :=
+
+ {i n #1 + <}
+ {
+ duplicate$ duplicate$ i "{ll}{~jj}" format.name$
+ duplicate$ "others" =
+ n #3 >
+ i #2 =
+ and
+ or
+ {
+ pop$ pop$ names " et~al." *
+ n 'i :=
+ }{
+ "u" change.case$ swap$
+ i "{, f.}{~vv}" format.name$ *
+ names swap$ add.to.namelist
+ } if$ 'names :=
+ #1 i + 'i :=
+ } while$
+ pop$
+ names
+ duplicate$ #-1 #1 substring$ "." = {
+ #-2 global.max$ substring$
+ "\@." *
+ }
+ 'skip$
+ if$
+}
+
+%==============================================================================
+% Formata uma lista de sobrenomes.
+%
+% Parm:
+% os nomes a serem formatados
+%==============================================================================
+FUNCTION {format.family.names}
+{
+ duplicate$ num.names$ 'n :=
+ #1 'i :=
+ "" 'names :=
+
+ {i n #1 + <}
+ {
+ duplicate$ i "{ll}{~jj}" format.name$
+ duplicate$ "others" =
+ n #3 >
+ i #2 =
+ and
+ or
+ {
+ pop$ names " et~al." *
+ n 'i :=
+ }{
+ "u" change.case$
+ names swap$ add.to.namelist
+ } if$ 'names :=
+ #1 i + 'i :=
+ } while$
+ pop$
+ names
+}
+
+%==============================================================================
+% Formata uma lista de sobrenomes com todos os autores.
+%
+% Parm:
+% os nomes a serem formatados
+%==============================================================================
+FUNCTION {format.family.names.all}
+{
+ duplicate$ num.names$ 'n :=
+ #1 'i :=
+ "" 'names :=
+
+ {i n #1 + <}
+ {
+ duplicate$ i "{ll}{~jj}" format.name$
+ duplicate$ "others" =
+ {
+ pop$ names " et~al." *
+ n 'i :=
+ }{
+ "u" change.case$
+ names swap$ add.to.namelist
+ } if$ 'names :=
+ #1 i + 'i :=
+ } while$
+ pop$
+ names
+}
+
+%==============================================================================
+% Formata um titulo (pode ser `title' ou `booktitle')
+%
+% Parm:
+% um valor (0 ou 1) que indica se a formatacao deve ser enfatizada ou nao
+% um string com o titulo a ser formatado
+%==============================================================================
+FUNCTION {format.title}
+{
+ swap$
+ {extract.subtitle emphasize}
+ {extract.subtitle}
+ if$
+ swap$ "l" change.case$ *
+}
+
+%==============================================================================
+% Retorna a indicacao de paginas ajustada para ter dois tracos (`--') se a
+% entrada so' tiver um.
+%==============================================================================
+FUNCTION {get.adjusted.pages}
+{
+ #1 'i :=
+ "" 'new.pages :=
+ pages #1 #1 substring$
+ {duplicate$ "" = not}
+ {
+ duplicate$ "-" =
+ pages i #1 - #1 substring$ "-" = not
+ and
+ pages i #1 + #1 substring$ "-" = not
+ and
+ {"-" *}
+ 'skip$
+ if$
+ new.pages swap$ * 'new.pages :=
+ #1 i + 'i :=
+ pages i #1 substring$
+ } while$
+ pop$
+ new.pages
+}
+
+%==============================================================================
+% Coloca a primeira palavra do titulo em letras maiusculas e o resto em
+% minusculas. Esta funcao e' usada para gerar referencias cuja entrada e' pelo
+% titulo.
+%==============================================================================
+FUNCTION {format.entrytitle}
+{
+ #0 title format.title
+ extract.first.word "u" change.case$
+ swap$ *
+}
+
+%==============================================================================
+% Converte a edicao literal ("First", "Second", etc., que é o padrão indicado
+% no manual do BibTeX) para o algarismo correspondente. Recebe na pilha o
+% string e devolve o numero.
+%==============================================================================
+FUNCTION {convert.to.number}
+{
+ duplicate$ "First" =
+ {pop$ "1"}
+ {duplicate$ "Second" =
+ {pop$ "2"}
+ {duplicate$ "Third" =
+ {pop$ "3"}
+ {duplicate$ "Fourth" =
+ {pop$ "4"}
+ {duplicate$ "Fifth" =
+ {pop$ "5"}
+ {duplicate$ "Sixth" =
+ {pop$ "6"}
+ {duplicate$ "Seventh" =
+ {pop$ "7"}
+ {duplicate$ "Eighth" =
+ {pop$ "8"}
+ {duplicate$ "Ninth" =
+ {pop$ "9"}
+ {duplicate$ "Tenth" =
+ {pop$ "10"}
+ {skip$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+}
+
+%=========================================================================
+% Formatacao dos campos. Se o campo nao existir a funcao devolve um string
+% vazio.
+%==============================================================================
+FUNCTION {format.author}
+{
+ author empty$
+ {""}
+ {author format.names}
+ if$
+}
+
+FUNCTION {format.editor}
+{
+ editor empty$
+ {""}
+ {editor format.names "~(Ed.)" *}
+ if$
+}
+
+FUNCTION {format.edition}
+{
+ edition empty$
+ {""}
+ {edition convert.to.number ".ed." *}
+ if$
+}
+
+FUNCTION {format.volume}
+{
+ volume empty$
+ {""}
+ {"v." volume *}
+ if$
+}
+
+FUNCTION {format.number}
+{
+ number empty$
+ {""}
+ {"n." number *}
+ if$
+}
+
+FUNCTION {format.month}
+{
+ month empty$
+ {""}
+ {month}
+ if$
+}
+
+FUNCTION {format.address}
+{
+ address empty$
+ {""}
+ {address}
+ if$
+}
+
+FUNCTION {format.publisher}
+{
+ type$ "mastersthesis" =
+ type$ "phdthesis" =
+ or {
+ school empty$ {""} {school} if$
+ }{
+ type$ "techreport" = {
+ institution empty$ {""} {institution} if$
+ }{
+ type$ "manual" = {
+ organization empty$ {""} {organization} if$
+ }{
+ publisher empty$ {""} {publisher} if$
+ } if$
+ } if$
+ } if$
+}
+
+FUNCTION {format.year}
+{
+ year empty$
+ {""}
+ {year}
+ if$
+}
+
+FUNCTION {format.chapter}
+{
+ chapter empty$
+ {""}
+ {
+ type empty$
+ {str:chapter}
+ {type "~" *}
+ if$
+ chapter *
+ }
+ if$
+}
+
+FUNCTION {format.pages}
+{
+ pages empty$
+ {""}
+ {"p." get.adjusted.pages *}
+ if$
+}
+
+FUNCTION {format.totalpages}
+{
+ pages empty$
+ {""}
+ {pages "~p." *}
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ {""}
+ {note}
+ if$
+}
+
+FUNCTION {format.month.year}
+{
+ month empty$
+ {year}
+ {month "~" * year *}
+ if$
+}
+
+FUNCTION {format.type}
+{
+ type empty$
+ 'skip$
+ {pop$ type}
+ if$
+}
+
+FUNCTION {format.howpublished}
+{
+ howpublished empty$
+ {""}
+ {howpublished}
+ if$
+}
+
+FUNCTION {format.series}
+{
+ series empty$
+ {""}
+ {series}
+ if$
+}
+
+FUNCTION {format.parenthised.number}
+{
+ number empty$ {
+ ""
+ }{
+ "(" number * ")" *
+ } if$
+}
+
+%==============================================================================
+% As seguintes funcoes adicionam um item a uma lista passada na pilha.
+%==============================================================================
+FUNCTION {add.address} {format.address add.to.list}
+FUNCTION {add.publisher} {format.publisher add.to.list}
+FUNCTION {add.year} {format.year add.to.list}
+FUNCTION {add.chapter} {format.chapter add.to.list}
+FUNCTION {add.edition} {format.edition add.to.list}
+FUNCTION {add.volume} {format.volume add.to.list}
+FUNCTION {add.number} {format.number add.to.list}
+FUNCTION {add.month} {format.month add.to.list}
+FUNCTION {add.totalpages} {format.totalpages add.to.list}
+FUNCTION {add.pages} {format.pages add.to.list}
+FUNCTION {add.note} {format.note add.to.list}
+FUNCTION {add.month.year} {format.month.year add.to.list}
+FUNCTION {add.howpublished} {format.howpublished add.to.list}
+
+%==============================================================================
+% Converte virgula para dois-pontos; usado na formatacao do publisher de
+% proceedings e inproceedings, que normalmente levam tambem o local de publi-
+% cao; no padrao ABNT essa separacao deve ser por dois-pontos.
+% Recebe o string original e devolve o novo.
+%==============================================================================
+FUNCTION {comma.to.colon}
+{
+ 's :=
+ "" 't :=
+ #1 'i :=
+ {s i #1 substring$ "" = not}
+ {
+ s i #1 substring$ duplicate$ "," =
+ {pop$ t ":" * 't :=}
+ {t swap$ * 't :=}
+ if$
+ i #1 + 'i :=
+ } while$
+ t
+}
+
+%
+% localiza a posicao do primeiro caractere maiusculo
+% recebe o string, devolve a posicao
+%
+FUNCTION {find.first.uppercase.char}
+{
+ 's :=
+ #1 'j :=
+ #1 'i :=
+ {
+ s i #1 substring$ 't :=
+ t "" = not
+ t is.uppercase.char not
+ and
+ }
+ {
+ i #1 + 'i :=
+ t "\" = not
+ t "{" = not
+ and
+ t "}" = not
+ and
+ {i 'j :=}
+ 'skip$
+ if$
+ } while$
+ t "" =
+ {#1}
+ {j}
+ if$
+}
+
+%
+% extrai o primeiro numero que aparece no string passado na pilha,
+% retornando-o; se nao ha' numero, retorna ""
+%
+FUNCTION {extract.first.number}
+{
+ 's :=
+ "" 't :=
+ #1 'i :=
+ {
+ s i #1 substring$
+ duplicate$ is.numeric.char not
+ swap$ "" = not
+ and
+ }
+ {
+ i #1 + 'i :=
+ } while$
+ {s i #1 substring$ is.numeric.char}
+ {
+ t s i #1 substring$ * 't :=
+ i #1 + 'i :=
+ } while$
+ t
+}
+
+%
+% divide um string em dois
+% recebe o string e a posicao
+% devolve a primeira e a segunda parte
+FUNCTION {split.string}
+{
+ swap$ 's :=
+ duplicate$
+ s swap$ #1 swap$ #1 - substring$
+ swap$ s swap$ global.max$ substring$
+}
+
+%
+% recebe o titulo original e devolve, na ordem, o tipo de proceedings e o
+% restante do titulo
+%
+FUNCTION {extract.proceedings.type}
+{
+ 's :=
+ type empty$ not
+ {type s}
+ {"dummy"
+ pop$ s #1 #11 substring$ duplicate$ "Proceedings" =
+ {s #12 global.max$ substring$}{
+ pop$ s #1 #5 substring$ duplicate$ "Proc." =
+ {pop$ "Proceedings" s #6 global.max$ substring$}{
+ pop$ s #1 #22 substring$ duplicate$ "Conference Proceedings" =
+ {pop$ "Proceedings" s #23 global.max$ substring$}{
+ pop$ s #1 #6 substring$ duplicate$ "Annals" =
+ {s #7 global.max$ substring$}{
+ pop$ s #1 #5 substring$ duplicate$ "Actas" =
+ {s #6 global.max$ substring$}{
+ pop$ s #1 #5 substring$ duplicate$ "Anais" =
+ {s #6 global.max$ substring$}{
+ pop$ s #1 #6 substring$ duplicate$ "Anales" =
+ {s #7 global.max$ substring$}{
+ pop$ s #1 #8 substring$ duplicate$ "Memorias" =
+ {s #9 global.max$ substring$}{
+ pop$ s #1 #22 substring$ duplicate$ "Trabajos Seleccionados" =
+ {s #23 global.max$ substring$}{
+ pop$ s #1 #11 substring$ duplicate$ "Tagungsband" =
+ {s #12 global.max$ substring$}
+ {pop$ "Anais" s} if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+}
+
+%==============================================================================
+% Converte um booktitle do tipo "Proc. of XXX" no padrao ABNT
+% Recebe na pilha o titulo original
+% Devolve na pilha, na ordem:
+% - o tipo de publicacao
+% - o titulo ja' formatado (em maiusculas e com a edicao)
+%==============================================================================
+FUNCTION {process.proceedings.booktitle}
+{
+ extract.proceedings.type
+ duplicate$ find.first.uppercase.char split.string "u" change.case$
+ swap$ extract.first.number
+ duplicate$ empty$
+ 'pop$
+ {", " swap$ * * "." *}
+ if$
+}
+
+%==============================================================================
+% Estas funcoes formatam partes comuns a varios tipos de referencia.
+%==============================================================================
+FUNCTION {format.publication}
+{
+ ""
+ address empty$
+ {
+ "[S.l."
+ format.publisher empty$
+ {":~s.n.]" *}
+ {"]: " format.publisher * *}
+ if$ add.year add.to.item
+ }
+ {
+ format.address
+ format.publisher empty$
+ {": [s.n.]" *}
+ {": " format.publisher * *}
+ if$ add.year add.to.item
+ }
+ if$
+}
+
+FUNCTION {format.proceedings.publication}
+{
+ publisher empty$
+ {"[S.l.:~s.n.]"}
+ {publisher comma.to.colon}
+ if$ add.year
+}
+
+FUNCTION {format.misc.publication}
+{
+ publisher empty$ {
+ format.address add.year
+ }{
+ format.publication
+ } if$
+}
+
+FUNCTION {format.series.info}
+{
+ "(" format.series *
+ add.volume ")" *
+}
+
+FUNCTION {format.complementary.data.with.totalpages}
+{
+ "" format.totalpages add.to.item
+ ""
+ series empty$
+ {add.volume add.number add.to.item}
+ {add.number add.to.item format.series.info add.to.item}
+ if$
+}
+
+FUNCTION {format.complementary.data.with.page.range}
+{
+ ""
+ series empty$
+ {add.volume add.number add.pages}
+ {"" add.number add.pages add.to.item format.series.info add.to.item}
+ if$
+}
+
+%
+% esta funcao recebe o titulo a ser formatado
+%
+FUNCTION {format.proceedings.booktitle}
+{
+ process.proceedings.booktitle "" swap$ add.year add.address add.to.item
+ swap$ "{\ldots}" * emphasize " " swap$ * *
+}
+
+%==============================================================================
+% Formatacao das entradas
+%==============================================================================
+FUNCTION {article}
+{
+ ""
+ format.author add.to.item
+ #0 title format.title add.to.item
+ journal emphasize
+ address empty$ {
+ "[S.l.]" add.to.list
+ }{
+ add.address
+ } if$
+ add.volume add.number add.pages add.month.year add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {book}
+{
+ ""
+ editor empty$
+ {format.author}
+ {format.editor}
+ if$ add.to.item
+ #1 title format.title add.to.item
+ format.edition add.to.item
+ format.publication add.to.item
+ format.complementary.data.with.totalpages add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {inbook}
+{
+ ""
+ editor empty$
+ {format.author}
+ {format.editor}
+ if$ add.to.item
+ #1 title format.title add.to.item
+ format.edition add.to.item
+ format.publication add.to.item
+ format.complementary.data.with.page.range add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {incollection}
+{
+ ""
+ format.author add.to.item
+ #0 title format.title add.to.item
+ "In:"
+ editor empty$
+ 'skip$
+ {format.editor add.to.item}
+ if$
+ #1 booktitle format.title add.to.item add.to.item
+ format.edition add.to.item
+ format.publication add.to.item
+ format.complementary.data.with.page.range add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {inproceedings}
+{
+ ""
+ format.author add.to.item
+ #0 title format.title add.to.item
+ " In: " booktitle format.proceedings.booktitle * *
+ format.proceedings.publication add.to.item
+ format.complementary.data.with.page.range add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {manual}
+{
+ ""
+ author empty$
+ {format.entrytitle add.to.item}
+ {
+ format.author add.to.item
+ #1 title format.title add.to.item
+ }
+ if$
+
+ format.edition add.to.item
+ format.publication add.to.item
+ format.complementary.data.with.totalpages add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {mastersthesis}
+{
+ ""
+ format.author add.to.item
+ #1 title format.title add.to.item
+ format.year add.to.item
+ format.totalpages add.to.item
+ str:mastersthesis format.type " --- " * format.publisher *
+ add.address
+ add.year add.to.item
+ format.note add.to.item
+ format.parenthised.number add.to.item
+
+ write.item
+}
+
+FUNCTION {misc}
+{
+ ""
+ author empty$
+ {
+ title empty$
+ 'skip$
+ {format.entrytitle add.to.item}
+ if$
+ }
+ {
+ format.author add.to.item
+ title empty$
+ 'skip$
+ {#1 title format.title add.to.item}
+ if$
+ }
+ if$
+ note empty$ {
+ format.misc.publication add.to.item
+ format.complementary.data.with.totalpages add.to.item
+ }{
+ format.note add.howpublished add.to.item
+ } if$
+
+ write.item
+}
+
+FUNCTION {phdthesis}
+{
+ ""
+ format.author add.to.item
+ #1 title format.title add.to.item
+ format.year add.to.item
+ format.totalpages add.to.item
+ str:phdthesis format.type " --- " * format.publisher *
+ add.address
+ add.year add.to.item
+ format.note add.to.item
+ format.parenthised.number add.to.item
+
+ write.item
+}
+
+FUNCTION {proceedings}
+{
+ ""
+ title format.proceedings.booktitle *
+ format.proceedings.publication add.to.item
+ format.complementary.data.with.page.range add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {techreport}
+{
+ ""
+ format.author add.to.item
+ #1 title format.title add.to.item
+ format.publication add.to.item
+ format.totalpages add.to.item
+ type empty$
+ {""}
+ {"(" type * "~" * number * ")" *}
+ if$ add.to.item
+ format.note add.to.item
+
+ write.item
+}
+
+FUNCTION {booklet} {misc}
+FUNCTION {unpublished} {misc}
+FUNCTION {default.type} {misc}
+
+%==============================================================================
+% Inicializa algumas variaveis globais
+%==============================================================================
+FUNCTION {init}
+{
+ "" 'last.label :=
+ "b" 'current.letter :=
+}
+
+%==============================================================================
+% Retorna na pilha o string a ser usado para a ordenacao das entradas.
+%==============================================================================
+FUNCTION {get.sortstring}
+{
+ author empty$ not {format.author " AAA" *}{
+ editor empty$ not {format.editor " AAA" *}{
+ title empty$ not {title}{
+ note empty$ not {note}{
+ key empty$ not {key}{
+ "???"
+ } if$
+ } if$
+ } if$
+ } if$
+ } if$
+
+ type$ "inbook" =
+ booktitle empty$ not
+ and
+ {
+ booktitle title = not
+ {pop$ title}
+ 'skip$
+ if$
+ }
+ 'skip$
+ if$
+
+ type$ "proceedings" = {
+ pop$
+ title process.proceedings.booktitle
+ swap$ pop$
+ }
+ 'skip$
+ if$
+ purify$ "l" change.case$
+}
+
+%==============================================================================
+% Define as ``keys'' para ordenacao
+%==============================================================================
+FUNCTION {set.sortkeys}
+{
+ get.sortstring
+ format.year *
+ #1 entry.max$ substring$
+ #1 global.max$ substring$
+ 'sort.key$ :=
+}
+
+%==============================================================================
+% Ajusta os labels, adicionando letras minusculas aos labels de mesmo autor e
+% ano
+%==============================================================================
+FUNCTION {adjust.label}
+{
+ last.label
+ label 'last.label :=
+ label = {
+ current.letter 'year.char :=
+ current.letter chr.to.int$
+ #1 + int.to.chr$
+ 'current.letter :=
+ }{
+ "" 'year.char :=
+ "b" 'current.letter :=
+ } if$
+}
+FUNCTION {reverse.adjust.label}
+{
+ last.year.char "b" = {
+ "a" 'year.char :=
+ }
+ 'skip$
+ if$
+ year.char 'last.year.char :=
+}
+
+%==============================================================================
+% Retorna na pilha o string a ser usado para a construcao do label. Quase sempre
+% sera' o sobrenome do primeiro autor, mas para alguns tipos de referencia pode
+% ser o editor, a entidade ou o titulo
+%==============================================================================
+FUNCTION {get.labelstring}
+{
+ author empty$ not
+ {author format.family.names}
+ {
+ editor empty$ not
+ {editor format.family.names}
+ {
+ title empty$ not
+ {title "u" change.case$}
+ {
+ key empty$ not
+ {key}
+ {"???"}
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+
+ type$ "inbook" =
+ booktitle empty$ not
+ and
+ {
+ booktitle title = not
+ {pop$ title "u" change.case$}
+ 'skip$
+ if$
+ }
+ 'skip$
+ if$
+}
+
+%==============================================================================
+% Retorna na pilha o string a ser usado para a construcao do label. Quase sempre
+% sera' o sobrenome do primeiro autor, mas para alguns tipos de referencia pode
+% ser o editor, a entidade ou o titulo
+%
+% esta versao retorna os nomes completos
+%==============================================================================
+FUNCTION {get.labelstring.all}
+{
+ author empty$ not
+ {author format.family.names.all}
+ {
+ editor empty$ not
+ {editor format.family.names.all}
+ {
+ title empty$ not
+ {title "u" change.case$}
+ {
+ key empty$ not
+ {key}
+ {"???"}
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+
+ type$ "inbook" =
+ booktitle empty$ not
+ and
+ {
+ booktitle title = not
+ {pop$ title "u" change.case$}
+ 'skip$
+ if$
+ }
+ 'skip$
+ if$
+}
+
+%==============================================================================
+% Construção dos labels
+%==============================================================================
+FUNCTION {prepare.label.sorting}
+{
+ get.labelstring.all format.year *
+ duplicate$ 'label := 'sort.key$ :=
+}
+FUNCTION {make.label}
+{
+ get.labelstring
+ "(" *
+ year empty$ {
+ "????"
+ }{
+ year year.char *
+ } if$ *
+ ")" *
+ get.labelstring.all *
+ #1 entry.max$ substring$
+ #1 global.max$ substring$
+ 'label :=
+}
+
+%==============================================================================
+% Inicia a definicao das referencias
+%==============================================================================
+FUNCTION {begin.bib}
+{
+ preamble$ empty$
+ 'skip$
+ {preamble$ write$ newline$ newline$}
+ if$
+ "\begin{thebibliography}{\hspace{\parindent}}" write$ newline$
+ newline$
+}
+
+%==============================================================================
+% Termina a definicao das referencias
+%==============================================================================
+FUNCTION {end.bib}
+{
+ "\end{thebibliography}" write$ newline$
+}
+
+%==============================================================================
+% main()
+%==============================================================================
+READ
+EXECUTE {init}
+ITERATE {prepare.label.sorting}
+SORT
+ITERATE {adjust.label}
+REVERSE {reverse.adjust.label}
+ITERATE {make.label}
+ITERATE {set.sortkeys}
+SORT
+EXECUTE {begin.bib}
+ITERATE {call.type$}
+EXECUTE {end.bib}