
En el archivo bst de ReVTeX, que estoy adaptando para mi propio texto, está esta porción de 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 establece las opciones de visualización del autor con las que quiero modificar. Las opciones se configuran de la siguiente manera:
@CONTROL{REVTEX41Control}
@CONTROL{apsrev41Control,author="42",editor="1",pages="1",title="0",year="0"}
Donde 42
representa alguna configuración de opción (creo que porque elegir valores aleatorios como 3, 7 y 00) produce advertencias relacionadas con estas opciones. ¿Alguien puede explicarme cómo se "decodifican"? Me gustaría saber qué hacen realmente con la salida.
Respuesta1
La idea aquí es que control.author
se puede pasar información sobre una variedad de opciones, todas codificadas en un solo número. Esta es la idea estándar de utilizar diferentes bits de un número para pasar una serie de configuraciones booleanas. Para 'recuperar' los datos, control.author.decode
primero haga una prueba que control.author
esté dentro del rango (mayor que 0, menor que 128). Eso es hecho por
control.author
duplicate$ duplicate$ #0 < swap$ #128 < not or
que deja en la pila de entrada el valor de control.author
y el resultado lógico (a 1
o a 0
): el lenguaje postfix recoge este último como parte del if$
. Suponiendo que la prueba pase, el bloque
'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
el pone elnombrede cada configuración en la pila seguido del valor necesario para extraerlo bit a bit y luego una llamada al decodificador común. Por ejemplo
'control.author.jnrlst swap$ duplicate$ #64 control.decode
con la entrada 42
tendrá en la pila
"control.author.jnrlst" #42 #42 #64
justo antes de llamar control.decode
. Este último toma el valor final ( 64
aquí: el 'valor de prueba') del valor actual de los controles (aquí 42
). Si la entrada fuera mayor que el valor de 'prueba', entonces la bandera (aquí control.author.jnrlst
) se establecería en 1
(verdadero) y el residuo resultante se dejaría en la entrada para la siguiente prueba. Cuando la prueba falla, el valor de entrada ( 42
) se conserva y el indicador se establece en 0
(falso). Trabajar en eso establecerá cada indicador en verdadero/falso y debería consumir toda la entrada (es decirpara cualquier número que esté dentro del rango, el resultado de las pruebas debe ser un valor de 0).
En el ejemplo dado, un valor para la authors
configuración de 42
se descompone en 32 + 8 + 2,es decirconfiguración control.author.dotless
, control.author.initials
y control.author.first
verdadero y las otras configuraciones falsas. Por lo tanto, para calcular el valor "correcto", decida qué configuraciones desea activar, mire el código para encontrar el valor apropiado y súmelos todos.