PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Listen mit unterschiedlichen Anzeigeformen?



pheidrias
17-08-2010, 11:24
Hallo zusammen!

Ich würde gerne ein paar Abkürzungen mit Nummern etc. versehen und dann im Text referenzieren (im Endeffekt eine Liste mit chemischen Verbindungen, deren Namen sich evtl. im Laufe des Schreibens noch ändern und die ich nicht via copy/paste aktualisieren will).

Also im Endeffekt sowas wie
definiere: BEZEICHNER1, NAME1, NUMMER1; BEZEICHNER2, NAME2, NUMMER2; ...

Und dann möchte ich im Text sagen können:

BEZEICHNER1[name] oder BEZEICHNER1[nummer] um die entsprechenden Listeneinträge anzuzeigen.

Wie gehe ich sowas am besten an?

Danke für Tip(p)s,
pheidrias

Xenara
17-08-2010, 15:16
Ich hab da mal was gebastelt, vielleicht kommt das so für dich in etwa hin.
Lies dir am besten die Kommentare im Code durch, ich hab versucht, es einigermassen zu dokumentieren.



\documentclass{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{hyperref}

% Neuer Zähler
\newcounter{variablenzaehler}
% Neuer Befehl, der dem Zähler eine Nummer zuweist, auf die verwiesen werden kann:
\newcommand{\VarDef}[1]{\refstepcounter{variablenzaehler}\label{#1}}
% Neuer Befehl, um auf die Nummer des Zählers zurückzugreifen:
\newcommand{\VarRef}[1]{\ref{#1}}

%% Alles etwas einfacher:
%% Beim ersten Aufrufen der Variablen wird der Zähler definiert und gleichzeitig die Nummer ausgegeben:
%\newcommand{\varneu}[1]{%
%\VarDef{#1}%
%%\VarRef{#1}%
%}
% Neuer Befehl, mit dem beim Referenzieren auf die Nummer zugegriffen wird:
\newcommand{\var}[1]{\VarRef{#1}}

% Neuer Befehl, um das Ganze handlicher zu machen. Verwendung:
% \chem{Kurzbefehl für Textausgabe}{Label}{Name, der ausgegeben werden soll}
% Eigentlich wird nur ein neuer Befehl, nämlich der Kurzbefehl definiert und ihm zugewiesen, was er ausgeben soll.
% Zusätzlich wird noch ein Label definiert, mit dem auf die Nummer zugegriffen werden kann.
% Das gleiche Label für Kurzbefehl und Nummer war nicht möglich, da im ersten Fall ein "\" davorstehen muss,
% was für die Referenzierung auf die Nummer unpraktisch ist.
% Kann aber umgebaut werden.
% Man kann es auch so machen, dass der Name direkt bei der Definition mit ausgegeben wird.
\newcommand{\chem}[3]{%
\newcommand{#1}{#3}%
\VarDef{#2}%
}

\begin{document}

% Definition der verwendeten Abkürzungen:
% !!! Reihenfolge hier bestimmt die Reihenfolge der Nummern!!!
\chem{\wasser}{wasser}{H$_2$O}
\chem{\dichlormethan}{dichlormethan}{CH$_2$Cl$_2$}
\chem{\salzsaeure}{salzsaeure}{HCl}

% Zur Verdeutlichung eine Liste:
% (Die Definitionen direkt in die Tabelle zu schreiben war nicht möglich, ergab Fehler)
\begin{tabular}{lll}
\var{wasser} & \wasser & Wasser \\
\var{dichlormethan} & \dichlormethan & Dichlormethan \\
\var{salzsaeure} & \salzsaeure & Salzsäure
\end{tabular}\\[3ex]


% Hier werden die Verweise gezeigt:
Wir verweisen jetzt mal auf \dichlormethan\ bzw. die Nummer~\var{dichlormethan}.\\[2ex]
Wir verweisen jetzt mal auf \salzsaeure\ bzw. die Nummer~\var{salzsaeure}.\\[2ex]
Wir verweisen jetzt mal auf \wasser\ bzw. die Nummer~\var{wasser}.

\clearpage
% Hier werden die Verweise gezeigt:
Wir verweisen jetzt mal auf \dichlormethan\ bzw. die Nummer~\var{dichlormethan}.\\[2ex]
Wir verweisen jetzt mal auf \salzsaeure\ bzw. die Nummer~\var{salzsaeure}.\\[2ex]
Wir verweisen jetzt mal auf \wasser\ bzw. die Nummer~\var{wasser}.

\end{document}

pheidrias
17-08-2010, 16:34
Hallo Xenara!

Das sieht ja prima aus!

Und gleich mit chemischem Inhalt! :)

Danke Dir herzlichst!

Xenara
17-08-2010, 16:37
Na, wenn, dann richtig ;)
(Bin selbst sowas Chemiker-artiges)

Wenn du Änderungen am Code brauchst, gib Bescheid, ich wusste nicht genau, wie deine Anforderungen aussehen.

pheidrias
18-08-2010, 11:54
So - habe nun versucht, das ganze etwas zu verstehen ;-).

Gibt es eine Möglichkeit, die Referenzierung auch über Bezeichner laufen zu lassen, die auch Zahlen enthalten dürfen (ist ja bei LaTeX normalerweise nicht erlaubt)?
Also als Bezeichner "Verbindung513" - was man ja oft so hat.

Ist diese Dopplung
1.) eigener Befehl \wasser\
2.) Bezeichner wasser (für Nummer)
nötig?
(scheint so aus Deiner Dokumentation rüberzukommen)

Mir wäre ein System
\zeigeName{label}
\zeigeNummer{label}
\zeigeAbkuerzungOderSonstwas{label}
lieber.

Ist das machbar?

Danke aber trotzdem noch Mal für diese coole Variante, auf die ich selber sicher nicht gekommen wäre!

Xenara
18-08-2010, 14:39
Ok, ich hab das mal ein "klein wenig" modifiziert, da ich ehrlich gesagt mit meiner ersten Variante auch nicht ganz zufrieden war.
Das Problem dabei ist nach wie vor, dass ich keine Ahnung hab, wie man Befehle mit Zahlen definieren kann, also z.B. \H2O. Man kann nur Buchstaben verwenden, daher die Krücke mit \wasser statt \H2O. Ein wenig vereinfachen kann man es noch, da \var{\wasser} möglich ist.

Aber egal, hier mal was neues, basierend auf dem acronym-Paket. Und mhchem ist auch gleich eingebaut.
Gibst du bitte Bescheid, ob das so funktioniert?


\documentclass[parskip=half]{scrreprt}

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

% Paket für einfachere und schönere chemische Formeln:
\usepackage[version=3]{mhchem}

% Paket für Abkürzungen
\usepackage{acronym}
% Formatieren, dass im Abkürzungsverzeichnis das Kürzel
% in normaler Schrift statt fett erscheint:
\renewcommand*{\acsfont}[1]{\normalfont #1}

\usepackage{hyperref}

% Definition für den neuen Zähler, der die Formel nummeriert:
% Neuer Zähler
\newcounter{variablenzaehler}
% Neuer Befehl, der dem Zähler eine Nummer zuweist, auf die verwiesen werden kann:
\newcommand{\VarDef}[1]{\refstepcounter{variablenzaehler}\label{#1}}
% Neuer Befehl, um auf die Nummer des Zählers zurückzugreifen:
\newcommand{\VarRef}[1]{\ref{#1}}
% Neuer Befehl, mit dem beim Referenzieren auf die Nummer zugegriffen wird:
\newcommand{\var}[1]{\VarRef{#1}}
%
%% Neuer Befehl, um das Ganze handlicher zu machen. Verwendung:
%% \chemdef{Label}{Chemische Formel}{Name}{Beschreibung}
\newcommand{\chemdef}[4]{%
\acro{#1}[\ce{#2}]{\acroextra{\makebox[40mm][l]{#3}}#4}
\VarDef{#1}
}

\begin{document}

\subsubsection*{Liste der Chemikalien}
\begin{acronym}[CH2Cl2]
\chemdef{h2o}{H2O}{Wasser}{Dihydrogenmonoxid}
\chemdef{ch2cl2}{CH2Cl2}{Dichlormethan}{Lösemittel }
\chemdef{hcl}{HCl}{Salzsäure}{nicht zusammen mit \var{naoh} lagern}
\chemdef{naoh}{NaOH}{Natriumhydroxid}{nicht zusammen mit \var{hcl} lagern}
\end{acronym}

Die Substanz heisst in der Kurzform \acs{h2o}, in der Langform \acl{h2o} und hat die Nummer~\var{h2o}.

Die Substanz heisst in der Kurzform \acs{ch2cl2}, in der Langform \acl{ch2cl2} und hat die Nummer~\var{ch2cl2}.

Die Substanz heisst in der Kurzform \acs{hcl}, in der Langform \acl{hcl} und hat die Nummer~\var{hcl}.

Die Substanz heisst in der Kurzform \acs{naoh}, in der Langform \acl{naoh} und hat die Nummer~\var{naoh}.

\clearpage

Die Substanz heisst in der Kurzform \acs{h2o}, in der Langform \acl{h2o} und hat die Nummer~\var{h2o}.

Die Substanz heisst in der Kurzform \acs{ch2cl2}, in der Langform \acl{ch2cl2} und hat die Nummer~\var{ch2cl2}.

Die Substanz heisst in der Kurzform \acs{hcl}, in der Langform \acl{hcl} und hat die Nummer~\var{hcl}.

Die Substanz heisst in der Kurzform \acs{naoh}, in der Langform \acl{naoh} und hat die Nummer~\var{naoh}.

\end{document}

u_fischer
18-08-2010, 14:53
Befehle mit Zahlen und Sonderzeichen kann man mit \csname/\endcsname definieren. Achtung nicht definierte Befehle geben keinen Fehler, sondern werden einfach definiert.


\documentclass{article}
%Normale Befehlsdefinitionen
\newcommand\TeilA{1}
\newcommand\TeilB{2}
%Definition von Befehlen mit Sonderzeichen im Namen:
\expandafter\newcommand\csname A1+2\endcsname{1 und 2}

\begin{document}
Einfacher Aufruf: \csname A1+2\endcsname

Zusammengesetzt: \csname A\TeilA+\TeilB\endcsname



Gibt es nicht: \ifcsname unbekannt\endcsname bekannt!\else unbekannt!\fi,

Aber Aufruf gibt keinen Fehler: \csname unbekannt\endcsname

und jetzt ist der Befehl bekannt:
\ifcsname unbekannt\endcsname bekannt!\else unbekannt!\fi,

\end{document}

Xenara
19-08-2010, 08:01
Vielen Dank für die Info, Ulrike.
Aber wenn ich das richtig verstehe, muss ich jedesmal \csname \endcsname um den Befehl setzen?
Das ist dann auch nicht wirklich einfacher.

u_fischer
19-08-2010, 09:44
Du kannst natürlich auch einen Befehl definieren, der die Interna vor dem Benutzer versteckt. Der LaTeX-Kernel hat z.B.


\def\@nameuse#1{\csname #1\endcsname}

Xenara
19-08-2010, 10:05
Super, du bist absolute Spitze!
Das funktioniert also so:


\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\def\meinbefehl{Normaler Befehl.}

\def\@nameuse#1{\csname #1\endcsname}
\def\123.,-é???${Befehl mit einem Haufen Zahlen und Sonderzeichen.}

\def\H2O{H$_2$O}
\def\CH2Cl2{CH$_2$Cl$_2$}

\begin{document}
Normaler Fliesstext.

\meinbefehl

Wiedermal Text.

\123.,-é???$

Und wieder fortlaufender normaler Text.

Und Wasser ist \H2O, während Dichlormethan \CH2Cl2 ist.

\end{document}


Werd mal probieren, ob sich das für die erste Variante in #2 lohnt.

u_fischer
19-08-2010, 10:09
Also erstens brauchst du \@nameuse nicht zu definieren. Es gibt den Befehl ja schon. Und zweitens, wenn du \@nameuse benutzen willst, musst du natürlich erst \makeatletter ausführen. Du kannst dir aber die Definition von \@nameuse als Beispiel nehmen, und einen eigenen Befehl
\newcommand\usemyvar[1]{\csname blub#1\endcsname} definieren.

Xenara
19-08-2010, 10:19
Stimmt, \@nameuse kann man weglassen.
Dafür funktioniert das hier auch ohne \csname:


\documentclass{scrreprt}

\def\meinbefehl{Normaler Befehl.}

\def\123.,-é???${Befehl mit einem Haufen Zahlen und Sonderzeichen.}

\def\H2O{H$_2$O}
\def\CH2Cl2{CH$_2$Cl$_2$}

\begin{document}
Normaler Fliesstext.

\meinbefehl

Wiedermal Text.

\123.,-é???$

Und wieder fortlaufender normaler Text.

Und Wasser ist \H2O, während Dichlormethan \CH2Cl2 ist.

\end{document}

u_fischer
19-08-2010, 11:31
Nein, das funktioniert nicht. Du definierst da nicht den Befehl "\H2O" sondern \H und forderst spezielle Argumente. Das fliegt dir um die Ohren sobald du auch \H30 definieren willst:


\documentclass{scrreprt}
\def\H2O{H$_2$O}
\def\H30{blub}
\begin{document}
Und Wasser ist \H20
\end{document}

Wenn du Befehlsnamen mit Sonderzeichen willst, musst du entweder den \catcode ändern (wie es gemacht wird, um @ zu erlauben) oder du musst \csname nehmen. Wenn du Zahlen willst, musst du \csname nehmen. Hier den \catcode zu ändern, führt ins Chaos.

pheidrias
19-08-2010, 11:37
Hui...da tut sich ja einiges!

Finde die acronym-Variante nicht so doll --> da ist man ja auf zwei Ausdrucksformen (Abkürzung, voller Name) beschränkt - oder?

Ich würde mir gerne die Möglichkeit lassen, zu einer Abkürzung mehr als nur zwei Begriffe zuzuordnen (also z.B. Singular, Plural, Alternativausdruck, Nummer, Sammelbegriff,...)

Das mit den Sonderzeichen ist toll!
Warum funktioniert das jetzt in dem letzten Beispiel mit den Zahlen und vorher nicht :confused:?


Okay - mein Post bezog sich auf das nunmehr vorletzte Beispiel und der letzte Post klärt das wohl auf (ohne, daß ich die vorhergehende Variante bisher verstanden hätte :D ).
Danke dafür!

Xenara
19-08-2010, 12:39
Finde die acronym-Variante nicht so doll --> da ist man ja auf zwei Ausdrucksformen (Abkürzung, voller Name) beschränkt - oder?
Ich würde mir gerne die Möglichkeit lassen, zu einer Abkürzung mehr als nur zwei Begriffe zuzuordnen (also z.B. Singular, Plural, Alternativausdruck, Nummer, Sammelbegriff,...)

Naja, du kannst dem letzten Argument noch mehr Infos mitgeben, mal sehen, wie man das schön hinbekommen könnte.

Vorerst: Wie wärs so?



\documentclass[parskip=half]{scrreprt}

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

% Paket für einfachere und schönere chemische Formeln:
\usepackage[version=3]{mhchem}

% Paket für Abkürzungen
\usepackage{acronym}
% Formatieren, dass im Abkürzungsverzeichnis das Kürzel
% in normaler Schrift statt fett erscheint:
\renewcommand*{\acsfont}[1]{\normalfont #1}

\usepackage{hyperref}

% Definition für den neuen Zähler, der die Formel nummeriert:
% Neuer Zähler
\newcounter{variablenzaehler}
% Neuer Befehl, der dem Zähler eine Nummer zuweist, auf die verwiesen werden kann:
\newcommand{\VarDef}[1]{\refstepcounter{variablenzaehler}\label{#1}}
% Neuer Befehl, um auf die Nummer des Zählers zurückzugreifen:
\newcommand{\VarRef}[1]{\ref{#1}}
% Neuer Befehl, mit dem beim Referenzieren auf die Nummer zugegriffen wird:
\newcommand{\var}[1]{\VarRef{#1}}
%
%% Neuer Befehl, um das Ganze handlicher zu machen. Verwendung:
%% \chemdef{Label}{Chemische Formel}{Name}{Beschreibung}
\newcommand{\chemdef}[3]{%
\acrodef{#1}[\ce{#2}]{#3}
\VarDef{#1}
}

\begin{document}

% Definition der Chemikalien (Reihenfolge legt Nummer fest)
\chemdef{h2o}{H2O}{Wasser}{Dihydrogenmonoxid}
\chemdef{ch2cl2}{CH2Cl2}{Dichlormethan}
\chemdef{hcl}{HCl}{Salzsäure}
\chemdef{naoh}{NaOH}{Natriumhydroxid}


\subsubsection*{Liste der Chemikalien}
\begin{tabular}{lllll}
Nummer & Chem. Formel & Name & Alternativname & Bemerkungen \\\hline
\var{h2o} & \acs{h2o} & \acl{h2o} & Dihydrogenmonoxid & \\
\var{ch2cl2} & \acs{ch2cl2} & \acl{ch2cl2} & --- & Lösemittel \\
\var{hcl} & \acs{hcl} & \acl{hcl} & Chlorwasserstoffsäure & sauer\\
\var{naoh} & \acs{naoh} & \acl{naoh} & Natronlauge & alkalisch \\
\end{tabular}


Die Substanz heisst in der Kurzform \acs{h2o}, in der Langform \acl{h2o} und hat die Nummer~\var{h2o}.

Die Substanz heisst in der Kurzform \acs{ch2cl2}, in der Langform \acl{ch2cl2} und hat die Nummer~\var{ch2cl2}.

Die Substanz heisst in der Kurzform \acs{hcl}, in der Langform \acl{hcl} und hat die Nummer~\var{hcl}.

Die Substanz heisst in der Kurzform \acs{naoh}, in der Langform \acl{naoh} und hat die Nummer~\var{naoh}.

\clearpage

Die Substanz heisst in der Kurzform \acs{h2o}, in der Langform \acl{h2o} und hat die Nummer~\var{h2o}.

Die Substanz heisst in der Kurzform \acs{ch2cl2}, in der Langform \acl{ch2cl2} und hat die Nummer~\var{ch2cl2}.

Die Substanz heisst in der Kurzform \acs{hcl}, in der Langform \acl{hcl} und hat die Nummer~\var{hcl}.

Die Substanz heisst in der Kurzform \acs{naoh}, in der Langform \acl{naoh} und hat die Nummer~\var{naoh}.

\end{document}


@Ulrike:
Ok, da war der Haken. Ich fürchte, das ist aber langsam zu hoch für mich. Manchmal wäre ein TeX-Programmierkurs ganz praktisch...
Könntest du ein Beispiel machen, wie das dann aussieht? Sowas hab ich mittlerweile hinbekommen:


\documentclass{scrreprt}

\expandafter\def\csname H2O\endcsname{H$_2$O}
\expandafter\def\csname H3O\endcsname{H$_3$O}

\begin{document}

\csname 123\endcsname

So kann man \csname H2O\endcsname\ und \csname H3O\endcsname\ schreiben.

Aber \H2O\ oder \H3O\ funktioniert nicht.

\end{document}

Aber ich bekomme deine Tipps nicht eingebaut.

pheidrias
23-08-2010, 13:05
Okay...ich habe mir das ganze mal zurecht gebastelt.
Ein paar Fragen sind noch aufgetaucht.

Warum kann man nicht den Output von acl{} in eine \ce-Umgebung stecken?


\ce{\acl{#1}}

gibt nur Schrägformatierung aus.

@Xenara:
Was ist der Unterschied dieser beiden Befehle, resp. warum reicht nicht einer davon aus (also nur ?


% Neuer Befehl, um auf die Nummer des Zählers zurückzugreifen:
\newcommand{\VarRef}[1]{\ref{#1}}
% Neuer Befehl, mit dem beim Referenzieren auf die Nummer zugegriffen wird:
\newcommand{\var}[1]{\VarRef{#1}}


Hier mal meine neue Variante, mit mehr also zwei Anzeigeformen --> der acronym-Bezeichner wird einfach um a,b,... ergänzt.
Kann man da was besseres nehmen? Nicht, daß sich "nummera" und "nummeraa" überschneiden...also am liebsten irgendwie wieder Sonderzeichen in die acro-Definition bringen...



\documentclass[parskip=half]{scrreprt}

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

% Paket für einfachere und schönere chemische Formeln:
\usepackage[version=3]{mhchem}

% Paket für Abkürzungen
\usepackage{acronym}
% Formatieren, dass im Abkürzungsverzeichnis das Kürzel
% in normaler Schrift statt fett erscheint:
\renewcommand*{\acsfont}[1]{\normalfont #1}

\usepackage{hyperref}

% Definition für den neuen Zähler, der die Formel nummeriert:
% Neuer Zähler
\newcounter{SubstZaehler}
% Neuer Befehl, der dem Zähler eine Nummer zuweist, auf die verwiesen werden kann:
\newcommand{\SubstDefZaehler}[1]{\refstepcounter{SubstZaehler}\label{#1}}
% Neuer Befehl, um auf die Nummer des Zählers zurückzugreifen:
\newcommand{\SubstRef}[1]{\ref{#1}}
% Neuer Befehl, mit dem beim Referenzieren auf die Nummer zugegriffen wird:
\newcommand{\var}[1]{\SubstRef{#1}}
%
%% Neuer Befehl, um das Ganze handlicher zu machen. Verwendung:
%% \chemdef{Label}{Chemische Formel}{Name}{Beschreibung}
\newcommand{\SubstDef}[3]{%
\SubstDefZaehler{#1}
\acrodef{#1a}{#2} % für die Formel
\acrodef{#1b}{#3}
\acrodef{#1c}{\ce{#2}} % so geht's mit der Formel
}
\newcommand{\SubstRefA}[1]{%
\ce{\acl{#1a}} % wie muß ich das schreiben, damit er richtig formatiert?
}
\newcommand{\SubstRefB}[1]{%
\acl{#1b}
}
\newcommand{\SubstRefC}[1]{%
\acl{#1c}
}
\newcommand{\SubstRefCount}[1]{%
\ref{#1}
}


\begin{document}

% Definition der Chemikalien (Reihenfolge legt Nummer fest)
\SubstDef{h2o}{H2O}{Wasser}
\SubstDef{ch2cl2}{CH2Cl2}{Dichlormethan}
\SubstDef{hcl}{HCl}{Salzsäure}
\SubstDef{naoh}{NaOH}{Natriumhydroxid}
\SubstDef{h3o}{H3O+}{Hydroniumion \ce{H3O+}}
\SubstDef{h2o2}{H2O2}{Wasserstoffperoxid}


\subsubsection*{Liste der Chemikalien}
\begin{tabular}{lllll}
Nummer & Chem. Formel & Name & Alternativname & Bemerkungen \\\hline
\SubstRefCount{h2o} & \SubstRefA{h2o} vs. \SubstRefC{h2o} & \SubstRefB{h2o} & Dihydrogenmonoxid & \\
\SubstRefCount{h3o} & \SubstRefA{h3o} vs. \SubstRefC{h3o} & \SubstRefB{h3o} & & \\
\SubstRefCount{h2o2} & \SubstRefA{h2o2} vs. \SubstRefC{h2o2} & \SubstRefB{h2o2} & alkalisch & \\

\SubstRefCount{ch2cl2} & \SubstRefA{ch2cl2} vs. \SubstRefC{ch2cl2} & \SubstRefB{ch2cl2} & --- & Lösemittel \\
\SubstRefCount{hcl} & \SubstRefA{hcl} & \SubstRefB{hcl} & Chlorwasserstoffsäure & sauer\\
\SubstRefCount{naoh} & \SubstRefA{naoh} & \SubstRefB{naoh} & Natronlauge & alkalisch \\

\end{tabular}

\end{document}