Generieren des BiBTeX-Quellcodes aus LuaLaTeX

Generieren des BiBTeX-Quellcodes aus LuaLaTeX

Ich frage mich, ob es eine Möglichkeit gibt, die BibTeX-Einträge direkt aus dem LuaLaTeX-Quellcode des zu kompilierenden Dokuments zu generieren. Bei einem bestimmten Ablagesystem könnte der LuaTeX-Quellcode alle gewünschten Informationen enthalten:

  1. Dokumenttyp (Artikel, Bericht, Buch)
  2. Autor/Titel
  3. Benutzerdefinierte Variablennamen wie Version, Abteilung usw.

Wenn auf diese Variablen vom Lua-Teil des Codes aus zugegriffen werden kann und das \directluaSchreiben von Dateien möglich ist, kann .bibbeim Kompilieren des Dokuments möglicherweise eine Datei generiert werden.

Ich frage mich, ob meine Frage berechtigt ist und ob jemand bereits etwas Ähnliches versucht hat, wie ich es oben beschrieben habe.

Antwort1

Lua ist definitiv nicht erforderlich. Meine Vorlage für meine eigenen Arbeitsdokumente beginnt mit

%% Metadata
\begin{filecontents}[overwrite,noheader]{\jobname.meta-bib}
@article
author = {test, test},
title = {title},
keywords = {GR},
\end{filecontents}
\documentclass{amsart}
\usepackage{...

Auf diese Weise können Sie beliebige bibliografische Daten in die filecontentsUmgebung einfügen und in einer Datei speichern .meta-bib, die Sie dann mithilfe eines Shell-Skripts absaugen können. (In meinem Fall sind die von mir eingefügten Daten unvollständig [es fehlen einige Klammern und der Identifizierungsschlüssel], da mein Shell-Skript zum Absaugen diese automatisch generiert, aber Sie können stattdessen auch alles von Hand machen.)

Die obige Lösung ist wahrscheinlich die flexibelste, da sie keine Kenntnisse/Annahmen über einzelne Dokumentklassen erfordert. Eine alternative Methode besteht darin, eine Paketdatei ( .sty) zu schreiben, die diesen Prozess automatisiert; dies würde erfordern

  • Neudefinition \titlezum Schreiben des Langtitels in die Bib-Datei; bei Dokumentklassen, die optionale Argumente zulassen, muss darauf geachtet werden \title.

  • Neudefinition \author, um die Autoreninformationen in die Bib-Datei zu schreiben. Dies kann äußerst schwierig sein, da einige Dokumentklassen die Autorenadresse als Teil des \authorBefehls erwarten und andere nicht. Einige Dokumentklassen listen einzelne Autoren mit mehreren \authorAufrufen auf und einige Dokumentklassen verwenden \author{Author1 \and Author2 \and Author3}.

    Da es mir nicht gelingt, dies für alle von mir verwendeten Dokumentklassen vollständig zu automatisieren, bin ich dazu übergegangen, filecontentsdie Daten einfach von Hand zu schreiben.

  • Wenn Ihr Artikel veröffentlicht wird, können Sie die Veröffentlichungsinformationen (Zeitschrift, Band, Datum) auf keinen Fall allein anhand der Quelle herausfinden.es sei dennSie codieren es irgendwie fest in die TeX-Datei. In diesem Fall erhalten Sie etwas, das fast dasselbe ist wie die filecontentsoben erwähnte Lösung, aber viel weniger Flexibilität bietet.


Auf Anfrage das „Vakuumskript“ (nichts Besonderes, außer dass es auch Zeitstempel mithilfe der Git-Commit-Informationen generiert)

#!/bin/bash

BIBFILE="entries.bib"

echo '% Automatically generated entries database' > $BIBFILE
echo -n '% Updated: ' >> $BIBFILE
date >> $BIBFILE

for texfile in `git ls-tree master --name-only *tex`
do
        bname=`basename -s .tex $texfile`
        if [ ${bname}.meta-bib -ot $texfile ]
        then
                echo "${texfile} out of date, skipping."
        else
                moddate=`git log -n 1 --date="format:%F %R" --format="format:%cd" ${texfile}`
                modcommit=`git log -n 1 --format="format:%h" ${texfile}`
                origdate=`git log  --date="format:%F" --format="format:%cd" --diff-filter=A ${texfile}`
                head -n 1 ${bname}.meta-bib >> $BIBFILE
                echo "{ $bname," >> $BIBFILE
                tail -n +2 ${bname}.meta-bib >> $BIBFILE
                echo "lastdate = {${moddate}}," >> $BIBFILE
                echo "lastcommit = {${modcommit}}," >> $BIBFILE
                echo "origdate = {${origdate}}," >> $BIBFILE
                echo "url = {${texfile}}," >> $BIBFILE
                echo '}' >> $BIBFILE
        fi
done

Antwort2

Obwohl luaes nicht erforderlich ist, luaerleichtert es das Übertragen von Informationen von Tex in eine Datei. Soweit ich weiß, filecontentshandelt es sich um eine verbatim-ähnliche Umgebung, und es ist nicht einfach, Variablen aus TeX zu übergeben. Daher habe ich mir ein eigenes Minimalbeispiel ausgedacht, das ich unten zeige. Jetzt, da man Variablen an Lua übergeben kann, kann man ein so komplexes oder einfaches Skript schreiben, wie es in Lua erforderlich ist, um die Dinge in Gang zu bringen.

\documentclass{article}
\title{New Article}
\author{New Author}

\RequirePackage{luatextra}

\begin{luacode}
  function writebib(author)
  bibtex_file = io.open("meta.bib", "w")
  bibtex_file:write("@techreport{alpha,title={Me},author={")
  bibtex_file:write(author)
  bibtex_file:write("}}")
  end
\end{luacode}

\begin{document}
\maketitle

\makeatletter
\directlua{writebib("\luaescapestring{\@author}")}
\makeatother

\end{document}

verwandte Informationen