Chemfigformel externalisieren

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Ironoxid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 61
Registriert: So 7. Aug 2011, 05:04
Wohnort: Hohen Neuendorf

Chemfigformel externalisieren

Beitrag 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}
Dateianhänge
externe-chemfig.pdf
(23.6 KiB) 462-mal heruntergeladen
Editor: TeXstudio, Kile

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag 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ß
Clemens
Paketauthor

Ironoxid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 61
Registriert: So 7. Aug 2011, 05:04
Wohnort: Hohen Neuendorf

Beitrag 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?
Editor: TeXstudio, Kile

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag 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}
Clemens
Paketauthor

Ironoxid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 61
Registriert: So 7. Aug 2011, 05:04
Wohnort: Hohen Neuendorf

Beitrag 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.
Editor: TeXstudio, Kile

Andi 3.14159265

Beitrag 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.

Andi 3.14159265

Beitrag 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.

Antworten