Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

\refstepcounter: Zähler "herunterzählen"

6 views
Skip to first unread message

Philipp E. Imhof

unread,
Nov 6, 2009, 9:28:48 AM11/6/09
to
Hallo

Ich verwende für Beispiele in einem Schulbuch eine
theorem-ähnliche Umgebung (Paket ntheorem). Nun kommt es ab und
zu vor, dass ich Beispiele unterbreche oder Gegenbeispiele mache.

Dazu habe ich die Umgebung leicht angepasst, nämlich so, dass bei
Angabe des optionalen Parameters (den man normalerweise für den
Namen eines Satzes o.ä. braucht) der Zähler mit
\addtocounter{beispiel}{-1} zuerst um 1 reduziert wird, sodass
dann effektiv zweimal die gleiche Nummer verwendet wird.

Also


Beispiel 1.1: Es ist ........

(Text)

Beispiel 1.1 (Fortsetzung): Nun können wir ......


Leider habe ich nun das Problem, dass ich keine \label-Referenz
in der Fortsetzung benützen kann (bzw. ich kann schon, aber die
Nummer ist dann eins zu hoch).

Nun suche ich vergebens nach einer Art \refaddtocounter. Ich habe
das so gemacht:

\def\refaddtocounter#1#2{%
\addtocounter{#1}{#2}%
\addtocounter{#1}{-1}%
\refstepcounter{#1}
}

Aber auch das funktioniert nicht (warum eigentlich?)


Gibt es eine andere Möglichkeit, die gleiche Nummer zweimal zu
verwenden *und* korrekte Verweise zu erhalten?


Danke & Gruss

Philipp

Ulrike Fischer

unread,
Nov 6, 2009, 12:37:28 PM11/6/09
to
Am Fri, 06 Nov 2009 15:28:48 +0100 schrieb Philipp E. Imhof:

> Nun suche ich vergebens nach einer Art \refaddtocounter. Ich habe
> das so gemacht:
>
> \def\refaddtocounter#1#2{%
> \addtocounter{#1}{#2}%
> \addtocounter{#1}{-1}%
> \refstepcounter{#1}
> }
>
> Aber auch das funktioniert nicht (warum eigentlich?)

Warum demonstriert du nicht, was dabei nicht funktioniert?
(Stichwort Minimalbeispiel).


--
Ulrike Fischer

Philipp E. Imhof

unread,
Nov 8, 2009, 12:36:16 PM11/8/09
to

> Warum demonstriert du nicht, was dabei nicht funktioniert?
> (Stichwort Minimalbeispiel).

Weil mir die Fehlerbeschreibung eigentlich klar erschien und ich
deshalb nicht dachte, dass es hier ein Minimalbeispiel bräuchte.
Hier die Nachlieferung:

********
\documentclass{scrbook}

\usepackage[framed]{ntheorem}
\usepackage{framed,xcolor}

\def\refaddtocounter#1#2{%
\addtocounter{#1}{#2}%
\addtocounter{#1}{-1}%
\refstepcounter{#1}
}

% Stil für Beispiele etwas anpassen (Abstand nach Titel)
\makeatletter
\newtheoremstyle{beispiel}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
\rule[-2ex]{0px}{\baselineskip}%
##1\ \thebeispiel\theorem@separator}\hbox{\strut}}}]}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
\rule[-2ex]{0px}{\baselineskip}%
##1\ \refaddtocounter{beispiel}{-1}\thebeispiel\
(##3)\theorem@separator}\hbox{\strut}}}]}
\makeatother

% Beispiele: Umrandet, nummeriert, Titel fett
\theoremclass{Theorem}
\theoremstyle{beispiel}
\theorembodyfont{\upshape}
\def\bgcol{black!10}
\setlength{\fboxrule}{8pt}
\setlength{\theorempreskipamount}{0pt}
\setlength{\theorempostskipamount}{0pt}
\def\theoremframecommand{\fcolorbox{\bgcol}{\bgcol}}
\newshadedtheorem{beispiel}{Beispiel}[chapter]


\begin{document}

Bla bla
\begin{beispiel}
Bla
\end{beispiel}

Und dann weiter....
\begin{beispiel}[Fortsetzung]
blabla\label{fortsetzung}
\end{beispiel}

Wie im Gegenbeispiel~\ref{fortsetzung} gezeigt -- \textbf{hier steht
die falsche Nummer}

\end{document}


*********

Ich hätte nun gerne, dass die Referenz zur angezeigten Nummer passen
würde.


Beste Grüsse

Philipp

Ulrike Fischer

unread,
Nov 9, 2009, 4:08:26 AM11/9/09
to
Am Sun, 08 Nov 2009 18:36:16 +0100 schrieb Philipp E. Imhof:

>> Warum demonstriert du nicht, was dabei nicht funktioniert?
>> (Stichwort Minimalbeispiel).
>
> Weil mir die Fehlerbeschreibung eigentlich klar erschien und ich

> deshalb nicht dachte, dass es hier ein Minimalbeispiel br�uchte.
> Hier die Nachlieferung:
>

Dein \refaddtocounter{beispiel}{-1} steckt in diversen Boxen, also
in einer Gruppe. Und w�hrend Z�hler global ge�ndert werden, gilt das
nicht f�r \@currentlabel, das den Inhalt des "aktuellen" (f�r
\label) Z�hlers enth�lt:

\documentclass{scrbook}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}

Au�en: \refstepcounter{section}\thesection

{Innen:\refstepcounter{section}\thesection \label{inner}}

Au�en: \thesection\label{outer}

ref Innen: \ref{inner},

ref Au�en: \ref{outer}
\end{document}


F�ge einfach \refaddtocounter{beispiel}{0} am Ende nach \item[...]
ein.


--
Ulrike Fischer

Philipp E. Imhof

unread,
Nov 9, 2009, 5:18:09 AM11/9/09
to
Hallo Ulrike

> Dein \refaddtocounter{beispiel}{-1} steckt in diversen Boxen, also

> in einer Gruppe. Und während Zähler global geändert werden, gilt das
> nicht für \@currentlabel, das den Inhalt des "aktuellen" (für
> \label) Zählers enthält:

Vielen Dank für diese Erklärung, die nicht nur mein Problem löst,
sondern einmal mehr zeigt, warum das Minimalbeispiel auch bei
vermeintlich "klaren" Dingen nötig ist.

Gruss

Philipp

0 new messages