Como funciona o controle bibliográfico do ReVTeX?

Como funciona o controle bibliográfico do ReVTeX?

No arquivo ReVTeX bst, que estou adaptando para meu próprio texto, existe esta parte do código:

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$
}

Este código define as opções de exibição do autor com as quais quero mexer. As opções são definidas da seguinte forma:

@CONTROL{REVTEX41Control}
@CONTROL{apsrev41Control,author="42",editor="1",pages="1",title="0",year="0"}

Onde 42representa alguma configuração de opção (acho, porque escolher valores aleatórios como 3, 7 e 00) produz avisos relacionados a essas opções. Alguém pode me explicar como eles são 'decodificados'? Eu gostaria de descobrir o que eles realmente fazem com a saída.

Responder1

A ideia aqui é control.authorpoder passar informações sobre uma variedade de opções, todas codificadas em um número. Esta é a ideia padrão de usar diferentes bits de um número para passar uma série de configurações booleanas. Para ‘recuperar’ os dados, control.author.decodeprimeiro faz um teste que control.authoresteja dentro do intervalo (maior que 0, menor que 128). Isso é feito por

control.author
duplicate$ duplicate$ #0 < swap$ #128 < not or

que deixa na pilha de entrada o valor control.authore o resultado lógico (a 1ou a 0): a linguagem postfix pega o último como parte do if$. Supondo que o teste seja aprovado, o bloco

'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

o coloca onomede cada configuração na pilha seguida pelo valor necessário para extraí-la bit a bit e, em seguida, uma chamada para o decodificador comum. Por exemplo

'control.author.jnrlst   swap$ duplicate$ #64 control.decode

com a entrada 42terá na pilha

"control.author.jnrlst" #42 #42 #64

pouco antes de ligar control.decode. O último retira o valor final ( 64aqui: o 'valor de teste') do valor atual dos controles (aqui 42). Se a entrada fosse maior que o valor de 'teste', o sinalizador (aqui control.author.jnrlst) seria definido como 1(true) e o resíduo resultante seria deixado na entrada para o próximo teste. À medida que o teste falha, o valor de entrada ( 42) é retido e o sinalizador é definido como 0(falso). Trabalhar nisso definirá cada sinalizador como verdadeiro/falso e deverá usar toda a entrada (ou sejapara qualquer número que esteja dentro do intervalo, o resultado dos testes deve ser o valor 0).

No exemplo dado, um valor para a authorsconfiguração 42se divide em 32 + 8 + 2,ou sejasetting control.author.dotlesse control.author.initialstrue control.author.firste as outras configurações false. Assim, para descobrir o valor 'correto', decida quais configurações você deseja ativar, observe o código para encontrar o valor apropriado e adicione-os todos juntos.

informação relacionada