Skip to content

Tutorial

Supergecki edited this page Jul 23, 2024 · 4 revisions

LaTriXLib Tutorial

In dieser Schritt-für-Schritt-Anleitung erklären wir die grundsätzliche Verwendung von LaTriXLib, der Klassenbibliothek hinter LaTriX. Es werden grundsätzliche Kenntnisse über LaTeX und C# vorausgesetzt.

Ziel

Mithilfe von LaTriXLib soll die folgende Ausgabe in einem LaTeX-Dokument erzeugt werden:

latex

Vorgehen

LaTeX-Dokument erzeugen

Die meisten modernen LaTeX-Editoren bieten eine automatische Generierung eines "leeren" Dokuments mit allem nötigen Overhead an, so zum Beispiel auch das hier beispielhaft verwendete TeXMaker. Falls Ihr Editor über keine solche Funktion verfügt oder Sie manuell ein Dokument erstellen möchten, fügen Sie folgenden Overhead ins Dokument ein (es handelt sich hierbei um Standardeinstellungen; andere Schrift- oder Papiergrößen sowie Metadaten können Sie natürlich auch verwenden, in diesem Fall verweisen wir auf die LaTeX Dokumentation (englisch)):

\documentclass[11pt,a4paper]{article}
\author{example_author}
\begin{document}

\end{document}

Der Code, den wir im weiteren generieren werden, wird zwischen die \begin{document} und \end{document}-Tags eingefügt.

Abhängigkeiten installieren

Wir erstellen ein neues C#-Projekt (z.B. mit dem Titel GenerateLaTeXCodes). Mit einem Paketmanager (hier mit den .NET-Kommandozeilentools) können wir die Abhängigkeit einfügen:

dotnet add package LaTriXLib

Für andere Installationsmöglichkeiten, vgl. die NuGet-Package-Seite.

Matrix- und Vektorobjekte in C# initialisieren

Der Programmcode könnte anfangs so aussehen:

public class Program
{
    static void Main(string[] args)
    {

    }
}

Für unser Zieldokument werden wir im Hintergrund zwei Matrizen und zwei Vektoren anlegen müssen. Die dritte dargestellte Matrix braucht keine eigene Matrix-Repräsentation in unserem Programm, denn wir können sie durch ein einzelnes verändertes Argument aus der zweiten erzeugen - dazu später mehr.

Durch die Installation der LaTriXLib-Abhängigkeit haben wir auch direkt Zugriff auf die MathNet.Numerics-Bibliothek, speziell das LinearAlgebra-Modul. Wir fügen im Programmkopf das entsprechende using ein: using MathNet.Numerics.LinearAlgebra;.

Wir erstellen nun die jeweiligen Matrix- und Vektorelemente (dafür wurde einfach der double-Typ im Hintergrund genutzt) und initialisieren diese gemäß der von der MathNet.Numerics-Bibliothek bereitgestellten Methoden (innerhalb der Main-Methode; für nähere Informationen siehe die Math.NET Numerics-Dokumentation):

// Matrizen
Matrix<double> matrix1 = Matrix<double>.Build.DenseIdentity(5);
Matrix<double> matrix2 = Matrix<double>.Build.Dense(3, 4, (i,j) => i*j/100.0);

// Vektoren
Vector<double> vector1 = Vector<double>.Build.Dense(5, i => Math.Pow(0, i));
Vector<double> vector2 = Vector<double>.Build.Dense(3, i => i/100.0);

Man beachte hierbei insbesondere, dass MathNet.Numerics selbst noch keine Unterscheidung zwischen Zeilen- und Spaltenvektoren macht.

LaTeX-Codes generieren

Der LaTeX-Code für die erste Matrix lässt sich nun sehr leicht generieren:

string string1 = LaTriXLib.LaTeXConverter.ConvertMatrixToLaTeX(matrix1);

(Den String müsste man dann über die Konsole ausgeben oder direkt in die Datei einfügen... Das ist aber nicht Teil dieses Tutorials.)

Für die zweite und dritte Matrix werden wir ein zusätzliches Argument benötigen. Die Elemente der zweiten Matrix sind rechtsbündig ausgerichtet, die der dritten Matrix linksbündig. Diese Einstellung können wir über ein optionales Argument festlegen:

string string2 = LaTriXLib.LaTeXConverter.ConvertMatrixToLaTeX(matrix2, LaTriXLib.LaTeXConverter.Alignment.right);
string string3 = LaTriXLib.LaTeXConverter.ConvertMatrixToLaTeX(matrix2, LaTriXLib.LaTeXConverter.Alignment.left);

Das zweite, optionale Argument übernimmt einen Alignment-Typ der LaTeXConverter-Klasse. Alignment besitzt die Optionen right, left und center, wobei diese die Ausrichtungen der Matrix- (oder Vektor-)Elemente angeben und standardmäßig center verwendet wird.

Die Generierung der LaTeX-Codes für die Vektoren funktioniert nun weitgehend genauso. Auch diese besitzen ein optionales Argument für Alignments, dieses allerdings wird für die Tutorial-Zwecke nicht gebraucht. Der Code für den ersten Vektor ist nun leicht zu erhalten:

string string4 = LaTriXLib.LaTeXConverter.ConvertVectorToLaTeX(vector1);

also analog zur Matrix-Konversion. Wie können wir nun allerdings mitteilen, dass wir spezifisch einen Zeilen- und keinen Spaltenvektor generiert haben möchten? Dafür gibt es den VectorType-Typ der LaTeXConverter-Klasse mit den Optionen row oder column, welcher angibt, ob der Vektor als Zeilen- oder Spaltenvektor interpretiert wird. Ist kein VectorType angegeben, so wird automatisch ein Spaltenvektor angenommen. Wir erhalten also

string string5 = LaTriXLib.LaTeXConverter.ConvertVectorToLaTeX(vector2, LaTriXLib.LaTeXConverter.Alignment.center, LaTriXLib.LaTeXConverter.VectorType.row);

(Man beachte, dass der Vektortyp das dritte Argument ist und wir daher das zweite Argument, das Alignment, explizit angeben müssen.)

Einfügen im LaTeX-Dokument

Gehen wir davon aus, wir haben (über die Kommandozeile o.ä.) die LaTeX-Codes nun erhalten. Diese können (ohne den Import weiterer Bibliotheken!) einfach im Mathematikmodus in LaTeX eingefügt werden. Wir erhalten den LaTeX-Code (zwischendrin wurden Leerzeilen eingefügt, um den Code etwas besser zu strukturieren)

\documentclass[11pt,a4paper]{article}
\author{Martin Wille}
\begin{document}

$\left( \begin{array}{ccccc}
1&0&0&0&0\\
0&1&0&0&0\\
0&0&1&0&0\\
0&0&0&1&0\\
0&0&0&0&1\\
\end{array} \right)$

$\left( \begin{array}{rrrr}
0&0&0&0\\
0&0.01&0.02&0.03\\
0&0.02&0.04&0.06\\
\end{array} \right)$

$\left( \begin{array}{llll}
0&0&0&0\\
0&0.01&0.02&0.03\\
0&0.02&0.04&0.06\\
\end{array} \right)$

$\left( \begin{array}{c}
1\\
0\\
0\\
0\\
0\\
\end{array} \right)$

$\left( \begin{array}{ccc}
0&0.01&0.02\\
\end{array} \right)$

\end{document}

Mit einem LaTeXToPdf-Compiler erhalten wir das gewünschte Ergebnis. Wichtig ist, dass die generierten Codes keinen eigenen Mathematikmodus einleiten, dieser muss immer (z.B. mit $) ein- und wieder ausgeleitet werden!

Quelldateien

Die für dieses Beispielprojekt verwendeten Quelldateien finden Sie im examples-Ordner des Repositories.

LaTriXGUI Tutorial

In diesem Tutorial wird dasselbe LaTeX-Dokument wie oben erstellt. Der LaTeX-Anteil ist derselbe und kann analog übernommen werden.

ACHTUNG: LaTriXGUI läuft momentan nur unter Windows-Systemen, andere Betriebssysteme werden (noch) nicht unterstützt.

Wir starten die ausführbare Datei der LaTriXGUI (so etwas wie LaTriXGUI.exe o.ä.). Diese erhalten Sie aus dem neuesten Release. Es öffnet sich folgendes Fenster: gui1

Die Nutzeroberfläche ist grundsätzlich in zwei Teile geteilt. Im linken Teil befinden sich oben, überschrieben mit "Zeilen" bzw. "Spalten", je zwei "Stepper"-Steuerelemente, mit denen die Größe der zu erstellenden Matrix eingegeben bzw. eingestellt werden kann. Darunter befindet sich eine tabellarische Eingabemaske, wobei in jedes Feld eine Zahl eingetragen werden kann.

Im rechten Teil befindet sich eine Vorschaubox, welche den Code, der generiert werden wird, bereits vorher anzeigt. Darüber befinden sich ein Dropdown-Menü "Ausrichtung", in dem der Ausrichtungs- ("Alignment") Parameter eingestellt werden kann und daneben ein Knopf, der ein Kopieren des Codes in die Zwischenablage ermöglicht.

Für unsere erste Beispielmatrix stellen wir 5 Zeilen und 5 Spalten ein. Danach reicht es aus, in die Hauptdiagonalfelder der tabellarischen Eingabemaske Einsen einzutragen - leere Felder werden automatisch als Nullen interpretiert: gui2

Ein Knopfdruck in "Kopieren in Zwischenablage" gibt uns den Code in die Zwischenablage und wir können ihn direkt in unser LaTeX-Dokument einfügen: gui3

Für die beiden anderen Beispielmatrizen stellen wir wieder die Matrix-Größe ein (3 Zeilen und 4 Spalten) und tragen nacheinander die Zahlen ein. Dabei erkennt die GUI sowohl '.' als auch ',' als Dezimaltrennzeichen. Jetzt können wir oben rechts im "Ausrichtung"-Dropdown-Menü die gewünschte Ausrichtung auswählen, zunächst probieren wir "rechtsbündig": gui4

Dann können wir den Code wieder kopieren, der Code wurde dann bereits angepasst. ("Linksbündig" funktioniert genauso, dann im Dropdown-Menü einfach "linksbündig" statt "rechtsbündig" auswählen.)

Um die Vektoren darzustellen, nutzen wir einfach 1-reihige oder 1-spaltige Matrizen.

Das war es schon, vielen Dank, dass Sie LaTriX nutzen!

Clone this wiki locally