我只能找到以下代码来显示/隐藏所有输入单元格。
http://blog.nextgenetics.net/?e=102
但是如果我只想隐藏笔记本的第一个输入单元格怎么办?
http://blog.nextgenetics.net/?e=102
但是如果我只想隐藏笔记本的第一个输入单元格怎么办?
现在,nbconvert (自5.3.0版本起)使用标签来实现此功能。
以下是一个示例,演示如何从输出中删除特定的单元格。使用此笔记本。该示例包含三个单元格:一个markdown单元格,一个将被隐藏的代码单元格和一个不会被隐藏的代码单元格。
remove_cell
标签添加到您想要隐藏的任何单元格中(具体名称无关紧要)jupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags='{"remove_cell"}'
任何带有remove_cell
标签的单元格将从输出中删除。
除了整个单元格外,您还可以仅筛选输入或输出:
TagRemovePreprocessor.remove_input_tags
TagRemovePreprocessor.remove_single_output_tags
TagRemovePreprocessor.remove_all_outputs_tags
jupyter nbconvert --to notebook --inplace ...
,似乎在生成的.ipynb文件中没有任何隐藏的内容。 - qApjupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags="{'a', 'b'}"
。 - Ninjakannon{}
)更改为方括号([]
)(即使用 list
),才能使其正常工作,即--TagRemovePreprocessor.remove_cell_tags='["remove_cell"]'
。 - craymichaeltags: ["remove_cell"]
- ostrokach这是 Mathmagician 答案的扩展,使您能够:
您需要首先运行以下代码来定义 hide_toggle
函数:
from IPython.display import HTML
import random
def hide_toggle(for_next=False):
this_cell = """$('div.cell.code_cell.rendered.selected')"""
next_cell = this_cell + '.next()'
toggle_text = 'Toggle show/hide' # text shown on toggle link
target_cell = this_cell # target cell to control with toggle
js_hide_current = '' # bit of JS to permanently hide code in current cell (only when toggling next cell)
if for_next:
target_cell = next_cell
toggle_text += ' next cell'
js_hide_current = this_cell + '.find("div.input").hide();'
js_f_name = 'code_toggle_{}'.format(str(random.randint(1,2**64)))
html = """
<script>
function {f_name}() {{
{cell_selector}.find('div.input').toggle();
}}
{js_hide_current}
</script>
<a href="javascript:{f_name}()">{toggle_text}</a>
""".format(
f_name=js_f_name,
cell_selector=target_cell,
js_hide_current=js_hide_current,
toggle_text=toggle_text
)
return HTML(html)
然后在单元格中像这样使用它:
x = 1
y = 2
print('Result is {} + {}'.format(x, y))
hide_toggle()
或者这样做(如果您想切换下一个单元格)
hide_toggle(for_next=True)
以下是一种通过编辑单元格元数据来隐藏HTML/PDF输出中的单元格的方法。
我使用的版本是:
$ jupyter notebook --version
4.1.0
$ jupyter nbconvert --version
4.2.0
jupyter notebook
localhost:8888/nbextensions
(或您开始的任何端口),然后激活Printview
localhost:8888/tree
,创建一个新的笔记本并进入其中print("You can see me") #but not me
View
> Cell Toolbar
> Edit Metadata
编辑元数据
按钮'hide_input':True
到json中,例如我的json如下:{
"collapsed": false,
"hide_input": true,
"trusted": true
}
jupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb
(如果您的笔记本名为notebookname.ipynb.ipynb
)现在您应该在目录中拥有一个名为notebookname.pdf的文档。希望里面只有文本You can see me
... 手指交叉。
你隐藏所有输入单元的解决方案可以更改为只影响一个单元。
将'div.input'
更改为 'div.cell.code_cell.rendered.selected div.input'
。
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('div.cell.code_cell.rendered.selected div.input').hide();
} else {
$('div.cell.code_cell.rendered.selected div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
To show/hide this cell's raw code input, click <a href="javascript:code_toggle()">here</a>.''')
当您单击单元格输出上的“点击此处”提示时,该单元格将成为“选定”单元格,因此变得隐藏。
如果您的 JavaScript 代码在<script></script>
标签中执行切换操作,可以使用以下一行代码:
$( document ).ready(code_toggle);
如果输入单元格执行时,该块将自动被隐藏(默认情况下)。
请注意,如果您想默认隐藏单元格输入,则必须使用 运行单元格(Ctrl+Return)选项运行该单元格,而不是使用 运行并选择/插入以下单元格 选项。否则,JavaScript 将在移动“选定”标签到下一个单元格之前提示,这可能会导致隐藏没有其输出中的“点击此处”切换链接的单元格。在这种情况下,您需要 检查 单元格并浏览相关标记,将 display='none';
更改为 display='block';
。
请注意,这必须放置在单元格中任何代码的末尾,并且您需要在执行此代码之前从 IPython.display 中导入 HTML。您可以通过执行以下操作来实现:
from IPython.display import HTML
好的,尝试了这里提供的答案都没有成功。我发现了kirbs的这个扩展。Hide_code nbextension 它运行得非常好。但是建议您执行以下操作:
首先,请确保您已更新jupyter、nbconverter、nbconverter扩展和jupyter serverextension。如果您已经这样做了,那么可以在anaconda提示符(以管理员权限打开)中执行以下操作:
pip install hide_code
jupyter nbextension install --py hide_code
jupyter nbextension enable --py hide_code
jupyter serverextension enable --py hide_code
最后,如果您使用anaconda分发来打开笔记本,则还要使用以下命令:
jupyter nbextension install --sys-prefix --py hide_code
jupyter nbextension enable --sys-prefix --py hide_code
jupyter serverextension enable --sys-prefix --py hide_code
如果执行这些命令时没有错误,那么您将能够在工具栏中看到并使用隐藏代码选项,如下所示:
完成了!如果您使用导出按钮,那么就大功告成了!
祝您好运!
如果有人发现排除所有代码单元格有帮助(这不是本文所要求的),您可以添加此标志:nbconvert --TemplateExporter.exclude_code_cell=True
--TemplateExporter.exclude_input=True
也很有用! - rickhg12hsexclude_code_cell
不应该排除输出单元格中的任何图像。 - shouldsee使用该代码:
# @hidden
from IPython.display import HTML
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('.cm-comment:contains(@hidden)').closest('div.input').hide();
} else {
$('.cm-comment:contains(@hidden)').closest('div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
The raw code for this IPython notebook is by default hidden for easier reading.
To toggle on/off the raw code, click <a href="javascript:code_toggle()">here</a>.''')
本文内容来自这里,经过本人修改。
你可以用注释隐藏代码行:
# @hidden
@Mathmagician的解决方案几乎完美,但有许多副作用。
更正确的方式应该是:
from IPython.core.display import display, HTML
toggle_code_str = '''
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Toggle Code"></form>
'''
toggle_code_prepare_str = '''
<script>
function code_toggle() {
if ($('div.cell.code_cell.rendered.selected div.input').css('display')!='none'){
$('div.cell.code_cell.rendered.selected div.input').hide();
} else {
$('div.cell.code_cell.rendered.selected div.input').show();
}
}
</script>
'''
display(HTML(toggle_code_prepare_str + toggle_code_str))
def toggle_code():
display(HTML(toggle_code_str))
toggle_code
函数可以放置在其他代码之前的某个代码单元格中,因此,如果该单元格中的代码执行速度较慢,则不会产生副作用。同时,它还解决了“运行单元格并选择/插入以下”的问题。
它会添加切换按钮,但初始状态无法进行管理。