
在我根據自己的文字改編的 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
可以傳遞有關所有編碼成一個數字的各種選項的資訊。這是使用數字的不同位元來傳遞一系列布林設定的標準思想。若要「恢復」數據,control.author.decode
請先執行範圍內的測試control.author
(大於 0,小於 128)。這是由
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
)將設為1
(true),並且所得殘差將保留在輸入中以供下一次測試。當測試失敗時,42
保留輸入值 ( ) 並將標誌設為0
(false)。透過該操作會將每個標誌設為真/假,並且應該用完所有輸入(IE對於範圍內的任何數字,測試結果應為 0)。
在給出的範例中,authors
設定的值42
分解為 32 + 8 + 2,IE設置control.author.dotless
,control.author.initials
truecontrol.author.first
和其他設定 false。因此,要計算出「正確」值,請決定要啟動哪些設置,查看程式碼以找到適當的值並將它們全部添加在一起。