PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ifthenelse und hyperref nicht in section?



pheidrias
24-08-2010, 20:07
Hallo LaTeXler,

ich bin auf folgendes Problem gestoßen:
Hat man hyperref und ifthenelse eingebunden (Reihenfolge egal) und möchte ein Command in einer Section-Umgebung aufrufen, welches ein ifthenelse-Befehl enthält, dann steigt LaTeX mit


missing \endcsname inserted \section{\SomeCommand{}}

aus.
Ist das Problem bekannt (habe nix gefunden) und wie könnte ich es lösen?

Danke für Ratschläge,
pheidrias



\documentclass[parskip=half]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}
\usepackage{hyperref}

\newcommand{\SomeCommand}{%
\ifthenelse{1>2}{
neue Welt
} {
alte Welt
}
}

\begin{document}

\section{normal}
\SomeCommand{}
\section{\SomeCommand{}}
\SomeCommand{}
\end{document}

voss
24-08-2010, 20:35
ich bin auf folgendes Problem gestoßen:
Hat man hyperref und ifthenelse eingebunden (Reihenfolge egal) und möchte ein Command in einer Section-Umgebung aufrufen, welches ein ifthenelse-Befehl enthält, dann steigt LaTeX mit


auf ifthen kann man verzichten:

\documentclass[parskip=half]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}

\newcommand\SomeCommand{%
\ifnum1>2 neue Welt \else alte Welt \fi}

\begin{document}

\section{normal}
\SomeCommand{}
\section{\SomeCommand}
\SomeCommand{}

\end{document}

Herbert

pheidrias
24-08-2010, 22:24
Lieber Herbert,

danke für die (vor-)schnelle Antwort.

Aber es ist wohl klar, daß ich nicht wirklich die Abfrage 1>2 im Sinn hatte!

Im Endeffekt sollte es mal wieder die gute alte Abfrage nach der Existenz eines Parameters sein (ifthenelse{\equal{#2}{\empty}}{}{})...
Dazu habe ich leider keine funktionierende Ersetzung via \if \else \fi gefunden.

Außerdem finde ich das Verhalten einfach so merkwürdig und würde gerne wissen, ob das ein lösbares Problem darstellt.

Danke,
pheidrias

voss
24-08-2010, 22:45
Aber es ist wohl klar, daß ich nicht wirklich die Abfrage 1>2 im Sinn hatte!

klar!


Im Endeffekt sollte es mal wieder die gute alte Abfrage nach der Existenz eines Parameters sein (ifthenelse{\equal{#2}{\empty}}{}{})...
Dazu habe ich leider keine funktionierende Ersetzung via \if \else \fi gefunden.



\ifx\relax#1\relax leer \else nicht leer \fi

\ifthen ist nicht expandibel und macht in schöner Regelmäßigkeit
Probleme.

Herbert

pheidrias
25-08-2010, 10:08
Hallo Herbert!

Vielen Dank. Das geht jetzt gut!

Gibt es irgendwo eine Übersicht der ifthenelse-Ersatzmöglichkeiten (ifx, ifnum, ...)?

Merci!

lockstep
25-08-2010, 10:29
Eventuell helfen die Tests des Paketes etoolbox (http://www.ctan.org/tex-archive/macros/latex/contrib/etoolbox/etoolbox.pdf) (siehe Abschnitt 3.6 der Doku).

lockstep

voss
25-08-2010, 11:49
Gibt es irgendwo eine Übersicht der ifthenelse-Ersatzmöglichkeiten (ifx, ifnum, ...)?


das sind keine Ersatzmöglichkeiten, sondern die Basismakros,
auf denen auch ifthen aufbauen muss.

http://perce.de/temp/if.pdf

Herbert

pheidrias
25-08-2010, 12:54
Sehr gut. Danke!