Seite 1 von 1

Chemfigformel externalisieren

Verfasst: Di 22. Mai 2012, 22:50
von Ironoxid
Hallo Leute,

ich habe mich in den vergangenen Tagen mit der TikZbibliothek external beschäftigt. Plots, die ich durch pgfplots oder gnuplot via TikZausgabe erstelle werden auch wunderbar extern ausgegeben. Wenn ich nun aber versuche Strukturformel mit Hilfe von chemfig zu erstellen bricht der Lauf ab. Meine Idee war dann den chemfigcode in eine tikzpicture zu geben. Ich erhalte somit auch externe Grafiken, aber sie werden ab einer gewissen Stelle abgeschnitten. Ich hab zur Veranschaulichung mal ein Molekül auf zwei verschiedenen Weisen gezeichnet und im Beispiel angegeben. Das Ergebnis meines Laufes lade ich ebenso hoch.

Was ich nun wissen möchte ist, ob es überhaupt möglich ist chemfig-Zeichnungen zu externalisieren.


\documentclass{scrartcl}

\usepackage{chemfig}

\usetikzlibrary{external}
\tikzexternalize[prefix=figures/]

\begin{document}

	\begin{figure}[h]
	\centering
		\begin{tikzpicture}
			\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-)=-(=O)-N(-H_3C)-)}
		\end{tikzpicture}
	\end{figure}

	\begin{figure}[h]	
	\centering
		\begin{tikzpicture}
			\chemfig{
			O=[:30]-[:330]N(-[:270]CH_3)-[:30]
				(-[:342]N=^[:54]-[:126]N(-[:72]CH_3)-[:198]) %-[:270])
			=^[:90]-[:150](=[:90]O)-[:210]N(-[:150]H_3C)-[:270]
			}
		\end{tikzpicture}
	\end{figure}

\end{document}

Verfasst: Mi 23. Mai 2012, 00:00
von cgnieder
Ich weiß, ich hab dazu schon mal irgendwo 'ne Lösung gelesen, kann sie nur gerade partout nicht finden.

Wenn das Ziel ist, aus den Formeln einzelne Bilder zu machen, kann ich jedenfalls wärmstens standalone als Alternative empfehlen:
\documentclass{standalone}

\usepackage{chemfig}
\begin{document}
\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-)=-(=O)-N(-H_3C)-)}
\end{document} 
Per Default macht das zwar ein pdf, aber wenn man z.B. imagemagick installiert hat, kann man die Klasse das auch automatisch in PNG oder andere Formate umwandeln lassen.

Gruß

Verfasst: Mi 23. Mai 2012, 09:17
von Ironoxid
Gut das Wissen, dass standalone existiert ist nie verkehrt. Mir geht es aber auch darum zu wissen, dass alles so funktioniert, wie es auch gedacht ist. Der Hintergrund der external-library ist ja Zeit und Resourcen zu sparen, indem nicht immer wieder das gleiche Bild beim compilieren neu erzeugt werden muss und schon garnicht, wenn es sich sowieso nicht geändert hat.

Es ist halt ungünstig wenn man seine ganzen Plots auslagern möchte, aber für jede Strukturformel eine Ausnahme schreiben muss, damit der Lauf nicht abbricht.

Kann es sein, dass es sich dabei um ein Problem mit der Bounding Box handelt? Vielleicht wird sie ja groß genug angesetzt, aber falsch auf den Inhalt ausgerichtet. Den Eindruck hab ich zumindest, wenn ich mir die beiden erzeugten Figuren ansehe.


Da fällt mir noch eine Frage ein. Chemmacros verwendet an der einen oder anderen Stelle ja auch TikZCode. Wurde das schonmal mit der external-library getestet, zumindest ob es dort ähnliche Probleme gibt wie mit chemfig?

Verfasst: Mi 23. Mai 2012, 10:11
von cgnieder
Ich habe wieder gefunden, woran ich mich erinnert hatte: jemand hatte das schon mal gefragt, aber mit dem Wunsch, die Figuren nicht in ein tikzpicture zu zu verpacken. Da gab es denn auch keine Lösung...

Das Problem bei dem Code von, das ich gestern irgendwie übersehen hatte, ist, dass Du die Formeln in eine Node packen musst:
\documentclass{article}

\usepackage{chemfig}
\usetikzlibrary{external}
\tikzexternalize

\begin{document}

\tikz{\node{\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-)=-(=O)-N(-H_3C)-)}};}

\begin{tikzpicture}
 \node{
   \chemfig{
     O=[:30]-[:330]N(-[:270]CH_3)-[:30]
       (-[:342]N=^[:54]-[:126]N(-[:72]CH_3)-[:198]) %-[:270])
     =^[:90]-[:150](=[:90]O)-[:210]N(-[:150]H_3C)-[:270]
   } 
 };
\end{tikzpicture}

\end{document}

Verfasst: Mi 23. Mai 2012, 22:45
von Ironoxid
Der Tipp funktioniert gut. Ist nur leider nicht bequem. Es ist daher sinnvoll die Sachen etwas in einem Kommando zusammenzufassen. Das muss anscheinend auch für die Sachen aus chemmacros gemacht werden, die Tikz verwenden. Speziell meine ich \Rconf, \Sconf und \newman, die ich getestet habe.

Verfasst: Mi 4. Jul 2012, 15:58
von Andi 3.14159265
Für den Fall, dass die Strukturformeln NICHT exportiert werden sollen, kann man diese explizit von der Auslagerung ausschließen. Z.B. so:

\tikzset{external/export next=false}
\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-)=-(=O)-N(-H_3C)-)}

Funktioniert super bei mir, und ist mir so eigentlich lieber, da ich nur kleine Strukturformeln habe, die nicht lange zur Kompilierung brauchen.

Auch hier ist es wohl sinnvoll, ein eigenes Makro zu schreiben.

Verfasst: Mi 4. Jul 2012, 16:46
von Andi 3.14159265
Nachtrag: Besser dieser Code:

\tikzifexternalizing{}{
\tikzset{external/export next=false}
\chemfig{*6((=O)-N(-CH_3)-*5(-N=-N(-CH_3)-)=-(=O)-N(-H_3C)-)}
}

Damit umgeht man Probleme bei einem Externalisierungslauf.