Beschriftung innerhalb mehrerer Stackinsets

Beschriftung innerhalb mehrerer Stackinsets

Für meine Diplomarbeit wollte ich Theoreme in eine spezielle Box packen, wofür ich einen Befehl erstellt habe, \specialboxder verwendet \stackinset, sodass ich einen Teilrahmen um das Theorem herum bekomme. Der Verdienst für den Entwurf geht an Steven B. Segletes, ich habe den Entwurf gefundenHier. Unten habe ich ein Bild angehängt, das den Aufbau und das Problem veranschaulicht (siehe unten) und weiter unten habe ich das MWE eingefügt.

Das Problem: Für den Entwurf habe ich \stackinsetviermal verwendet. Wie Sie im Bild unten sehen können, gehen wir von Theorem I und Gleichung (1) zu Theorem XVII und Gleichung (17), d. h. beide haben sich um 16 erhöht. Ich nehme an, das liegt daran, dass bei jeder \stackinsetVerwendung der Zähler unnötigerweise erhöht wird, und im Fall von vier \stackinsets wird der Zähler um 2^4 = 16 erhöht. Das ist offensichtlich nicht das, was ich wollte. Kennt jemand eine Möglichkeit, dieses Problem zu lösen?

Bildbeschreibung hier eingeben

\documentclass[10pt,a4paper]{article}

%%% Load packages
\usepackage{stackengine}
\usepackage{amsmath}

%%% Define special box
% \specialbox{<rule width>}{<rule length hori>}{<rule length vert>}{<distance from text>}{<text>}
\newcommand{\specialbox}[5]{%
\stackinset{l}{}{t}{}{ \rule{#2}{#1} }{%
\stackinset{l}{}{t}{}{ \rule{#1}{#3} }{%
\stackinset{r}{-#1-#4}{b}{}{ \rule{#2}{#1} }{%
\stackinset{r}{-#1-#4}{b}{-#1-#4}{ \rule{#1}{#3} }{%
\hspace{\dimexpr #1+#4} \parbox{\dimexpr\textwidth-#4-#4-#1-#1}{
\vspace{\dimexpr #1+#4} #5}}}}}}

%%% Define counter
\newcounter{myThm}
\setcounter{myThm}{0}
\renewcommand*{\themyThm}{\Roman{myThm}}
\newcommand{\mythm}{ \refstepcounter{myThm} {\bfseries Theorem \themyThm.} }

\begin{document}

\specialbox{1.5pt}{35pt}{35pt}{10pt}{%
\mythm \\
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. 
\begin{align}\label{eq}
\dot{x}(t) = f\big( t,x(t) \big)
\end{align}
Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. 
}

\vspace{30pt}

\specialbox{1.5pt}{35pt}{35pt}{10pt}{%
\mythm \\
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus.
\begin{align}\label{eq}
\dot{y}(t) = g\big( t,y(t) \big)
\end{align}
Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
}

\end{document}

Antwort1

Speichern Sie innerhalb der Definition von \specialboxdas Argument in einem gespeicherten Wert , \parboxbevor Sie die s aufrufen , die jetzt auf den gespeicherten (benannten ) und nicht auf das ursprüngliche Argument selbst \stackinsetangewendet werden .\parbox\tmpbox

\documentclass[10pt,a4paper]{article}

%%% Load packages
\usepackage{stackengine}
\usepackage{amsmath}

%%% Define special box
% \specialbox{<rule width>}{<rule length hori>}{<rule length vert>}{<distance from text>}{<text>}
\newcommand{\specialbox}[5]{%
\savestack\tmpbox{\parbox{\dimexpr\textwidth-#4-#4-#1-#1}{%
  \vspace{\dimexpr #1+#4} #5}}
\stackinset{l}{}{t}{}{ \rule{#2}{#1} }{%
\stackinset{l}{}{t}{}{ \rule{#1}{#3} }{%
\stackinset{r}{-#1-#4}{b}{}{ \rule{#2}{#1} }{%
\stackinset{r}{-#1-#4}{b}{-#1-#4}{ \rule{#1}{#3} }{%
  \hspace{\dimexpr #1+#4} \tmpbox}}}}}

%%% Define counter
\newcounter{myThm}
\setcounter{myThm}{0}
\renewcommand*{\themyThm}{\Roman{myThm}}
\newcommand{\mythm}{ \refstepcounter{myThm} {\bfseries Theorem \themyThm.} }

\begin{document}

\specialbox{1.5pt}{35pt}{35pt}{10pt}{%
\mythm \\
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. 
\begin{align}\label{eq}
\dot{x}(t) = f\big( t,x(t) \big)
\end{align}
Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. 
}

\vspace{30pt}

\specialbox{1.5pt}{35pt}{35pt}{10pt}{%
\mythm \\
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus.
\begin{align}\label{eq}
\dot{y}(t) = g\big( t,y(t) \big)
\end{align}
Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen