¿Cómo funciona el control de bibliografía de ReVTeX?

¿Cómo funciona el control de bibliografía de ReVTeX?

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 42representa 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.authorse 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.decodeprimero haga una prueba que control.authoresté 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.authory el resultado lógico (a 1o 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 42tendrá en la pila

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

justo antes de llamar control.decode. Este último toma el valor final ( 64aquí: 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 authorsconfiguración de 42se descompone en 32 + 8 + 2,es decirconfiguración control.author.dotless, control.author.initialsy control.author.firstverdadero 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.

información relacionada