
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 42
eine 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.author
Informationen ü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.decode
führt man zuerst einen Test durch, der control.author
im 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.author
und das logische Ergebnis (a 1
oder 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 42
wird auf dem Stapel haben
"control.author.jnrlst" #42 #42 #64
kurz vor dem Aufruf von control.decode
. Letzterer nimmt den Endwert ( 64
hier: den „Testwert“) vom aktuellen Wert für die Steuerelemente (hier 42
) ab. Wenn die Eingabe größer als der „Testwert“ wäre, control.author.jnrlst
würde das Flag (hier ) auf (true) gesetzt 1
und 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 authors
Einstellung 42
wie folgt aufgeteilt: 32 + 8 + 2,dhEinstellung control.author.dotless
und 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.first
um den entsprechenden Wert zu finden, und addieren Sie sie alle.