Ich habe einfach in den `\newtheoremstyle` einen Check eingefügt, ob der Zusatztitel leer ist.
{\textcolor{thm_color}{\textbf{#1} #2} \quad \textbf{#3}}
wird zu
{\ifx\relax#3\relax
{\if\relax\detokenize{#3}\relax
\textcolor{thm_color}{\textbf{#1} #2}%
\else
\textbf{#3}%
\fi}
Den `\quad` Abstand brauchen wir nicht mehr, da ja immer nur der eine Titel angezeigt wird.
\documentclass{article}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{framed}
\usepackage{needspace}
\usepackage{xcolor}
\newlength\internalindent
\setlength\internalindent{1em}
\definecolor{def_color} {HTML}{194D6C}
\definecolor{def_shade_color} {HTML}{C7DDF2}
\definecolor{thm_color} {HTML}{2F2512}
\definecolor{thm_shade_color} {HTML}{FEEAC9}
\newtheoremstyle{thmstyle}
{\internalindent}
{\internalindent}{
\addtolength{\leftskip} {\internalindent}
\addtolength{\rightskip}{\internalindent}
}
{0pt}{}{}
{\newline}
{\ifx\relax#3\relax
{\if\relax\detokenize{#3}\relax
\textcolor{thm_color}{\textbf{#1} #2}%
\else
\textbf{#3}%
\fi}
\theoremstyle{thmstyle}
\newtheorem*{tmp_satz*}{Satz}
\newtheorem*{tmp_def*}{Definition}
\newenvironment{satz}[1][]{
\setlist {rightmargin=\internalindent}
\setitemize {leftmargin=\leftmargin}
\setenumerate {leftmargin=\leftmargin+\internalindent}
\definecolor{shadecolor}{named}{thm_shade_color}
\needspace{4\baselineskip}
\begin{shaded}\begin{tmp_satz*}[#1]
}{
\end{tmp_satz*}
\end{shaded}
\noindent\ignorespacesafterend
}
\newenvironment{definition}[1][]{
\setlist {rightmargin=\internalindent}
\setitemize {leftmargin=\leftmargin}
\setenumerate {leftmargin=\leftmargin+\internalindent}
\definecolor{shadecolor}{named}{def_shade_color}
\needspace{4\baselineskip}
\begin{shaded}\begin{tmp_def*}[#1]
}{
\end{tmp_def*}
\end{shaded}
\noindent\ignorespacesafterend
}
\begin{document}
\begin{definition}
Der Logarithmus $\log$ ist die Umkehrfunktion der
Exponentialfunktion $\exp$.
\end{definition}
\begin{definition}[Logarithmus]
Der Logarithmus $\log$ ist die Umkehrfunktion der
Exponentialfunktion $\exp$.
\end{definition}
\begin{satz}
In einem rechtwinkligen Dreieck entspricht das Quadrat der
l\"angsten Seite der Summe der Quadrate der beiden k\"urzeren.
\[ a^2 + b^2 = c^2 \]
\end{satz}
\begin{satz}[Satz von Pythagoras]
In einem rechtwinkligen Dreieck entspricht das Quadrat der
l\"angsten Seite der Summe der Quadrate der beiden k\"urzeren.
\[ a^2 + b^2 = c^2 \]
\end{satz}
\end{document}
![alt text][1]
[1]: http://texwelt.de/wissen/upfiles/test_116.png