
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 42
representa 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.author
poder 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.decode
primeiro faz um teste que control.author
esteja 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.author
e o resultado lógico (a 1
ou 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 42
terá na pilha
"control.author.jnrlst" #42 #42 #64
pouco antes de ligar control.decode
. O último retira o valor final ( 64
aqui: 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 authors
configuração 42
se divide em 32 + 8 + 2,ou sejasetting control.author.dotless
e control.author.initials
true control.author.first
e 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.