Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Gesamtreferenz in subequation

  1. #1
    Kletterfisch
    Gast

    Gesamtreferenz in subequation

    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 ), 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}
    %----------------------------

  2. #2
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

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

    Gruß
    Marco
    ¹Behaupte ich :-)

  3. #3
    Kletterfisch
    Gast
    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 :-)
    Geändert von Kletterfisch (07-08-2010 um 19:09 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    18.05.2010
    Beiträge
    79
    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:
    Code:
    \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

  5. #5
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    Ohne Kenntnis der Nebenwirkung :-)

    Code:
    \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\@secondoffive{#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

  6. #6
    Kletterfisch
    Gast
    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

    \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}

  7. #7
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    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.

    Code:
    \setcounter{errorcontextlines}{100}
    \documentclass[11pt,twoside]{report}
    \usepackage{amsmath}
    \usepackage{xstring}
    \usepackage{hyperref}
    
    \renewenvironment{subequations}{%
    \refstepcounter{equation}%
    \def\theparentequation{\thechapter.\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
    \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

  8. #8
    Kletterfisch
    Gast
    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.

  9. #9
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    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

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •