Eigenes (chemisches) Verzeichnis erstellen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Eigenes (chemisches) Verzeichnis erstellen

von cgnieder » Mi 16. Dez 2015, 11:05

Übrigens – für Summen- und sonstige chemische Formeln würde ich ein Paket verwenden, dass einem die Arbeit damit erleichtert:
\documentclass{article}
\usepackage{chemformula}
\begin{document}

\ch{Pd(en)(OD)2}

\end{document}
Grüße

von lisa7147 » Mi 16. Dez 2015, 08:39

Vielen Dank euch beiden!!!!! :D :D :D :D :D :D

Bei meinem Minimalbeispiel klappt jetzt alles, jetzt muss es nur noch bei meinem richtigen Dokument laufen^^

von Gast » Di 15. Dez 2015, 16:54

Das Leerzeichen kommt glaube ich aus
\newcommand*\compoundlistentry[1]{  \addcontentsline{loc}{compound}{\refcmpd{#1}
    \if\relax\cmpdproperty{#1}{name}\relax
    \else
      \space\cmpdproperty{#1}{name}%
    \fi}}
das sollte wie in Clemens' Antwort (leicht an Deine Version angepasst)
\newcommand*\compoundlistentry[1]{%
  \addcontentsline{loc}{compound}{%
    \refcmpd{#1}%
    \if\relax\cmpdproperty{#1}{name}\relax
    \else
      \space\cmpdproperty{#1}{name}%
    \fi
  }%
}
heißen.

Du hast in Deiner Version direkt nach der öffnenden Klammer ein paar Leerzeichen. Beachte, dass auch sonst Zeilenenden häufig mit einem % geschützt werden müssen, um unerwünschte Leerzeichen zu verhindern.

heißen.

von cgnieder » Di 15. Dez 2015, 16:45

Wegen des Kommas im Namen. Schreibe den Namen in geschweifte Klammern:
\cmpd[name={Dihydroxido-ethan-1,2-diamin-palladium(II)}]{pden}
Grüße

von lisa7147 » Di 15. Dez 2015, 16:35

Hallo, bei mir ist jetzt nochmal ein Problem aufgetreten^^

Und zwar verwende ich den Befehl, den du geschrieben hast:
\documentclass[listof=totoc]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{chemnum}

\DeclareNewTOC[ 
  type     = compound , 
  types    = compounds , 
  listname = {Verzeichnis der Verbindungen} 
]{loc} 

% Befehl, um Verbindungen in die Liste einzutragen: 
\newcommand*\compoundlistentry[1]{  \addcontentsline{loc}{compound}{\refcmpd{#1} 
    \if\relax\cmpdproperty{#1}{name}\relax 
    \else 
      \space\cmpdproperty{#1}{name}% 
    \fi}} 
\ExplSyntaxOn 
\tl_new:N \l_chemnum_compound_name_tl 
% umdefinieren von \chemnum_initialize_compound:n 
\cs_set_protected:Npn \chemnum_initialize_compound:n #1 
  {     \seq_if_in:NnF \g__chemnum_defined_compounds_seq {#1} 
      { \seq_gput_right:Nn \g__chemnum_defined_compounds_seq {#1} 
        \int_gincr:N \g__chemnum_main_int 
        \stepcounter{cmpdmain} } 
    \seq_if_exist:cF { g__chemnum_#1_initiated_subcompounds_seq } 
      { \seq_new:c { g__chemnum_#1_initiated_subcompounds_seq } } 
    \chemnum_compound_declare_properties:nn {#1} {name} 
    \chemnum_compound_set_property:nnV {#1} {name} \l_chemnum_compound_name_tl 
      \compoundlistentry {#1}   } 
 
\keys_define:nn {chemnum} 
  {     name .tl_set:N = \l_chemnum_compound_name_tl , 
    name .groups:n = {compound}   } 
\ExplSyntaxOff 

\makeatletter 
\renewcommand\l@compound[2]{#1\par} 
\makeatother

\begin{document}

\tableofcontents

\listofcompounds

\section{Einleitung}



Glucose \cmpd[name=Glucose]{Gluc}

Ribose \cmpd[name=Ribose]{Rib}

Saccharose \cmpd[name=Saccharose]{Sach}


Pd(en)(OD)$_2$ (\cmpd[name=Dihydroxido-ethan-1,2-diamin-palladium(II)]{pden})  


\end{document}
Das funktioniert auch so, wie es soll ;) Nur bei der letzten Verbindung wird im Verzeichnis nur "Dihydroxido-ethan-1" angezeigt, es bricht also immer beim "," ab (ich habe es auch mit anderen Verbindungen probiert, da war es auch so. Ohne Komma funktioniert es, egal wie lange der Name ist).

Könntest du mir vielleicht sagen, was ich noch ändern muss, damit alles angezeigt wird? :) :) :) :)
Auf das Komma kann ich ja nicht verzichten^^



PS: Kann es sein, dass im Text bei (4) ein Leerzeichen vor der 4 ist? Kann man das auch noch entfernen?




Ich Danke dir schon einmal im Voraus und hoffe, dass du mir helfen kannst
Dateianhänge
Ohne Titel.pdf
(39.74 KiB) 349-mal heruntergeladen

von lisa7147 » Mo 21. Sep 2015, 09:23

Also ich hab am Wochenende nochmal alles durchprobiert und jetzt klappt es perfekt :D :D :D :D
Ich weiß allerdings nicht genau, wo der Fehler war^^

Trotzdem vielen, vielen Dank für deine Mühe!!!!!!!!! :D :D :D :D :D :D :D :D :D

von cgnieder » Fr 18. Sep 2015, 12:31

Dann hab ich keine Idee mehr.

Das folgende funktioniert sowohl auf meinem System als auch auf Overleaf wie gewünscht:
\documentclass[listof=totoc]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{chemnum}

% neues Verzeichnis:
\DeclareNewTOC[
  type     = compound ,
  types    = compounds ,
  listname = {Verzeichnis der Verbindungen}
]{loc}

% Befehl, um Verbindungen in die Liste einzutragen:
\newcommand*\compoundlistentry[1]{%
  \addcontentsline{loc}{compound}{%
    % schreibe Label:
    \refcmpd{#1}%
    % wenn `name' gegeben, dann den auch angeben:
    \if\relax\cmpdproperty{#1}{name}\relax
    \else
      \space(\cmpdproperty{#1}{name})%
    \fi
  }%
}

\ExplSyntaxOn
\tl_new:N \l_chemnum_compound_name_tl

% umdefinieren von \chemnum_initialize_compound:n
\cs_set_protected:Npn \chemnum_initialize_compound:n #1
  {
    \seq_if_in:NnF \g__chemnum_defined_compounds_seq {#1}
      {
        \seq_gput_right:Nn \g__chemnum_defined_compounds_seq {#1}
        \int_gincr:N \g__chemnum_main_int
        \stepcounter{cmpdmain}
      }
    \seq_if_exist:cF { g__chemnum_#1_initiated_subcompounds_seq }
      { \seq_new:c { g__chemnum_#1_initiated_subcompounds_seq } }
    %%% ab hier neu %%%
    % neue Eigenschaft `name':
    \chemnum_compound_declare_properties:nn {#1} {name}
    % setze die Eigenschaft:
    \chemnum_compound_set_property:nnV {#1} {name} \l_chemnum_compound_name_tl
    % schreibe den Listeneintrag:
    \compoundlistentry {#1}
  }

% neue Option `name':
\keys_define:nn {chemnum}
  {
    name .tl_set:N = \l_chemnum_compound_name_tl ,
    name .groups:n = {compound}
  }
\ExplSyntaxOff

\begin{document}

\tableofcontents

\listofcompounds

\section{Einleitung}

\cmpd{a.x,b,c.{x,y,z},d}

Glucose \cmpd[name=Glucose]{Gluc}
Ribose \cmpd[name=Ribose]{Rib}
Saccharose \cmpd[name=Saccharose]{Sach}

\cmpd{Gluc} ist Bestandteil von \cmpd{Sach}

\cmpd{foo}

\end{document}

von lisa7147 » Fr 18. Sep 2015, 12:25

Da hat sich nichts geändert, die Namen fehlen immer noch. :cry:

von cgnieder » Fr 18. Sep 2015, 12:15

Dann liegts wahrscheinlich an der Version von expl3 (l3kernel). Auf Overleaf klappt es nämlich, wenn ich die Reihenfolge bei der Definition der name Option ändere:
\keys_define:nn {chemnum}
  {
    name .tl_set:N = \l_chemnum_compound_name_tl ,
    name .groups:n = {compound}
  }
Probier mal, ob das bei Dir auch hilft.

Grüße

von lisa7147 » Fr 18. Sep 2015, 11:54

Ja genau das steht da :D

Nach oben