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
Mögliche Lösung
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:
Sehr gut analysiert!
Das Problem kommt übrigens daher, dass varioref mit
\p@
Zähler dasselbe erreichen will wie scrjura:\the
Zä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
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 auch noch entscheiden
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