\includegraphics und \ifthenelse

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: \includegraphics und \ifthenelse

von FiboFreak » Di 16. Feb 2010, 16:08

Es sieht so aus, also ob \ifnumequal aus dem etoolbox-Paket das Problem löst.

Danke!!!

von FiboFreak » Di 16. Feb 2010, 15:52

Der Test hat die Form \zahler=1 für einen vorher definierten Zähler.

von phi » Di 16. Feb 2010, 15:20

Verwende nicht \ifthenelse, es ist nicht expandierbar, expandiert aber sein Argument, was je nach Situation zu verschiedenen Problemen führen kann. Verwende stattdessen expandierbare Tests aus moderneren Paketen wie etoolbox oder expl3 oder primitive TeX-Tests wie \ifnum. Die sind gleich mächtig wie \ifthenelse, aber die Syntax ist anders.

Die Probleme des ifthen-Pakets werden auch in der Dokumentation erwähnt: „It is unfortunate that in order to remain compatible with ifthen syntax, it is necessary to have a two pass system. The first pass inside an \edef ‘exposes’ the \if. . . \fi tokens, so the corect clauses may be skipped on the second pass. This means that the whole \ifthenelse command does not work by expansion, and so possibly has only limited usefulness for macro code writers. The main problem with the ifthen: syntax is that (unique for LATEX) it does not uses a brace delimited argument form, and exposes the primitive TEX syntax for ⟨number⟩. Pretty much the only way of parsing 1 > 2 \or 2 < 1 is to actually evaluate the
primitive \ifnums. A syntax such as: \or{\numtest{1<2}}{\lengthtest{1pt<1in}} could easily be evaluated in a one pass way, operating directly via expansion, and leaving no extra tokens in the token stream.“

Wie genau sieht denn dein Vergleich aus? 1<2 wird es ja kaum sein.

von Rainer Unsinn » Di 16. Feb 2010, 14:13

Dann definier innerhalb von \ifthenelse für den Dateinamen eben per \newcommand oder \renewcommand ein Makro und verwende das später innerhalb von \includegraphics. Oder definiere Dir ein Makro der Art
\newcommand*{\mygraphics}[1]{\includegraphics[width=\textwidth,height=\textheight,keepaspectratio,angle=90]{#1}}
und verwende das innerhalb von \ifthenelse. Die Optionen ersetzt Du bei der Definition natürlich durch diejenigen, die Du ständig brauchst.

Möglichkeiten gibt es wirklich reichlich. Man muss sich nur erst einmal von der erfolglosen Denkweise lösen.

von FiboFreak » Di 16. Feb 2010, 13:29

Das funktioniert schon, ist aber in meinem Fall nicht sooo toll.

Ich generiere nämlich in meinem Dokument über mehrere Befehlsebenen (d.h. größere Stacktiefe) einen Dateinamen (aus insgesamt 4 Stücken, die in unterschiedlichen Ebenen erzeugt werden), den ich dann mit \includegraphics öffnen will. Benutze ich \includegraphics innerhalb von \ifthenelse, dann muß ich alle Parameter an die tiefste Ebene weiterreichen, weil dann dort der \includegraphics-Befehl auftaucht.

Als erster Tip war es ganz hilfreich, aber es wäre schon schön, wenn es möglich wäre, zuerst in Abhängigkeit von Parametern einen String zu kreieren und ihn dann an in \includegraphics zu übergeben.

von Rainer Unsinn » Di 16. Feb 2010, 12:45

Hast Du den bereits in der Erklärung enthaltenen Trick bereits ausprobiert? Also: Verwende nicht \ifthenelse im Argument von \includegraphics, sondern \includegraphics im zweiten und dritten Argument von \ifthenelse. Ergänze ggf. \protect vor \includegraphics.

von FiboFreak » Di 16. Feb 2010, 11:38

1. würde ich natürlich gerne verstehen, was die "Ursache" ist

2. wäre ich vorläufig aber auch mit einem schmutzigen Trick zufrieden, der das Problem umgeht.

von Rainer Unsinn » Di 16. Feb 2010, 07:35

Willst Du wirklich die Ursache oder tatsächlich die Lösung wissen? Die Ursache ist die Art und Weise wie beide Pakete die Argumente der beiden Anweisungen expandieren.

\ifthenelse ist übrigens bekannt für Expansionsprobleme unterschiedlicher Art. Manchmal bekommt man das mit passend gesetzten \protect auf die Reihe, manchmal nicht. Oft ist zu empfehlen, den Test aus allen Argumenten anderer Anweisungen heraus zu ziehen. Hoppla, jetzt bin ich statt bei der Beantwortung der Frage nach der Ursache,doch bei der Lösung gelandet.

Helau!

\includegraphics und \ifthenelse

von FiboFreak » Mo 15. Feb 2010, 18:40

Ich habe ein Kompatibilitätsproblem zwischen \includegraphics und \ifthenelse, welches ich nicht verstehe. Ein Minimalbeispiel sieht so aus:
\documentclass[11pt]{article}
\usepackage{graphicx}
\usepackage{ifthen}

\begin{document}
\includegraphics{assoz1rr\ifthenelse{1<2}{g}{r}.eps}
\end{document}
(Die Grafik heißt dabei assoz1rrg.eps). Ersetzt man \includegraphics oder \ifthenelse durch andere oder durch Dummy-Befehle, dann ergibt sich kein Problem, so aber erhält man

ERROR: Illegal parameter number in definition of \filename@base.

Kann mir jemand einen Tip geben, woran das liegt?

Danke!

Nach oben