User Tools

Site Tools


bib:ieeestyle

Table of Contents

%

% 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 %

%

% 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
url 
  urlaccessdate

} {} {

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 Ci{\^e}ncia da Computa{\c{c}}{\~a}o)”} FUNCTION {str:phdthesis} {“Tese (Doutorado em Ci{\^e}ncia da Computa{\c{c}}{\~a}o)”} FUNCTION {str:technicalreport} {“Technical Report”} 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” = { 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$ {“, ” number * “., ” * 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} { address empty$ { “[S.l.: ” } { address “: ” *} if$ publisher empty$ {“~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$ } FUNCTION {format.complementary.data.with.page.range.to.proceedings} { “” series empty$ { add.pages} {“” 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.to.item swap$ “{\ldots}” * emphasize “ ” swap$ * * } %MAW.begin ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ INTEGERS {abnt.doi abnt.url.package iso.abbreviation} INTEGERS {url.type} INTEGERS {output.state before.all mid.sentence after.sentence after.block } FUNCTION {abnt.doi.expand.to.url} {#0} %expands a doi address to its url correspondent FUNCTION {abnt.doi.link} {#1} %links doi to its url correspondent FUNCTION {abnt.doi.leave.as.is} {#2} %shows doi as is, external viewer will have %to know what to do with a “doi:” document %values for url types FUNCTION {unknown.url} {#0} FUNCTION {http.url} {#1} FUNCTION {file.url} {#2} FUNCTION {ftp.url} {#3} FUNCTION {doi.url} {#4} FUNCTION {mailto.url} {#5} FUNCTION {bbl.doi.url} {“http://dx.doi.org/”} FUNCTION {bbl.url.accessdate} {iso.abbreviation { “Cited ”} {“Acesso em: ”} if$} FUNCTION {bbl.url.available} { iso.abbreviation {“Available from Internet: ”} {“Dispon{\'\i}vel em: ”} if$} FUNCTION {output.nonnull} { 's := %the argument is written into s output.state mid.sentence = { “, ” * write$ } %mid.sentence first write comma { output.state after.block = { add.period$ write$ newline$ } { output.state before.all = 'write$ { add.period$ “ ” * write$ } if$} if$ mid.sentence 'output.state := } if$ s %now comes s } FUNCTION {output.nonnull.dash} { 's := %the argument is written into s output.state mid.sentence = { “ — ” * write$ } %mid.sentence first write comma { output.state after.block = { add.period$ write$ newline$ write$} { output.state before.all = 'write$ { add.period$ “ ” * write$ } if$} if$ mid.sentence 'output.state := } if$ s %now comes s } FUNCTION {output} %does nothing or calls output.nonull { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.dash} %does nothing or calls output.nonull { duplicate$ empty$ 'pop$ 'output.nonnull.dash if$ } FUNCTION {output.check} %like ouput, but complains if t empty { 't := duplicate$ empty$ { pop$ “campo ” t * “ vazio em ” * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {bibinfo.check} %usage: field “field” bibinfo.check { swap$ duplicate$ missing$ {pop$ pop$ “”} { duplicate$ empty$ {swap$ pop$} {swap$ pop$} if$ } if$ } FUNCTION {get.url.type} {s #1 #5 substring$ “http:” = {http.url} {s #1 #5 substring$ “file:” = {file.url} {s #1 #4 substring$ “ftp:” = {ftp.url} {s #1 #4 substring$ “doi:” = {doi.url} {s #1 #7 substring$ “mailto:” = {mailto.url} {unknown.url} if$} if$} if$} if$} if$ 'url.type := } FUNCTION {expand.doi} {s url.type doi.url = {#5 global.max$ substring$ bbl.doi.url swap$ *} 'skip$ if$ } INTEGERS {url.pos url.length} FUNCTION {filter.url.tex} {s text.length$ #1 + 'url.length := #1 'url.pos := “” 't := {url.pos url.length <} {s url.pos #1 substring$ duplicate$ “_” = {pop$ “\underline{\ }” } 'skip$ if$ duplicate$ “%” = {pop$ “\%” } 'skip$ if$ duplicate$ “&” = {pop$ “\&” } 'skip$ if$ duplicate$ “~” = {pop$ “\~{}” } 'skip$ if$ duplicate$ “/” = {pop$ “\-/” } 'skip$ if$ duplicate$ “.” = {pop$ “\-.” } 'skip$ if$ duplicate$ “\” = {pop$ “{\textbackslash}” } 'skip$ if$ t swap$ * 't := url.pos #1 + 'url.pos := } while$ t } FUNCTION {filter.url.html} {s text.length$ #1 + 'url.length := #1 'url.pos := “” 't := {url.pos url.length <} {s url.pos #1 substring$ duplicate$ “%” = {pop$ “\%” } 'skip$ if$ t swap$ * 't := url.pos #1 + 'url.pos := } while$ t } FUNCTION {compose.url} {'s := get.url.type bbl.url.available abnt.url.package #0 = { “$<$” * abnt.doi abnt.doi.expand.to.url = 'expand.doi {s} if$ * “$>$” *} 'skip$ if$ abnt.url.package #1 = { “\url{” * s * “}” *} 'skip$ if$ abnt.url.package #2 = {url.type http.url = {“\htmladdnormallink{$<$” * filter.url.tex * “$>$}{” * filter.url.html * “}” *} 'skip$ if$ url.type doi.url = url.type ftp.url = or url.type mailto.url = or {“\htmladdnormallink{$<$” * abnt.doi abnt.doi.expand.to.url = 'expand.doi {s} if$ * “$>$}{” * abnt.doi abnt.doi.leave.as.is = {s} 'expand.doi if$ * “}” * } 'skip$ if$ url.type unknown.url = {“$<$” * filter.url.tex * “$>$” *} 'skip$ if$} 'skip$ if$ } FUNCTION {format.url} { url empty$ 'skip$ {url compose.url output new.sentence } if$ urlaccessdate duplicate$ empty$ 'skip$ { bbl.url.accessdate swap$ *} if$ “urlaccessdate” bibinfo.check output new.sentence } FUNCTION{format.url2} { url empty$ { “” } { “Available in: <” url * “>” add.to.item } if$ urlaccessdate empty$ { “” } { “ Accessed: ” urlaccessdate add.to.item } if$ * } %MAW.end ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %============================================================================== % 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 format.url2 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.to.proceedings 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.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$ format.url2 add.to.item 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.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.to.proceedings add.to.item format.note add.to.item write.item } FUNCTION {techreport} { “” format.author add.to.item #1 title format.title add.to.item str:technicalreport format.type “ — ” * format.publisher * add.to.item type empty$ {“”} {type} if$ add.note add.to.item format.parenthised.number add.to.item format.url2 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$

}

%MAW.begin %

% Corrige erro no label com todos os autores, os nomes devem ter apenas a % primeira letra em maiusculo! %

FUNCTION {add.to.namelist.2} {

swap$
duplicate$ empty$
	'skip$
	{", " *}
if$
swap$ *

}

FUNCTION {add.to.namelist.3} {

swap$
duplicate$ empty$
	'skip$
	{" and " *}
if$
swap$ *

}

FUNCTION {format.family.names.all.2} {

duplicate$ num.names$ 'n :=
#1 'i :=
"" 'names :=
{i n #1 + <}
{
	duplicate$ i "{ll}{~jj}" format.name$
	duplicate$ "others" =
	{
		pop$ names "  et~al." *
		n 'i :=
	}{
		"t" change.case$
		names swap$ 
		
		i n <
		{ 
			add.to.namelist.2 
		} {
			 add.to.namelist.3 
		} if$
		
	} if$ 'names :=
	#1 i + 'i :=
} while$
pop$
names

}

FUNCTION {format.family.names.2} {

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 :=
	}{
		duplicate$
		duplicate$
		"u" change.case$ =
		{
			
		}{
		  	"t" change.case$
		} if$
		
		names swap$ 
		
		i n <
		{ 
			add.to.namelist.2 
		} {
			 add.to.namelist.3 
		} if$
	} if$ 'names :=
	#1 i + 'i :=
} while$
pop$
names

}

FUNCTION {get.labelstring.all.2} {

author empty$ not
	{author format.family.names.2}
	{
		editor empty$ not
			{editor format.family.names.2}
			{
				title empty$ not
					{title "t" change.case$}
					{
						key empty$ not
							{key}
							{"???"}
						if$
					}
				if$
			}
		if$
	}
if$
type$ "inbook" =
booktitle empty$ not
and
	{
		booktitle title = not
			{pop$ title "t" change.case$}
			'skip$
		if$
	}
	'skip$
if$

} %MAW.end

%

% 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.2 *
#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}

bib/ieeestyle.txt · Last modified: 06/02/2013 13:44 (external edit)