PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : if-Anweisung zur Überprüfung eines String-Werts



dielix
26-06-2008, 10:07
Ich habe folgendes Problem:

Mittels

\newcommand{\reihe}{gelb}
habe ich mir eine „quasi-Varibale“ geschaffen, die ich an vielen Stellen brauche und die ich in anderen Dokumenten gegen blau, rot oder grün austausche, je nach dem, in welcher Reihe mein Buch erscheint.
Für die blaue und gelbe Reihe habe ich ein Nachwort als tex-Datei (gelb_nachwort.tex und blau_nachwort.tex) welche ich mit \input einbinde. Jetzt möchte natürlich, dass in Abhängigkeit der „Variable“ \reihe die richtige Datei ausgewählt wird.

\input{\reihe_nachwort.tex}
allein hilft nicht weiter, weil im Fall von rot und grün kein Nachwort angefügt werden soll. Ich brauche also eine if-Anweisung, die ich aber nicht hinkriege. Ich stelle mir das so vor:

if \reihe = gelb oder blau
then
\input{\reihe_nachwort.tex}

% Wenn rot oder grün
Else
nichts machen
Hat jemand eine Idee?

voss
26-06-2008, 10:19
Mittels

\newcommand{\reihe}{gelb}
habe ich mir eine „quasi-Varibale“ geschaffen, die ich an vielen Stellen brauche und die ich in anderen Dokumenten gegen blau, rot oder grün austausche, je nach dem, in welcher Reihe mein Buch erscheint.
Für die blaue und gelbe Reihe habe ich ein Nachwort als tex-Datei (gelb_nachwort.tex und blau_nachwort.tex) welche ich mit \input einbinde. Jetzt möchte natürlich, dass in Abhängigkeit der „Variable“ \reihe die richtige Datei ausgewählt wird.

\input{\reihe_nachwort.tex}
allein hilft nicht weiter, weil im Fall von rot und grün kein Nachwort angefügt werden soll. Ich brauche also eine if-Anweisung, die ich aber nicht hinkriege. Ich stelle mir das so vor:

if \reihe = gelb oder blau
then
\input{\reihe_nachwort.tex}

% Wenn rot oder grün
Else
nichts machen
Hat jemand eine Idee?


\def\gelb{gelb}\def\blau{blau}
\def\rot{rot}\def\gruen{gruen}
...
\ifx\reihe\rot\else\ifx\reihe\gruen\else\input{\re ihe_nachwort}\fi\fi

Herbert

dielix
26-06-2008, 10:32
Perfekt! Vielen Dank!

Kennst Du eine wirklich gute deutsche Anleitung für den Umgang mit If-Anweisungen in LaTeX? Ich habe wirklich viele zu Hause und dazu noch ne Menge online gelesen. Aber in keiner ist das wirklich gut erklärt.

voss
26-06-2008, 10:41
Kennst Du eine wirklich gute deutsche Anleitung für den Umgang mit If-Anweisungen in LaTeX? Ich habe wirklich viele zu Hause und dazu noch ne Menge online gelesen. Aber in keiner ist das wirklich gut erklärt.

Da muss man schon das TeXbook nehmen oder die freien
Books and articles:
http://texnik.dante.de/cgi-bin/mainFAQ.cgi?file=docs

Herbert

dielix
26-06-2008, 12:11
Da hab ich auch schon die nächste Frage. Hab mich anhand Deiner Abfrage mal ein bißchen durch die Materie gewurschtelt und wollte gleich das nächste Problem lösen, was - Überraschung !!! - nicht so recht geklappt hat.

Ich habe wieder eine "Variable" angelegt:

\newcommand{\widmung}{Für Mama und Papa}
Wenn also in Widmung Inhalt ist, soll eine neue Seite angelegt und die Widmung dort ausgegeben werden.
Wenn die \widmung leer ist, also so

\newcommand{\widmung}{}
soll nichts passieren.
Ich habs mal so probiert:
\
def\empty{} % Vergleichsmakro mit leeren Inhalt
\def\widmungeinfuegen#1
{\def\test{#1} % Makro, dessen Inhalt gleich #1 ist
\ifx\test\empty % Anweisungen, falls #1 unbesetzt ist
nichts machen
\else % Anweisungen, falls #1 nicht unbesetzt ist
\cleardoublepage
\pagestyle{empty}%
\parskip0ex
\begin{center}
\vspace{2em}
\widmung
\fi}
\widmungeinfuegen{\widmung}
Geht aber nicht. Gibts einen einfacheren Weg?

voss
26-06-2008, 12:31
Da hab ich auch schon die nächste Frage. Hab mich anhand Deiner Abfrage mal ein bißchen durch die Materie gewurschtelt und wollte gleich das nächste Problem lösen, was - Überraschung !!! - nicht so recht geklappt hat.

Ich habe wieder eine "Variable" angelegt:

\newcommand{\widmung}{Für Mama und Papa}
Wenn also in Widmung Inhalt ist, soll eine neue Seite angelegt und die Widmung dort ausgegeben werden.
Wenn die \widmung leer ist, also so

\newcommand{\widmung}{}
soll nichts passieren.

Geht aber nicht. Gibts einen einfacheren Weg?

das nächste mal sagst du genau _was_ nicht geht und gibst vor allem
_komplette_ Beispiele an!

Herbert


\documentclass[11pt,a4paper,ngerman]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\newcommand\widmung{Für Opa und Oma}
\makeatletter
\newcommand\widmungeinfuegen[1]{%
\edef\w@test{#1} % Makro, dessen Inhalt gleich #1 ist
\ifx\w@test\@empty % Anweisungen, falls #1 unbesetzt ist nichts machen
\else % Anweisungen, falls #1 nicht unbesetzt ist
\cleardoublepage
\vspace*{2em}
\pagestyle{empty}
\begin{center}
\widmung
\end{center}
\clearpage
\fi}
\makeatother

\begin{document}

\widmungeinfuegen{\widmung}
\renewcommand\widmung{}
foo
\widmungeinfuegen{\widmung}
bar
\end{document}

dielix
29-06-2008, 08:19
Vielen lieben Dank! Es funktioniert perfekt.

Für die unvollständigen Angaben entschuldige ich mich und verspreche Besserung. Es leuchtet ein, das Hilfe ohne genaue Fehlerbeschreibung und mit unvollständigen Listings nicht gerade Freude bereitet.

Nochmals Danke und Grüße

dielix.

pospiech
29-06-2008, 09:03
Perfekt! Vielen Dank!

Kennst Du eine wirklich gute deutsche Anleitung für den Umgang mit If-Anweisungen in LaTeX? Ich habe wirklich viele zu Hause und dazu noch ne Menge online gelesen. Aber in keiner ist das wirklich gut erklärt.

Ich habe mal versucht ein paar Programmieranweisungen für LaTeX kurz zusammenzufassen:
http://www.matthiaspospiech.de/blog/2008/04/13/latex-variablen-if-abfragen-und-schleifen/
(Für Verbesserungsvorschläge / Korrekturen dankbar)

Matthias