Precisamente qual é o “protocolo” entre LaTeX e BibTeX?
Ou seja, se eu executar latex foo
, bibtex foo
, e latex foo
, exatamente como as informações fluem do LaTeX para o BibTeX e vice-versa?
Meu atualadivinharé que os fluxos de dados são os seguintes:
- LaTeX gera o arquivo
foo.aux
. - BibTeX lê o arquivo
foo.aux
. Ele presta atenção apenas às linhas da forma\citation{...}
,\bibstyle{...}
, e\bibdata{...}
. - BibTeX gera o arquivo
foo.bbl
. - Quando o LaTeX percebe que
foo.bbl
existe, o\bibliography
comando se comporta como\input{foo.bbl}
.
Isso é exato ou há mais do que isso? Por exemplo, é \citation{...}
sempre precisamente uma linha de texto?
Existem algumas classes e pacotes de documentos comumente usados que afetam o protocolo de alguma forma? Obviamente as biblatex
coisas serão diferentes, mas há algo menos óbvio a ter em conta?
Antecedentes: Estou interessado em escrever um script que eu possa usar como substituto imediato do BibTeX (no sentido de que do lado do LaTeX nada mudaria, mas a geração do foo.bbl
arquivo seria diferente).
Responder1
Seu palpite está mais ou menos correto, incluindo o fato de biblatex
alterar um pouco a abordagem (outros pacotes também a modificam, mas não no mesmo grau). Tomando o caso mais simples de um único .tex
arquivo sem qualquer necessidade de múltiplas bibliografias ou similares:
\bibliographystyle
escreve a\bibstyle{...}
linha no.aux
arquivo: isso pode, portanto, ser fornecido no preâmbulo\bibliography
grava a\bibdata{...}
linha no.aux
arquivo e também insere o.bbl
arquivo, se estiver disponível.\cite
escreve uma\citation{...}
linha no.aux
arquivo e também cria a citação no documento LaTeX\nocite
escreve uma\citations{...}
linha no.aux
arquivo, mas não faz nada no documento LaTeX.
Quando o BibTeX lê o .aux
arquivo, ele procura uma \bibstyle
linha e uma \bibdata
linha junto com múltiplas \citation
linhas. Em seguida, ele gravará um .bbl
arquivo, mas o que vai nele depende das instruções do .bst
arquivo. A convenção usual é que o .bbl
arquivo conterá apenas o bibliography
ambiente que contém as citações formatadas, embora nem sempre seja esse o caso.
Existem muitas adições que podem ser feitas neste fluxo de trabalho. Por exemplo, biblatex
define \bibliography
para ser usado no preâmbulo, como acontecenãotrabalhar com um .bbl
arquivo contendo dados para impressão direta. Várias bibliografias podem ser criadas usando mais de um .aux
arquivo para criar um conjunto de .bbl
arquivos. Também vi uma implementação em que uma versão XML da bibliografia é escrita como um 'comentário' LaTeX dentro do .bbl
arquivo. Essas abordagens ainda usam a mesma interface subjacente, no sentido de que o BibTeX ainda procura os mesmos comandos no .aux
arquivo e escreve um .bbl
arquivo.
Tomando como exemplo o multibib
, no final do LaTeX ele define um conjunto de comandos para cada novo tipo de bibliografia, por exemplo
\newcites{sec}{Secondary Literature}
cria um novo comando de citação
\citesec{...}
Esses novos comandos são gravados em um .aux
arquivo separado do principal, o que significa que o BibTeX deve ser executado duas vezes, uma no \jobname.aux
arquivo e outra no sec.aux
arquivo. Isto irá gerardois .bbl
arquivos \jobname.bbl
e sec.bbl
, que são lidos normalmente por \bibliography
e \bibliographysec
, respectivamente. Assim, o processo geral permanece quase inalterado em relação ao caso padrão, mas há simplesmente mais arquivos envolvidos.
Responder2
sim, para o caso padrão com um arquivo aux. Mas pode haver 2 ou mais arquivos aux, por exemplo, usando multibib
ou chapterbib
ou ... Com multibib
você deve executar o arquivo aux principal e aquele que é definido pelo usuário; ele também tem a extensão .aux Pois chapterbib
você tem um arquivo aux por capítulo. ambos os casos são fáceis de tratar: bibtex *.aux
. O mesmo para pacote bibunits
.