ReVTeX 的參考書目控制如何運作?

ReVTeX 的參考書目控制如何運作?

在我根據自己的文字改編的 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.dotlesscontrol.author.initialstruecontrol.author.first和其他設定 false。因此,要計算出「正確」值,請決定要啟動哪些設置,查看程式碼以找到適當的值並將它們全部添加在一起。

相關內容