Qual é a interface entre LaTeX e BibTeX?

Qual é a interface entre LaTeX e BibTeX?

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:

  1. LaTeX gera o arquivo foo.aux.
  2. BibTeX lê o arquivo foo.aux. Ele presta atenção apenas às linhas da forma \citation{...}, \bibstyle{...}, e \bibdata{...}.
  3. BibTeX gera o arquivo foo.bbl.
  4. Quando o LaTeX percebe que foo.bblexiste, o \bibliographycomando 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 biblatexcoisas 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.bblarquivo seria diferente).

Responder1

Seu palpite está mais ou menos correto, incluindo o fato de biblatexalterar um pouco a abordagem (outros pacotes também a modificam, mas não no mesmo grau). Tomando o caso mais simples de um único .texarquivo sem qualquer necessidade de múltiplas bibliografias ou similares:

  • \bibliographystyleescreve a \bibstyle{...}linha no .auxarquivo: isso pode, portanto, ser fornecido no preâmbulo
  • \bibliographygrava a \bibdata{...}linha no .auxarquivo e também insere o .bblarquivo, se estiver disponível.
  • \citeescreve uma \citation{...}linha no .auxarquivo e também cria a citação no documento LaTeX
  • \nociteescreve uma \citations{...}linha no .auxarquivo, mas não faz nada no documento LaTeX.

Quando o BibTeX lê o .auxarquivo, ele procura uma \bibstylelinha e uma \bibdatalinha junto com múltiplas \citationlinhas. Em seguida, ele gravará um .bblarquivo, mas o que vai nele depende das instruções do .bstarquivo. A convenção usual é que o .bblarquivo conterá apenas o bibliographyambiente 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, biblatexdefine \bibliographypara ser usado no preâmbulo, como acontecenãotrabalhar com um .bblarquivo contendo dados para impressão direta. Várias bibliografias podem ser criadas usando mais de um .auxarquivo para criar um conjunto de .bblarquivos. Também vi uma implementação em que uma versão XML da bibliografia é escrita como um 'comentário' LaTeX dentro do .bblarquivo. Essas abordagens ainda usam a mesma interface subjacente, no sentido de que o BibTeX ainda procura os mesmos comandos no .auxarquivo e escreve um .bblarquivo.


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 .auxarquivo separado do principal, o que significa que o BibTeX deve ser executado duas vezes, uma no \jobname.auxarquivo e outra no sec.auxarquivo. Isto irá gerardois .bblarquivos \jobname.bble sec.bbl, que são lidos normalmente por \bibliographye \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 multibibou chapterbibou ... Com multibibvocê deve executar o arquivo aux principal e aquele que é definido pelo usuário; ele também tem a extensão .aux Pois chapterbibvocê tem um arquivo aux por capítulo. ambos os casos são fáceis de tratar: bibtex *.aux. O mesmo para pacote bibunits.

informação relacionada