2016-02-29 1 views
0

J'essaie de créer un modèle de latex personnalisé pour créer une sortie PDF à partir d'un bloc-notes jupyter. Je souhaite annuler la sortie des cellules lorsque les cellules sont marquées d'une manière spéciale. Par exemple, laissez-dire modifier un méta-données pour une cellule donnée (de l'ordinateur portable/« Modifier les métadonnées ») et ajouter ce sous-JSON:accéder à des métadonnées de cellule à partir du modèle jinja2

[...] 
"tpl": { 
    "view_in": true, 
    "view_out": false 
}, 
[...] 

Ensuite, j'ai essayé de tirer le modèle en utilisant la variable cell , comme brièvement montré dans http://nbconvert.readthedocs.org/en/latest/customizing.html#Templates-that-use-cell-metadata:

% ((*- extends 'report.tplx' -*)) 
% Disable input cells 
((* block input_group *)) 
((* endblock input_group *)) 
% disable output if required from metadata 
((* if cell['metadata'].get('tpl', {}).get('view_out', True) == true *)) 
    ((* block output_group *)) 
    ((* endblock output_group *)) 
((* endif *)) 

Mais jinja2 se plaint lorsque je tente de générer mon PDF:

$ jupyter nbconvert --to pdf C4_RevD.ipynb --template=tpl.tpl 
    [...] 
    jinja2.exceptions.UndefinedError: 'cell' is undefine 

Comment un accès à METDATA cellulaire d'un jinja2 modèle?

versions [Modifier] utilisés:

Python: 2.7.6 
jupyter: 4.0.6 
jupyter notebook: 4.1.0 
jinja2: 2.8 
+0

La variable 'cell' n'est disponible que dans les blocs' any_cell' et les blocs à l'intérieur de ceux-ci. Donc, le code que vous ajoutez est à l'envers - vous devez vérifier les métadonnées dans le bloc 'output_group', et décider si vous voulez ou non lui donner du contenu. –

+0

@ThomasK: merci pour votre conseil, cela fonctionne. Si vous écrivez une réponse appropriée, je la marquerai comme une solution. – Nic

Répondre

1

La variable cellulaire est disponible uniquement en any_cell et blocs à l'intérieur de ceux (template structure docs). Donc, le code que vous ajoutez est à l'envers - vous devez vérifier les métadonnées à l'intérieur du bloc output_group et décider si vous voulez ou non lui donner du contenu. Quelque chose comme ceci:

((* block output_group *)) 
    ((* if cell['metadata'].get('tpl', {}).get('view_out', True) == true *)) 
     ((* super() *)) 
    ((* endif *)) 
((* endblock output_group *))