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.

How to Encode an SVG for the `src`-Attribute using PHP

As SVGs should preferably not be base64 encoded when setting them on an -tag src-attribute, the suggested alternative is to URL-encode them. The standard PHP urlencode function unfortunately is not suitable for this task, as the resulting value is not interpreted by any browser as a valid SVG image. Instead, the function rawurlencode has to be used. Took me some time to realize. As soon as you get this, you can also take over some other optimizations; maybe get inspired by Taylor Hunts mini-svg-uri to decode some characters manually to improve the overall size. A final function could possibly look like this:

function svgUrlEncode($svgPath)
{
$data = \file_get_contents($svgPath);
$data = \preg_replace('/\v(?:[\v\h]+)/', ' ', $data);
$data = \str_replace('"', "'", $data);
$data = \rawurlencode($data);
// re-decode a few characters understood by browsers to improve compression
$data = \str_replace('%20', ' ', $data);
$data = \str_replace('%3D', '=', $data);
$data = \str_replace('%3A', ':', $data);
$data = \str_replace('%2F', '/', $data);
return $data;
}

Cortana vs. Siri #4: Verfügbarkeit

Lange hat es gedauert, doch nun scheint dieser Punkt auch an Cortana zu gehen: Seit nicht allzu langer Zeit ist einerseits Cortana auf Windows 10 Geräten auch in der Schweiz standardmässig verfügbar, ohne dass man gross tricksen muss, und andererseits Siri verfügbar auf Desktop-Geräten und Laptops, die mit dem neusten MacOS ausgerüstet sind. Aber den wharen Punkt gibt es, da insbesondere Cortana bald auch auf iOs- und Adroid-Geräten verfügbar, was von Siri umgekehrt wohl nie behauptet werden kann.

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.

Dynamic MediaQueries for an image raster with Sass

Ich konnte MediaQueries dynamisch aus Zurb Foundations-Breakpoints für ein Raster mit folgendem Sass-Code genierieren:

$i: 2;
@each $s,
$breakpoint in $breakpoints {
    @media (min-width: $breakpoint) {
        div.grid {
            .element {
                width: calc(100%/#{$i});
            }
        }
    }
    $i: $i+1;
}

In meinem Fall generiert es die Medienabfragen für alle Breakpoints, die für das Zurb Foundation Framework in den Sass-Array $breakpoints definiert sind. Für jeden Haltepunkt erhöht er die Anzahl der in einer Reihe des Gitters angezeigten Elemente, indem er seine Breite einstellt, beginnend mit zwei Elementen für die kleinste Bildschirmbreite. Natürlich muss für das .element die display -Eigenschaft auf inline-block gesetzt sein.

Cortana in der Schweiz!

Mit dem Anniversary Update von Windows 10 ist es endlich soweit – der Sprachassistent von Microsoft ist endlich auch in der Schweiz verfügbar. Zwar versteht Cortana nur Hochdeutsch, doch das ist verständlich. Um Cortana zu aktivieren, benötigt man als erstes das neuste Update von Windows. Dies ist unterdessen auch für Mobilgeräte verfügbar, und kann in den Einstellungen unter Update und Sicherheit und Windows Update installiert werden.

Anschliessend ist für die Aktivierung noch eine kleine Einstellung notwendig. Durch klicken auf das Lupensymbol öffnet sich ein Fenster, in dem man unten links über dem Feedback-Symbol auf das Zahnrad klicken muss, um die Einstellungen für diese Suche zu öffnen. Dort findet man die Einstellung für die Sprache von Cortana. Man wird darauf hingewiesen, dass Region und Sprache nicht mit einer verfügbaren Cortana Sprache übereinstimmen. Dennoch kann man aus einer Liste die Sprache Deutsch (Deutschland) auswählen. Eine erneute Warnung, dass Region und Sprache nicht mit Cortanas Sprache übereinstimmen, und dass einige Features möglicherweise nicht verfügbar sind, kann man getrost wegklicken. Und yay – das wars! Cortana ist ab sofort auf deinem Gerät aktiviert.

Mich hat es vor allem gefreut, dass nun endlich auch der nervtötende {searchTerms} Bug auf meinem Lumia 930 gelöst und verschwunden ist. Bei diesem Fehler öffnete sich mir immer ein Edge-Tab mit einer Google-Suche nach {searchTerms} wenn ich das Lupensymbol berührte.

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!

plymouthd: ply-terminal.c:611: ply_terminal_open: Assertion 'terminal != ((void *)0)' failed

plymouthd: ply-terminal.c:611: ply_terminal_open: Assertion 'terminal != ((void *)0)' failed

Eine Fehlermeldung, die den Cubietruck praktisch zum erliegen bringt. Irres auf-der-Tastatur-herumschlagen nützt au nichts mehr. Da gibt es aber noch eine Lösung: Ctrl + Alt + F1

Das Problem ist bloss, dass die Lubuntu Benutzeroberfläche nicht gestartet werden konnte. Mit dem magischen Tastaturbefehl kommt man zur ursprünglichen Ubuntu Befehlszeile. Von hier aus kann man nun mögliche Ursachen suchen und selbige beheben.

In meinem Fall verhinderte eine unvollständige Installation von Java das starten der UI. Die Installation konnte ich, nachdem ich ein wenig mehr Platz geschaffen habe auf der Festplatte, mit sudo apt-get -f install vollenden. Danach kann man entweder die Benutzeroberfläche per Befehl starten, oder mit sudo reboot den Computer neu starten, so dass die Benutzeroberfläche wie üblich beim Aufstarten aktiviert wird.