peethebee
03-02-2011, 00:09
Hallo,
mit dem eigens definierten Kommando \fa schreibe ich Einträge in eine Datenbank (package dataTool). Die zwei Spalten sind fa und section.
Am Ende möchte ich die Einträge sortiert nach fa ausgeben. Wenn fa allerdings zwei mal hintereinander 4 ist wie im Beispiel, soll allerdings nur beim ersten mal auch eine 4 in die Tabelle geschrieben werden.
Dafür hab ich das Kommando lastfaval erstellt, das mir den Wert der letzten Zeile speichern soll.
Mit dem ifthenelse Befehl wird dann geschaut ob \faval (der eintrag aus der aktuellen Zeile) mit dem letzten Eintrag \lastfaval übereinstimmt.
Allerdings klappt das nicht, da \renewcommand nur lokal ausgeführt wird.
\lastfaval hat den Wert von \faval nur innerhalb eines Schleifendurchlaufs der foreach schleife.
Springt die Schleife wieder in den Kopf, ist der Inhalt von \lastfaval wieder weg.
\documentclass[a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{comment}
\usepackage[a4paper,text={160mm,245mm},centering,headsep=5mm,f ootskip=10mm]{geometry}
\usepackage[pdftex,pdfpagelabels=true]{hyperref}
\usepackage{graphicx}
\usepackage{textcomp}
\usepackage{booktabs}
\usepackage{datatool}
\usepackage{ifthen}
\usepackage{forloop}
\usepackage{booktabs}
\newcommand{\fa}[1]{
/FA#1/
\DTLnewrow{fa}
\DTLnewdbentry{fa}{section}{\thesection}
\DTLnewdbentry{fa}{fa}{#1}}
\newcommand{\lastfaval}{}
\DTLnewdb{fa}
\dtlexpandnewvalue
\begin{document}
\section{blub}
\fa{10}
\fa{4}
\section{bla2}
\fa{2}
\fa{4}
\DTLsort{fa=ascending}{fa}
\begin{tabular}{l|l}
\toprule
FA & Section \\
\midrule
\DTLforeach{fa}{\faval=fa,\sect=section}{
% first column
\ifthenelse{\equal{\faval}{\lastfaval}}{ %
% alt
}
{ % neu
\faval
\renewcommand{\lastfaval}{\faval}
}
%second column
& \sect \\}
\end{tabular}
\end{document}
Noch kurze Frage nebenbei, als Zusatz zu der Sectionnummer (\thesection) würde ich gerne den Titel der aktuellen Section mit in die Datenbank schreiben, gibts dafür einen LatexBefehl?
mit dem eigens definierten Kommando \fa schreibe ich Einträge in eine Datenbank (package dataTool). Die zwei Spalten sind fa und section.
Am Ende möchte ich die Einträge sortiert nach fa ausgeben. Wenn fa allerdings zwei mal hintereinander 4 ist wie im Beispiel, soll allerdings nur beim ersten mal auch eine 4 in die Tabelle geschrieben werden.
Dafür hab ich das Kommando lastfaval erstellt, das mir den Wert der letzten Zeile speichern soll.
Mit dem ifthenelse Befehl wird dann geschaut ob \faval (der eintrag aus der aktuellen Zeile) mit dem letzten Eintrag \lastfaval übereinstimmt.
Allerdings klappt das nicht, da \renewcommand nur lokal ausgeführt wird.
\lastfaval hat den Wert von \faval nur innerhalb eines Schleifendurchlaufs der foreach schleife.
Springt die Schleife wieder in den Kopf, ist der Inhalt von \lastfaval wieder weg.
\documentclass[a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{comment}
\usepackage[a4paper,text={160mm,245mm},centering,headsep=5mm,f ootskip=10mm]{geometry}
\usepackage[pdftex,pdfpagelabels=true]{hyperref}
\usepackage{graphicx}
\usepackage{textcomp}
\usepackage{booktabs}
\usepackage{datatool}
\usepackage{ifthen}
\usepackage{forloop}
\usepackage{booktabs}
\newcommand{\fa}[1]{
/FA#1/
\DTLnewrow{fa}
\DTLnewdbentry{fa}{section}{\thesection}
\DTLnewdbentry{fa}{fa}{#1}}
\newcommand{\lastfaval}{}
\DTLnewdb{fa}
\dtlexpandnewvalue
\begin{document}
\section{blub}
\fa{10}
\fa{4}
\section{bla2}
\fa{2}
\fa{4}
\DTLsort{fa=ascending}{fa}
\begin{tabular}{l|l}
\toprule
FA & Section \\
\midrule
\DTLforeach{fa}{\faval=fa,\sect=section}{
% first column
\ifthenelse{\equal{\faval}{\lastfaval}}{ %
% alt
}
{ % neu
\faval
\renewcommand{\lastfaval}{\faval}
}
%second column
& \sect \\}
\end{tabular}
\end{document}
Noch kurze Frage nebenbei, als Zusatz zu der Sectionnummer (\thesection) würde ich gerne den Titel der aktuellen Section mit in die Datenbank schreiben, gibts dafür einen LatexBefehl?