python - 突出显示 Jupyter 单元中的部分代码

标签 python css jupyter-notebook highlight

有没有办法突出显示 Jupyter 单元格的某些行?类似于下图的东西(我用照片编辑器创建的):

enter image description here

我的意思不是用光标进行选择,而是永久性的。 例如,当您想要突出显示新添加的代码时,这对于演示很有用。

最佳答案

下面提供的 Jupyter 笔记本扩展允许您突出显示代码单元格中的行范围。安装启用如下:

$ jupyter nbextension install codehighlighter.js --user
$ jupyter nbextension enable codehighlighter --user

然后是一个带有 lightbulb icon 的按钮将出现在您的 Jupyter 笔记本工具栏上。按下该按钮将突出显示当前代码单元格中的选定行(或者,如果没有选择,则为当前行)。

亮点将与笔记本一起保存(作为单元元数据),但不会在笔记本(重新)打开时自动启用。为了显示保存的精彩片段,您必须按下恢复精彩片段按钮(带有 bars icon 的按钮)。


codehighlighter.js

define([
    'base/js/namespace'
], function(
    Jupyter
) {
    function load_ipython_extension() {

        var style = document.createElement('style');
        style.type = 'text/css';
        style.innerHTML = '.codehighlighter { background: yellow; }';
        document.getElementsByTagName('head')[0].appendChild(style);

        var highlight_code_in_cell = function (cell, from, to) {
            var cm = cell.code_mirror;
            for ( var lineno = from; lineno < to ; ++lineno )
                cm.addLineClass(lineno, 'background', 'codehighlighter');
        }

        var highlight_selected_code = function () {
            var cell = Jupyter.notebook.get_selected_cell();
            var cm = cell.code_mirror;
            var from = cm.getCursor('from');
            var to = cm.getCursor('to');
            var endLine = (to.ch > 0 ? to.line + 1 : to.line);
            highlight_code_in_cell(cell, from.line, endLine);
            if ( ! cell.metadata.codehighlighter )
                cell.metadata.codehighlighter = [];
            cell.metadata.codehighlighter.push([from.line, endLine]);
        };

        var highlight_from_metadata = function() {
            Jupyter.notebook.get_cells().forEach(function(cell) {
                if (cell.metadata.codehighlighter) {
                    cell.metadata.codehighlighter.forEach(function(range) {
                        highlight_code_in_cell(cell, range[0], range[1]);
                    });
                }
            });
        }

        function registerAction(action_name, action) {
            var prefix = 'codehighlighter';
            return Jupyter.actions.register(action, action_name, prefix);
        }

        var hilite_code = registerAction('highlight-code', {
                                         icon: 'fa-lightbulb-o',
                                         help    : 'Highlight selected code',
                                         help_index : 'zz',
                                         handler : highlight_selected_code
        });
        var restore_hilites = registerAction('restore-highlights', {
                                         icon: 'fa-bars',
                                         help    : 'Restore highlights',
                                         help_index : 'zz',
                                         handler : highlight_from_metadata
        });

        Jupyter.toolbar.add_buttons_group([hilite_code, restore_hilites]);
    }

    return {
        load_ipython_extension: load_ipython_extension
    };
});

关于python - 突出显示 Jupyter 单元中的部分代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51460002/

相关文章:

python - ( "SELECT password FROM peerlist WHERE username=?",用户名1)

python - 反向树构建(有奇数个 child )

javascript - 谷歌地图不加载单独的文件

latex - Jupyter笔记本:如何为LaTeX\usepackage {}

jupyter-notebook - Jupyter notebook 显示问题(隐藏标题和 maintoolbar 后)

python - 为什么三元运算符比 .get 更快?

python - 创建按日期范围分区的暂存表

php - 如何在 PDF 中正确定位图像旁边的文本?

javascript - 如何修复我的排行榜上这种意外的图像定位?

python - 使用 pythreejs : wrong perspective and camera look-at 嵌入小部件