Vier Möglichkeiten, um zwei Elemente in LaTeX nebeneinander auszurichten

Natürlich gibt es mehr als nur vier Möglichkeiten, Elemente nebeneinander auszurichten. In diesem Beitrag möchte ich nur die vier Möglichkeiten zusammenfassen, die ich normalerweise nutze:

  • Flowfram
  • Tabelle
  • Spalten
  • Minipage

Beachten Sie, dass der gesamte Code auf das wesentliche reduziert wurde, um die Länge dieses Beitrags zu verringern.

Flowfram

Flowfram ist ein package, das geladen und konfiguriert werden muss. Im Folgenden werde ich nur die Art und Weise auflisten, wie zwei einfache Bildelemente nebeneinander ausgerichtet werden, obwohl dieses Paket viel mehr Möglichkeiten bietet. Weitere Informationen finden Sie in der Dokumentation.

% ...
usepackage{flowfram}

newflowframe{0.49textwidth}{textheight}{0pt}{0pt}[columnone]
newflowframe{0.49textwidth}{textheight}{dimexpr2blockwidth+3columnsep}{0pt}[columntwo]

begin{document}

begin{figure}[!h]
    centering
    includegraphics[width=.25textwidth]{test-white.png}
    caption{Caption}
    label{fig:my_label1}
end{figure}

pagebreak

begin{figure}[!h]
    centering
    includegraphics[width=.25textwidth]{test-white.png}
    caption{Caption}
    label{fig:my_label2}
end{figure}

% ...

Tabelle

Die gute alte Tabelle ist auch eine Methode, Elemente nebeneinander zu positionieren! Beachten Sie, dass es nicht der Zweck einer Tabellenzelle ist, viel mehr als nur Text zu enthalten. Es könnte also sein, dass Sie zusätzliche Schwierigkeiten haben, beispielsweise ein Bild oder eine Liste in eine Tabelle einzufügen. Wichtig für die Verwendung als Layout-Tool ist einfach, dass sie die Ränder der Tabellenzellen und Reihen nicht hinzufügen. Das bedeutet einfach, keine “|” zwischen den “Float Specifiers” sowie keine hline oder ähnliches in der Tabelle platzieren.

Im folgenden Beispiel verwende ich usepackage{tabularx}, um beiden Elementen den gleichen horizontalen Raum zu geben.

begin{table}[!h]
    centering
    begin{tabularx}{textwidth}{XX}
        {
           Test links
        } &  {
           Test rechts
        }
    end{tabularx}
end{table}

Spalten

Spalten sind der Weg, um längere Teile des Dokuments zu bearbeiten, oder um das gesamte Dokument in zwei Elemente nebeneinander aufzuteilen. Sie können das multicol-Paket für eine einfache Lösung verwenden:

usepackage{multicol}
 
begin{document}
begin{multicols}{2}
    This text will be split into two columns. 
end{multicols}

Minipage

Minipage ist kein separates Paket und sollte automatisch von Ihrer LaTeX-Distribution bereitgestellt sein. Eine minipage ist das, was der Name sagt: eine neue Float-Umgebung, eine neue Seite, aber Mini. Sie können fast alles in eine Miniseite packen und die Größe so anpassen, wie Sie möchten. Folgendermassen richten Sie zwei Miniseiten nebeneinander aus:

begin{figure}[htbp]
	% minipage mit Text
	begin{minipage}{0.45textwidth} 
	Linke Seite
	end{minipage}
	% Platz dazwischen füllen
	hfill
	% minipage mit Bild
	begin{minipage}{0.45textwidth}
	% textwidth bezieht sich in der minipage auf die minipage
	includegraphics[width=textwidth]{test.png}
	caption{Ein Bild}
	label{image} 
	end{minipage}
caption{Caption für beide Seiten. Optional.}
end{figure}

Was brauche ich wann?

Beantworten Sie die folgenden Fragen, um eine Antwort zu erhalten. Beachten Sie, dass diese Auswahl nur auf meiner aktuellen Meinung und meinem Wissen basiert und daher Änderungen ausgesetzt ist.

Benötigen Sie ein sehr konfigurierbares Spalten-Setup und sind Sie bereit, lange Dokumentationen zu lesen und die Interna eines LaTeX-Pakets kennenzulernen, um dafür die größtmöglichen Möglichkeiten zu erhalten? Verwenden Sie Flowfram.

Müssen die Elemente nicht unbedingt nebeneinander sein, sondern von einem ins andere überlaufen? Verwenden Sie Spalten.

Sind die Elemente, die nebeneinander platziert werden sollen, gleich hoch, benötigen zusammen keine bestimmte Platzierung und sind keine neue Float-Umgebungen? Verwenden Sie eine Tabelle (oder eine longtable, wenn ihre Elemente zusammen länger als eine Seite sind).

Wenn Sie all diese Fragen mit Nein beantwortet haben, versuchen Sie es mit einer minipage.

Einschätzung der notwendingen Stromsauberkeit für den sinnvollen Einsatz von E-Autos

Der Zweck dieses Posts ist es, die maximale “Dreckigkeit” von Elektrizität für Elektroautos zu berechnen, damit diese die bessere Alternative zu konventionellen diesel- oder benzinbetriebenen Autos darstellen. Der Post ist einerseits eine Bestätigung meiner Informations-Bubble und andererseits eine Antwort auf den zu Recht kontroversen und widerlegten Artikel von Buchal, Karl und Sinn ​[1]​.

Folgende Annahmen werden wir treffen:

  • wir vernachlässigen den Bau, den Transport und den Verkauf des Autos,
  • und starten beim Punkt “Kunde kauft Auto”.
  • Wir vernachlässigen den CO2 Beitrag von Fracking, Raffinerie, Lagerung und Transport der fossilen Brennstoffe,
  • nehmen an dass der Strom nur durch Wasser & Kohlestrom besteht,
  • vernachlässigen jegliche CO2-Emissionen des Wasser-Stroms
  • und vernachlässigen den Bau jeglicher Verteilungsnetze.

Was die Daten angeht, werden wir mit den in jenem Artikel gewählten Automodellen rechnen: einem Tesla Model 3 und einem Mercedes C 220 d. Der Referenzwert für den Mercedes beträgt mindestens 0.134 kg CO2 per Kilometer ​[2]​. Dies ist der Wert, auf den wir den Kohleanteil maximieren wollen.

Für das Tesla-Modell 3 wird ein Wirkungsgrad von 0,148 kWh pro Kilometer angegeben ​[3]​. Mit einer Li-ion Batterie Effizienz von 99 % ​[4]​, können wir Lade- und Entladeverluste vernachlässigen. Nehmen wir den globalen Durchschnitt des Stromausfalls durch das Stromnetz von 12% ​[5]​ an, brauchen wir 0.168 kWh produzierten Strom per Kilometer.

Für die CO2-Erzeugung durch Kohlestrom gehen wir vom schlimmsten Fall aus. Das entspricht der höchsten Emissionen durch Anthrazitkohle von 0.354 kg CO2 per kWh (Einheiten umgerechnet) ​[6]​ liegen. Bei einem Anteil von 100% Kohle wäre unser Tesla somit verantwortlich für 0.059 kg CO2 per Kilometer. Dies ist weniger als die Hälfte der Emissionen des Mercedes, für die unrealistische Annahme von 100% des Stroms aus Kohle.

Zusammenfassend lässt sich also sagen, dass eine kurze Berechnung den allgemeinen Eindruck unterstützt, dass Elektroautos tatsächlich weniger Emissionen verursachen. Es muss jedoch angemerkt werden, dass für dieses Resultat einige Annahmen getroffen wurden. Die meisten davon scheinen sich im direkten Vergleich jedoch aufzuheben. Auch wurden nur die Kohlendioxidemissionen berücksichtigt, obwohl dies keineswegs weder der einzige noch ein ausreichender Indikator für Umweltverträglichkeit ist. Was ich in einer weiteren Überarbeitung dieser Berechnungen ausserdem berücksichtigen würde, ist die Herstellung der Batterie des Tesla, da dies der Hauptunterschied in der Herstellung der beiden Autos ist.

Wenn Sie Fehler in meinen Berechnungen finden oder Zweifel an meinen Annahmen haben, zögern Sie nicht, mir eine E-Mail zu schreiben oder einen Kommentar zu hinterlassen.

References

  1. [1]
    C. Buchal, H.-D. Karl, and H.-W. Sinn, “Kohlemotoren, Windmotoren und Dieselmotoren: Was zeigt die CO2-Bilanz?” p. 15.
  2. [2]
    “C-Klasse: T-Modell, Preisliste gültig ab 1. Februar 2019.” Mercedes-Benz Schweiz AG.
  3. [3]
    “Tesla Model 3 Standard Range,” Electric Vehicle Database. [Online]. Available: https://ev-database.org/car/1060/Tesla-Model-3-Standard-Range. [Accessed: 19-Jun-2019]
  4. [4]
    “Battery University,” BU-104a: Comparing the Battery with Other Power Sources, 28-Mar-2019. [Online]. Available: https://batteryuniversity.com/learn/article/comparing_the_battery_with_other_power_sources. [Accessed: 19-Jun-2019]
  5. [5]
    “ 6. Efficiency and Power Grids,” Global CCS Institute. [Online]. Available: https://hub.globalccsinstitute.com/publications/energy-efficiency-technologies-overview-report/6-efficiency-and-power-grids. [Accessed: 16-Jun-2019]
  6. [6]
    “How much carbon dioxide is produced when different fuels are burned?,” U.S. Energy Information Administration, 04-Jun-2019. [Online]. Available: https://www.eia.gov/tools/faqs/faq.php?id=73&t=11. [Accessed: 19-Jun-2019]

Meine Lösung für`0 – Using $this not in object context` in Joomla!

Nach der Migration wurde die Joomla! Seite schlichtweg nicht angezeigt. Stattdessen wurde nur der Fehler “0 - Using $this not in object context” angezeigt. In meinem Fall konnte ich das Problem beheben, indem ich – im Code des Templates – alle JFactory::getMenu() durch $ application->getMenu() ersetzte, wobei $application gesetzt wurde als $application = JFactory::getApplication().

Beachten Sie, dass dies möglicherweise nicht die einzig mögliche Lösung für diesen Fehler ist. Es hängt stark von Ihrem Code ab. Im Allgemeinen weist die Fehlermeldung auf das zugrunde liegende Problem hin: Irgendwo in Joomla!s (oder Ihrem) Code befindet sich ein $this in einer Klasse, die – wohl in Ihrem Code – verwendet wird, ohne dass die Klasse ordnungsgemäss instanziiert wurde. In dem oben erwähnten Fall zum Beispiel wurde die Klasse statisch initialisiert. Dies, weil das anscheinend im älteren Joomla! Versionen eine gängige und mögliche Art war.

Um die Ursache Ihres Problems zu finden, empfehle ich, Joomla! Debugging sowie PHP-Protokollierung zu aktivieren, um den vollständigen Stack-Trace abzurufen und damit den Ursprung der falsch instanziierten Klasse zu ermitteln.

Apple Superdrive mit Windows verwenden

Das Apple Superdrive Laufwerk lässt sich problemlos unter Windows verwenden. Allerdings muss dafür der entsprechende Treiber installiert werden.

Das geht folgendermassen: Laden Sie sich die Apple Boot Camp-Support-Software herunter. Die Datei ist eine Zip-Datei, also um einen «Zip-komprimierten Ordner», wie Windows das nennt. Entpacken Sie die Datei und öffnen anschliessend den entpackten Ordner. Gehen Sie darin zum Unterordner /BootCamp/Drivers/Apple. Dort finden Sie eine Datei namens «AppleODDInstaller64.exe» (eventuell ist die Endung «.exe» nicht zu sehen). Installieren Sie mithilfe dieser Datei den Treiber, indem Sie auf sie doppelklicken und dem Installationsassistenten folgen. Das war es schon! Beim nächsten Anhängen des Apple-SuperDrive Laufwerks sollte Ihr Windows dieses nun erkennen und damit arbeiten können.

Google und Neujahrsvorsätze

Wer im Web sucht, verrät etwas über sich – zumindest wenn er sich nicht dagegen schützt. So zeichnen Google, Bing und Co. jede Suchanfrage auf, zusammen mit Datum, Ort und welche Daten auch immer sie noch kriegen können. Zu unserem Glück bieten sie immer wieder einen Einblick in ihre Daten und zeigen Trends und Highlights, so zum Beispiel auf google.com/trends.

Diese Daten können wichtige Erkenntnisse liefern oder einfach faszinieren. Und sie repräsentieren die Gedanken und Sorgen unserer Gesellschaft. So lässt sich zum Beispiel feststellen, dass kurz vor dem Verkaufsstart von neuen iPhones die Suchanfragen nach “iPhone langsam” exponentiell in die Höhe schnellen.

Jetzt, kurz nach Silvester, jetzt, am Anfang des neuen Jahrs, lässt sich eine ebenso rasch ansteigende Nachfrage nach “Fitness”, “abnehmen” oder “Diät” feststellen. Diese wird auch dieses Jahr – wie alle Jahre zuvor, achten Sie mal auf die Kurve – schnell wieder zurückgehen. Im Frühling wenn das Volk wieder von einer Bikinifigur träumt gehen die Suchanfragen wieder ein wenig rauf, nehmen aber auch diesmal wieder ab – bis zu den Neujahrsvorsätzen!

Welche regelmässigen Kurven finden Sie? Schreiben Sie Ihre Beobachtungen in die Kommentare!

Lesemodus – Rückentwicklung des Webs?

Immer mehr Geräte mit Internetzugang bieten im Browser die Möglichkeit, die Website ohne Style bloss als Text mit den Bildern anzuzeigen. Je nach Browser heisst diese Funktion zum Beispiel “Reader View” bzw. “Lesemodus”. Das meiner Meinung erstaunliche daran ist, dass das meiner Beobachtungen zufolge quasi ein Rückschritt auf dem Weg der Webentwicklung bedeutet. Im Lesemodus werden die Seiten, wie ganz zu Beginn des Internets, nur mit den elementarsten HTML Tags dargestellt: Nur die verschiedenen Headings, Links und Paragraphen werden angewandt. Dieser Modus macht das Lesen vielfach tatsächlich einfacher und bietet somit viel Potential. Dennoch sehe ich noch einige Schwachstellen. Einerseits werden die Webseiten dennoch ganz geladen und verbrauchen somit ebenso viel Internetleistung. Andererseits entspricht der Style des Lesemodus aus unerfindlichen Gründen nicht dem Standardstyle des Browsers – wenn also ein Developer denkt er könne es sich einfach machen und den Style einfach weg lassen, weil seine Seite einfach nur gelesen werden muss, hat sich leider getäuscht. Das Standardlayout ist noch immer voll 90er Jahre und dass der Nutzer deshalb die Reader View einschaltet ist nicht zu erwarten. Stattdessen sucht er eine andere Website auf, die ihm besser gefällt…

Haben Sie diesen Artikel im Lesemodus angeschaut? Ist Ihnen meine Meinung zu weit hergeholt? Schreiben Sie Ihre Antwort in die Kommentare!

Geistesblitz: gesamter localStorage auslesen

Für eine HTML5 Applikation hatte ich die Idee, einige Elemente im localStorage anstatt zu löschen bloss umzubenennen. Da dies mehrfach geschiehen würde, musste die Umbenennung eindeutig erfolgen, damit die anderen Elemente nicht überschrieben werden. Und was eignet sich für die eindeutige Identifikation besser als die aktuelle Uhrzeit mit Datum, Millisekunden und allem?

Nun gut; die Idee mag zwar gut klingen, aber wie kriegt man das Element eines Tages wieder aus dem Speicher raus? Wie kann ich ein Element mit nahezu zufälligem Schlüssel aufrufen?

Ja, lieber Leser, genau diese Frage habe ich mir gestellt. Bestimmt haben Sie schon nach dem Titel gedacht “Pah, das weiss ich…”. Und damit haben Sie natürlich Recht, doch da nach einer kurzen Internetrecherche meinerseits keine Lösungen auffindbar waren, möchte ich hier zwei vorstellen.

Die eine Lösung ist wohl die elegantere: jedes mal wenn man ein neues “Zufallselement” in den Storage schreibt, den entsprechenden Schlüssel in ein Array schreiben, das ebenfalls in den localStorage geschrieben wird.

Die andere Lösung ist jene, die zum Titel “Geistesblitz” geführt hat. Obwohl die Idee sehr naheliegend ist und ich früher hätte auf die Idee kommen sollen, ist sie mir halt eben als Geistesblitz gekommen. Der entscheidende Gedanke ist dieser: localStorage ist ein Objekt wie jedes andere. Also kann man es mit einer einfachen for-Schlaufe durchlaufen. Das geht zum Beispiel so, wenn alle Elemente untereinander aufgelistet werden sollen:

function listItems () {
	var string = "";
	for (var key in localStorage) {
		string += key + ": " + localStorage.getItem(key);
		string += "<br />";
	}
	document.getElementById("target").innerHTML = string;
}

CSS: Windows Phone Akzentfarbe

Mit Windows (Phone) 8 gab Microsoft den Entwicklern die Möglichkeit, ihre Apps für Windows & Windows Phone mit HTML, CSS und JavaScript zu entwickeln. So ist es besonders für Webentwickler wie mich verlockend, die Web App auf jene Geräte zu portieren.

Gerade Windows Phone brilliert mit einer grossen Personalisierbarkeit; neben der Flexibilität des Sperrbildschirms, dem Hintergrundbild das den Startbildschirm vervollständigt ist auch die Akzentfarbe ein oft genanntes Argument, weshalb Windows Phone besser personalisierbar ist.

Doch wie ist es nun möglich, wenn man die App mit HTML und CSS entwickelt, auf die Akzentfarbe zuzugreifen? Die Antwort ist simpel, wenn man sie einmal gefunden hat: über die Farbe mit dem Namen Highlight. Die passende Textfarbe kann man, sehr naheliegend, mit HighlightText anwenden.

Formatierter Source Code in Indesign und Co. einbinden

Sei es eine Bachelor-, Doktor- oder bloss eine kleine Schularbeit im Bereich Informatik: ohne Code kommt sie kaum aus. Doch wie kann man den Code, so schön wie er in Eclipse und Co. formatiert wird, ohne LaTeX-Kenntnisse in Word oder InDesign einbinden?

Einen Screenshot aufzuzeichnen ist die eine Möglichkeit. Dies geht entweder mit den Tastaturkürzeln cmd + shift + 3 bzw. cmd + shift + 4 auf dem Mac oder auf dem Windows-PC mit folgender Anleitung: http://windows.microsoft.com/de-CH/windows-xp/help/setup/take-a-screen-shot

Doch für längeren Code, der den Bildschirm sprengt, lohnt sich diese Herangehensweise nicht. Doch zum Glück gibt es noch mindestens eine andere Lösung: Exportieren Sie den Code mit file -> print -> adobe pdf bzw. datei -> drucken -> adobe pdf aus eclipse oder ähnlich zu einem pdf, das sie problemlos einbinden können. Falls die Auswahl Adobe pdf als Drucker nicht verfügbar ist, können Sie die freeware CutePDF Writer herunterladen und im Druckdialog auswählen. Doch Vorsicht wenn Sie dieses Programm wählen, dass Sie nicht aus Versehen die ask-toolbar installieren.
Je nach Druckdialog ist es auch gar nicht nötig, Adobe PDF als Drucker auszuwählen, und der Druckdialog bietet eine eigene Möglichkeit, den Code als PDF zu exportieren (vgl. folgender Screenshot).
Druckdialog TextWrangler