2016-01-15 9 views
10

Ich habe ein großes Notizbuch mit vielen Zahlen und Text. Ich möchte es in eine HTML-Datei konvertieren. Ich möchte den Code jedoch nicht exportieren. Ich verwende den folgenden Befehlexport notebook in pdf ohne code

ipython nbconvert --to html notebook.ipynb 

Aber diese Option exportiert auch den Code. Gibt es eine Möglichkeit, das Notebook ohne Code in HTML zu konvertieren?

+1

Mögliche Duplikate von [Wie Code aus Zellen in ipython Notebook mit nbviewer visualisiert ausblenden?] (Http://stackoverflow.com/questions/27934885/how-to-hide-code-from-cells-in-ipython- notizbuch-visualisiert-mit-nbviewer) –

+0

Möchten Sie in PDF (für Ihren Titel) oder HTML (für den Körper Ihrer Frage) exportieren? oder vielleicht beide? – gboffi

+0

sagen wir beide @gboffi – aloha

Antwort

4

Sie können diese CSS zu Ihrer Seite hinzufügen und dann im Browser in PDF drucken. Beachten Sie, dass der Code nur ausgeblendet, nicht entfernt wird.

div.output_prompt { visibility: hidden; } 
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important } 
.input,#header { display: none; } 

Um sicherzustellen, dass Sie den Code entfernen Sie so etwas wie

$(".input").remove() 

Soweit ich weiß, gibt es keine Möglichkeit zu generieren über Latex ein PDF, das nicht enthalten den Code verwendet werden soll. Es wäre großartig, eine jupyter Notebook-Erweiterung zu haben, die es tut, aber ...

2

nbconvert verwendet Vorlagen, um das JSON des Notebooks in ein Dokument umzuwandeln; zum Beispiel in der Abschlags-Vorlage, die mit nbconvert kommt, markdown.tpl:

{% block input %} 
{% if nb.metadata.language_info %}{{ nb.metadata.language_info.name }}{% endif %} 
{{ cell.source}} 
{% endblock input %} 

, die jede Quelle der Zelle in der Ausgabe druckt. Wenn Sie {{ cell.source}} löschen, wird die Zellenquelle nicht gedruckt. Es gibt entsprechende Blöcke in den HTML- und Latex-Vorlagen.

Noch besser wäre es, Ihre eigene Vorlage machen, dass genau das tut, was Sie wollen :)

1

ich this Artikel interessant fand es erklären, wie die Eingabespalten zu entfernen:

Sie nur eine Vorlagendatei erstellen mit dem Namen „hidecode.tplx“ in demselben Verzeichnis wie die Notebook Sie wollen, dass diese Linie in ihnen konvertieren und fügen:

((*- extends 'article.tplx' -*)) 

((* block input_group *)) 
    ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*)) 
     (((super()))) 
    ((*- endif -*)) 
((* endblock input_group *)) 

und nach diesem Befehl ausführen wird es pdfLaTeX verwenden Sie das Notebook im pDF über Latex zu konvertieren:

ipython nbconvert --to pdf --template hidecode Example.ipynb 

oder wenn Sie bearbeiten möchten Sie es zu einem .tex Dokument umwandeln und verwenden pdfLaTeX es in pdf zu setzen:

ipython nbconvert --to latex --template hidecode Example.ipynb 

Hope this andere helfen.

0

Als Verallgemeinerung this answer, so dass hidecode Vorlage von mehreren Standorten aus zugänglich sein könnte:

  1. das folgende Verzeichnis (Change user_name Ihren Benutzername) Gehen Sie in:

    cd /home/<user_name>/.jupyter 
    
  2. Erstellen Sie in diesem Verzeichnis jupyter_nbconvert_config.py.

  3. Schreiben Sie die folgenden in die .py Datei (Change user_name Ihren Benutzername):

    c = get_config() 
    c.TemplateExporter.template_path = ['.', "/home/<user_name>/.jupyter" ] 
    c.LatexExporter.template_path = ['.', "/home/<user_name>/.jupyter"] 
    
  4. eine Vorlagendatei in diesem Verzeichnis erstellen, mit dem Namen hidecode.tplx oder hidecode.tpl:

    ((*- extends 'article.tplx' -*)) 
    
    ((* block input_group *)) 
        ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*)) 
          (((super()))) 
        ((*- endif -*)) 
    ((* endblock input_group *)) 
    
  5. Dann sollte Folgendes eine PDF ohne .ipynb Dateicodes erzeugen (Ändern Sie file_name in Ihren Dateinamen):

    jupyter nbconvert --to pdf '<file_name>.ipynb' --template=hidecode.tpl 
    
1

Hier ist, wie ich es tun: ich einfach mein Notebook als html herunterladen.

Dann diesen Python-Skript ausführen, die HTML-Datei zu konvertieren, so dass Eingabeaufforderungen und Code-Zellen verschwunden sind:

FILE = "/somewhere/myHTMLFile.html" 

with open(FILE, 'r') as html_file: 
    content = html_file.read() 

# Get rid off prompts and source code 
content = content.replace("div.input_area {","div.input_area {\n\tdisplay: none;")  
content = content.replace(".prompt {",".prompt {\n\tdisplay: none;") 

f = open(FILE, 'w') 
f.write(content) 
f.close() 

Das Skript fügt bascially die CSS ‚display: none‘ Attribute für alle divs der Klasse ‚prompt‘ oder 'Eingabebereich'.