PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit ifthenelse und Subsections



pop
15-05-2010, 11:42
Hallo liebes Forum,

Ich möchte gerne optionale, geklammerte Ausdrücke in subsection-Überschriften benutzen, also sowas wie:


Definition (Definitionname)

wobei "Definition" konstant ist und "(Definitionname)" ein optionaler Zusatz ist. Falls kein Zusatz angegeben wird, soll nur der konstante Teil erzeugt werden:


Definition

Der LaTex-Code, um das entsprechende Definition-Environment sollte folgendermaßen aussehen:


\begin{definition}{Definitionname}{Some text ...}
\end{definition}

bzw. ohne geklammerten Zusatz:


\begin{definition}{}{Some text ...}
\end{definition}

Für den optionalen Teil benutze ich das ifthen-Package, aber es gibt damit scheinbar Probleme in Subsections. Der LaTex-Code unten zeigt den entsprechenden Teil meines Dokuments, der momentan nur für definierte Tags funktioniert, weil ich den Fehlerteil auskommentiert habe.


\documentclass[a4paper,10pt]{article}

\usepackage{ifthen}

\newcommand{\bracketedname}[1]{
% \ifthenelse{\equal{#1}{\empty}}{ }{\ (#1)}
(#1)
}

\newenvironment{definition}[2]{
\subsubsection{Definition \bracketedname{#1}} #2
}{}

\begin{document}

\begin{definition}{Definitionname}{Some text ...}
\end{definition}

\end{document}

Wenn ich die Zeile


% \ifthenelse{\equal{#1}{\empty}}{ }{\ (#1)}

statt der benutzten


(#1)

Zeile aktiviere, erhalte ich folgende Fehlermeldung:


! Undefined control sequence.
<argument> \equal
{Definitionname}{\empty }
l.16 ...definition}{Definitionname}{Some text ...

Hat jemand einen Lösungsansatz dafür? Würde mich wirklich freuen :)

pop

mechanicus
15-05-2010, 11:48
Hi,

und warum nutzt du nicht das Paket amsthm oder ntheorem?


\documentclass{article}
\usepackage{ntheorem}
\newtheorem{definition}{Definition}
\begin{document}
\begin{definition}
Some Text
\end{definition}

\begin{definition}[Bla]
Some Text
\end{definition}
\end{document}

Gruß
Marco

Hobbes
15-05-2010, 11:52
Das ist natürlich die bessere Lösung.

Für den ursprünglichen Ansatz habe ich durch ein bißchen googlen und rumprobieren folgendes gefunden. Es scheint mir so, als müsse der potentiell leere Parameter als optionaler Parameter angegeben werden. Außerdem ist der Vergleich auf "Leerstring" nicht mit \empty.


\documentclass[a4paper,10pt]{article}

\usepackage{ifthen}

\newcommand{\bracketedname}[1][]{
\ifthenelse{\equal{#1}{}}{ }{\ (#1)}
}

\newenvironment{definition}[2]{
\subsubsection{Definition \bracketedname{#1}} #2
}{}

\begin{document}

\begin{definition}{Definitionname}{Some text ...}
\end{definition}

\begin{definition}{}{Some More Text...}
\end{definition}
\end{document}

lockstep
15-05-2010, 12:18
Das Beispiel von mechanicus läuft übrigens auch ohne Laden des Paketes ntheorem. ntheorem hilft allerdings bei der Formatierung deiner "Definition", z.B., wenn der eigentliche Text nicht kursiv gesetzt werden soll. Ergänze dazu mechanicus' Beispiel wie folgt:



\usepackage{ntheorem}
\theorembodyfont{\normalfont}
\newtheorem{definition}{Definition}


lockstep