~bzg/emacsfr

4 3

[BibLaTeX] Avoir toutes les entry

Details
Message ID
<697cf67d1512bc9c80cd827ec1440736@formats-ouverts.org>
DKIM signature
missing
Download raw message
Bonjour à vous !

Au format court : je veux que Emacs me propose toutes les entrées 
possibles qui existent en BibLaTeX (soyons gourmand et fou --- voire 
avec un projet en tête...).

Point de départ (coucou et merci à V !) : Read The Fabulous Manual, et 
donc le document officiel, 
https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/biblatex/doc/biblatex.pdf
Il y a les entrées (1) Regular (2) Aliases (3) Non-standard.

Dans mon .emacs j'ai indiqué que c'est BibLaTeX à considérer :
(bibtex-set-dialect 'biblatex)

Donc il y a 27 entrées proposées avec la commande "M-x bibtex-entry" ! 
:-)

Mais cela ne suffit pas : Software, Performance ou Artwork n'y sont pas 
!

Comment activer les Aliases et les Non-Standard pour en avoir la fiche à 
remplir comme les autres ?

J'ai bien lu que ces entrées sont traitées comme une entrée @Misc... 
avec Biber, ou pas du tout traitées.
Et qu'il va falloir aller dans le .bst pour que les données soient 
imprimées.

Merci d'avance à vous !
-- 
Thierry Stoehr, des formats ouverts, https://Formats-Ouverts.org
Details
Message ID
<1f59056daec04e643ba02900e86bda2c@formats-ouverts.org>
In-Reply-To
<697cf67d1512bc9c80cd827ec1440736@formats-ouverts.org> (view parent)
DKIM signature
missing
Download raw message
Bonjour à vous !

Je m'auto-réponds... mais les réctions/avis/commentaires sont bienvenue 
:

Le 2022-07-12 17:53, Thierry Stoehr a écrit :
> Bonjour à vous !
> 
> Au format court : je veux que Emacs me propose toutes les entrées
> possibles qui existent en BibLaTeX (soyons gourmand et fou --- voire
> avec un projet en tête...).

Un projet secret à base de BibLaTeX, vous imaginez l'importance pour 
changer le monde ! ;-)

Encore plus sérieusement, c'est en appliquant le principe que la doc en 
parle et que les possibilités sont nombreuses que j'ai aussi cette idée.

> Point de départ (coucou et merci à V !) : Read The Fabulous Manual, et
> donc le document officiel,
> https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/biblatex/doc/biblatex.pdf
> Il y a les entrées (1) Regular (2) Aliases (3) Non-standard.

Il y eut une longue réponse de V à un courriel-interrogation sur 
BibLaTex en mai 2020 !
Il donnait des réponses, en le relisant, on arrivait à « hack the 
system... mais à toi de le faire ! ».

> Dans mon .emacs j'ai indiqué que c'est BibLaTeX à considérer :
> (bibtex-set-dialect 'biblatex)
> 
> Donc il y a 27 entrées proposées avec la commande "M-x bibtex-entry" ! 
> :-)
> Mais cela ne suffit pas : Software, Performance ou Artwork n'y sont pas 
> !

Soyons fou, et lisons donc... le code !
Donc la source ! Léo a raison : plonger dans LISP, tout y est !
Bastien et tout développeur du libre le dira aussi.

> Comment activer les Aliases et les Non-Standard pour en avoir la fiche
> à remplir comme les autres ?

Il n'y a que Misc qui est prévu... dit la doc (2.1.3 Non-standard 
Types).
C'est logique en un sens.
Mais comment activer même cette fiche Misc... mais le mieux est d'en 
faire une avec ce que vous voulez.

> J'ai bien lu que ces entrées sont traitées comme une entrée @Misc...
> avec Biber, ou pas du tout traitées.
> Et qu'il va falloir aller dans le .bst pour que les données soient 
> imprimées.

Vous vous demandez si le BST suffit ?
Non, car il y a aussi le fichier .tex qui comporte des commandes !

Mais revenons au fichier BibTeX en BibLaTeX. Donc on peut :

A-changer le bibtex.el... mais c'est un peu risqué...

B-passer par le .emacs avec les commandes suivantes :
;; Create Movie entry type with fields
(add-to-list 'bibtex-entry-alist
              '("Movie" "Film, video or DVD"
                ("title" "year" "type" "actor" "toto")
                nil
                ("director" "address" "distributor")))
;;-- Create custom fields for entry type ----
(add-to-list 'bibtex-field-alist
              '(("director" "Director(s) of a film, video or DVD title")
                ("producer" "Producer of the film title")
                ("actor" "Actor in the film title")
                "toto" "Champs d'essai toto !"
                ("distributor" "Distributor of a film title")))

Vous savez tout ou presque de cette recherche !
Merci de votre lecture et/ou réponse.
Et vive BibTeX :-)
-- 
Thierry stoehr, des formats ouverts, https://Formats-Ouverts.org
Details
Message ID
<8735f5s3db.fsf@alekos.net>
In-Reply-To
<697cf67d1512bc9c80cd827ec1440736@formats-ouverts.org> (view parent)
DKIM signature
missing
Download raw message
Salut,

Pensant que ça allait être simple, je me suis lancé dans une réponse…
Mais l’affaire est bien plus complexe qu’elle n’y paraît. Je propose
donc une solution qui fonctionne, mais sale. Ça donnera peut-être à
d’autres des idées d’amélioration ou de contrib.

1 Préambule
═══════════

  J’espère ne pas avoir saisi la question de travers. Je me permets donc
  de reformuler :

  Comment fait-on pour ajouter des squelettes d’entrées biblatex à
  bibtex-mode ? Sur l’exemple de `M-x bibtex-Book' qui permet d’entrer
  un squelette d’entrée @Book.

  Le tout sans utiliser de solution de tierce, bien sûr.

  Étonnement, Bibtex-mode n’est pas documenté dans Emacs. Un manuel
  semble pourtant avoir existé :
  <http://www.jonathanleroux.org/bibtex-mode.html>

  Pour ce qui nous concerne ici, on ne va pas y apprendre grand chose.
  Il faut… aller chercher dans le code.


2 Creusons
══════════

  On va donc essayer de comprendre comment est faite la fonction
  `bibtex-book’ : `C-h f bibtex-book'

  Mais on n’apprend pas grand chose, même en se perdant dans les
  différents liens… Mieux vaut partir dans le code en cliquant sur
  l’hyperlien, en haut à droite, qui nous renvoie à bibtex.el.

  Première surprise… La fonction n’est pas définie. Mais on comprend
  vite qu’elle est générée à partir de la variable
  `bibtex-biblatex-entry-alist' (`bibtex-Bibtex-entry-alist' pour
  bibtex). Là, j’avoue y être allé à coups de `C-s'.

  À toute fins utiles, pour qui veut en savoir plus sur cette variable :
  `C-h v bibtex-biblatex-entry-alist'. Elle nous livre l’ensemble des
  squelettes que bibtex-mode met à disposition.

  Au passage, on se rend compte que le squelette « Software » existe
  déjà (en tout cas dans emacs 28.1) et, par conséquent, que `M-x
  bibtex-Software' existe bel et bien.

  Comme son nom l’indique `bibtex-biblatex-entry-alist' est une
  “association list”. Pour en apprendre plus sur sa structure, il faut
  regarder la doc de sa grande sœur `bibtex-Bibtex-entry-alist' :

        Alist of BibTeX entry types and their associated fields.
        Elements are lists (ENTRY-TYPE DOC REQUIRED CROSSREF
        OPTIONAL). ENTRY-TYPE is the type of a BibTeX entry. DOC
        is a brief doc string used for menus. If nil ENTRY-TYPE is
        used. REQUIRED is a list of required fields. CROSSREF is a
        list of fields that are optional if a crossref field is
        present; but these fields are required otherwise. OPTIONAL
        is a list of optional fields.

        Each element of these lists is a list of the form (FIELD
          COMMENT INIT ALTERNATIVE). COMMENT, INIT, and
          ALTERNATIVE are optional.

        FIELD is the name of the field. COMMENT is the comment
        string that appears in the echo area. If COMMENT is nil
        use ‘bibtex-BibTeX-field-alist’ if possible. INIT is
        either the initial content of the field or a function,
        which is called to determine the initial content of the
        field. ALTERNATIVE if non-nil is an integer N that numbers
        sets of alternatives. A negative integer -N indicates an
        alias for the field +N. Such aliases are ignored by
        ‘bibtex-entry’ in the template for a new entry.

  Bon, ben, allons-y pour un exemple, ajoutons un squelette Artwork à la
  liste (attention, c’est une démo, le squelette n’est pas conforme à la
  doc de biblatex) :

  ┌────
  │ (add-to-list 'bibtex-biblatex-entry-alist '("Artwork" ; ENTRY-TYPE
  │                                             "Artwork blablabla" ; DOC
  │                                             ;; La liste suivante c'est REQUIRED : les champs obligatoires pour ce type d'entrée
  │                                             (("author")
  │                                              ("title")
  │                                              ;; Ensuite, il se passe un truc, pour le comprendre cf. la doc plus haut et l'explication des éléments de la liste. On a FIELD = "date",COMMENT = NIL, INIT = NIL et ALTERNATIVE = 1 puisqu'on veut soit la date soit l'année,voir la différence avec "year" juste après
  │                                              ("date" nil nil 1)
  │                                              ("year" nil nil -1))
  │                                             ;; Vient ensuite le champ CROSSREF, j'imagine que pour Artwork, ça ne doit pas servir à grand chose donc nil
  │                                             nil
  │                                             ;; OPTIONAL : la liste des champs optionnels
  │                                             (("subtitle")
  │                                              ("titleaddon")
  │                                              ("type")
  │                                              ("location" nil nil 2)
  │                                              ("address" nil nil -2)
  │                                              ("month")
  │                                              ("url")
  │                                              ("urldate"))))
  └────

  On peut mettre cela dans son fichier init et évaluer le tout.


3 Un nouveau problème
═════════════════════

  Une fois code mis dans le fichier init, évalué, voire emacs redémarré,
  la valeur de `bibtex-biblatex-entry-alist' a bel et bien changé… Mais
  on ne trouve pas d’entrée Artwork dans le menu, et pas de commande
  `M-x bibtex-Artwork'. ARRRRG

  Normal. Les fonctions et entrées de menu sont générées par du code qui
  se lance avec bibtex-mode (et qui ne prend donc pas en compte la modif
  de la variable qu’on a mise dans notre init file)…

  Dans bibtex.el, on a deux trois indications sur ces lignes de code :

  ┌────
  │ ;; Entry commands and menus for BibTeX dialects
  │ ;; We do not use `easy-menu-define' here because this gets confused
  │ ;; if we want to have multiple versions of the "same" menu.
  └────

  L’ancien manuel nous prévenait pourtant à demi-mots à propos de
  `bibtex-entry-field-alist', variable obsolète depuis emacs 24.1 qui
  renvoie désormais à `bibtex-Bibtex-entry-alist'

        If you want to change this variable, the best idea might
        be to get the source code of BibTeX mode from file
        ’bibtex.el’, copy this variable’s definition to your
        ’.emacs’ file, change it to a setq statement (see section
        ’Setting Variables’ in Emacs Lisp Manual), and modify the
        variable’s contents.

  Bref copier et coller 361 lignes de code, en rajouter, et mettre le
  tout dans un `setq' dans le fichier init…


4 La solution sale
══════════════════

  Pour faire un peu mieux que le setq, on peut créer une fonction
  interactive, à partir du code incriminé, qui génère les menus et
  fonctions recherchées.

  ┌────
  │ (defun bibtex-update-entry-commands-and-menu ()
  │   "Update entry commands and menus for BibTeX dialects"
  │   (interactive)
  │   (let ((select-map (make-sparse-keymap)))
  │     ;; Submenu for selecting the dialect
  │     (dolist (dialect (reverse bibtex-dialect-list))
  │       (define-key select-map (vector dialect)
  │         `(menu-item ,(symbol-name dialect)
  │                     (lambda () (interactive) (bibtex-set-dialect ',dialect t))
  │                     :button (:radio . (eq bibtex-dialect ',dialect)))))
  │     ;; We define a menu for each dialect.
  │     ;; Then we select the menu we want via the :visible keyword
  │     (dolist (dialect bibtex-dialect-list)
  │       (let ((entry-alist (bibtex-entry-alist dialect))
  │             (menu-map (make-sparse-keymap)))
  │         (define-key menu-map [select]
  │           `(menu-item "BibTeX dialect" ,select-map))
  │         (define-key menu-map [nil-2] '(menu-item "--"))
  │         (define-key menu-map [bibtex-preamble]
  │           '(menu-item "Preamble" bibtex-Preamble))
  │         (define-key menu-map [bibtex-String]
  │           '(menu-item "String" bibtex-String))
  │         (define-key menu-map [nil-1] '(menu-item "--"))
  │         (dolist (elt (reverse entry-alist))
  │           ;; Entry commands
  │           (let* ((entry (car elt))
  │                  (fname (intern (format "bibtex-%s" entry))))
  │             (unless (fboundp fname)
  │               (defalias fname
  │                 (lambda ()
  │                   (:documentation
  │                    (format "Insert a template for a @%s entry; see also `bibtex-entry'."
  │                            entry))
  │                   (interactive "*")
  │                   (bibtex-entry entry))))
  │             ;; Menu entries
  │             (define-key menu-map (vector fname)
  │               `(menu-item ,(or (nth 1 elt) (car elt)) ,fname))))
  │         (define-key bibtex-mode-map
  │           (vector 'menu-bar dialect)
  │           `(menu-item "Entry-Types" ,menu-map
  │                       :visible (eq bibtex-dialect ',dialect)))))))
  └────

  On met ça dans le fichier init, on évalue… Et `M-x
  bibtex-update-entry-commands-and-menu' prendra en compte les modifs et
  créera l’entrée de menu ainsi que la fonction voulue : `M-x
  bibtex-Artwork'. Ça marche, mais c’est sale… Qui dit mieux.

  À plus,
  v


Thierry Stoehr <thierry@formats-ouverts.org> writes:

> Bonjour à vous !
>
> Au format court : je veux que Emacs me propose toutes les entrées
> possibles qui existent en BibLaTeX (soyons gourmand et fou --- voire
> avec un projet en tête...).
>
> Point de départ (coucou et merci à V !) : Read The Fabulous Manual, et
> donc le document officiel,
> https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/biblatex/doc/biblatex.pdf
> Il y a les entrées (1) Regular (2) Aliases (3) Non-standard.
>
> Dans mon .emacs j'ai indiqué que c'est BibLaTeX à considérer :
> (bibtex-set-dialect 'biblatex)
>
> Donc il y a 27 entrées proposées avec la commande "M-x bibtex-entry" !
> :-)
>
> Mais cela ne suffit pas : Software, Performance ou Artwork n'y sont
> pas !
>
> Comment activer les Aliases et les Non-Standard pour en avoir la fiche
> à remplir comme les autres ?
>
> J'ai bien lu que ces entrées sont traitées comme une entrée @Misc...
> avec Biber, ou pas du tout traitées.
> Et qu'il va falloir aller dans le .bst pour que les données soient
> imprimées.
>
> Merci d'avance à vous !
Details
Message ID
<e000d15c837d05e7bf1f1ecf47fbd45a@formats-ouverts.org>
In-Reply-To
<8735f5s3db.fsf@alekos.net> (view parent)
DKIM signature
missing
Download raw message
Bonjour V et bonjour à la liste ! :-)

Le 2022-07-13 12:31, v@alekos.net a écrit :
> Salut,
> 
> Pensant que ça allait être simple, je me suis lancé dans une réponse…
> Mais l’affaire est bien plus complexe qu’elle n’y paraît. Je propose
> donc une solution qui fonctionne, mais sale. Ça donnera peut-être à
> d’autres des idées d’amélioration ou de contrib.

Abstract, ou "TLDR" (format plus actuel ;-) ) :
- merci ! :-)
- j'avais auto-répondu avec la partie sur l'ajout dans le .emacs...
- et *merci* pour tous les détails *et* pour tout le code
- je ne trouve pas,àmha, que c'est « sale »... mais Bastien, Léo et 
d'autres pourront mieux dire que moi.

Bref, il n'y a pas d'implémentation d'une partie des squelettes qui sont 
prévus.
On y va :

> 1 Préambule
> ═══════════
>   J’espère ne pas avoir saisi la question de travers. Je me permets 
> donc
>   de reformuler :
>   Comment fait-on pour ajouter des squelettes d’entrées biblatex à
>   bibtex-mode ? Sur l’exemple de `M-x bibtex-Book' qui permet d’entrer
>   un squelette d’entrée @Book.
>   Le tout sans utiliser de solution de tierce, bien sûr.

Je confirme à 100% ce nouveau format pour énoncer la question !

>   Étonnement, Bibtex-mode n’est pas documenté dans Emacs. Un manuel
>   semble pourtant avoir existé :
>   <http://www.jonathanleroux.org/bibtex-mode.html>
> 
>   Pour ce qui nous concerne ici, on ne va pas y apprendre grand chose.
>   Il faut… aller chercher dans le code.

Spéciale dédicace à Léo avec « C-h function » ! :-)

> 2 Creusons
> ══════════
>   On va donc essayer de comprendre comment est faite la fonction
>   `bibtex-book’ : `C-h f bibtex-book'
> 
>   Mais on n’apprend pas grand chose, même en se perdant dans les
>   différents liens… Mieux vaut partir dans le code en cliquant sur
>   l’hyperlien, en haut à droite, qui nous renvoie à bibtex.el.

Le coeur du réacteur : bibtex.el ! Et il y a de la lecture !

>   Première surprise… La fonction n’est pas définie. Mais on comprend
>   vite qu’elle est générée à partir de la variable
>   `bibtex-biblatex-entry-alist' (`bibtex-Bibtex-entry-alist' pour
>   bibtex). Là, j’avoue y être allé à coups de `C-s'.
> 
>   À toute fins utiles, pour qui veut en savoir plus sur cette variable 
> :
>   `C-h v bibtex-biblatex-entry-alist'. Elle nous livre l’ensemble des
>   squelettes que bibtex-mode met à disposition.

C'est là que je suis aussi allé.

>   Au passage, on se rend compte que le squelette « Software » existe
>   déjà (en tout cas dans emacs 28.1) et, par conséquent, que `M-x
>   bibtex-Software' existe bel et bien.

Dans la version 28.1 car Software est dans BibLaTeX (donc descendu dans 
BibTeX) depuis mai 2020 :
https://www.softwareheritage.org/2020/05/26/citing-software-with-style/
C'est Software Heritage qui est à l'origine.

>   Comme son nom l’indique `bibtex-biblatex-entry-alist' est une
>   “association list”. Pour en apprendre plus sur sa structure, il faut
>   regarder la doc de sa grande sœur `bibtex-Bibtex-entry-alist' :
> [...]
>   Bon, ben, allons-y pour un exemple, ajoutons un squelette Artwork à 
> la
>   liste (attention, c’est une démo, le squelette n’est pas conforme à 
> la
>   doc de biblatex) :

Donc ci-dessous, la manière de faire entrer La Joconde dans BibLaTeX : 
émotion !
Mais outre les tableaux de peinture, il y aussi y avoir les sculptures, 
les céramiques d'art !

>   ┌────
>   │ (add-to-list 'bibtex-biblatex-entry-alist '("Artwork" ; ENTRY-TYPE
> [....couic....]
>   └────
>   On peut mettre cela dans son fichier init et évaluer le tout.

Et donc le compte-à-rebours : 3, 2, 1, ignition ! :-)

> 3 Un nouveau problème
> ═════════════════════
>   Une fois code mis dans le fichier init, évalué, voire emacs 
> redémarré,
>   la valeur de `bibtex-biblatex-entry-alist' a bel et bien changé… Mais
>   on ne trouve pas d’entrée Artwork dans le menu, et pas de commande
>   `M-x bibtex-Artwork'. ARRRRG
>   Normal. Les fonctions et entrées de menu sont générées par du code 
> qui
> [...couic...]
>   Bref copier et coller 361 lignes de code, en rajouter, et mettre le
>   tout dans un `setq' dans le fichier init…

Le diable se cache dans les détails des versions...

> 4 La solution sale
> ══════════════════
>   Pour faire un peu mieux que le setq, on peut créer une fonction
>   interactive, à partir du code incriminé, qui génère les menus et
>   fonctions recherchées.

Je ne vois pas en quoi le code est sale.
Mais je n'écris pas de LISP. Donc avis aux connaisseurs !

>   ┌────
>   │ (defun bibtex-update-entry-commands-and-menu ()
>   │ [...couic...]
>   └────
>   On met ça dans le fichier init, on évalue… Et `M-x
>   bibtex-update-entry-commands-and-menu' prendra en compte les modifs 
> et
>   créera l’entrée de menu ainsi que la fonction voulue : `M-x
>   bibtex-Artwork'. Ça marche, mais c’est sale… Qui dit mieux.

Moi, je ne dis pas du tout mieux !
Et en effet, à vous ! Et encore merci d'avoir lu, et merci à V !

> Thierry Stoehr <thierry@formats-ouverts.org> writes:
> 
>> Bonjour à vous !
>> 
>> Au format court : je veux que Emacs me propose toutes les entrées
>> possibles qui existent en BibLaTeX (soyons gourmand et fou --- voire
>> avec un projet en tête...).
>> 
>> Point de départ (coucou et merci à V !) : Read The Fabulous Manual, et
>> donc le document officiel,
>> https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/biblatex/doc/biblatex.pdf
>> Il y a les entrées (1) Regular (2) Aliases (3) Non-standard.
>> 
>> Dans mon .emacs j'ai indiqué que c'est BibLaTeX à considérer :
>> (bibtex-set-dialect 'biblatex)
>> 
>> Donc il y a 27 entrées proposées avec la commande "M-x bibtex-entry" !
>> :-)
>> 
>> Mais cela ne suffit pas : Software, Performance ou Artwork n'y sont
>> pas !
>> 
>> Comment activer les Aliases et les Non-Standard pour en avoir la fiche
>> à remplir comme les autres ?
>> 
>> J'ai bien lu que ces entrées sont traitées comme une entrée @Misc...
>> avec Biber, ou pas du tout traitées.
>> Et qu'il va falloir aller dans le .bst pour que les données soient
>> imprimées.
>> 
>> Merci d'avance à vous !

-- 
Thierry Stoehr, des formats ouverts, https://Formats-Ouverts.org
Details
Message ID
<877d4hp3vu.fsf@gnu.org>
In-Reply-To
<e000d15c837d05e7bf1f1ecf47fbd45a@formats-ouverts.org> (view parent)
DKIM signature
pass
Download raw message
Thierry Stoehr <thierry@formats-ouverts.org> writes:

> - je ne trouve pas,àmha, que c'est « sale »... mais Bastien, Léo et
>   d'autres pourront mieux dire que moi.

Proposant moi-même de temps à autres des solutions que d'aucuns
jugeraient « sales », je m'abstiendrai volontiers de rejoindre un
quelconque comité d'hygiène informatique :)

-- 
 Bastien
Reply to thread Export thread (mbox)