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

Eigenes (chemisches) Verzeichnis erstellen

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

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

Beitrag 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
Dateianhänge
chemnum.png
chemnum.png (35.4 KiB) 3354 mal betrachtet
Clemens
Paketauthor

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

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

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

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

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

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

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

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

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

Beitrag 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: :)

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

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

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

Beitrag von lisa7147 »

Ja genau das steht da :D

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

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

Antworten