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(真),并且结果残留物将留在输入中以供下一次测试。由于测试失败,输入值(42)被保留,标志设置为0(假)。通过这种方式将每个标志设置为真/假,并应使用所有输入(IE对于范围内的任何数字,测试结果都应为 0)。

在给出的例子中,authors设置的值42分解为 32 + 8 + 2,IE设置control.author.dotlesscontrol.author.initials并且control.author.firsttrue 而其他设置 false。因此,要计算出“正确”的值,请确定要激活哪些设置,查看代码以找到适当的值并将它们全部加在一起。

相关内容