
私が自分のテキストに合わせて調整している ReVTeX bst ファイルには、次のコード部分があります。
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$
}
このコードは、変更したい著者表示オプションを設定します。オプションは次のように設定されます。
@CONTROL{REVTEX41Control}
@CONTROL{apsrev41Control,author="42",editor="1",pages="1",title="0",year="0"}
ここで、 は42
何らかのオプション設定を表します (3、7、00 などのランダムな値を選択すると、これらのオプションに関連する警告が生成されます)。これらがどのように「デコード」されるのか説明できる人はいますか? これらが実際に出力にどのような影響を与えるかを理解したいと思います。
答え1
ここでのアイデアは、control.author
さまざまなオプションに関する情報をすべて1つの数値にエンコードして渡すことができるというものです。これは、数値のさまざまなビットを使用して一連のブール設定を渡すという標準的なアイデアです。データを「回復」するには、control.author.decode
まず範囲内(0より大きく、128より小さい)のテストを行いますcontrol.author
。これは次のように行われます。
control.author
duplicate$ duplicate$ #0 < swap$ #128 < not or
入力スタックに の値control.author
と論理結果(a1
または a 0
)を残します。後置言語は の一部として後者を取得しますif$
。テストが合格すると仮定すると、ブロック
'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
は、名前各設定をスタックに積み、その後にビット単位で抽出するために必要な値、そして共通デコーダーの呼び出しを行います。例えば
'control.author.jnrlst swap$ duplicate$ #64 control.decode
入力は42
スタック上に
"control.author.jnrlst" #42 #42 #64
を呼び出す直前に を呼び出しますcontrol.decode
。後者は、64
コントロールの現在の値 (ここでは ) から終了値 (ここでは「テスト値」)を減算します42
。入力が「テスト」値よりも大きい場合、フラグ (ここではcontrol.author.jnrlst
) は (true) に設定され1
、結果の剰余が次のテストの入力に残されます。テストが失敗すると、入力値 ( 42
) が保持され、フラグは0
(false) に設定されます。これを処理することで、各フラグが true/false に設定され、入力 (つまり範囲内の数値の場合、テストの結果は 0 の値になります。
与えられた例では、設定の値authors
は42
32 + 8 + 2に分解されます。つまり設定control.author.dotless
がtruecontrol.author.initials
でcontrol.author.first
、他の設定が false です。したがって、「正しい」値を算出するには、アクティブにする設定を決定し、コードを確認して適切な値を見つけ、それらをすべて合計します。