\settowidth-Äquivalent für abgesetzte Formeln

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

\settowidth-Äquivalent für abgesetzte Formeln

Beitrag von Hagbard Celine »

Hallo zusammen,
ich bastle gerade an (Beamer-)Boxen, die sich in ihrer Breite dem Inhalt anpassen. Dafür muss ich die Breite des Inhalts bestimmen. Das ist solange kein Problem (mit \settowidth), bis ich abgesetzte Formeln im Inhalt habe. Dann bekomme ich den Fehler (obwohl immer noch das passiert, was ich möchte):
! You can't use `\eqno' in math mode.
Außerdem meckert TeX dann über fehlende $ um die Formel.
Mein Minimalbeispiel ist leider etwas lang, da ich einige Definitionen mit reinschreiben muss. Ich habe die Zeile, die den Fehler verursacht, markiert. Könnt ihr mir eine Alternative zu \settowidth an dieser Stelle sagen?
Ich habe auch noch ein minimaleres Beispiel, das zeigt, was falsch läuft, aber dort ist ein etwas anderer, aber ähnlicher Fehler.
Hier mein Minimalbeispiel:
\documentclass{beamer}
\usepackage{xifthen}


\newlength{\blockbreite}
\newlength{\tmpblockbreite}
\newlength{\fitblockbreite}
\newlength{\fitblocktitelbreite}
\newlength{\fitblocktextbreite}
\newlength{\tmptextwidth}

\setlength{\blockbreite}{\textwidth}
\setbeamercolor{block title}{bg=blue,fg=black}
\setbeamercolor{block body}{bg=red,fg=black}
\addtobeamertemplate{block begin}
{%
	\setlength{\tmptextwidth}{\textwidth}%
	\setlength{\textwidth}{\blockbreite}%
	\begin{center}%
		\begin{minipage}[c]{\textwidth}%
}
{}
\addtobeamertemplate{block end}
{}
{%
		\end{minipage}%
	\end{center}%
	\setlength{\textwidth}{\tmptextwidth}%
}

\newcommand{\fitblock}[2]	% ein Block, dessen Breite sich der Breite seines Inhalts (inkl. Überschrift) anpasst
{%
	\setlength{\tmpblockbreite}{\blockbreite}
	\settowidth{\fitblocktitelbreite}{\textbf{#1}}
	\settowidth{\fitblocktextbreite}{#2}	% Diese Zeile macht den Fehler
	\ifthenelse
		{\fitblocktextbreite > \fitblocktitelbreite}
		{\setlength{\fitblockbreite}{\fitblocktextbreite}}
		{\setlength{\fitblockbreite}{\fitblocktitelbreite}}
	\ifthenelse
		{\fitblockbreite > \textwidth}
		{\setlength{\fitblockbreite}{\textwidth}}
		{}
	\setlength{\blockbreite}{\fitblockbreite}
	\begin{block}{#1}
		#2
	\end{block}
	\setlength{\blockbreite}{\tmpblockbreite}
}

\begin{document}
\begin{frame}
	\fitblock{Titel}
	{%
		\begin{equation}
			a^2+b^2=c^2
		\end{equation}
	}
\end{frame}
\end{document}
Hier mein minimaleres Beispiel:
\documentclass{scrartcl}

\newlength{\testbreite}
\begin{document}
\settowidth{\testbreite}
{%
	\begin{equation}
		a^2+b^2=c^2
	\end{equation}
}
\end{document}
Ich hoffe, dass mir jemand helfen kann.