style example book apalike apa latex bibtex

latex - example - bibtex generator



Formato bib-style para bibtext bst file- explicado por un ejemplo (1)

El lenguaje BibTeX es un poco complejo: para una referencia completa, consulte Tame the BeaST . Las cosas clave que debe recordar es que es un lenguaje de pila y que utiliza un enfoque de postfix. Casi todas las funciones incorporadas también eliminan su entrada de la pila.

Tomando pieza por pieza, la primera línea comienza con FUNCTION , lo que significa que definirá una nueva función ( format.eprint ) que se puede usar en cualquier otro lugar del archivo .bst . Es importante destacar que esta nueva función solo se puede utilizar a continuación aquí: el orden de las funciones en el archivo .bst es importante . Las llaves se utilizan para mostrar diferentes argumentos: FUNCTION necesita dos, el nombre de la función y el código que la implementa.

En el propio código, eprint será un campo. El uso del nombre de un campo agrega el valor del campo a la pila (para el registro actual). Luego tenemos duplicate$ , que duplica el elemento superior en la pila. Esta es una instrucción incorporada de BibTeX, mostrada por el terminal $ . Así que la pila ahora contendrá dos copias del valor de eprint .

La siguiente instrucción está empty$ . Esto probará si el elemento superior de la pila está vacío y lo elimina , de ahí la necesidad de duplicate$ . El resultado de la prueba es 1 o 0 , que se deja en la pila. Así que el elemento superior en la pila ahora es 1 o 0, y el siguiente elemento es el valor de eprint .

A continuación, tiene una instrucción if$ , que está en postfix y, por lo tanto, tiene las dos sucursales antes de la if$ . Como el idioma es postfix, lo que sucede es que if$ seleccionará la rama verdadera si el elemento superior de la pila es 1 y la rama falsa de lo contrario. Eso también elimina el elemento superior de la pila. (Si desea el detalle real, las dos ramas se colocan realmente en la pila, y la instrucción if$ luego elimina la adecuada y deja que el resto del material se ejecute).

La primera rama (verdadera) lee ''skip$ , que es una instrucción de'' no hacer nada ''. Los refuerzos alrededor de una sola instrucción pueden omitirse si incluye el encabezado '' . Una alternativa que es (ligeramente) más fácil de leer para los nuevos usuarios sería

FUNCTION {format.eprint} { eprint duplicate$ empty$ { } { "/eprint" archive empty$ { } { "[" * archive * "]" * } if$ "{" * swap$ * "}" * } if$ }

es decir, simplemente utilizando un conjunto vacío de llaves para la rama ''no hacer nada'' (verdadero). Así que el objetivo aquí es no hacer nada si el campo de eprint está vacío.

La rama falsa comienza con "/eprint" , que colocará el literal /eprint en la parte superior de la pila. La siguiente parte coloca el campo de archive en la pila y realiza otra prueba para un campo vacío. Si el campo de archive está disponible, el código

"[" * archive * "]" *

colocará [ en la pila y luego la unirá al elemento superior de la pila (que era /eprint ): esta operación de unión es lo que * hace. El valor del campo de archive se agrega a la pila y se une, seguido de otro ] . Así que la parte superior de la pila contendrá

/eprint[<archive>]

(donde <archive> es el valor del campo de archivo) si hay algo dado para el archive , y aún así simplemente /eprint contrario.

Finalmente, hay un poco más de construcción de cadenas para hacer. Tenemos

"{" * swap$ * "}" *

que primero coloca { en la pila. Esto se une al elemento superior ( /eprint o /eprint[<archive>] ) para dar /eprint{ . La función swap$ intercambia los dos elementos superiores de la pila, por lo que el elemento superior tiene el nombre <eprint> (el valor del campo eprint ). Hay una articulación para hacer

/eprint{<eprint>

seguido de una adición final de } hasta el final.

El resultado es que la pila ganará un elemento en la parte superior. Si eprint está vacío, habrá un elemento vacío en la parte superior de la pila, de lo contrario se leerá

/eprint{<eprint>}

Mi pregunta es sobre la forma en que se define un campo de estilo bibtex en un archivo bst. Me gustaría tener el siguiente ejemplo explicado pieza por pieza, para entender lo que está haciendo cada pieza. Me gustaría poder hacer cambios a ese ejemplo yo mismo.

FUNCTION {format.eprint} { eprint duplicate$ empty$ ''skip$ { "/eprint" archive empty$ ''skip$ { "[" * archive * "]" * } if$ "{" * swap$ * "}" * } if$ }