Je conçois un bloc-notes afin que les variables qui pourraient être modifiées par l'utilisateur soient regroupées dans des cellules distinctes dans le bloc-notes. Je voudrais mettre en évidence ces cellules avec une couleur d'arrière-plan différente afin qu'il soit évident pour l'utilisateur où se trouvent les boutons.
Comment pourrais-je y parvenir?
NB: Cette question connexe concernait la mise en évidence du code statique (pour un manuel) et la réponse acceptée proposait de tout mettre commentaires de balisage. Dans mon cas, je veux que le code en surbrillance soit dans une cellule exécutable .
Voilà (en supposant que vous utilisez Python kernel):
from IPython.display import HTML, display
def set_background(color):
script = (
"var cell = this.closest('.jp-CodeCell');"
"var editor = cell.querySelector('.jp-Editor');"
"editor.style.background='{}';"
"this.parentNode.removeChild(this)"
).format(color)
display(HTML('<img src onerror="{}">'.format(script)))
Ensuite, utilisez-le comme ceci:
set_background('honeydew')
La solution est un peu hacky, et je serais heureux d'en voir une plus élégante. Démo:
Testé dans Firefox 60 et Chrome 67 avec JupyterLab 0.32.1.
Modifier pour l'avoir comme magie cellulaire, vous pouvez simplement faire:
from IPython.core.magic import register_cell_magic
@register_cell_magic
def background(color, cell):
set_background(color)
et l'utiliser comme:
%%background honeydew
my_important_param = 42
Petit ajout au code de krassowski (a essayé de l'ajouter comme commentaire mais n'a pas pu faire fonctionner la mise en forme).
from IPython.core.magic import register_cell_magic
from IPython.display import HTML, display
@register_cell_magic
def bgc(color, cell=None):
script = (
"var cell = this.closest('.jp-CodeCell');"
"var editor = cell.querySelector('.jp-Editor');"
"editor.style.background='{}';"
"this.parentNode.removeChild(this)"
).format(color)
display(HTML('<img src onerror="{}">'.format(script)))
De cette façon, vous pouvez l'utiliser à la fois comme magie et avec un appel de fonction normal:
bgc('yellow')
bla = 'bla'*3
ou
%%bgc yellow
bla = 'bla'*3
Si vous avez seulement besoin de changer la couleur des cellules converties avec nbconvert
, créez un modèle mytemplate.tpl
dans votre dossier et ajoutez:
{% extends 'full.tpl'%}
{% block any_cell %}
{% if 'highlight' in cell['metadata'].get('tags', []) %}
<div style="background:lightpink">
{{ super() }}
</div>
{% else %}
{{ super() }}
{% endif %}
{% endblock any_cell %}
(adapté de l'officiel docs )
.. puis ajoutez une balise "surlignage" à votre cellule. Dans le laboratoire Jupyter, vous pouvez le faire à gauche pour la cellule sélectionnée:
Maintenant, convertissez le bloc-notes avec nbconvert en utilisant le modèle:
jupyter nbconvert --to html 'mynb.ipynb' --template=mytemplate.tpl
Le code HTML résultant ressemblera à ceci:
J'ai trouvé cela approprié pour mettre en évidence des cellules spécifiques aux lecteurs.