Wie funktioniert die Bibliografiekontrolle von ReVTeX?

Wie funktioniert die Bibliografiekontrolle von ReVTeX?

In der ReVTeX-bst-Datei, die ich für meinen eigenen Text anpasse, gibt es diesen Codeabschnitt:

FUNCTION {control.decode}
{
  - duplicate$
  #0 <
    {
      skip$ pop$ swap$ #0
    }
    {
      swap$ pop$ swap$ #1
    }
  if$
  swap$ :=
}
FUNCTION {control.author.decode}
{
  control.author
  duplicate$ duplicate$ #0 < swap$ #128 < not or
    {
      int.to.str$ "(" swap$ * ")" *
      "Control cannot interpret author " swap$ *
      warning$
    }{
      'control.author.jnrlst   swap$ duplicate$ #64 control.decode
      'control.author.dotless  swap$ duplicate$ #32 control.decode
      'control.author.nospace  swap$ duplicate$ #16 control.decode
      'control.author.initials swap$ duplicate$  #8 control.decode
      'control.author.nocomma  swap$ duplicate$  #4 control.decode
      'control.author.first    swap$ duplicate$  #2 control.decode
      'control.author.reversed swap$ duplicate$  #1 control.decode
      duplicate$ #0 =
        'skip$
        {
          "Control: residue of author"
          "(" swap$ * ")" * *
          warning$
        }
      if$
      pop$
    }
  if$
}

Dieser Code legt die Anzeigeoptionen für den Autor fest, mit denen ich herumspielen möchte. Die Optionen werden wie folgt festgelegt:

@CONTROL{REVTEX41Control}
@CONTROL{apsrev41Control,author="42",editor="1",pages="1",title="0",year="0"}

Wobei dies 42eine Optionseinstellung darstellt (denke ich, weil die Auswahl zufälliger Werte wie 3, 7 und 00) Warnungen in Bezug auf diese Optionen erzeugt. Kann mir jemand erklären, wie diese „dekodiert“ werden? Ich würde gerne herausfinden, was diese tatsächlich mit der Ausgabe machen.

Antwort1

Die Idee dabei ist, dass control.authorInformationen über eine Vielzahl von Optionen in einer einzigen Zahl kodiert übergeben werden können. Dies ist die Standardidee, verschiedene Bits einer Zahl zu verwenden, um eine Reihe von booleschen Einstellungen zu übergeben. Um die Daten „wiederherzustellen“, control.author.decodeführt man zuerst einen Test durch, der control.authorim Bereich liegt (größer als 0, kleiner als 128). Dies geschieht durch

control.author
duplicate$ duplicate$ #0 < swap$ #128 < not or

was auf dem Eingabestapel den Wert von control.authorund das logische Ergebnis (a 1oder a 0) hinterlässt: die Postfix-Sprache nimmt letzteres als Teil von auf if$. Vorausgesetzt, der Test ist erfolgreich, wird der Block

'control.author.jnrlst   swap$ duplicate$ #64 control.decode
'control.author.dotless  swap$ duplicate$ #32 control.decode
'control.author.nospace  swap$ duplicate$ #16 control.decode
'control.author.initials swap$ duplicate$  #8 control.decode
'control.author.nocomma  swap$ duplicate$  #4 control.decode
'control.author.first    swap$ duplicate$  #2 control.decode
'control.author.reversed swap$ duplicate$  #1 control.decode

das setzt dieNamejeder Einstellung auf den Stapel, gefolgt von dem Wert, der benötigt wird, um sie bitweise zu extrahieren, und dann einem Aufruf des gemeinsamen Decoders. Zum Beispiel

'control.author.jnrlst   swap$ duplicate$ #64 control.decode

mit der Eingabe 42wird auf dem Stapel haben

"control.author.jnrlst" #42 #42 #64

kurz vor dem Aufruf von control.decode. Letzterer nimmt den Endwert ( 64hier: den „Testwert“) vom aktuellen Wert für die Steuerelemente (hier 42) ab. Wenn die Eingabe größer als der „Testwert“ wäre, control.author.jnrlstwürde das Flag (hier ) auf (true) gesetzt 1und der resultierende Rest würde für den nächsten Test in der Eingabe verbleiben. Wenn der Test fehlschlägt, wird der Eingabewert ( 42) beibehalten und das Flag auf (false) gesetzt 0. Wenn Sie das durcharbeiten, wird jedes Flag auf true/false gesetzt und die gesamte Eingabe (dhfür jede Zahl, die im Bereich liegt, sollte das Testergebnis ein Wert von 0 sein).

Im angegebenen Beispiel wird der Wert für die authorsEinstellung 42wie folgt aufgeteilt: 32 + 8 + 2,dhEinstellung control.author.dotlessund true und die anderen Einstellungen false. Um also den „richtigen“ Wert zu ermitteln, entscheiden Sie, welche Einstellungen Sie aktivieren möchten, sehen Sie sich den Code an control.author.initials, control.author.firstum den entsprechenden Wert zu finden, und addieren Sie sie alle.

verwandte Informationen