Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Schleifenbedingung mit <=

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.06.2012
    Beiträge
    19

    Schleifenbedingung mit <=

    Hallo zusammen

    Ich baue mir gerade ein Befehlt zusammen, um Abschnitte mit zugehörigen Bildern in beliebiger Anzahl zu generieren:
    Code:
    \newcommand{\song}[3]{
    	\section{#1}
    	\newcounter{num}
    	\forloop{num}{1}{\value{num} < #3}
    	{
    		\includegraphics[width=\textwidth,height=0.95\textheight,keepaspectratio]{#2 \arabic{num}.jpg}
    	}
    }
    Soweit so gut, läuft. ABER: ich möchte in der Schleife nicht kleiner sonder kleinerGleich abfragen:
    Code:
    	\forloop{num}{1}{\value{num} <= #3}
    	{
    		\includegraphics[width=\textwidth,height=0.95\textheight,keepaspectratio]{#2 \arabic{num}.jpg}
    	}
    Ich habe schon den ganzen Abend gesucht, doch bisher keine brauchbare Lösung gefunden. Weder \le, \leg noch Versuche, #3 zu inkrementieren waren erfolgreich.
    Code:
    \forloop{num}{1}{\value{num} \leg #3}
    Klappt leider nicht. Könnt ihr mit weiterhelfen?

  2. #2
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    und warum addierst du nicht einfach +1 zum Argument #3?



    Marco

  3. #3
    Registrierter Benutzer
    Registriert seit
    16.06.2012
    Beiträge
    19

    1 zu #3 addieren

    Das habe ich probiert. Einerseits mit \advance, andererseits mit der Mathe Umgebung $-$. Hat aber beides nicht geklappt. Dann habe ich auch noch nach einer inkrementiermöglichkeit für #3 gesucht, aber auch nichts passendes gefunden. Kannst du mir sagen, wie du 1 zu #3 addieren würdest?

  4. #4
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Ungetestet:

    Code:
    \forloop{num}{1}{\value{num} < \numexpr #3 +1 \relax}
    Marco

  5. #5
    Registrierter Benutzer
    Registriert seit
    16.06.2012
    Beiträge
    19
    Danke, das klappt.

    Wie kann ich das Thema als gelöst markieren? Habe dazu weder in der Hilfe, noch in der Bordinfo oder beim durchstöbern aller Knöpfe etwas gefunden.
    Geändert von moono (17-06-2012 um 13:07 Uhr)

  6. #6
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von moono Beitrag anzeigen
    Wie kann ich das Thema als gelöst markieren? Habe dazu weder in der Hilfe, noch in der Bordinfo oder beim durchstöbern aller Knöpfe etwas gefunden.
    Gar nicht

    Gruß
    Marco

  7. #7
    Registrierter Benutzer
    Registriert seit
    16.06.2012
    Beiträge
    19

    Unset counter

    Zum Glück ist's noch nicht als gelöst markiert ich hab nämlich noch ein Problem:
    Der Counter gilt offenbar Blockübergreifend. Hab wohl zu viel erwartet, als ich annahm, Latex mache sowas wie Datenkapselung.

    Führe ich
    Code:
    \song...
    mehr als einmal aus, fällt Latex bei
    Code:
    \newcounter{num}
    auf die Nase: LaTeX Error: Command \c@num already defined. Or name \end... illegal, see p.192 of the manual.

    Wie kann ich eine Variable 'unsetten'? hab's schon mit \end{\c@num} und googeln probiert. Aber ich krieg es nicht hin.

    Im Tut, von dem ich Schleifen und If's in Latex kenne, steht auch nicht, dass counter Blöcke überleben und man entsprechende Massnahmen ergreifen muss: http://www.matthiaspospiech.de/blog/...und-schleifen/

  8. #8
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von moono Beitrag anzeigen
    Der Counter gilt offenbar Blockübergreifend. Hab wohl zu viel erwartet, als ich annahm, Latex mache sowas wie Datenkapselung.
    Klar kann LaTeX das, aber wo hast du eine Kapselung?

    Es empfiehlt sich stets die Variablen im Vorfeld zu deklarieren.


    Code:
    \newcounter{num}
    \newcommand{\song}[3]{
    	\section{#1}
    Hättest du ein Minimalbeispiel gebaut, wäre es wohl schon vorher aufgefallen.

  9. #9
    Registrierter Benutzer
    Registriert seit
    16.06.2012
    Beiträge
    19

    Block & Kapselung

    Zitat Zitat von mechanicus Beitrag anzeigen
    Klar kann LaTeX das, aber wo hast du eine Kapselung?
    ein command ist doch sowas wie eine Methode, also ein Block. Da ist es doch nicht allzu falsch zu erwarten, dass eine innerhalb des Blockes deklarierte Variable ausserhalb keine Gültigkeit besitzt, bzw. nach dem abschliessen des commands vom Stack abgeräumt wird?
    Zitat Zitat von mechanicus Beitrag anzeigen
    Es empfiehlt sich stets die Variablen im Vorfeld zu deklarieren.
    Ist zwar nicht in jedem Falle schön (Ich mag keine globalen Variablen), aber löst das Problem. Danke.
    Zitat Zitat von mechanicus Beitrag anzeigen
    Hättest du ein Minimalbeispiel gebaut, wäre es wohl schon vorher aufgefallen.
    Hab ich auch. Darum habe ich ja herausgefunden, dass die Variable über den Block hinaus gültig ist. Aber ich war zu fixiert darauf, die Variable am Ende des Blockes zu unsetten, dass ich gar nicht auf die Idee kam, sie vorher zu deklarieren .

  10. #10
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von moono Beitrag anzeigen
    ein command ist doch sowas wie eine Methode, also ein Block.
    Das stimmt nicht. Ein Kommando ist eine Sammlung von "Sachen", die zum Zeitpunkt des Aufrufs einfach erscheinen. Willst du etwas lokal haben, so musst du es auch lokal setzen -- also durch Gruppenbildung. Bspw. {} oder \bgroup...\egroup usw. Allerdings wirkt newcounter stets global. Zuweisungen können lokal gesetzt werden.

    Marco

  11. #11
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    ich möchte in der Schleife nicht kleiner sonder kleinerGleich abfragen:
    forloop baut auf ifthen auf, also kannst die dort definierten logischen
    Operatoren nutzen:

    \documentclass{article}
    \usepackage{forloop}
    \begin{document}

    \newcounter{num}

    \forloop{num}{1}{\NOT{\value{num} > 10}}
    {
    \thenum,
    }


    \forloop{num}{1}{\value{num} < 10 \OR \value{num} = 10}
    {
    \thenum,
    }

    \end{document}

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •