मेरे पास एक ipython / jupyter नोटबुक है जिसे मैं NBviewer का उपयोग करके कल्पना करता हूं।
मैं NBviewer द्वारा प्रदान की गई नोटबुक से सभी कोड को कैसे छिपा सकता हूं, ताकि कोड का केवल आउटपुट (जैसे प्लॉट और टेबल) और मार्कडाउन सेल दिखाए जाएं?
मेरे पास एक ipython / jupyter नोटबुक है जिसे मैं NBviewer का उपयोग करके कल्पना करता हूं।
मैं NBviewer द्वारा प्रदान की गई नोटबुक से सभी कोड को कैसे छिपा सकता हूं, ताकि कोड का केवल आउटपुट (जैसे प्लॉट और टेबल) और मार्कडाउन सेल दिखाए जाएं?
जवाबों:
from IPython.display import HTML
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>''')
<form action ... > ... </form>
साधारण HTML की जगह ली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>.
यह अब nbconvert से सीधे संस्करण 5.2.1 के रूप में संभव है : अंतर्निर्मित टेम्पलेट निर्यातक का उपयोग करके सामग्री को फ़िल्टर किया जा सकता है । उदाहरण के लिए:
jupyter nbconvert --to pdf --TemplateExporter.exclude_input=True my_notebook.ipynb
"इनपुट कोड" सेल को छोड़कर, अर्थात कोड ही होगा। इसी तरह के विकल्प प्रॉम्प्ट, मार्कडाउन सेल या आउटपुट या इनपुट और आउटपुट दोनों को बाहर करने के लिए मौजूद हैं।
(इन विकल्पों को आउटपुट प्रारूप के बावजूद काम करना चाहिए।)
मैं nbextensions ( https://github.com/ipython-contrib/IPython-notebook-nension ) hide_input_all
से उपयोग करूंगा । ऐसे:
पता करें कि आपका IPython निर्देशिका कहां है:
from IPython.utils.path import get_ipython_dir
print get_ipython_dir()
डाउनलोड करें और इसे IPython निर्देशिका में स्थानांतरित करें।
IPython निर्देशिका में कहीं भी अपने custom.js फ़ाइल को संपादित करें (मेरा प्रोफ़ाइल प्रोफाइल में था / स्थिर / कस्टम ) nbextensions निर्देशिका में custom.example.js के समान होने के लिए ।
इस लाइन को custom.js में जोड़ें :
IPython.load_extensions('usability/hide_input_all')
IPython Notebook में अब कोड सेल को टॉगल करने के लिए एक बटन होगा, चाहे वर्कबुक कोई भी हो।
नवीनतम IPython नोटबुक संस्करण अब मार्कडाउन कोशिकाओं में जावास्क्रिप्ट निष्पादित करने की अनुमति नहीं देता है, इसलिए निम्नलिखित जावास्क्रिप्ट कोड के साथ एक नया मार्कडाउन सेल जोड़ने से आपके कोड कोशिकाओं को छिपाने के लिए अब काम नहीं होगा ( इस लिंक को देखें )
नीचे के रूप में ~ ~ .ipython / profile_default / static / custom / custom.js बदलें:
code_show=true;
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
}
$([IPython.events]).on("app_initialized.NotebookApp", function () {
$("#view_menu").append("<li id=\"toggle_toolbar\" title=\"Show/Hide code cells\"><a href=\"javascript:code_toggle()\">Toggle Code Cells</a></li>")
});
मैंने कुछ कोड लिखे जो इसे पूरा करता है, और कोड की दृश्यता को टॉगल करने के लिए एक बटन जोड़ता है।
निम्नलिखित नोटबुक के शीर्ष पर एक कोड सेल में जाता है:
from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di # Example: di.display_html('<h3>%s:</h3>' % str, raw=True)
# This line will hide code by default when the notebook is exported as HTML
di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)
# This line will add a button to toggle visibility of code blocks, for use with the HTML export version
di.display_html('''<button onclick="jQuery('.input_area').toggle(); jQuery('.prompt').toggle();">Toggle code</button>''', raw=True)
आप यहां एक उदाहरण देख सकते हैं कि यह एनबीवी में कैसा दिखता है ।
अपडेट: यह जुपिटर में मार्कडाउन कोशिकाओं के साथ कुछ अजीब व्यवहार होगा, लेकिन यह नोटबुक के HTML निर्यात संस्करण में ठीक काम करता है।
'.input_area'
और '.prompt'
, का उपयोग करें 'div.input'
और यह एक आकर्षण की तरह काम करता है! तो फिर से बदलने के लिए jQuery("div.input").toggle();
, के स्थान पर स्थानापन्न jQuery('.input_area').toggle(); jQuery('.prompt').toggle();
। @ मोम मेसनिक, क्या आप अपना उत्तर ठीक कर सकते हैं?
CSS = """#notebook div.output_subarea { max-width:100%;"""
HTML('<style>{}</style>'.format(CSS))
। यह प्रिंटिंग के लिए बहुत उपयोगी है।
यह एक IPython ToggleButton
विजेट और जावास्क्रिप्ट का एक छोटा सा उपयोग करके किया जा सकता है । निम्नलिखित कोड को दस्तावेज़ के शीर्ष पर एक कोड सेल में रखा जाना चाहिए:
import ipywidgets as widgets
from IPython.display import display, HTML
javascript_functions = {False: "hide()", True: "show()"}
button_descriptions = {False: "Show code", True: "Hide code"}
def toggle_code(state):
"""
Toggles the JavaScript show()/hide() function on the div.input element.
"""
output_string = "<script>$(\"div.input\").{}</script>"
output_args = (javascript_functions[state],)
output = output_string.format(*output_args)
display(HTML(output))
def button_action(value):
"""
Calls the toggle_code function and updates the button description.
"""
state = value.new
toggle_code(state)
value.owner.description = button_descriptions[state]
state = False
toggle_code(state)
button = widgets.ToggleButton(state, description = button_descriptions[state])
button.observe(button_action, "value")
display(button)
यह जुपिटर नोटबुक के कोड को दिखाने / छिपाने के लिए, "छिपाने" के लिए डिफ़ॉल्ट रूप से निम्नलिखित बटन बनाता है:
जब "शो" स्थिति पर सेट किया जाता है, तो आप जुपिटर नोटबुक के लिए कोड देख सकते हैं:
एक तरफ, जबकि इस कोड को नोटबुक की शुरुआत में रखा जाना चाहिए, टॉगल बटन का स्थान वैकल्पिक है। व्यक्तिगत रूप से, मैं इसे दस्तावेज़ के निचले भाग पर रखना पसंद करता हूं। ऐसा करने के लिए, बस display(button)
पंक्ति को पृष्ठ के निचले भाग में एक अलग कोड सेल में ले जाएँ:
यहाँ एक अच्छा समाधान प्रदान किया गया है कि काम करता है अच्छी तरह से करने के लिए नोटबुक एचटीएमएल में निर्यात किया। यहाँ तक कि वेबसाइट भी इस SO पोस्ट पर वापस लिंक करती है, लेकिन मुझे यहाँ क्रिस का समाधान दिखाई नहीं देता है! (क्रिस, तुम कहाँ हो?)
यह मूल रूप से कठोर से स्वीकृत उत्तर के रूप में एक ही समाधान है, लेकिन इसे निर्यात किए गए HTML में टॉगल कोड को छिपाने का लाभ है। मुझे यह भी पसंद है कि यह दृष्टिकोण IPython HTML फ़ंक्शन की आवश्यकता से बचा जाता है।
इस समाधान को लागू करने के लिए, अपनी नोटबुक के शीर्ष पर 'रॉ NBConvert' सेल में निम्न कोड जोड़ें:
<script>
function code_toggle() {
if (code_shown){
$('div.input').hide('500');
$('#toggleButton').val('Show Code')
} else {
$('div.input').show('500');
$('#toggleButton').val('Hide Code')
}
code_shown = !code_shown
}
$( document ).ready(function(){
code_shown=false;
$('div.input').hide()
});
</script>
<form action="javascript:code_toggle()">
<input type="submit" id="toggleButton" value="Show Code">
</form>
तो बस HTML को नोटबुक निर्यात करें। कोड दिखाने या छिपाने के लिए नोटबुक के शीर्ष पर एक टॉगल बटन होगा।
क्रिस यहाँ एक उदाहरण भी प्रदान करता है ।
मैं यह सत्यापित कर सकता हूं कि यह जुपिटर 5.0.0 में काम करता है
अद्यतन : div.prompt
तत्वों के साथ-साथ तत्वों को दिखाना / छिपाना भी सुविधाजनक है div.input
। यह पाठ In [##]:
और Out: [##]
पाठ को हटाता है और बाईं ओर हाशिये को कम करता है।
$('div.output').next().hide('500');
अगले उत्पादन को छिपाने के लिए? मैंने खुद कोशिश की है, लेकिन यह काम नहीं कर सकता।
मुद्रित दस्तावेज़ या एक रिपोर्ट के साथ बेहतर प्रदर्शन के लिए, हमें बटन को भी हटाने की आवश्यकता है, और कुछ कोड ब्लॉक दिखाने या छिपाने की क्षमता। यहाँ मैं क्या उपयोग कर रहा हूँ (बस अपने पहले सेल में इसे कॉपी-पेस्ट करें):
# This is a cell to hide code snippets from displaying
# This must be at first cell!
from IPython.display import HTML
hide_me = ''
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show) {
$('div.input').each(function(id) {
el = $(this).find('.cm-variable:first');
if (id == 0 || el.text() == 'hide_me') {
$(this).hide();
}
});
$('div.output_prompt').css('opacity', 0);
} else {
$('div.input').each(function(id) {
$(this).show();
});
$('div.output_prompt').css('opacity', 1);
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input style="opacity:0" type="submit" value="Click here to toggle on/off the raw code."></form>''')
फिर अपनी अगली कोशिकाओं में:
hide_me
print "this code will be hidden"
तथा
print "this code will be shown"
यह एक IPython नोटबुक आउटपुट प्रदान करेगा। हालाँकि, आप इनपुट कोड देख पाएंगे। आप एक नोटबुक की प्रतिलिपि बना सकते हैं, फिर इस कोड को जोड़ सकते हैं यदि जरूरत हो तो किसी ऐसे व्यक्ति के साथ साझा करें जिसे कोड देखने की आवश्यकता नहीं है।
from IPython.display import HTML
HTML('''<script> $('div .input').hide()''')
from IPython.display import HTML HTML('''<script> $('div.input').show()''')
<details>
उदाहरण के लिए सेल को मार्कडाउन में बदलें और HTML5 टैग का उपयोग करें joyrexus
:
https://gist.github.com/joyrexus/16041f2426450e73f5df9391f7f7ae5f
## collapsible markdown?
<details><summary>CLICK ME</summary>
<p>
#### yes, even hidden code blocks!
```python
print("hello world!")
```
</p>
</details>
यहाँ एक और समाधान p3trus द्वारा सुझाया गया है :
$([IPython.events]).on('notebook_loaded.Notebook', function(){
IPython.toolbar.add_buttons_group([
{
'label' : 'toggle input cells',
'icon' : 'icon-refresh',
'callback': function(){$('.input').slideToggle()}
}
]);
});
जैसा कि p3trus द्वारा वर्णित है : "[यह] इनपुट कोड सेल को छिपाने / दिखाने के लिए ipython नोटबुक टूलबार में एक बटन जोड़ता है। इसका उपयोग करने के लिए, आपको अपने .ipython_<profile name>/static/custom/
फ़ोल्डर में custom.js फ़ाइल डालनी होगी , जहाँ उपयोग में ipython प्रोफाइल है। "
मेरी अपनी टिप्पणियाँ: मैंने इस समाधान को सत्यापित किया और यह iPython 3.1.0 के साथ काम करता है।
स्वीकृत समाधान निम्नलिखित संशोधनों के साथ जूलिया जुपिटर / इज़ुलिया में भी काम करता है:
display("text/html", """<script>
code_show=true;
function code_toggle() {
if (code_show){
\$("div.input").hide();
} else {
\$("div.input").show();
}
code_show = !code_show
}
\$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>""")
विशेष रूप से ध्यान दें:
display
फ़ंक्शन का उपयोग करें$
संकेत से बच (अन्यथा एक चर के रूप में देखा जाता है)यहाँ प्रस्तुत करने के लिए Jpuyter (नया IPython) पुस्तिकाओं को कैसे पॉलिश किया जाए, इस पर एक अच्छा लेख (वही एक @Ken पोस्ट किया गया) है। जेएसपी, एचटीएमएल और सीएसएस का उपयोग करके ज्यूपिटर का विस्तार करने के अनगिनत तरीके हैं, जिसमें जावास्क्रिप्ट से नोटबुक के अजगर कर्नेल के साथ संवाद करने की क्षमता शामिल है। इसके लिए मैजिक डेकोरेटर हैं %%HTML
और %%javascript
आप बस कुछ ऐसा ही कर सकते हैं:
%%HTML
<script>
function code_toggle() {
if (code_shown){
$('div.input').hide('500');
$('#toggleButton').val('Show Code')
} else {
$('div.input').show('500');
$('#toggleButton').val('Hide Code')
}
code_shown = !code_shown
}
$( document ).ready(function(){
code_shown=false;
$('div.input').hide()
});
</script>
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Show Code"></form>
मैं jupyter 4.XX में क्रिस के तरीकों पर भी काम कर सकता हूं
ब्राउज़र के कंसोल का उपयोग करके बहुत आसान समाधान। आप इसे अपने ब्राउज़र कंसोल और हिट एंटर में कॉपी करें:
$("div.input div.prompt_container").on('click', function(e){
$($(e.target).closest('div.input').find('div.input_area')[0]).toggle();
});
फिर आप सेल इनपुट की संख्या पर क्लिक करके सेल के कोड को टॉगल करें।
(कागज) मुद्रण या HTML के रूप में सहेजा जा रहा है
आप में से उन लोगों के लिए जो पेपर को प्रिंट करना चाहते हैं, उक्त उत्तर अकेले एक अच्छा अंतिम आउटपुट नहीं देते हैं। हालाँकि, @Max Masnick कोड लेने और निम्नलिखित को जोड़ने से कोई इसे पूर्ण A4 पृष्ठ पर प्रिंट कर सकता है।
from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di
di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)
CSS = """#notebook div.output_subarea {max-width:100%;}""" #changes output_subarea width to 100% (from 100% - 14ex)
HTML('<style>{}</style>'.format(CSS))
इंडेंट का कारण मैक्स मैनिक द्वारा हटाए गए प्रॉम्प्ट सेक्शन का मतलब है कि सब कुछ आउटपुट पर बाईं ओर शिफ्ट हो गया। हालाँकि इससे आउटपुट की अधिकतम चौड़ाई के लिए कुछ भी नहीं किया गया था जो कि प्रतिबंधित था max-width:100%-14ex;
। यह output_subarea की अधिकतम चौड़ाई को बदलता है max-width:100%;
।
ऊपर दिए गए सभी समाधानों के साथ, भले ही आप कोड छिपा रहे हों, फिर भी आपको समाधान मिलेगा [<matplotlib.lines.Line2D at 0x128514278>]
अपने आंकड़े के ऊपर बकवास जिसे आप नहीं चाहते हैं।
यदि आप वास्तव में इसे छुपाने के बजाय इनपुट से छुटकारा पाना चाहते हैं, तो मुझे लगता है कि सबसे साफ समाधान छिपी हुई कोशिकाओं में डिस्क को अपने आंकड़े बचाने के लिए है, और फिर उदाहरण के लिए मार्कडाउन कोशिकाओं में छवियों को शामिल करना ![Caption](figure1.png)
।
_ = plt.plot()
इसे [<>]
बकवास नहीं करने के लिए रख सकते हैं
jupyter nbconvert yourNotebook.ipynb --no-input --no-prompt