So konfigurieren Sie die PDFLatex-Umgebung in Docker

So konfigurieren Sie die PDFLatex-Umgebung in Docker

Technischer Hintergrund

Latex ist ein unverzichtbares Werkzeug beim Verfassen von Dokumenten und insbesondere beim Schreiben von Artikeln und ein unverzichtbares Werkzeug für den Textsatz. Allerdings ist die Bereitstellung der Latex-Umgebung keine besonders benutzerfreundliche Operation, zumal die Vorgänge auf verschiedenen Plattformen völlig unterschiedlich sind und häufig Fehler gemeldet werden. Wir können die Fehlerprobleme einzeln lösen, aber das erfordert viel Energie und Zeit, weshalb sich viele Leute dafür entscheiden, Latex direkt in Overleaf zu erstellen. Tatsächlich hat Overleaf aber auch seine Nachteile. So sind beispielsweise Bandbreite und Geschwindigkeit der kostenlosen Version relativ begrenzt, insbesondere in Heimnetzwerken ist die Zugriffsgeschwindigkeit dort extrem langsam. Daher stellen wir hier eine benutzerfreundlichere Lösung vor, die mit allen wichtigen Plattformen sehr kompatibel ist: die Verwendung von Docker zum Bereitstellen der Latex-Umgebung.

Grundlegende Vorgänge von Docker

Die offiziellen Quellen der wichtigsten Plattformen sollten alle Docker-Container bereitstellen, daher werden wir hier nicht ins Detail gehen. Der Autor hat in der Vergangenheit einen Blog über die Verwendung von Docker zum Bereitstellen der MindSpore-Entwicklungsumgebung geschrieben. Interessierte Leser können ihn als Erweiterungsartikel lesen.

Zuerst starten wir Docker auf der Manjaro Linux-Plattform (der Vorgang auf anderen Plattformen kann anders sein, z. B. service start docker usw.):

[dechin-root tex]# systemctl start docker

Beachten Sie, dass die obigen Anweisungen nur unter dem Root-Konto gestartet werden können. Wenn Sie mit einem Nicht-Root-Konto arbeiten, wird der Docker-Container nicht unterstützt. Wir können jedoch eine ähnliche Containerlösung wie Singularity wählen. Verwandte Inhalte finden Sie in diesem Blog. Nach dem Starten des Dienstes können wir unter normalen Umständen sehen, dass der Status von Docker aktiv oder ausgeführt wird:

[dechin-root tex]# systemctl status docker
● docker.service – Container-Engine für Docker-Anwendungen
  Geladen: geladen (/usr/lib/systemd/system/docker.service; deaktiviert; Vendor-Vorgabe: deaktivieren>
  Aktiv: aktiv (läuft) seit Sonntag, 28.03.2021, 18:50:47 CST; vor 7 Sek.
Ausgelöst durch: ● docker.socket
  Dokumentation: https://docs.docker.com
 Haupt-PID: 25366 (dockerd)
  Aufgaben: 123 (Limit: 47875)
  Speicher: 219,1 M
  CGroup: /system.slice/docker.service
    ├─25366 /usr/bin/dockerd -H fd://
    └─25378 containerd --config /var/run/docker/containerd/containerd.toml --log-l>

Containerimage abrufen

Zunächst können wir die offizielle Dockerhub-Website besuchen und nach dem Container-Image suchen, das wir benötigen. Unsere Suchergebnisse lauten beispielsweise wie folgt:


Sie sehen, dass es hier viele Optionen gibt. Im Allgemeinen können wir das Container-Image mit dem höchsten Stern direkt zum Herunterladen und Verwenden auswählen:

[dechin-root tex]# docker pull fbenz/pdflatex
Standard-Tag verwenden: latest
aktuell: Abrufen von fbenz/pdflatex
f22ccc0b8772: Existiert bereits 
3cf8fb62ba5f: Existiert bereits 
e80c964ece6a: Existiert bereits 
9aa2583757a3: Ziehen abgeschlossen 
2c3d7890d583: Ziehen abgeschlossen 
Zusammenfassung: sha256:6ecca11b1a203faed5c0a2ace2a13aac100dd19d7a4e0db0474283bcded3c041
Status: Neueres Bild für fbenz/pdflatex:latest heruntergeladen
docker.io/fbenz/pdflatex:latest

Der Download wird einige Zeit in Anspruch nehmen. Nachdem der Download abgeschlossen ist, finden Sie die soeben heruntergeladene Bilddatei im lokalen Bild-Repository:

[dechin-root tex]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
fbenz/pdflatex latest 8e7742722956 vor 3 Monaten 24GB

Wir können testen, ob die pdflatex-Funktion in diesem Container-Image normal ist:

[dechin-root tex]# docker run -it fbenz/pdflatex pdflatex --help
Verwendung: pdftex [OPTION]... [TEXNAME[.tex]] [BEFEHLE]
 oder: pdftex [OPTION]... \FIRST-LINE
 oder: pdftex [OPTION]... &FMT ARGS
 Führen Sie pdfTeX auf TEXNAME aus. Normalerweise wird TEXNAME.pdf erstellt.
 Alle verbleibenden BEFEHLE werden als pdfTeX-Eingabe verarbeitet, nachdem TEXNAME gelesen wurde.
 Wenn die erste Zeile von TEXNAME %&FMT ist und FMT eine vorhandene .fmt-Datei ist,
 benutze es. Sonst benutze `NAME.fmt', wobei NAME der Name des Programmaufrufs ist,
 am häufigsten „pdftex“.

 Alternativ, wenn das erste Argument ohne Option mit einem Backslash beginnt,
 Interpretieren Sie alle Argumente ohne Option als eine Zeile der pdfTeX-Eingabe.

 Wenn das erste Argument ohne Option mit einem & beginnt,
 Das nächste Wort wird als FMT verwendet, das gelesen werden soll, und überschreibt alles andere.
 Die restlichen Argumente werden wie oben verarbeitet.

 Wenn keine Argumente oder Optionen angegeben sind, werden Sie zur Eingabe aufgefordert.

-draftmode Entwurfsmodus einschalten (erzeugt kein Ausgabe-PDF)
-enc aktiviert encTeX-Erweiterungen wie \mubyte
-etex aktiviert e-TeX-Erweiterungen
[-no]-file-line-error Nachrichten im Datei:Zeile:Fehlerstil deaktivieren/aktivieren
-fmt=FMTNAME verwendet FMTNAME anstelle des Programmnamens oder einer %&-Zeile
-halt-on-error stoppt die Verarbeitung beim ersten Fehler
-ini be pdfinitex, für Dumpingformate; dies ist implizit
       Wahr, wenn der Programmname „pdfinitex“ ist.
-interaction=STRING setzt den Interaktionsmodus (STRING=Batchmode/Nonstopmode/
       Scrollmodus/Fehlerstoppmodus)
-ipc sendet DVI-Ausgabe an eine Buchse sowie die üblichen
       Ausgabedatei
-ipc-start als -ipc, und starten Sie auch den Server am anderen Ende
-jobname=STRING setzt den Jobnamen auf STRING
-kpathsea-debug=NUMBER setzt Debugging-Flags für die Pfadsuche gemäß
       die Bits von NUMBER
[-no]-mktex=FMT mktexFMT-Generierung deaktivieren/aktivieren (FMT=tex/tfm/pk)
-mltex aktiviert MLTeX-Erweiterungen wie \charsubdef
-output-comment=STRING verwendet STRING für DVI-Dateikommentare statt Datum
       (keine Auswirkung auf PDF)
-output-directory=DIR, vorhandenes DIR als Verzeichnis zum Schreiben von Dateien verwenden
-output-format=FORMAT, FORMAT für Auftragsausgabe verwenden; FORMAT ist „dvi“ oder „pdf“
[-no]-parse-first-line deaktiviert/aktiviert das Parsen der ersten Zeile der Eingabedatei
-progname=STRING setzt den Programmnamen (und fmt-Namen) auf STRING
-recorder aktiviert den Dateinamenrekorder
[-no]-shell-escape deaktivieren/aktivieren \write18{SHELL-BEFEHL}
-shell-restricted aktiviert eingeschränktes \write18
-src-specials fügt Quell-Specials in die DVI-Datei ein
-src-specials=WHERE fügt Quellcode-Specials an bestimmten Stellen ein
       die DVI-Datei. WHERE ist ein durch Kommas getrennter Wert
       Liste: cr Anzeige hbox math par parend vbox
-synctex=NUMBER generiert SyncTeX-Daten für Previewer gemäß
       Bits von NUMBER (`man synctex' für Details)
-translate-file=TCXNAME verwendet die TCX-Datei TCXNAME
-8bit macht alle Zeichen standardmäßig druckbar
-help zeigt diese Hilfe an und beendet das Programm
-version gibt Versionsinformationen aus und beendet das Programm

pdfTeX-Homepage: <http://pdftex.org>

Senden Sie Fehlerberichte per E-Mail an [email protected].

Wenn wir sehen, dass help erfolgreich ausgeführt wird, bedeutet dies, dass das Container-Image normal verwendet werden kann. Bei der Verwendung von Containern ist außerdem zu beachten, dass bei direkter Verwendung von docker run -it fbenz/pdflatex das lokale Verzeichnis nicht gebunden ist und wir die lokal geschriebenen Tex-Dateien nicht sehen können. Daher müssen wir beim Ausführen im Allgemeinen die Option -v hinzufügen, um das lokale Verzeichnis zu binden. Die grundlegende Verwendungsmethode ist: -v 本地目錄:容器目錄. Beachten Sie, dass Sie einen absoluten Pfad verwenden müssen, keinen relativen Pfad.

TeX-Datei kompilieren

Nachdem wir die Bereitstellung der auf Docker basierenden PDFLatex-Umgebung im obigen Kapitel abgeschlossen haben, können wir mit dem Schreiben einiger einfacher Tex-Dateien beginnen, um die Umgebung zu testen.

Hallo Welt

Lassen Sie uns zunächst einen einfachen Fall von „Hallo Welt“ testen, bei dem im PDF-Dokument nur die Wörter „ Hello World! ausgegeben werden. Der spezifische Tex-Code lautet wie folgt:

[dechin@dechin-manjaro tex]$ cat hallo_welt.tex 
\documentclass{Artikel}
\begin{document}
Hallo Welt!
\end{document}

Die Verwendung ist nicht schwierig. Zuerst führen wir den Docker-Container aus, beachten, dass wir einen lokalen Pfad anbinden müssen und geben dann das entsprechende Verzeichnis im Container ein:

[dechin-root tex]# docker run -it -v /home/dechin/projects/2021-python/tex/:/home/fbenz/pdflatex
root@d7ed2229a244:/#ll
insgesamt 72
drwxr-xr-x 1 root root 4096 28. März 11:07 ./
drwxr-xr-x 1 root root 4096 28. März 11:07 ../
-rwxr-xr-x 1 root root 0 28. März 11:07 .dockerenv*
drwxr-xr-x 2 root root 4096 Nov 19 13:09 bin/
drwxr-xr-x 2 root root 4096 24. April 2018 boot/
drwxr-xr-x 5 root root 360 28. März 11:07 dev/
drwxr-xr-x 1 root root 4096 28. März 11:07 usw./
drwxr-xr-x 2 1000 1000 4096 28. März 04:43 Startseite/
drwxr-xr-x 1 root root 4096 23. Mai 2017 lib/
drwxr-xr-x 2 root root 4096 Nov 19 13:09 lib64/
drwxr-xr-x 2 root root 4096 Nov 19 13:07 Medien/
drwxr-xr-x 2 root root 4096 19. Nov. 13:07 mnt/
drwxr-xr-x 2 root root 4096 Nov 19 13:07 opt/
dr-xr-xr-x 323 root root 0 28. März 11:07 proc/
drwx------ 2 root root 4096 Nov 19 13:09 root/
drwxr-xr-x 1 root root 4096 Nov 25 22:25 laufen/
drwxr-xr-x 1 root root 4096 25. Nov. 22:25 sbin/
drwxr-xr-x 2 root root 4096 Nov 19 13:07 srv/
dr-xr-xr-x 13 root root 0 28. März 11:07 sys/
drwxrwxrwt 1 root root 4096 28. Nov. 18:34 tmp/
drwxr-xr-x 1 root root 4096 Nov 19 13:07 usr/
drwxr-xr-x 1 root root 4096 19. Nov. 13:09 var/
root@d7ed2229a244:/# cd home/
root@d7ed2229a244:/home#ll
insgesamt 12
drwxr-xr-x 2 1000 1000 4096 28. März 04:43 ./
drwxr-xr-x 1 root root 4096 28. März 11:07 ../
-rw-r--r-- 1 1000 1000 69 28. März 04:43 hallo_welt.tex

Wir können sehen, dass diese Tex-Datei auch im Verzeichnis innerhalb des Containers zu sehen ist, was darauf hinweist, dass die Pfadbindung erfolgreich ausgeführt wurde. Die Ausführungsanweisung ist sehr einfach. Führen Sie einfach pdflatex your_file.tex direkt im Docker-Container aus:

root@d7ed2229a244:/home# pdflatex hallo_welt.tex 
Dies ist pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (vorinstalliertes Format=pdflatex)
 eingeschränktes \write18 aktiviert.
Erweiterten Modus aktivieren
(./hallo_welt.tex
LaTeX2e <2017-04-15>
Babel <3.18> und Silbentrennungsmuster für 84 Sprache(n) geladen.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Dokumentklasse: Artikel 29.09.2014 v1.4h Standard-LaTeX-Dokumentenklasse
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
Keine Datei hello_world.aux.
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./hello_world.aux) )
sr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Ausgabe geschrieben in hello_world.pdf (1 Seite, 11916 Bytes).
Transkript geschrieben im hello_world.log.
root@d7ed2229a244:/home#ll
insgesamt 32
drwxr-xr-x 2 1000 1000 4096 28. März 11:08 ./
drwxr-xr-x 1 root root 4096 28. März 11:07 ../
-rw-r--r-- 1 root root 8 Mär 28 11:08 hello_world.aux
-rw-r--r-- 1 root root 2408 28. März 11:08 hello_world.log
-rw-r--r-- 1 root root 11916 Mär 28 11:08 hallo_welt.pdf
-rw-r--r-- 1 1000 1000 69 28. März 04:43 hallo_welt.tex
root@d7ed2229a244:/home# chmod -R 777 .
root@d7ed2229a244:/home#ll
insgesamt 32
drwxrwxrwx 2 1000 1000 4096 28. März 11:08 ./
drwxr-xr-x 1 root root 4096 28. März 11:07 ../
-rwxrwxrwx 1 root root 8 28. März 11:08 hallo_welt.aux*
-rwxrwxrwx 1 root root 2408 28. März 11:08 hello_world.log*
-rwxrwxrwx 1 root root 11916 Mär 28 11:08 hallo_welt.pdf*
-rwxrwxrwx 1 1000 1000 69 28. März 04:43 hallo_welt.tex*

Nach Abschluss des Laufs können wir mehrere neu generierte Dateien im Verzeichnis sehen. Wenn die Berechtigungen von root 777 geändert werden, kann der lokale Nicht-Root-Account sie bearbeiten, andernfalls können sie nur angezeigt werden. Wir können diese PDF-Datei lokal öffnen und sehen:


Sie können sehen, dass die PDF-Datei erfolgreich erstellt wurde.

Testformel

Das obige „Hallo Welt“-Beispiel ist relativ einfach. Lassen Sie uns testen, ob es ein Problem mit den am häufigsten verwendeten mathematischen Formeln gibt:

[dechin@dechin-manjaro tex]$ Katze Gleichung_Test.tex 
\documentclass{Artikel}
\begin{document}
Hallo Welt!
\begin{Gleichung}
  e^{iHt}\left|\psi\right>
\end{Gleichung}
\end{document}

Ähnlich wie im vorherigen Abschnitt müssen wir auch den Container aufrufen, um die entsprechenden Anweisungen auszuführen, und schließlich eine PDF-Datei wie unten gezeigt erhalten:


Wir können sehen, dass die Formelanzeige auch normal ist.

Quantenschaltplan

Zum Schluss testen wir noch einen schwierigeren Test. Ich habe zuvor einen Blog über die Verwendung von ProjectQ zur Generierung von Quantenschaltkreisdiagrammen im Latex-Format geschrieben, der eine Tex-Datei wie unten gezeigt generierte:

[dechin@dechin-manjaro Quantenschaltkreis]$ cat circuit.tex 
\documentclass{eigenständig}
\usepackage[margin=1in]{Geometrie}
\usepackage[hang,small,bf]{caption}
\usepackage{tikz}
\usepackage{braket}
\usetikzlibrary{Hintergründe, Schatten.Unschärfe,Anpassen,Dekorationen.Pfadaustausch,Formen}

\begin{document}
\begin{tikzpicture}[Maßstab=0,8, Form transformieren]

\tikzstyle{basicshadow}=[Schatten verwischen={Schattenunschärfeschritte=8, Schatten x-Verschiebung=0,7pt, Schatten y-Verschiebung=-0,7pt, Schattenskala=1,02}]\tikzstyle{basic}=[Zeichnen,Füllen=weiß,basicshadow]
\tikzstyle{Operator}=[Grundlegend, Mindestgröße=1,5em]
\tikzstyle{phase}=[Füllung=schwarz, Form=Kreis, Mindestgröße=0,1 cm, innerer Abstand=0 pt, äußerer Abstand=0 pt, Zeichnen=schwarz]
\tikzstyle{none}=[innere Trennung=0pt,äußere Trennung=-.5pt,Mindesthöhe=0.5cm+1pt]
\tikzstyle{Maß}=[Operator,innere Trennlinie=0pt,Mindesthöhe=0,5cm, Mindestbreite=0,75cm]
\tikzstyle{xstyle}=[Kreis, einfach, Mindesthöhe=0,35 cm, Mindestbreite=0,35 cm, innerer Abstand=-1pt, sehr dünn]
\tikzset{
schattiert/.style={preaction={transform canvas={shift={(0.5pt,-0.5pt)}}, zeichnen=grau, Deckkraft=0.4}},
}
\tikzstyle{swapstyle}=[innere Trennung=-1pt, äußere Trennung=-1pt, Mindestbreite=0pt]
\tikzstyle{edgestyle}=[sehr dünn]

\node[none] (line0_gate0) bei (0,1,-0) {$\Ket{0}$};
\node[none] (line0_gate1) bei (0,5,-0) {};
\node[keine,Mindesthöhe=0,5cm,äußere Trennung=0] (line0_gate2) bei (0,75,-0) {};
\node[none] (line0_gate3) bei (1.0,-0) {};
\draw[Operator, Kantenstil, äußerer Abstand=0,5cm] ([y-Verschiebung=0,25cm]Linie0_Tor1) Rechteck ([y-Verschiebung=-0,25cm]Linie0_Tor3) Knoten[Pos.=0,5] {H};
\draw (Zeile0_Tor0) Kante[Kantenstil] (Zeile0_Tor1);
\node[none] (line1_gate0) bei (0,1,-1) {$\Ket{0}$};
\node[none] (line1_gate1) bei (0,5,-1) {};
\node[keine,Mindesthöhe=0,5cm,äußerer Abstand=0] (Zeile1_Tor2) bei (0,75,-1) {};
\node[none] (line1_gate3) bei (1.0,-1) {};
\draw[Operator, Kantenstil, äußerer Abstand=0,5cm] ([y-Verschiebung=0,25cm]Linie1_Tor1) Rechteck ([y-Verschiebung=-0,25cm]Linie1_Tor3) Knoten[Pos.=0,5] {H};
\draw (Zeile1_Tor0) Kante[Kantenstil] (Zeile1_Tor1);
\node[none] (line2_gate0) bei (0,1,-2) {$\Ket{0}$};
\node[none] (line2_gate1) bei (0,5,-2) {};
\node[keine,Mindesthöhe=0,5cm,äußerer Abstand=0] (line2_gate2) bei (0,75,-2) {};
\node[none] (line2_gate3) bei (1.0,-2) {};
\draw[Operator, Kantenstil, äußerer Abstand=0,5cm] ([y-Verschiebung=0,25cm]Zeile2_Tor1) Rechteck ([y-Verschiebung=-0,25cm]Zeile2_Tor3) Knoten[Pos.=0,5] {H};
\draw (Zeile2_Tor0) Kante[Kantenstil] (Zeile2_Tor1);
\node[xstyle] (line1_gate4) bei (1,4000000000000001,-1) {};
\draw[Kantenstil] (Linie1_Tor4.Norden)--(Linie1_Tor4.Süden);
\draw[Kantenstil] (Zeile1_Tor4.West)--(Zeile1_Tor4.Ost);
\node[phase] (line2_gate4) bei (1,4000000000000001,-2) {};
\draw (Zeile2_Tor4) Kante[Kantenstil] (Zeile1_Tor4);
\draw (Zeile1_Tor3) Kante[Kantenstil] (Zeile1_Tor4);
\draw (Zeile2_Tor3) Kante[Kantenstil] (Zeile2_Tor4);
\node[xstyle] (line0_gate4) bei (1,9500000000000002,-0) {};
\draw[edgestyle] (line0_gate4.north)--(line0_gate4.south);
\draw[Kantenstil] (Zeile0_Tor4.West)--(Zeile0_Tor4.Ost);
\node[phase] (line1_gate5) bei (1,9500000000000002,-1) {};
\draw (Zeile1_Tor5) Kante[Kantenstil] (Zeile0_Tor4);
\draw (Zeile0_Tor3) Kante[Kantenstil] (Zeile0_Tor4);
\draw (Zeile1_Tor4) Kante[Kantenstil] (Zeile1_Tor5);
\node[Maß,Kantenstil] (Zeile0_Gate5) bei (2,6000000000000005,-0) {};
\draw[edgestyle] ([yshift=-0,18cm,xshift=0,075000000000000001cm]line0_gate5.west) nach [out=60,in=180] ([yshift=0,035cm]line0_gate5.center) nach [out=0, in=120] ([yshift=-0,18cm,xshift=-0,075000000000000001cm]line0_gate5.east);
\draw[edgestyle] ([yshift=-0,18cm]line0_gate5.center) bis ([yshift=-0,075000000000000001cm,xshift=-0,18cm]line0_gate5.north east);
\draw (Zeile0_Tor4) Kante[Kantenstil] (Zeile0_Tor5);
\node[Maß,Kantenstil] (Zeile1_Gate6) bei (2,6000000000000005,-1) {};
\draw[edgestyle] ([yshift=-0,18cm,xshift=0,075000000000000001cm]line1_gate6.west) nach [out=60,in=180] ([yshift=0,035cm]line1_gate6.center) nach [out=0, in=120] ([yshift=-0,18cm,xshift=-0,075000000000000001cm]line1_gate6.east);
\draw[edgestyle] ([yshift=-0,18cm]line1_gate6.center) bis ([yshift=-0,075000000000000001cm,xshift=-0,18cm]line1_gate6.north east);
\draw (Zeile1_Tor5) Kante[Kantenstil] (Zeile1_Tor6);
\node[Maß,Kantenstil] (Zeile2_Gate5) bei (2,0500000000000003,-2) {};
\draw[edgestyle] ([yshift=-0,18cm,xshift=0,075000000000000001cm]line2_gate5.west) nach [out=60,in=180] ([yshift=0,035cm]line2_gate5.center) nach [out=0, in=120] ([yshift=-0,18cm,xshift=-0,075000000000000001cm]line2_gate5.east);
\draw[edgestyle] ([yshift=-0,18cm]line2_gate5.center) bis ([yshift=-0,075000000000000001cm,xshift=-0,18cm]line2_gate5.north east);
\draw (Zeile2_Tor4) Kante[Kantenstil] (Zeile2_Tor5);

\end{tikzpicture}
\end{document}

Diese Datei hat nicht nur eine komplexe Struktur, sondern hängt auch von vielen umgebenden Tex-Dateien ab. Bisher war es beim Testen der Kompilierung dieser Tex-Datei auf anderen Plattformen (Win10) erforderlich, viele abhängige Dateien manuell herunterzuladen und sie dann im selben Ordner abzulegen, um sie normal ausführen und verwenden zu können. Hier führen wir es direkt aus und stellen fest, dass wir auch diese PDF-Datei generieren können:


Dies zeigt, dass die Umgebung viele notwendige Tools enthält, die der Overleaf-Umgebung ähneln sollten, sodass wir Tex-Dateien auf sehr benutzerfreundliche und einfache Weise lokal kompilieren können.

Zusammenfassung

Um lokal eine äußerst benutzerfreundliche und einfach bereitzustellende Umgebung zu erstellen, haben wir uns gegen die direkte Installation von pdflatex und die Online-Lösung von Overleaf entschieden. Diese Lösungen haben ihre eigenen Vor- und Nachteile, aber insgesamt ist es für den persönlichen Gebrauch am bequemsten und benutzerfreundlichsten, eine Tex-Kompilierungsumgebung direkt lokal mithilfe eines Docker-Image bereitzustellen.

Urheberrechtshinweis

Der Originallink dieses Artikels lautet: https://www.cnblogs.com/dechinphy/p/pdflatex.html
Autoren-ID: DechinPhy

Referenzlink: https://www.cnblogs.com/dechinphy/p/circuit.html

Dies ist das Ende dieses Artikels über die Methoden und Schritte zum Konfigurieren der PDFLatex-Umgebung in Docker. Weitere Informationen zum Konfigurieren der PDFLatex-Umgebung in Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Docker-Schnellstart und Details zur Umgebungskonfiguration

<<:  Detaillierte Erläuterung der Beispiele für CSS-Gewichtswerte (Kaskadierung)

>>:  Einführung in Javascript DOM, Knoten und Elementerfassung

Artikel empfehlen

Einfaches Anwendungsbeispiel für rekursive MySQL 8.0-Abfragen

Vorwort Dieser Artikel verwendet die neuen Funkti...

So verstehen Sie den einfachen Speichermodus der Statusverwaltung von Vue

Inhaltsverzeichnis Überblick 1. Definieren Sie st...

React-Internationalisierung react-i18next ausführliche Erklärung

Einführung react-i18next ist ein leistungsstarkes...

JavaScript implementiert eine bidirektionale verknüpfte Listenprozessanalyse

Inhaltsverzeichnis 1. Was ist eine doppelt verknü...

Die v-for-Direktive in Vue vervollständigt die Listendarstellung

Inhaltsverzeichnis 1. Listendurchlauf 2. Die Roll...

Detaillierte Erklärung, wie Vue-Komponenten Werte untereinander übertragen

Inhaltsverzeichnis Überblick 1. Die übergeordnete...

So installieren Sie Nginx schnell unter Linux

Inhaltsverzeichnis Was ist nginx 1. Laden Sie die...

Eine detaillierte Einführung in den wget-Befehl in Linux

Inhaltsverzeichnis Installieren Sie zuerst wget H...

Interpretieren von MySQL-Client- und Serverprotokollen

Inhaltsverzeichnis MySQL-Client/Server-Protokoll ...

Einführung in die Verwendung von Ankern (benannte Anker) in HTML-Webseiten

Die folgenden Informationen sind aus dem Internet ...

4 Lösungen für MySQL-Import-CSV-Fehler

Dies soll an die 4 Fallstricke erinnern, in die i...