Seite 1 von 2

Eigenes (chemisches) Verzeichnis erstellen

Verfasst: Do 17. Sep 2015, 11:26
von lisa7147
Hi Leute,

ich schreibe gerade meine Bachelor-Arbeit in der Chemie und muss dafür viele Verbindungen auflisten, die ich nach der ersten Nennung mit \cmpd{} labele und dann nur noch die Nummer nenne.
Nun muss ich auch ein Verzeichnis über alle Verbindungen, die ich nenne, anlegen. Das soll ungefähr so aussehen:

"Verzeichnis der Verbindungen (Wie beim Abbildungsverzeichnis von der Schriftgröße etc. und ohne Nummer)

1 (Verbindung1)
2 (Verbindung2)
..."

Die Zahlen so, wie sie mit \cmpd{} ausgegeben werden (also fett gedruckt).

Nun wäre es ganz praktisch, wenn das Verzeichnis automatisch angelegt wird, wenn ich eine neu Verbindung labele.
Geht das überhaupt??

Und kann man sich den Namen der Verbindung, der bei \cmpd{} hinterlegt ist, auch wieder ausgeben oder geht das nur mit der Nummer?

Ich hoffe, ich konnte mein Anliegen gut erklären und ihr könnt mir helfen :oops: :lol:

\documentclass[ 
  parskip, 
  12pt, 
    toc=listof, 
  headheight=17.99446pt 
]{scrartcl} 

\setuptoc{toc}{totoc} 

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{lmodern}
\usepackage{microtype}
\usepackage{ellipsis}


\usepackage{amsmath, amssymb, textcomp,chemnum }

\usepackage[ngerman]{chemmacros}



\begin{document}
\tableofcontents


\addsec{Verzeichnis der Verbindungen}



\section{Einleitung}
Glucose \cmpd{Gluc}

Ribose \cmpd{Rib}

Saccharose \cmpd{Sach}

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


\end{document}

Verfasst: Do 17. Sep 2015, 16:27
von cgnieder
Ich habe einen Vorschlag, der allerdings nur Haupt-Verbindungen in die Liste schreibt und Sublabel ignoriert. Bei dem Vorschlag nutze ich aus, dass Du eine KOMA-Script-Klasse verwendest, um mit \DeclareNewTOC ein neues Verzeichnis zu definieren.
\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 .groups:n = {compound} ,
    name .tl_set:N = \l_chemnum_compound_name_tl
  }
\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}
Bild

Grüße

Verfasst: Do 17. Sep 2015, 17:20
von lisa7147
Vielen Dank für deine Antwort, und dass du dir die Arbeit gemacht hast :D
Wenn ich dein Beispiel kompiliere, werden allerdings nie die Namen angezeigt. Und da ich die Verbindungen öfters nenne, brauche ich auch keine Seitenzahlen.

Wie müsste ich dazu dein Beispiel ändern?

Schon mal vielen Dank im voraus :lol:

Verfasst: Do 17. Sep 2015, 17:33
von cgnieder
Ist Dir aufgefallen, dass man bei dem Code den Namen bei der ersten Verwendung explizit als Option angeben muss?
\cmpd[name=Glucose]{Gluc}
Der Befehl \cmpd kann den Namen ja sonst nicht wissen. Die Seitenzahl ist dann die Seitenzahl der ersten Verwendung. Wenn man die nicht will, müsste man zusätzlich \l@compound umdefinieren.

Grüße

Verfasst: Do 17. Sep 2015, 17:47
von lisa7147
Ja, das mit der Option ist mir aufgefallen. Auch wenn ich dein Beispiel einfach kopiere und unverändert kompiliere, wird der Name nicht angezeigt :?:

Und wo müsste ich \l@compound umdefinieren?

Tut mir leid, wenn ich zu blöde Fragen stelle, aber ich kenne mich noch nicht so gut aus :oops:

Verfasst: Fr 18. Sep 2015, 10:35
von cgnieder
\l@compound ist der Befehl, der die einzelnen Einträge formatiert. Für jede Art Listeneintrag gibt es einen solchen Befehl: \l@section, \l@subsection, \l@figure, \l@table, … in diesem Fall eben \l@compound (er wurde implizit durch \DeclareNewTOC definiert).

Der Befehl bekommt zwei Argumente: das erste ist der Eintrag, das zweite die Seitenzahl. Eine schnelle Umdefinition wäre daher
\makeatletter
\renewcommand\l@compound[2]{#1\par}
\makeatother
Zum anderen Problem: ich kann das nachvolziehen, wenn ich auf den Online-Compiler-Link klicke. Overleaf hat noch v1.0b 2014/06/02. Damit bleiben die Namen leer. Aktuell ist v1.1a 2015/05/13, mit dem ich die Liste erstellt habe.

Vielleicht musst Du mal wieder ein Update Deiner Distribution machen? Falls das nicht drin ist, kann ich versuchen (aber nichts versprechen), ob ich mit der älteren Version auch was gebastelt bekomme.

Grüße[/code]

Verfasst: Fr 18. Sep 2015, 11:42
von lisa7147
Also die Seitenzahlen sind weg, das hat super funktioniert, danke :D

Zu den Namen: Ich hab mit TeXLive alle meine Packages aktualisiert, ich arbeite mit TeXMaker 4.4.1, also auch die neueste Version. Aber auch nach mehrmaligen Kompilieren fehlen die Namen immer noch :cry:
Hast du vielleicht noch eine Idee?
Danke, dass du dir so viel Mühe gibst :oops: :)

Verfasst: Fr 18. Sep 2015, 11:49
von cgnieder
Lass mal
\listfiles
\documentclass{article}
\usepackage{chemnum}
\begin{document}
\end{document}
laufen und schaue ins log, ob da
chemnum.sty    2015/05/13 v1.1a
steht.

Grüße

Verfasst: Fr 18. Sep 2015, 11:54
von lisa7147
Ja genau das steht da :D

Verfasst: Fr 18. Sep 2015, 12:15
von cgnieder
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