Whiledo

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Whiledo

Re: Whiledo

von mattazie » Di 22. Aug 2023, 19:09

Vielen Dank für diese Antwort. Ich war wiedereinmal nahe dran, aber das Entscheidende fehlte halt. Aber jetzt funktioniert es wunderbar.

Re: Whiledo

von u_fischer » Mo 21. Aug 2023, 14:53

`DTLenvforeach` ist eine Umgebung, kein Befehl. Und wenn deine Daten auch Buchstaben enthalten, kannst du nicht `\A=0` als Test benutzen.
\begin{DTLenvforeach}{Tabelle}{\A=A,\B=B}
\begin{tcolorbox}[boxrule=0.1mm,width=34mm,height=55mm,arc=3mm,valign=center,halign=center]
\ifthenelse{\equal{\A}{0}}{\B}{\A}
\end{tcolorbox}
\end{DTLenvforeach}

Re: Whiledo

von mattazie » So 20. Aug 2023, 22:58

Sorry, ich war im Urlaub, daher meine späte Rückmeldung. Die Bedingung in \ifthenelse ist in meinem Problem nicht relevant, da sie im Originaldokument problemlos funktioniert. Ich möchte nur wissen, wie ich verhindern kann, dass die Schlusskarte nach jedem Datensatz aus der Datenbank gezeigt wird und nicht nur erst nach Abarbeiten der Datenbank. Muss ich einen eigenen Befehl definieren? Oder ist es möglich, aus der LaTeX-Datei heraus pdfLaTeX aufzurufen, das Hauptdokument erstellen zu lassen und dann das Ergebnis mit \includepdf ins Rahmendokument einzufügen? Das würde schon einiges vereinfachen.

Re: Whiledo

von Bartman » Fr 11. Aug 2023, 21:58

Laut der Dokumentation von ifthen darf im betreffenden Argument des Befehls getestet werden, ob zwei Zahlen oder zwei Zeichenketten gleich sind. Welcher Test passt zum Inhalt der ersten Spalte?

Re: Whiledo

von mattazie » Fr 11. Aug 2023, 20:24

Ich habe mir mal eine Beispieltabelle und ein reduziertes Dokument zusammengestellt, woran man sieht, was nicht geht. Wieso im Beispiel \ifthenelse nicht funktioniert, kann ich nicht nachvollziehen. Im Originaldokument funktioniert es. Aber wenn man die Fehlermeldungen mit wiederholtem Return abarbeitet, kommt man zum Resultat. Hier müsste halt die Schlusskarte nur wirklich am Schluss zu sehen sein, nicht nach jeder Karte des Hauptteils.
A,B
x,0
0,y
z,0
\documentclass{article}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage[paperwidth=48mm,paperheight=69mm,margin=7mm,nomarginpar,noheadfoot]{geometry}
\usepackage[HTML]{xcolor}
\usepackage[verbose]{datatool}
\usepackage[12pt]{moresize} %HUGE
\usepackage[T1]{fontenc}
\usepackage{tcolorbox}
\usepackage{helvet}
\usepackage{ifthen}
\usepackage{rotating}
\usepackage{pdfpages}

\pagestyle{empty}
\tcbuselibrary{skins}

\renewcommand\familydefault{\sfdefault}

% Definition der Datentabelle
\DTLloaddb[keys={A,B}]{Tabelle}{Tabelle-Frage.csv}

\begin{document}

%Deckkarte

\tcbset{colframe=black,boxrule=0.1mm,width=34mm,height=55mm,arc=3mm}
\begin{tcolorbox}[leftupper=1mm, valign=center]
    
Deckkarte

\end{tcolorbox}


%Hauptteil

% Import der externen Daten
\DTLenvforeach{Tabelle}{\A=A,\B=B}

%\whiledo{\NOT \isundefined{\A}}{

\begin{tcolorbox}[boxrule=0.1mm,width=34mm,height=55mm,arc=3mm,valign=center,halign=center]


{\ifthenelse{\A = 0}{\B}{\A}}

\end{tcolorbox}
%}

% Schlusskarte

\tcbset{colframe=black,boxrule=0.1mm,width=34mm,height=55mm,arc=3mm}
\begin{tcolorbox}[leftupper=1mm, valign=center]
    
Schlusskarte

\end{tcolorbox}

\end{document}
Ich habe jetzt zwei Fragen:
Wieso funktioniert \ifthenelse nicht?
Wie erreiche ich, dass die Schlusskarte nur am Schluss ausgegeben wird?
(\whiledo ist vorerst noch auskommentiert.)

Re: Whiledo

von Stefan Kottwitz » Fr 11. Aug 2023, 17:47

Poste doch vllt. ein kurzes ausführbares Codebeispiel, was es so durchführt (muss ja nicht das lange Original sein), dann sieht man vllt. woran es liegt. Bisher lässt es sich in Gedanken kaum nachvollziehen was am Code evtl. nicht so funktioniert wie erwartet, etwa wodurch \A undefined werden soll etc.

Stefan

Whiledo

von mattazie » Fr 11. Aug 2023, 15:57

Für mein Spielkartenprojekt arbeite ich mit einer Datenbank. Die hat (vereinfacht) die Felder A und B mit den Werten A1, A2, A3, B1, B2, B3.
Ich möchte nun eine Whiledo-Schleife erstellen, welche Aktion 1 ausführt, bis alle Daten aus Feld A abgearbeitet sind. Danach soll Aktion 2 durchgeführt werden.

Ich verwende \usepackage{ifthen}.
Ich versuchte es mit dem Befehl
\whiledo{\not \isundefined{\A}}{Aktion 1}{Aktion 2}
Es müsste nun drei Durchgänge mit Aktion 1 geben, anschliessend Aktion 2.
Bei mir gibt es aber eine Endlosschleife. Was mache ich falsch?

Zur Erläuterung: Ich habe eine Frontkarte mit einem Bild darauf, dann kommen Karten, welche anhand der Daten befüllt werden, und anschliessend eine Schlusskarte, wieder mit einem Bild darauf.
Ohne \whiledo-Schleife kommt die Schlusskarte nach jeder Datenkarte. Ich kann die Datenkarten in einem separaten Dokument erstellen und als PDF in die Hauptdatei einfügen. Das macht es aber sehr unübersichtlich.

Nach oben