Translate the source code listings part and add note on shell escape

This commit is contained in:
Knoch 2021-06-23 10:02:12 +02:00
parent 6c7d21b70a
commit ee9d97c138
4 changed files with 67 additions and 59 deletions

View File

@ -1,69 +1,79 @@
\chapter{Quelltext-Listings} \chapter{Source code listings}
\label{sec:source-code-listings} \label{sec:source-code-listings}
Um Quelltext in eigenen Arbeiten darzustellen, gibt es in \LaTeX verschiedene Wege. There are many ways in \LaTeX{} to display source code.
Wir verwenden hierfür gern das Paket \mintinline{latex}{minted}, das zwar etwas zusätzlichen Installationsaufwand verursacht, dafür aber ansprechende Ergebnisse generiert und gut zu handhaben ist. We have come to appreciate the package \mintinline{latex}{minted}, which causes some additional installation overhead, but generates very appealing source code renderings.
\section{Installation} \section{Installation}
Zur Verwendung von \mintinline{latex}{minted} ist eine Installation der Programmiersprache Python 3 notwendig. Je nachdem, welches Betriebsystem ihr nutzt, kann es sein, dass Python 3 bei euch schon installiert ist. Das könnt ihr durch die Engabe des Befehls \mintinline{bash}{python --version} oder \mintinline{bash}{python3 --version} in einem Terminal\footnote{Navigation unter Windows: \faWindows\ + R → \enquote{cmd} eingeben → Enter} herausfinden Using \mintinline{latex}{minted} requires a working installation of the programming language Python 3 (henceforth referred to as Python).
On some operating systems, Python comes pre-installed, in which case entering the command \mintinline{bash}{python --version} or \mintinline{bash}{python3 --version} in a terminal of your choice\footnote{Opening a terminal on Windows: \faWindows\ + R → Type \enquote{cmd} → Enter} should print out the installed Python version.
Sollte Python bei euch noch nicht installiert sein, sind die Installationsdateien auf der Projekt-Website\footnote{Verfügbar unter \url{https://www.python.org/downloads/}.} zu finden. If Python is yet to be installed, then you can find the installation files on the project website\footnote{Available at \url{https://www.python.org/downloads/}.}.
Ein ausführlicherer Beitrag zur Installation unter Windows,\footnote{Jason Fitzpatrick, How to Install Python on Windows. How-To Geek. July 11, 2017. Verfügbar unter \url{https://www.howtogeek.com/197947/how-to-install-python-on-windows/}.} Linux\footnote{ \url{https://docs.python-guide.org/starting/install3/linux/}} oder MacOS\footnote{\url{https://docs.python-guide.org/starting/install3/osx/}} führt euch durch die verschiedenen Schritte, die speziell für euer Betriebssystem notwendig sind.\footnote{Insbesondere das Anpassen des Systempfads sollte unter Windows nicht vergessen werden.} There are extensive articles that cover all relevant steps to install Python on Windows\footnote{Jason Fitzpatrick, How to Install Python on Windows. How-To Geek. July 11, 2017. Available at \url{https://www.howtogeek.com/197947/how-to-install-python-on-windows/}. Windows users will have to adjust the system path. Forgetting this step has been the number one installation problem in past workshops.}, Linux\footnote{\url{https://docs.python-guide.org/starting/install3/linux/}}, or macOS\footnote{\url{https://docs.python-guide.org/starting/install3/osx/}}.
Nach der erfolgreichen Installation solltet ihr, je nach Betriebssystem, in der Eingabeaufforderung den oben genannten Befehl noch mal eingeben und mit Enter bestätigen können und in etwa folgendes Ergebnis erhalten: After a successful installation, you should be able to execute the aforementioned command in a terminal, confirm by pressing Enter, and see approximately the following result:
\begin{minted}[]{bash} \begin{minted}[]{bash}
$ python --version $ python --version
Python 3.8.5 Python 3.8.5
\end{minted} \end{minted}
\noindent Sollte die Versionsnummer höher sein, ist alles bestens. \noindent If the version number is equal to the one stated here, or higher, then everything should be set up correctly.
Im gleichen Fenster gebt ihr jetzt den Befehl \mintinline{bash}{pip install Pygments}\footnote{Achtung: In einigen Betriebssystem lautet der Befehl \mintinline{bash}{pip3 install Pygments}} ein, womit das Pygments-Paket für Python installiert wird. Next, enter the command \mintinline{bash}{pip install Pygments}\footnote{On some operating systems, you might have to use the command \mintinline{bash}{pip3 install Pygments}} in the same terminal window to install the Pygments package for Python.
Nach Abschluss dieses Vorgangs könnt ihr das \LaTeX-Paket \mintinline{latex}{minted} über \mintinline{latex}{\usepackage{minted}} einbinden. Once the installation is complete, you are ready to include the \LaTeX{} package \mintinline{latex}{minted} into your documents by adding \mintinline{latex}{\usepackage{minted}} to your preamble.
\section{Compiler-Befehl ändern} \section{Changing the compiler command}
Bevor es allerdings richtig losgehen kann, müssen wir noch eine Kleinigkeit im Compile-Prozess anpassen. There is one last adjustment needed before you can actually compile your documents---we will have to adjust the compile command.
Normalerweise ruft euer Editor beim Klick auf den grünen Pfeil etwa den folgenden Befehl auf: Out of the box, your editor will probably execute the following command after you clicked the green compile arrow:
\begin{minted}[]{bash} \begin{minted}[]{bash}
$ pdflatex main.tex $ pdflatex main.tex
\end{minted} \end{minted}
\noindent Welcher Befehl das bei euch genau ist, könnt ihr in \TeX{}studio unter \enquote{Optionen → \TeX{}studio konfigurieren → Befehle} einsehen. \noindent The exact command can be found and configured in \TeX{}studio under \enquote{Options → Configure \TeX{}studio → Commands}.
Neben Pdf\LaTeX{} seht ihr den Befehl. It is stated next to the label Pdf\LaTeX{}.
Die Datei, die kompiliert werden soll, wird hier durch \mintinline{bash}{%.tex} angegeben. The file that is to be compiled will replace the placeholder \mintinline{bash}{%.tex} upon compilation.
Außerdem sind üblicherweise noch zwei zusätzliche Angaben enthalten, jeweils mit einem Bindestrich davor (\mintinline{bash}{-synctex=1 -interaction=nonstopmode}). Additionally, there are typically two additional options configured.
Diese Angaben heißen Flags und konfigurieren das Programm \mintinline{bash}{pdflatex}. You can recognize them by the hyphen before their names (\mintinline{bash}{-synctex=1 -interaction=nonstopmode}).
Eine solche Flag müssen wir ergänzen. These options are called flags and configure the program \mintinline{bash}{pdflatex}.
Platziert die Angabe \mintinline{bash}{-shell-escape} vor der Datei-Angabe (\mintinline{bash}{%.tex}): We will have to add another flag.
Place the string \mintinline{bash}{-shell-escape} before the file placeholder (\mintinline{bash}{%.tex}):
\begin{minted}[]{bash} \begin{minted}[]{bash}
pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %.tex
\end{minted} \end{minted}
\noindent Nach Klick auf \enquote{Okay} ist der Einrichtungsschritt abgeschlossen. \noindent After a click on \enquote{Okay} the configuration is finished.
Auch andere Editoren bieten die Möglichkeit, den Kompilierbefehl anzupassen. Other editors usually provide similar options to configure the compilation command.
Schaut am besten mal in die Einstellungen oder bemüht eine Suchmaschine. We recommend you to have a look at the settings or to use of a search engine to figure it out.
\section{Quelltext setzen} \paragraph{An important note on the shell escape flag.} \mintinline{bash}{minted}'s syntax highlighting is done by a Python package, which adds the necessity to communicate between the compiler and the Python runtime.
Jetzt kann der eigentliche Spaß losgehen. The shell escape flag adds this communication path.
Quelltext könnt ihr von nun an unter Angabe der Sprache in einer eigenen Umgebung setzen: When enabled, \LaTeX{} can execute any command in a terminal, which can be very useful.
Nonetheless, it would also be possible to execute malign code on your computer via \LaTeX{}, especially when you are compiling unknown documents from the Internet.
Therefore, do not compile downloaded documents with the shell escape flag if you do not trust the authors and did not check the packages and commands they include.
\example{lst:minted-environment}{source-code-listings/minted-environment}{Beispielhaftes Quelltext-Listing} \section{Defining listings}
We are finally ready to marvel at the aesthetic quality of the listings \mintinline{bash}{minted} produces.
You can define listings using a dedicated environment:
\example{lst:minted-variants}{source-code-listings/minted-variants}{Kurzschreibweise und Inline-Listing} \example{lst:minted-environment}{source-code-listings/minted-environment}{Examplary source code listing}
\noindent Außerdem gibt es eine Kurzschreibweise und eine Inline-Variante des Befehls (vgl. \cref{lst:minted-variants}). \example{lst:minted-variants}{source-code-listings/minted-variants}{Shorthand and inline listing}
Um Redundanz zu vermeiden, ist es manchmal praktisch, den Quelltext direkt aus der Quelldatei einzulesen.
Hierzu müssen nur die verwendete Programmiersprache und der Dateipfad an den Befehl \mintinline{latex}{\inputminted} übergeben werden (vgl. \cref{lst:minted-external}).
\example{lst:minted-external}{source-code-listings/minted-import}{Einbinden aus einer externen Datei} \noindent There is also a shorthand and an inline variant of the command (cf. \cref{lst:minted-variants}).
To avoid redundancy, it may be practical to import source code directly from the source file.
To accomplish this, we only have to pass the programming language and the file path to the \mintinline{latex}{\inputminted} command (cf. \cref{lst:minted-external}).
\section{Minted konfigurieren} \example{lst:minted-external}{source-code-listings/minted-import}{Including from a separate file}
Durch optionale Parameter können Zeilennummerierung, Umbrüche und Farben ausgewählt werden. \todo{Fix overflow issue in the listing}
Außerdem sind zahlreiche Themes verfügbar (\cref{lst:minted-external-styled}).
Einen umfänglichen Überblick geben die Einführung von Overleaf und die Dokumentation.\footnote{Verfügbar unter \url{https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted} bzw. \url{https://ctan.kako-dev.de/macros/latex/contrib/minted/minted.pdf}.}
\example{lst:minted-external-styled}{source-code-listings/minted-import-styled}{Themes und weitere Optionen} \section{Configuring minted}
Optional parameters allow us to add line numbers, line breaks, and colors.
Moreover, there are numerous themes available (\cref{lst:minted-external-styled}).
The introduction on Overleaf and the package documentation\footnote{Available at \url{https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted} and \url{https://ctan.kako-dev.de/macros/latex/contrib/minted/minted.pdf}, respectively.} give an extensive overview.
\example{lst:minted-external-styled}{source-code-listings/minted-import-styled}{Themes and further options}

View File

@ -16,11 +16,11 @@
\definecolor{ourBackgroundColor}{rgb}{0.1,0.1,0.2} \definecolor{ourBackgroundColor}{rgb}{0.1,0.1,0.2}
\inputminted[ \inputminted[
breaklines, % Zeilenumbrüche breaklines, % line breaks
linenos=true, % Zeilennummerierung linenos=true, % line numbers
bgcolor=ourBackgroundColor, % Hintergrundfarbe bgcolor=ourBackgroundColor, % bbackground color
firstline=5, % erste Zeile firstline=5, % first line to be included
lastline=7, % letzte Zeile lastline=7, % last line to be included
gobble=4 % Leerzeichen entfernen gobble=4 % remove leading spaces
]{java}{exercises/source-code-listings/Source.java} ]{java}{exercises/source-code-listings/Source.java}
\end{minted} \end{minted}

View File

@ -1,19 +1,17 @@
Im Ordner \mintinline{text}{exercises/source-code-listings} findet ihr eine Datei namens \mintinline{text}{Source.java}. You will find a file called \mintinline{text}{Source.java} in the folder \mintinline{text}{exercises/source-code-listings}.
Wir werden diese im Folgenden in unser Dokument einbinden und das Aussehen unseren Wünschen anpassen. We will now include it into our document and adjust its display to fit our needs.
\begin{enumerate} \begin{enumerate}
\item Bindet die Datei an dieser Stelle ein. \item Include the file into \mintinline{text}{exercises/source-code-listings/source-code-listings.tex}.
\item Aktiviert Syntax-Highlighting durch Angabe der Sprache Java. \item Activate syntax highlighting by stating the programming language Java.
\item Lasst LaTeX zu lange Zeilen automatisch umbrechen. \item Add line breaks and line numbers.
\item Die Zeilen sollen nummeriert sein. \item Use the theme \mintinline{latex}|native|.
\item Nutzt das Theme \mintinline{latex}|native|. \item This theme is optimized for a dark background. Change the background color to dark blue.
\item Dieses Theme ist für einen dunklen Hintergrund optimiert. Ändert die Hintergrundfarbe des Themes zu dunkelblau. \item Include only lines 5 to 7.
\item Bindet jetzt ausschließlich die Zeilen 5 bis 7 ein. \item Delete the spaces at the beginning of the lines by using a suitable option. (Hint: The documentation speaks of \mintinline{latex}|gobble|.)
\item Entfernt die Leerzeichen am Anfang der Zeilen durch Angabe der richtigen Option. (Hinweis: Die Dokumentation spricht hier von \mintinline{latex}|gobble|.)
\end{enumerate} \end{enumerate}
Konsultiert bei Fragen die Dokumentation des Paketes Minted. \noindent If you have questions, consult the minted package documentation.
\exercisematerial{exercises/source-code-listings/source-code-listings} \exercisematerial{exercises/source-code-listings/source-code-listings}
\usemintedstyle{} % Reset experiments from exercise material \usemintedstyle{} % Reset experiments from exercise material

View File

@ -1,5 +1,5 @@
% Kurzschreibweise % Shorthand
Auch in der Kurzschreibweise erhält \mint{html}|<h2>LaTeX im Studium</h2>| eine eigene Zeile. Despite it is a shorthand, \mint{html}|<h2>LaTeX im Studium</h2>| will be rendered on its own line.
% Inline-Umgebung % Inline variant
Der Methodenaufruf \mintinline{java}{o.doSomething();} erscheint hingegen inline im Fließtext. The method call \mintinline{java}{o.doSomething();} on the other hand will appear inline.