Verwandt mit: Fehlermeldung bei Verwendung von \AtBeginEnvironment


Das ist ein bisschen eine schwierige Frage. Im folgenden MWE erreiche ich mittels etoolbox.sty, das

Open in Online-Editor
\begin{figure}\label{fig:Bild}
\centering
\includegraphics[scale=0.5]{example-image-a}
\caption{Bildunterschrift}
\end{figure}

zu

Open in Online-Editor
\newpage %%%
\begin{figure}\label{fig:Bild}
\begin{tcolorbox} %%%
\centering
\includegraphics[scale=0.5]{example-image-a}
\caption{Bildunterschrift}
\end{tcolorbox} %%%
\end{figure}
\clearpage %%%

umgeändert wird.

Wie kann ich erreichen, dass zur geänderten Umgebung noch \keytip{<Name des Labels unten!>}{...}

Open in Online-Editor
\newpage %%%
\keytip{<Name des Labels unten!>}{%%%%%%%%%%%%%%% ---------------------
\begin{figure}\label{fig:Bild}
\begin{tcolorbox} %%%
\centering
\includegraphics[scale=0.5]{example-image-a}
\caption{Bildunterschrift}
\end{tcolorbox} %%%
\end{figure}
}%%%%%%%%%%%%%%% ---------------------
\clearpage %%%

ergänzt wird?

Und das muss zwingend automatisiert sein, da ich die ergänzten Umgebungen eigentlich mit extract.sty in ein separates Dokument auslagen möchte (muss).

Ganzes Dokument:

Open in Online-Editor
\documentclass{scrbook}
\usepackage[ngerman]{babel}

\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{tcolorbox}
\tcbset{colframe=gray, colback=yellow!20,}

\usepackage{amsmath, amssymb, amsfonts}
  \newtheorem{defi}{Definition}[chapter]

\usepackage{pgffor} % Schleifen
\usepackage{etoolbox}
\foreach \Umgebung in {figure, table,defi}{%% 
\BeforeBeginEnvironment{\Umgebung}{\newpage}
\AfterEndEnvironment{\Umgebung}{\clearpage}
}%%
\makeatletter
\apptocmd{\@float}{\begin{tcolorbox}}{}{}
\pretocmd{\end@float}{\end{tcolorbox}}{}{}
\makeatother

\usepackage[createtips]{fancytooltips}

\begin{document}

\chapter{Kapitel mit Bild}
Das Bild kommt auf neue/eigene Seite

\begin{figure}\label{fig:Bild}
\centering
\includegraphics[scale=0.5]{example-image-a}
\caption{Bildunterschrift}
\end{figure}

Bei solchen Umgebungen tut der tcolorbox--Kram nicht....
\begin{defi}[Eine Definition]\label{def:Definition}
$x := z$
\end{defi}

\end{document}

gefragt 13 Sep '16, 21:22

cis's gravatar image

cis
9.5k75452491
Akzeptiert-Rate: 29%

bearbeitet 15 Sep '16, 18:25

saputello's gravatar image

saputello
11.1k154365

1

sed 's/\\begin{figure}\\label{\(.*\)}/\\keytip{\1}{\\begin{figure}\\label{\1}/g; s/\\end{figure}/\\end{figure}}/g'

(13 Sep '16, 22:20) Henri
1

Oder vielleicht \newenvironment{keytipfig}[1]{\keytip{#1}\bgroup\begin{figure}\label{#1}}{\end{figure}\egroup}?

(13 Sep '16, 22:23) Henri

Die 1. AW verstehe ich nicht, die 2. tut bei mir nicht.

(14 Sep '16, 01:21) cis
1

Das erste ist schlichtes, globales Suchen/Ersetzen. Wenn man schon automatisiert arbeitet, sollte es kein Problem sein, das in den Verarbeitungsprozess mit einzubauen. Im zweiten Kommentar schlägt Henri (zurecht) vor, eine neue Umgebung zu definieren und dann natürlich diese zu verwenden. Das hat den Vorteil, dass man die volle Kontrolle darüber hat, was die Umgebung tut, welche Parameter sie bekommt etc. Das ist übrigens auch das, was die tcolorbox-Anleitung vorschlägt, nur dass dort vorgeschlagen wird, eine neue tcolorbox-Umgebung zu definieren. Du nutzt dagegen tcolorbox eher gering.

(14 Sep '16, 09:38) saputello

Wenn ich Dich richtig verstehe, willst Du, dass \label gleichzeitig ein \keytip mit identischem Argument ausführt. Das geht am einfachsten, wenn man \label lokal zur jeweiligen Umgebung entsprechend umdefiniert:

Open in Online-Editor
\documentclass{scrbook}
\usepackage[ngerman]{babel}

\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{tcolorbox}
\tcbset{colframe=gray, colback=yellow!20,}

\usepackage{amsmath, amssymb, amsfonts}
\newtheorem{defi}{Definition}[chapter]

\usepackage{pgffor} % Schleifen
\usepackage{xpatch,letltxmacro}
\foreach \Umgebung in {figure, table}{%% 
  \BeforeBeginEnvironment{\Umgebung}{\newpage}% Warum hier kein \clearpage???
  \AfterEndEnvironment{\Umgebung}{\clearpage}
}
% defi und equation kann man ganz einfach erweitern
\foreach \Umgebung in {defi,enumerate}{%
\BeforeBeginEnvironment{\Umgebung}{\newpage\begin{tcolorbox}\LetLtxMacro\label\keytiplabel}%
\AfterEndEnvironment{\Umgebung}{\end{tcolorbox}\clearpage}%
}
\makeatletter
% amsmath-Umgebungen sind erneut etwas sehr speziell. U. a. setzen sie
% Labels nicht mit dem normalen \label, sondern mit einem lokal zu
% \label@in@display umdefinierten \label und das teilweise auch erst
% während \end{…}
\foreach \Umgebung in {equation}{%
  \BeforeBeginEnvironment{\Umgebung}{\newpage\begin{tcolorbox}
    \LetLtxMacro\saved@label@in@display\label@in@display
    \renewcommand*{\label@in@display}[1]{%
      \keytip{##1}\saved@label@in@display{##1}%
    }%
  }%
  \AfterEndEnvironment{\Umgebung}{\end{tcolorbox}\clearpage}%
}
% Für die Gleitumgebungen geht es besser durch Erweiterung von \@float
% und \end@float
\xapptocmd{\@float}{\LetLtxMacro\label\keytiplabel\begin{tcolorbox}}{}{}
\xpretocmd{\end@float}{\end{tcolorbox}}{}{}
% Jetzt noch \keytiplabel, mit dem sowohl ein \keytip als auch ein \label
% erzeugt wird.
\newcommand*\saved@label{}
\LetLtxMacro\saved@label\label
\newcommand*{\keytiplabel}[1]{\keytip{#1}\saved@label{#1}}
\makeatother

\usepackage[createtips]{fancytooltips}

\begin{document}

\chapter{Kapitel mit Bild}
Das Bild kommt auf neue/eigene Seite

\begin{figure}\label{fig:Bild}
\centering
\includegraphics[scale=0.5]{example-image-a}
\caption{Bildunterschrift}
\end{figure}

Bei solchen Umgebungen tut der tcolorbox-Kram natürlich auch \dots
\begin{defi}[Eine Definition]\label{def:Definition}
$x := z$
\end{defi}

Und auch bei Gleichungen funktioniert das:
\begin{equation}
x=y\label{eq:a}
\end{equation}

Und ebenso bei Listen:
\begin{enumerate}
\item Nummer ein.\label{en:a}
\item Nummer zwei.\label{en:b}
\item Nummer drei.\label{en:c}
\end{enumerate}

\end{document}

Erzeugt eine .tips-Datei mit dem Inhalt:

Open in Online-Editor
\tooltipname{fig:Bild}{2}
\tooltipname{def:Definition}{4}
\tooltipname{eq:a}{6}
\tooltipname{en:a}{8}
\tooltipname{en:b}{8}
\tooltipname{en:c}{8}

Und natürlich funktioniert dabei auch das Einrahmen von defi, enumerate und equation.

Insgesamt sei aber an Henris Kommentare zur Frage erinnert aus dem ich die Empfehlung herauslese, entweder in den Verarbeitungsprozess entsprechende Ersetzungen einzufügen oder aber die Standardumgebungen in eigene Umgebungen mit passender Anwenderschnittstelle zu kapseln. Beides ermöglicht eine größere Kontrolle ohne in jedem Fall tief in die vorhandene Definition der Umgebungen einsteigen zu müssen. Bei Bedarf kann man dabei auch für unterschiedliche Verarbeitungsstufen mit unterschiedlichen Ersetzungen oder Definitionen arbeiten.

Übrigens verwendet man im Deutschen keinen Halbgeviertstrich als Bindestrich. Ich habe das bei tcolorbox-Kram entsprechend geändert. Der Halbgeviertstrich ist im Deutschen u. a. ein Gedankenstrich.

Permanenter link

beantwortet 14 Sep '16, 09:34

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 15 Sep '16, 18:31

Jetzt bin ich ein sehr großes Stück weitergekommen, danke dafür. :)

(14 Sep '16, 21:00) cis

Bei Nicht-Gleitumgebungen (getestet mit equation, itemize, enumerate) scheint es so nicht zu gehen. Was ist den der Gegensatz zu \@float?

(15 Sep '16, 17:13) cis
1

Für enumerate und itemize funktioniert es genau wie für defi. Dagegen sind die Umgebungen von amsmath wieder sehr speziell, weil sie u. a. eine lokal geänderte, eigene \label-Definition verwenden und ihre Ausführung etwas anders funktioniert. Ich habe die Antwort entsprechend geändert und dabei nun quasi drei Fälle unterschieden: Gleitumgebungen, normale Umgebungen, amsmath-Umgebungen. Ggf. muss man bei anderen Umgebungen auch noch ganz anders verfahren. Letztlich musst Du Dir für das Patchen von Umgebungen immer einen geeigneten Angriffspunkt suchen. Das geht nicht allgemein.

(15 Sep '16, 18:24) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×5
×3

gestellte Frage: 13 Sep '16, 21:22

Frage wurde gesehen: 5,002 Mal

zuletzt geändert: 15 Sep '16, 18:31