CMP-04: Grafiken mit bookdown

Im vierten Teil CMP-04 des Kurses zu Cross Media Publishing setzen Sie die Formatierung Ihres Buches mit einigen speziellen Befehlen fort. Sie lernen aktualisierte R-Programmpakte zu installieren und Grafiken für Ihren Webauftritt zu optimieren. Sie lernen Grafiken in der Größe zu skalieren, ihnen eine Unterschrift mit automatisch generierter Nummerierung zu geben und darauf von anderen Textstellen zu referenzieren. All diese Befehle funktionieren in allen drei Endformaten: HTML, ePUB und PDF.

Im vierten Teil CMP-04 des Kurses zu Cross Media Publishing setzen Sie die Formatierung Ihres Buches mit einigen speziellen Befehlen fort. Sie lernen aktualisierte R-Programmpakte zu installieren und Grafiken für Ihren Webauftritt zu optimieren. Sie lernen Grafiken in der Größe zu skalieren, ihnen eine Unterschrift mit automatisch generierter Nummerierung zu geben und darauf von anderen Textstellen zu referenzieren. All diese Befehle funktionieren in allen drei Endformaten: HTML, ePUB und PDF.

Ich behandle in dieser Lektion die Einbindung von Grafiken. Ich zeige Ihnen hier einige Formatierungs-Techniken für Grafiken. Dazu werden wir zum ersten Mal die Möglichkeiten von R  und R Markdown nutzen und ein kleines Programm schreiben.

CMP-04: Voraussetzungen

  • Erfolgreiches Durcharbeiten von Cross Media Publishing Tutorial Nr. 1 (CMP-01)
  • Erfolgreiches Durcharbeiten von Cross Media Publishing Tutorial Nr. 2 (CMP-02)
  • Erfolgreiches Durcharbeiten von Cross Media Publishing Tutorial Nr. 3 (CMP-03)
  • Erfolgreiches Durcharbeiten von Cross Media Publishing Tutorial Nr. 3a (CMP-03a)

CMP-04: Learning Outcomes

Wenn Sie dieses Tutorial durcharbeiten, dann können Sie

  • Ihre R-Programmpakete aktualisieren
  • Grafiken einbinden
  • Grafiken für den Webauftritt optimieren
  • Querverweise auf Grafiken setzen

CMP-04: Programmpakete aktualisieren

Es sind sei Ihrer Installation nun bereits fast zwei Monate vergangen. In der Zwischenzeit hat es viele Verbesserungen der von Ihnen damals installierten Programm-Pakete gegeben. Es ist daher an der Zeit, dass Sie diese Pakte aktualieren. 

Machen Sie es sich zur Gewohnheit, regelmäßig nach Programm-Updates zu schauen. Am Besten: Immer wenn Sie RStudio neu aufrufen, schauen Sie ob es wieder Neuerungen zu den von Ihnen installierten Programmpaketen gibt.

[ngg_images source="galleries" container_ids="11" sortorder="77,76,75,74,72,73,71" display_type="photocrati-nextgen_basic_thumbnails" override_thumbnail_settings="0" thumbnail_width="100" thumbnail_height="75" thumbnail_crop="1" images_per_page="20" number_of_columns="0" ajax_pagination="1" show_all_in_lightbox="0" use_imagebrowser_effect="0" show_slideshow_link="1" slideshow_link_text="[Show as slideshow]" template="default" order_by="sortorder" order_direction="ASC" returns="included" maximum_entity_count="500"]

CMP-04: Grafiken optimieren

Bevor wir direkt mit den Grafiken arbeiten, möchte ich Ihnen noch einen Hinweis zur Optimierung Ihrer Bilddateien geben: Es empfielt sich, dass Sie Ihre Bilder "leicht" machen, d.h. ihre Größe (in kB oder MB) möglichst ohne Qualitätsverlust verkleinern. Die Webseite wird dann schneller geladen. Sehr praktisch für diese Optimierungsarbeit ist die kostenlose Webseite von Optimizilla.org. Dabei werden Bilder zwischen 65-85% (!) kleiner gemacht, ohne dass Sie einen Qualitätsverlust merken! (Diesen Trick sollten Sie auch immer beim Versenden von Grafiken eMails-Anhängen anwenden!)

CMP-04: Optimizilla verkleinert Bilder online und kostenlost
Optimizilla verkleinert Bilder online und kostenlos.

CMP-04: Markdown-Befehle für Grafiken haben Mängel

Der Standard-Befehle zur Einbindung von Grafiken lautet:

![Hier steht der ALT-Text](pfad/zum/bild.png)

Die Einbindung von Grafiken mit dem Standard-Befehl von Markdown hat jedoch einige Nachteile: 

  1. Die Grafik lässt sich nicht skalieren. 
  2. Die Grafik lässt sich nicht automatisch nummierern.
  3. Die Grafik lässt nicht von anderen Textstellen aus referenzieren. 
  4. Die Grafik lässt sich nicht mit einem Befehl für alle Ausgangsformate einbinden.

Wegen dieser Nachteile ist Standard-Markdown bei Grafiken für professioneles Cross Media Publishing nicht gut geeignet: Wir werden wir daher das R Programmpaket knitr  nutzen. Sie müssen vorbereitend einen Ordner für Ihre Grafiken anlegen. Ich empfehle den Ordner "images" zu benennen und auf der höchsten Ebene Ihres bookdown-Projektes anzulegen. Dorthin kopieren Sie Ihr PNG- oder JPG-Bild. (Nur diese beiden Formate werden voll unterstützt.)

CMP-04: Grafiken mit knitr einbinden

Wir schreiben jetzt unser erstes R-Programm. Dazu müssen wir einen sogenannten R Chunk (R Datenblock) in unsere Datei einfügen. Diese Chunks werden mit der Zeichenkette ```{r} gestartet und mit der Zeichenkette ``` in einer neuen Zeile beendet. Sie können auch das Tastaturküzel CMD-ALT I (bei einem Mac) verwenden. Die Tastaturkürzel finden Sie im Hilfemenü von RStudio. Schauen Sie unter "Source Editor -> "Insert Chunk" nach.

CMP-04: Abbildung zu Hilfe-Bildschirm für Tastaturkürzel und für das Einfügen von R-Programmierblocks
Der rechte Pfeil zeigt Ihnen das Menü, wo Sie einen Überlagerungsbildschirm (Overlay Screen) mit einer Zusammenstellung der Tastaturkürzel aufrufen können. Der Pfeill links oben zeigt Ihnen wie der R-Chunk nach der Eingabe des Tastaturkürzels CMD-ALT-I (Mac) aussieht. Der linke untere Pfeil zeigt den kompletten Chunk. (Siehe dazu genauer nächste Abbildung!)

Die obige Grafik zeigt bereits auch den Code, den ich in den R Chunk eingegeben habe. Die dabei verwendeten Elemente sind:

CMP-04: Die verschiedenen Elemente eines R-Programmblocks
Die verschiedenen Elemente eines R-Programmblocks
  1. Name des Chunks: In meinem Fall "problem-definition". Leerzeichen und andere Sonderzeichen als Bindestriche sind nicht erlaubt. Der Chunkname muss für das gesamte Buch eindeutig sein. Er wird auch zur Referenzierung bei einem Querverweis verwendet (z.B. indem Sie an geeigneter Stelle den Text Siehe Abbildung \@ref(fig:problem-definition) einfügen.
  2. Echo=false: Der Echo-Befehl gibt an, ob der Programmtext des Chunks ebenfalls ausgegeben werden soll. In unserem Fall natürlich nicht; wir wollen nur das Ergebnis (= die Grafik) sehen.
  3. fig.cap="Hier kommt die Bildunterschrift": Dieser Befehl fügt den Titel der Grafik unterhalb des Bildes ein.
  4. out.width="100%": Mit diesem Befehl können Sie die Breite des Bildes steuern. In unserem Fall verwenden wir die gesamte Textbreite (= 100%). 

Sie finden diese Möglichkeiten – und noch viele andere Optionen zur Bildausgabe – im R Markdown Reference Guide (Seite 3 unter "Plots"). Nicht alle sind für "statische" Grafiken sinnvoll. Diese Optionen wurden ursprünglich für das dynmaische Generieren von Grafiken aus Datentabellen entwickelt.  Sie den R Markdown-Leitfaden auch im Hilfe-Menü unter Help -> Cheatsheets -> R Markdown Reference Guide aufrufen.

Der eigentliche Programmbefehl im Bild oben ist die Zeile

knitr::include_graphics("images/Design-Prozess.jpg")

Der Programmbefehl lautet include_graphics("images/Design-Prozess.jpg") und wird durch das Programmpaket knitr aufgerufen. Wir hätten dieses Programmpaket auch mit den Befehl library(knitr) vorher laden können, dann hätten wir uns knitr:: sparen können. (Sie brauchen knitr nicht extra installieren, weil das bereits mit bookdown geschehen ist.)

Der Pfad "images/Design-Prozess.jpg" verweist auf die Grafik, die wir samt Ordner bereits weiter oben angelegt haben.

Wenn Sie jetzt noch den kleinen grünen Pfeil drücken (mein rechter roter Hinweise-Pfeil zeigt darauf), dann lässt RStudio das kleine R-Programm ablaufen und Sie sehen die Grafik in Ihrer RStudio-Umgebung.

Sie können aus beliebiger Stelle auf diese Grafik referenzieren. Der Name des Chunks bzw. des Programmblocks (in unserem Fall "problem-definition" ist die Sprungmarke.

Die Grafik \@ref(fig:problem-definition) zeigt den generellen Ablauf 
des Prozesses

 

CMP-04 Referenzierung einer Grafik
Referenzierung einer Grafik aus einem anderen Kapitel (einer anderen Buchdatei) heraus.

 

CMP-04: Zusammenfassung

Mit dieser Lektion haben Sie die Einbindung von optimierten Bildern mit automatisch generierter Nummerierung, sowie ihre Referenzierung gelernt. Außerdem wissen Sie nun, dass Sie regelmäßig die R-Programmpakete akutalisieren sollen und wie dies vor sich geht. 

Wie in CMP-03 bereits erwähnt: Die Details der Formatierung bildet den Hauptteil des Kurses, den ich in mehrere Kurseinheiten aufteilen werde. Sie sollten aber nicht nur diese Elemente experimentell (d.h. zwei-dreimal) probieren, sondern jetzt fleißig und kontinuierlich an der Formatierung Ihres gesamten Textes arbeiten! Nehmen Sie sich vor, dass Sie bis zur nächsten Lektion etwa ein Drittel Ihres Textes durchgesehen und – soweit bereits gelernt – auch formatiert haben. Das betrifft das Setzen von Überschriften, Leerzeilen für Absätze, geordnete und ungeordnete Listen, Textauszeichnungen (fett / kursiv / hoch- und tiefgestellt) und externe Links setzen.

Zum Abschluss eine Bitte: Bei Schwierigkeiten machen Sie sich die Mühe und dokumentieren Ihre Probleme im Forum. Ich werde darauf eingehen und wir erhalten so mit der Zeit eine Zusammenstellung auftretender Probleme (eine Art von FAQ), die für viele weitere Interessierte wichtig sein könnte.

Von Peter Baumgartner

Seit mehr als 30 Jahren treiben mich die Themen eLearning/Blended Learning und (Hochschul)-Didaktik um. Als Universitätsprofessor hat sich dieses Interesse in 13 Bücher, knapp über 200 Artikel und 20 betreuten Dissertationen niedergeschlagen. Jetzt in der Pension beschäftige ich mich zunehmend auch mit Open Science und Data Science Education.

7 Antworten auf „CMP-04: Grafiken mit bookdown“

Dass nur die Grafikformate JPG und PNG voll unterstützt werden, ist natürlich suboptimal, da beides reine Rastergrafikformate sind. Für Fotos oder Grafiken mit vielen Farben (Heatmaps etc.) ist das vollkommen in Ordnung. Für alle anderen Arten von Strichgrafiken, Diagrammen, schematischen Darstellungen, Programmablaufplänen, etc. ist es aber einfach Murks, siehe dazu auch https://de.wikipedia.org/wiki/Rastergrafik und https://de.wikipedia.org/wiki/Vektorgrafik. Für Diagramme wären also skalierbare Vektorgrafiken im entsprechenden SVG-Format oder Vektorgrafiken in einer PDF-Containerdatei viel geeigneter. LaTeX-Profis erstellen ihre Schemata und Diagramme direkt in LaTeX und nutzen somit auch dort die Trennung von Inhalt und Form konsequent weiter aus.
Noch schlimmer ist es natürlich, Strichgrafiken in JPG-Format zu speichern, da die Kompression verlustbehaftet ist und somit zu hässlichen Kompressionsartefakten führt, die immer dort auftreten, wo das Bild starke Kontraste aufweist. Siehe dazu auch: https://de.wikipedia.org/wiki/JPEG#Visuelle_Qualit%C3%A4t_und_verwandte_Formate
Das PNG-Format komprimiert verlustlos und hat wenigstens diesen Nachteil nicht.

Danke für diesen Hinweis. Ich bin kein Grafik-Spezialist. Ich werde mich mal informieren, ob die von Ihnen beschriebenen Limitationen (mit anderen R-Pakten vielleicht?) überwunden werden können.

Was auf jeden Fall geht, ist die Einbindung von PDF Grafiken. Der Befehle `include_graphics()` erkennt, wann eine (gleichnamige) Grafikdatei in diesen Format vorhanden ist und übernimmt dann in LaTeX die meistens höhere Qualität der PDF-Grafik. Siehe Ende des Kapitels https://bookdown.org/yihui/bookdown/figures.html

Wenn man PDF-Dateien einbinden kann, ist das auf jeden Fall schon mal sehr hilfreich, um eine gute Qualität zu erreichen.
Einige verbleibende Probleme sind dann, dass die Schriftart und -größe in der PDF-Datei fest ist und sich natürlich nicht mitändert, wenn man die Schriftart und -größe des Dokumentes verändert. Außerdem skaliert der Text in der PDF-Datei mit, wenn man die Grafik oder das Diagramm anders skaliert. Weiterhin kann man Höhe und Breite einer Grafik nicht getrennt anpassen, weil die Buchstaben dann verzerrt aussehen.

Ich habe jetzt nachgeschaut: Es gibt natürlich sehr viele Grafik-Pakete in R.(Siehe z.B. https://CRAN.R-project.org/view=Graphics)

Allerdings habe bisher nicht gewusst, wie diese spezialisierten (meist auf LaTeX-Output orientierten) Pakete dann in bookdown für Cross Media Publishing verwendet werden können. Die Lösung ist ein bedingte Verzweigung des Programmcodes die knitr ermöglicht: Es gibt die Befehle is_latex_output() und is_html_output().

Eine solche Fallunterscheidung bedeutet natürlich etwas Mehraufwand, ist aber im Grunde genau die richtige Lösung, um für jedes Ausgabenmedium das richtige Format bereitzustellen (Webanzeige -> kleines Dateiformat bei geringer Qualität und schneller Wiedergabezeit, Druck -> hohe Qualität, gute Skalierbarkeit). Ich denke, das ist ein guter Weg.

Bei mir hat alles soweit geklappt. Allerdings lassen sich im „Build Book“ die Resultat nicht aufrufen, im RStudio werden sie angezeigt, ein Fehlertext wird generiert, den ich noch entschlüsseln muss. Die Qualität kann ich daher nicht beurteilen.

(Für Interessierte: Ich habe das Bildschirmfoto mit der Fehlermeldung auf meine Website geladen.)

Ich glaube, dass Sie vergessen haben fig.cap unter Anführungszeichen zu setzen. Es müsste lauten:

fig.cap="MAXQDA_Interface"

Was ich aber übrigens für eine komische Unterschrift halte. Die Unterschrift kann ruhig Leerzeichen enthalten. Das ist gerade der Zweck der Anführungszeichen, dass innerhalb des Textes auch Sonderzeichen vorkommen dürfen: z.B.

fig.cap="Das MAXQDA-Interface, wie es auf dem MacOS Betriebssystem aussieht."

Noch ein Tipp: Gewöhnen Sie sich konsistente Kleinschreibung an, also nicht „Screenshot-maxqda“ sondern „screenshot-maxqda“.

Es ist zu beachten, dass Variablen-Namen innerhalb eines R Programms keine Bindestriche erlauben, wohl aber Unterstriche. Beim Label der des Programmchunks ist es leider genau umgekehrt. Sie können auch die sog. Camel-Schreibweise verwenden, die für beide Varianten gleichermaßen gilt: z.B. „screenshotMaxqda“.

Empfehlungen für den sogenannten StyleGuide finden sich auf:

Google:

http://www.gcf.dkf.unibe.ch/BCB/files/BCB_30Aug11_Stefan.pdf oder

https://google.github.io/styleguide/Rguide.xml

Besonders beliebt ist auch der Style-Guide von Hadley Wickham, einer der Haupt-Entwickler von R:

http://adv-r.had.co.nz/Style.html

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert