PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gesamtreferenz in subequation



Kletterfisch
07-08-2010, 15:02
Hallo!

Ich habe viele Gleichungen, die in EINE align-Umgebung eingebunden sein müssen. In dieser kommen zum Teil Gleichungen mit dem Zusatz F bzw. T vor, also (2F) und (2T). Wie ich die Hauptgleichung weiterzählen lassen kann ((3), (4), etc) und dabei den Zusatz weglassen kann, konnte ich googeln.

Wobei ich mir aber die Haare ausreißen könnte, ist der Versuch, nun auf die "Über"-Referenz zu verweisen, also einfach auf (2) statt auf entweder (2F) oder (2T).
Es wäre sehr nett, wenn mir hier jemand helfen könnte. Ich habe von Tex keine Ahnung (googeln geht aber :D ), habe das hier auch nirgends sonst gepostet und die Suche vorher verwendet.

Danke & Grüße

%--------------------------------------------------
Minimalbeispiel:
\documentclass[11pt,twoside]{report}
\usepackage{amsmath}

\renewenvironment{subequations}{%
\refstepcounter{equation}%
\def\theparentequation{\arabic{parentequation}}
\setcounter{parentequation}{\value{equation}}%
\setcounter{equation}{0}%
\def\theequation{\theparentequation\alph{equation} }%
\ignorespaces
}{%
\setcounter{equation}{\value{parentequation}}%
\ignorespacesafterend
}
\newcommand{\weiter}{\stepcounter{parentequation}\ setcounter{equation}{-1}}
\newcommand{\einF}{\setcounter{equation}{5}}
\newcommand{\einT}{\setcounter{equation}{19}}
\newcommand{\nix}{\setcounter{equation}{-1}}


\begin{document}
\begin{subequations}
\begin{align}
a=b \nix \label{a} \\ \weiter
b=c \nix \label{b} \nix \einF \\
c=d \nix \label{c} \nix \einT \\ \weiter
q=1 \nix
\end{align}
\end{subequations}
in der Referebnz sollte \eqref{b} eine (2) sein
\end{document}
%----------------------------

mechanicus
07-08-2010, 18:38
Hi,

das geht nicht¹. :-) Wie willst du auf eine Gleichung referenzieren, die es gar nicht gibt.

Gruß
Marco
¹Behaupte ich :-)

Kletterfisch
07-08-2010, 19:05
Hi!

Tja, vielleicht kann man
a) eine Umgebung um die beiden Gleichungen machen, die labelbar ist
b) eine Pseudo-Gleichung einfügen, die nicht ausgegeben wird (aber gelabelt ist)
c) den ref-Befehl abändern
d) im label den counter ändern oder so (bei den Buchstaben ist der Wert -1 kein Buchstabe)

keine Ahnung! Vor allem keine wie das gehen soll! Deshalb frage ich ja :-)

Karlo
07-08-2010, 21:58
Hey,
eine ähnliche Idee hätte ich da auch, aber leider kann ich sie mit meinen bescheidenen LaTeX-kenntnissen nicht umsetzen:
- an den Befehl für den Counter in der Subgleichung (\einF) eine Variable, welche den Labelname enthalten soll, übergeben
-> in diesen Befehl dann einen neuen Befehl definieren, wobei der Name des Befehls den Labelname enhält
-> in diesen neuen Befehl soll dann der parentcounter gespeichert sein
also etwas wie:


\newcommand{\einT}[1]{%
\setcounter{equation}{19} %
\newcommand{\glg#1}{(\theparentequation)}}

nur ist da schonmal das Problem, das man newcommand nicht in newcommand verwenden kann ... hatte es noch mit \pdfstringdef probiert, aber auch das funktioniert nicht.

naja, ich würde sagen, die einfachste Lösung wird es sein, beim Referenzieren einfach etwas zu schreiben wie "Unter Berücksichtigung der Gleichungen (2a)-(2z) sieht man leicht..."

lg
karlo

mechanicus
07-08-2010, 22:01
Hi,

Ohne Kenntnis der Nebenwirkung :-)


\documentclass[11pt,twoside]{report}
\usepackage{amsmath}
\usepackage{hyperref}
\renewenvironment{subequations}{%
\refstepcounter{equation}%
\def\theparentequation{\arabic{parentequation}}
\setcounter{parentequation}{\value{equation}}%
\setcounter{equation}{0}%
\def\theequation{\theparentequation\alph{equation} }%
\ignorespaces
}{%
\setcounter{equation}{\value{parentequation}}%
\ignorespacesafterend
}
\newcommand{\weiter}{\stepcounter{parentequation}\ setcounter{equation}{-1}}
\newcommand{\einF}{\setcounter{equation}{5}}
\newcommand{\einT}{\setcounter{equation}{19}}
\newcommand{\nix}{\setcounter{equation}{-1}}


\makeatletter
\newcommand{\eqbasis}[1]{%
\Hy@safe@activestrue%
\expandafter\@setref\csname r@#1\endcsname{\expandafter\@firstoftwo\@secondoff ive{#1}}%
\Hy@safe@activesfalse%
}
\makeatother

\begin{document}
\begin{subequations}
\begin{align}
a=b \nix \label{a} \\ \weiter
b=c \nix \label{b} \nix \einF \\
c=d \nix \label{c} \nix \einT \\ \weiter
q=1 \nix
\end{align}
\end{subequations}
in der Referenz sollte \eqref{b} eine (2) sein -- mit \eqbasis{b}

\end{document}

Gruß
Marco

Kletterfisch
08-08-2010, 07:33
Wow, das ging schnell, vielen Dank! Hast damit deine eigene Behauptung widerlegt :-)

Nur eine kleine Sache ist noch nicht perfect: Bei größeren Gleichungsnummern fällt das zweite Symbol raus (sh. Bsp). Kann man auch einfach das letzte Symbol rauswerfen?

Ich habe es wirklich mit der hyperref-Anleitung selbst versucht, aber irgendwie :confused:

\documentclass[11pt,twoside]{report}
\usepackage{amsmath}
\usepackage{hyperref}

\renewenvironment{subequations}{%
\refstepcounter{equation}%
\def\theparentequation{\thechapter.\arabic{parente quation}}
\setcounter{parentequation}{\value{equation}}%
\setcounter{equation}{0}%
\def\theequation{\theparentequation\alph{equation} }%
\ignorespaces
}{%
\setcounter{equation}{\value{parentequation}}%
\ignorespacesafterend
}

\newcommand{\weiter}{\stepcounter{parentequation}\ setcounter{equation}{-1}}
\newcommand{\einF}{\setcounter{equation}{5}}
\newcommand{\einT}{\setcounter{equation}{19}}
\newcommand{\nix}{\setcounter{equation}{-1}}


\makeatletter
\newcommand{\eqbasis}[1]{%
\Hy@safe@activestrue%
\expandafter\@setref\csname r@#1\endcsname{\expandafter\@firstoftwo\@secondoff ive{#1}}%
\Hy@safe@activesfalse%
}
\makeatother

\begin{document}
\setcounter{equation}{10}
\begin{subequations}
\begin{align}
a=b \einF \label{a}\\
b=c \einT \label{b}
\end{align}
\end{subequations}
Punkt fehlt: \eqbasis{b} statt 0.11

\end{document}

mechanicus
08-08-2010, 10:08
Hallo,

gewöhne dir bitte an, die Code-Umgebung zu nutzen. Durch einfaches reinkopieren werden zusätzliche Leerzeichen eingefügt, so dass ein copy-paste des MB nicht möglich ist. Die Tatsache, dass du aber ein MB hast ist super.


\setcounter{errorcontextlines}{100}
\documentclass[11pt,twoside]{report}
\usepackage{amsmath}
\usepackage{xstring}
\usepackage{hyperref}

\renewenvironment{subequations}{%
\refstepcounter{equation}%
\def\theparentequation{\thechapter.\arabic{parente quation}}
\setcounter{parentequation}{\value{equation}}%
\setcounter{equation}{0}%
\def\theequation{\theparentequation\alph{equation} }%
\ignorespaces
}{%
\setcounter{equation}{\value{parentequation}}%
\ignorespacesafterend
}

\newcommand{\weiter}{\stepcounter{parentequation}\ setcounter{equation}{-1}}
\newcommand{\einF}{\setcounter{equation}{5}}
\newcommand{\einT}{\setcounter{equation}{19}}
\newcommand{\nix}{\setcounter{equation}{-1}}


\makeatletter
\def\@setrefmd#1#2#3{% csname, extract group, refname
\ifx#1\relax
\protect\G@refundefinedtrue
\nfss@text{\reset@font\bfseries ??}%
\@latex@warning{%
Reference `#3' on page \thepage \space undefined%
}%
\else
\expandafter\Hy@setref@linkmd#1\@empty\@empty\@nil {#2}%
\fi
}
\def\Hy@setref@linkmd#1#2#3#4#5#6\@nil#7{%
\begingroup
\toks0={\hyper@@link{#5}{#4}}%
\toks1=\expandafter{#7{\StrGobbleRight{#1}{1}}{#2} {#3}{#4}{#5}}%
\edef\x{\endgroup
\the\toks0 {\the\toks1}%
}%
\x
}
\newcommand{\eqbasis}[1]{%
\Hy@safe@activestrue%
\expandafter\@setrefmd\csname r@#1\endcsname\@firstoffive{#1}%
\Hy@safe@activesfalse%
}
\makeatother
\begin{document}
\setcounter{equation}{10}
\begin{subequations}
\begin{align}
a=b \einF \label{a}\\
b=c \einT \label{b}
\end{align}
\end{subequations}
Punkt fehlt: \eqbasis{b} statt 0.11
\end{document}
Hier meine eigene Widerlegung :-)

Gruß
Marco

Kletterfisch
08-08-2010, 10:27
:eek: Fehlerfrei, sauschnell, SUPER!

Wow, vielen Dank, das hätte ich in 5 Jahren nicht hinbekommen (ich verstehe vom Code nun gar nichts mehr :) ) Wenn ich es nicht vergesse kommst du in meine Danksagung.

Beste Grüße,
Konrad

PS: Stimmt, das MB sollte in eine Code-Umgebung. Konnte ich nachträglich leider nicht ändern.


----------------------------------------------------
Frage beantwortet & Thread kann geschlossen werden.

mechanicus
08-08-2010, 10:51
Hi,

Anmerkung:
Die Masse des Codes ist einfach aus hyperref.sty herauskopiert -- Also ist Heiko Oberdiek der Kopf dahinter.

Was ich gemacht habe:
Beim Einlesen des Labels bspw. 0.11t wird einfach rechts was weggeschnitten (also das t)- Daher klappt es nur, solange du von a-z nummerierst. Solltest du mal aa oder so haben, dann klappt es nicht mehr :-)

Gruß
Marco