Sie sind hier

scrjura und varioref

Hallo,

varioref und scrjura kann man nicht gemeinsam verwenden. Das folgende Beispiel führt zu einem Fehler:

\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}\usepackage[utf8]{inputenc}
\usepackage{babel, varioref, scrjura}
 
 
\begin{document}
 
\begin{contract}
 
\Paragraph{title=Überschrift}
 
 
  \begin{table}[h]
    \centering
    \begin{tabular}{ll}
      Eintrag & Zweitrag\\
    \end{tabular}
    \caption{Diese}
    \label{tab:diese}
  \end{table}
 
 
 
  In dieser Tabelle \vref{tab:diese}
 
\end{contract}
\end{document}

Die Fehlermeldung unter texlive 2010 lautet:

ERROR: Argument of \arabic has an extra }.
 
--- TeX said ---
<inserted text> 
                \par 
l.24   I
        n dieser Tabelle \vref{tab:diese}
--- HELP ---
From the .log file...
 
I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.

Bei Verträgen wäre der Mechanismus von varioref ganz praktisch, darauf verweisen zu können, wo die Tabelle oder das Bild steht.

ich habe herumprobiert, der Fehler taucht erst auf, wenn eine Paragraphenüberschrift vor einem \vref steht.

Für gelegentliche Abhilfe dankt:

Alexander

forum: 

Das Problem liegt in der Tatsache, dass das varioref-Paket unter anderem \refstepcounter umdefiniert. Die varioref-Definition von \refstepcounter scheint sich jedoch mit \p@sentence aus dem scrjura-Paket nicht zu vertragen. Eine mögliche Lösung ist daher \p@sentence in der Präambel entsprechend anzupassen:

\makeatletter
\@ifpackageloaded{varioref}{%
  \let\p@sentence\p@@sentence%
}{%
}
\makeatother
 
\begin{document}
...
Bild von Markus Kohm

Das Problem kommt übrigens daher, dass varioref mit \p@Zähler dasselbe erreichen will wie scrjura: \theZähler soll als Argument davon interpretiert werden können. Da scrjura das nur für einen speziellen Zähler erreichen muss, wird bei scrjura nicht in den LaTeX-Kernel eingegriffen, sondern das dafür notwendige \expandafter in die Definition von \p@sentence eingebaut. varioref möchte dafür jedoch eine allgemeine Lösung anbieten und definiert deshalb die Kernel-Anweisung \refstepcounter – die einzige Stelle an der \p@Zähler vom Kernel verwendet wird – ein.

Wenn man diese allgemeine Lösung nicht benötigt, sollte man also auch mit

\usepackage{savesym}
\savesymbol{refstepcounter}
\usepackage{varioref}
\restoresymbol{varioref}{refstepcounter}

das Problem lösen können.

Ich werde mal überlegen, ob ich – ggf. optional – ebenfalls die allgemeine Lösung von varioref anbiete.

Jetzt muss ich mich nur noch zwischen den beiden Lösungen entscheiden, herzlichen Dank.

Beide habe ich ausprobiert, beide funktionieren. Seit zwei Jahren wollte ich deswegen fragen und nun ging's fix.

Jetzt muss ich noch einen neuen Code-Schnippel für YASnippets schreiben, damit ich beim nächsten Mal nicht suchen muss.

Danke nochmals,

Gruß,

Alexander

Comments for "scrjura und varioref" abonnieren