In dieser Frage wird in der Lösung von @Clemens ein Counter in die Ändert man die Punkte, so wird bei der ersten Kompilierung die Punktzahl in der Ist es möglich, dies zu automatisieren, d.h. dass erkannt wird, wenn sich die Punktezahl in der Beispielsweise passiert dies beim Paket Öffne in Overleaf
\documentclass{scrartcl} \usepackage{lipsum} \usepackage{scrlayer-scrpage} \usepackage{lastpage} \usepackage{refcount} \renewcommand*{\pagemark}{{\usekomafont{pagenumber}{Seite \thepage\ von \pageref{LastPage}}}} \begin{document} \lipsum \end{document} Beim ersten Mal wird automatisch zweimal kompliliert (Editor TexStudio):
Danach nur noch einmal, solange sich die Anzahl der Seiten nicht ändert. Wenn ich in obigem Beispiel zweimal Eine manuelle Kompilierung zeigt, dass bei geänderter Seitenzahl eine Warnung ausgegeben wird:
Vermutlich wird, wie @moewe geschrieben hat, diese Warung von TeXStudio dazu benutzt, einen zweiten Durchlauf zu starten. Wie kann ich eine solche im ursprünglichen Problem eine geänderte Punktezahl abprüfen und eine Warnung ausgeben, die TeXStudio veranlasst, automatisch nochmals zu kompilieren? gefragt 22 Sep '18, 15:59 tom75
Ergebnis 5 von 7
show 2 more comments
|
Hier sind einige Dinge am Werk. Wenn Du das gezeigte Codebeispiel einmal nicht mit Deinem Editor (TeXstudio) sondern über die Kommandozeile kompilierst, wirst Du feststellen, dass TeX nur genau ein mal läuft. In der dazugehörigen PDF-Ausgabe findest Du dann auch nur zwei Fragezeichen anstatt der Seitenanzahl. Erst nach einem zweiten Durchlauf steht dort dann das erwartete Ergebnis. TeX läuft von sich heraus nicht mehrmals über ein Dokument. Tatsächlich ist es aber so, dass TeXstudio die Datei (bei den richtigen Einstellungen) von sich heraus zwei mal kompiliert. Das hat dann aber nichts mit dem normalen Verhalten von TeX zu tun, sondern ist einzig und allein ein Feature des Editors. Wie erkennt TeXstudio, dass noch ein zweiter Lauf notwendig ist? Wenn Du TeX zum ersten Mal auf Deine Datei loslässt, findest Du in der Logdatei folgende Zeilen
TeX läuft zwar nicht automatisch ein zweites Mal los, aber es sagt Dir, dass das eine ganz gute Idee wäre, wenn Du eine vollständig korrekte Ausgabe erwartest. Diese Ausgabe fängt TeXstudio anscheinen ab und nimmt sie zum Anlass, TeX noch ein zweites Mal laufen zu lassen. (Ich weiß nicht genau, was TeXstudio genau macht, aber so in etwa muss das funktionieren, dazu später mehr.) Clemens' Code aus Wie kann ich eine Referenz auf einen selbstdefinierten Counter setzen? erzeugt beim ersten Durchlauf keine Warnung (wohl aber die Fragezeichen), also kommt TeXtsudio auch nicht auf die Idee, ein zweites Mal TeX aufzurufen. Du kannst den Code wie folgt abwandeln (Kommentare für die Lesbarkeit entfernt) Öffne in Overleaf
\documentclass{article} \newcounter{gesamtpunktzahl} \setcounter{gesamtpunktzahl}{0} \newcommand{\punkte}[1]{% \punktname{#1}% \addtocounter{gesamtpunktzahl}{#1}% } \newcommand*\punktname[1]{\textsf{#1\,Punkt\ifnum#1=1\else e\fi}} \makeatletter \AtEndDocument{% \@ifundefined{@punkte} {\PackageWarningNoLine{gesamtpunktzahl}{% @punkte unknown. Rerun to get cross-references right}} {\ifnum\@punkte=\value{gesamtpunktzahl} \else \PackageWarningNoLine{gesamtpunktzahl}{% @punkte != gesamtpunktzahl. Rerun to get cross-references right}% \fi}% \write\@auxout{\string\gdef\string\@punkte{\arabic{gesamtpunktzahl}}}% } \newcommand*\gesamtpunkte{% \@ifundefined{@punkte}{??}{\punktname{\@punkte}}% } \makeatother \begin{document} \gesamtpunkte \punkte{3} \punkte{4} \punkte{5} \end{document} Dieser Code prüft am Ende des Dokuments, ob die Definition in der Es gibt übrigens noch weitere Tools, die es Dir erlauben mit nur einem Aufruf, ein Dokument vollständig zu kompilieren. Mir fallen da besonders Wenn man möchte, kann man auch gleich den Öffne in Overleaf
\documentclass{article} \newcounter{gesamtpunktzahl} \setcounter{gesamtpunktzahl}{0} \newcommand{\punkte}[1]{% \punktname{#1}% \addtocounter{gesamtpunktzahl}{#1}% } \newcommand*\punktname[1]{\textsf{#1\,Punkt\ifnum#1=1\else e\fi}} \makeatletter \AtEndDocument{% {\protected@edef\@currentlabel{\punktname{\thegesamtpunktzahl}}% \label{@punkte}}% } \@ifpackageloaded{hyperref} {\newcommand*\punkte@ref{\ref*}} {\newcommand*\punkte@ref{\ref}} \newcommand*\gesamtpunkte{% \punkte@ref{@punkte}% } \makeatother \begin{document} \gesamtpunkte \punkte{1} \punkte{2} \punkte{3} \end{document} Hübscher ist das meiner Meinung nach aber nicht. beantwortet 22 Sep '18, 18:35 moewe |
Mit shell escape wäre es wohl möglich, TeX noch einmal aufzurufen. Mir ist aber nicht bekannt, dass das häufig passieren würde. Normalerweise geben Pakete nur Warnungen aus, dass ein weiterer LaTeX-Lauf notwendig ist, der muss dann schon manuell ausgeführt werden. Es kann aber sein, dass Dein Editor das automatisch für Dich macht (welchen Editor nutzt Du denn?), indem er die Warnungen nach solchen Meldungen durchsucht. In dem Fall wäre dann die Lösung, auch so eine Warnung auszugeben. Für automatische Kompilation gibt es auch Tools wie
latexmk
.Wenn Du zweimal
pdflatex
(oder ähnlich) automatisch laufen lassen willst, kannst Du einfacharara
verwenden. Auch kannst Du Hilfsdateien wie*.aux
mit dem arara-Skriptremove.yaml
automatisch löschen. Ich verstehe sowieso nicht wieso das so selten verwendet wird und im Fall der Fälle auf komplizierte Methoden gesetzt wird. Hinweis: arara ist editorunabhängig. Ein optionaler arara-Button kann in die gängigen Editoren integriert werden (Handbuch).@moewe Ich nutze TeXStudio. Ich hab oben ein Beispiel eingefügt, bei dem automatisch zweimal kompiliert wird, wenn sich die Seitenzahl ändert. Wie kann ich sehen, ob nach dem ersten kompilieren eine Warunung ausgegeben wird? Im Logfile ist nichts derartiges zu finden.
@cis Ich will
pdflatex
nicht grundsätzlich zweimal laufen lassen. Ich dachte, dass es eine Möglichkeit gibt, im Dokument selbst prüfen zu können, ob sich die Punktezahl geändert hat und dann etwas anzustoßen, was im Bedarfsfall eine zweite Kompilierung anstößt. Vielleicht in Richtung der Idee von @moewe. Analog zum Paketlastpage
o.ä.Ach so.... PS: Könnte mit der neusten Version 4.0 evtl. trotzdem gehen, ob das dann einfacher ist, vermag ich nicht zu sagen.
@moewe Deine Vermutung mit der Warnmeldung scheint zuzutreffen.
@moewe Vielen Dank!