2 votes

Comment créer un objet à trois niveaux dans les métadonnées YAML dans Rmd ?

J'ai trouvé un excellent exemple de création d'un objet à deux niveaux dans les métadonnées YAML. aquí . Par exemple, afin d'inclure plus d'un auteur

---
title:  'This is the title: it contains a colon'
author:
- name: Author One
  affiliation: University of Somewhere
- name: Author Two
  affiliation: University of Nowhere
---

Puis, en html template

$for(author)$
$if(author.name)$
$author.name$$if(author.affiliation)$ ($author.affiliation$)$endif$
$else$
$author$
$endif$
$endfor$

Est-il possible de créer un objet à trois niveaux dans YAML ? Par exemple, je veux avoir plus d'un auteur de la même institution. Par conséquent, ma logique est la suivante

---
title:  'This is the title: it contains a colon'
author:
  - affiliation: 
     - name: Author One
       email: fake@fake.com
     - name: Author Two
       email: fake2@fake.com
  - affiliation: 
     - name: Author Three
       email: fake3@fake.com
---

Mais ça ne marche pas. Est-il possible de le faire ? Je sais que cela semble n'avoir aucun sens, mais c'est nécessaire pour mon html. template structure.

Merci pour votre aide !

UPDATE

J'ajoute également un chunk que j'ai créé en html template .

$if(author)$
$for(author)$
<div class = "author-section">
<div>$author.affiliation$</div>
<div class = "authors">
$for(author.affiliation)$
<div class = "author">
<div class = "mid-col">
$author.affiliation.name$
</div>
<div class = "right-col">
<a>$author.affiliation.email$</a>
</div>
</div>
$endfor$
</div>
</div>
$endfor$
$endif$

Ensuite, tout fonctionne bien, sauf que $author.affiliation$ qui n'a pas de valeur dans mon YAML. Par conséquent, après le rendu, j'obtiens la chaîne "true" dans mon fichier .html final.

Cependant, lorsque j'ajoute un mot pour l'affirmation dans YAML, par ex.

author:
  - affiliation: University of Somewhere
     - name: Author One
       email: fake@fake.com

Je reçois une erreur pendant le rendu

Error in yaml::yaml.load(string, ...) : 
  Scanner error: mapping values are not allowed in this context at line 9, column 19

3voto

mb21 Points 3703

Personnellement, je le laisserais tel qu'il est dans votre premier exemple. Vous pouvez écrire deux fois le même nom d'affiliation pour deux auteurs différents.

Cependant, si vous voulez vraiment écrire le YAML pour regrouper/nicher les auteurs par université, cela ressemblerait à quelque chose comme ceci (essayez un convertisseur YAML en JSON en ligne si vous êtes familier avec le JSON) :

title:  'This is the title: it contains a colon'
university:
  - label: University of Somehwere
    author:
     - name: Author One
       email: fake@fake.com
     - name: Author Two
       email: fake2@fake.com
  - label: University of Nohwere
    author:
     - name: Author Three
       email: fake3@fake.com

La boucle du modèle pandoc ressemblerait alors à quelque chose comme ceci :

$for(university)$
<div>
  $university.label$
  $for(university.author)$
    $university.author.name$
    <span class="">$university.author.email$</span>
  $endfor$
</div>
$endfor$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X