(scrlttr2) \firsthead berechnet TikZ Grafik doppelt

Klassen und Pakete zur einfachen Umsetzung individueller Vorstellungen


Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

(scrlttr2) \firsthead berechnet TikZ Grafik doppelt

Beitrag von Omega »

Ich verwende in meinem Dokument die KOMA-Script :D Klasse scrlttr2 und das TikZ Paket.

Mir ist aufgefallen, dass bei der Verwendung von \firsthead zur Erstellung eines eigenen Briefkopfes eine Redundanz vorhanden zu sein scheint. Konkret geht es mir dabei um das Setzen von Grafiken unter Verwendung von TikZ.

Falls ich ein und dieselbe Grafik in einer Variante im Textbereich und einer anderen Variante im Briefkopf setzen lassen, so zeigt sich, dass die benötigte Dauer für das Setzen des Briefes sich deutlich voneinander unterscheidet.

Ist die Grafik im Briefkopf platziert, so wird die Grafik zweifach berechnet, wohingegen bei der Platzierung im Textbereich die Grafik nur einmal berechnet wird.

Die Grafik wird in beiden Varianten wie von mir gewünscht gesetzt. Ich möchte aber nicht wertvolle Rechenzeit für ein unnötiges, zweites Berechnen der Grafik vergeuden.

Die Grafik soll dabei nicht als pdf-Element eingebunden werden. Sie soll über TikZ erzeugt werden.

Handelt es sich bei der beschriebenen Situation um ein normales Verhalten (der Dokumentklasse)?:shock:

Wie kann ich die Grafik nur ein einziges Mal berechnen lassen, wenn ich sie über \firsthead im Briefkopf platzieren lasse?
Zuletzt geändert von Omega am Di 13. Jan 2015, 20:56, insgesamt 2-mal geändert.

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Kannst du uns ein Minimalbeispiel erstellen?

Wenn die Grafik im Kopf ist, so wird sich diese bestimmt nicht häufig ändern. Du kannst diese also auch mit TikZ-externalize ausgliedern. Das Paket lädt dann selbstständig eine gleichwertige pdf-Datei und überwacht mögliche Änderungen.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Besserwisser

Beitrag von Besserwisser »

Es kann schon sein, dass Elemente des Briefbogens mehrfach erzeugt werden, um zu sehen, ob sie existieren, sie ggf. auszumessen etc. Man kann aber für solche Elemente auch einfach eine Box definieren. Das gilt umso mehr, wenn man die Grafik nicht nur auf dem Briefbogen, sondern mehrfach verwendet. Siehe dazu \savebox und ggf. lrbox im usrguide, der sicher auch auf deinem Rechner vorhanden ist.

Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

Beitrag von Omega »

Hallo,

es passt super, dass du die Externalisierung von TikZ ansprichst.

Wenn man \usetikzlibrary{external} verwendet, wird mein angesprochenes Problem sehr gut veranschaulicht. Sie erzeugt nämlich für eine im \firsthead platzierte TikZ Grafik zwei pdf-Dateien. Das ist auch das Verhalten, das mich stutzig gemacht hat. Es ist ein Indiz für das Beschriebene in meinem Beitrag.

Ich werde ein Minimalbeispiel erstellen, wenn weiterhin der Bedarf besteht. Ich habe es ausgelassen, weil ich eine sachliche Beschreibung in dem Fall als zweckdienlicher empfand.
(Anmerkung: Der Rechenzeit Unterschied macht sich zumeist erst durch eine "komplexe" Grafik bemerkbar. Ich wollte es ursprünglich nicht durch die TikZ Externalisierung verkomplizieren.)

Ich danke dir für dein Interesse :)

Gruß
Zuletzt geändert von Omega am Di 13. Jan 2015, 18:40, insgesamt 2-mal geändert.

Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

Beitrag von Omega »

Besserwisser hat geschrieben:Es kann schon sein, dass Elemente des Briefbogens mehrfach erzeugt werden, um zu sehen, ob sie existieren, sie ggf. auszumessen etc. Man kann aber für solche Elemente auch einfach eine Box definieren. Das gilt umso mehr, wenn man die Grafik nicht nur auf dem Briefbogen, sondern mehrfach verwendet. Siehe dazu \savebox und ggf. lrbox im usrguide, der sicher auch auf deinem Rechner vorhanden ist.
Du hast mich missverstanden. Es geht mir nicht darum eine Grafik mehrfach nutzen zu wollen. Sie soll nur einmal berechnet werden, auch wenn sie nur einmal im gesamten Dokument (hier im Briefkopf) verwendet wird.

Besserwisser

Beitrag von Besserwisser »

Ich habe dich durchaus richtig verstanden. Ob du mich richtig verstanden hast, kann ich nicht beurteilen.

Omega
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Sa 8. Jan 2011, 16:58

Beitrag von Omega »

Johannes_B hat geschrieben:Kannst du uns ein Minimalbeispiel erstellen?

Wenn die Grafik im Kopf ist, so wird sich diese bestimmt nicht häufig ändern. Du kannst diese also auch mit TikZ-externalize ausgliedern. Das Paket lädt dann selbstständig eine gleichwertige pdf-Datei und überwacht mögliche Änderungen.
Nachfolgend ist das problembehaftete Beispiel gezeigt, welches die Externalisierung nutzt:
\documentclass[DIV=7]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

\begin{document}
% \newsavebox{\einebox}
% \sbox{\einebox}{\tikz \draw[very thick] (0,0) -- (2,1);}
\setkomavar{fromname}{Max Mustermann}
\setkomavar{fromaddress}{Musterstraße 10\\
						 12345 Musterstadt}
\setkomavar{place}{Musterstadt}
\setkomavar{firsthead}{Briefkopf erste Zeile\\
Briefkopf zweite Zeile\\
% \usebox{\einebox}
\tikz \draw[very thick] (0,0) -- (2,1);
Folgetext
}

\begin{letter}{Anschrift}
\opening{Sehr geehrter Herr Musterfrau,}
dies ist meine Nachricht an Sie. Diese Nachricht soll sich gerade über zwei Zeilen erstrecken und nur zur Veranschaulichung dienen.
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}
Besserwisser hat geschrieben:Es kann schon sein, dass Elemente des Briefbogens mehrfach erzeugt werden, um zu sehen, ob sie existieren, sie ggf. auszumessen etc. Man kann aber für solche Elemente auch einfach eine Box definieren. Das gilt umso mehr, wenn man die Grafik nicht nur auf dem Briefbogen, sondern mehrfach verwendet. Siehe dazu \savebox und ggf. lrbox im usrguide, der sicher auch auf deinem Rechner vorhanden ist.


In Anlehnung an den Beitrag von Besserwisser habe ich einen Lösungsvorschlag im nachfolgenden Beispiel:
\documentclass[DIV=7]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

\begin{document}
\newsavebox{\einebox}
\sbox{\einebox}{\tikz \draw[very thick] (0,0) -- (2,1);}
\setkomavar{fromname}{Max Mustermann}
\setkomavar{fromaddress}{Musterstraße 10\\
						 12345 Musterstadt}
\setkomavar{place}{Musterstadt}
\setkomavar{firsthead}{Briefkopf erste Zeile\\
Briefkopf zweite Zeile\\
\usebox{\einebox}
% \tikz \draw[very thick] (0,0) -- (2,1);
Folgetext
}

\begin{letter}{Anschrift}
\opening{Sehr geehrter Herr Musterfrau,}
dies ist meine Nachricht an Sie. Diese Nachricht soll sich gerade über zwei Zeilen erstrecken und nur zur Veranschaulichung dienen.
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}
Ist das eine ordnungsgemäße Lösung für das geschilderte Problem im ersten Beispiel oder zu umständlich?

Ist es so vorgesehen, dass \firsthead zweimal aufgerufen wird?

Ich würde mich über bessere Vorschläge sehr freuen :D. Man lernt nie aus.



v3.14 KOMA-Script, MiKTeX 2.9 64-bit

Antworten