Eigenes (chemisches) Verzeichnis erstellen

Inhalt, Abbildungen, Tabellen, Quellcodes und andere Verzeichnisse


lisa7147
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 16. Sep 2015, 10:28

Beitrag von lisa7147 »

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

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

Beitrag von cgnieder »

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

lisa7147
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 16. Sep 2015, 10:28

Beitrag von lisa7147 »

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

lisa7147
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 16. Sep 2015, 10:28

Beitrag von lisa7147 »

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

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

Beitrag von cgnieder »

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

Gast

Beitrag von Gast »

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.

lisa7147
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 16. Sep 2015, 10:28

Beitrag von lisa7147 »

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^^

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

Beitrag von cgnieder »

Ü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
Clemens
Paketauthor

Antworten