Hallo TeXWelt! Mir ist ein komischer Bug im Zusammenspiel von Open in writeLaTeX
%%%Cleveref & Varioref ab Seite statt auf Seite setzen \makeatletter \def\curtlabtype{}% << define temporary variable \let\@old@cref@vref\cref@vref% << save cleveref's definition \def\cref@vref#1#2{% << modify cleveref's definition \cref@gettype{#2}{\curtlabtype}% << get type of label \@old@cref@vref{#1}{#2}}% << call original macro \vref@addto\extrasngerman{% << modify varioref macros \def\reftextfaraway#1{% << only change far away references \ifthenelse{\equal{\curtlabtype}{chapter}}{ab Seite}{auf Seite}~\pageref{#1}}}% \makeatother Ich konnte den Fehler auf die Zeile Open in writeLaTeX
\cref@gettype{#2}{\curtlabtype}% eingrenzen. Kommentiert man diese Zeile aus, dann läuft es durch, natürlich ohne ab/auf Seite Anpassung. Die Fehlermeldung ist Open in writeLaTeX
Argument of \@firstoftwo has an extra }. <inserted text> \par l.41 ...pt1}. Und hier in den Appendix \vref{test} . Nachdem ich in die jeweiligen Dokus und Hat jemand von euch eine Idee? Danke! :) Hier das Minimalbeispiel: Open in writeLaTeX
\documentclass[ paper=a4, fontsize=12pt, ]{scrreprt} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} \usepackage{blindtext} \usepackage[demo]{graphicx} \usepackage[ngerman]{varioref} %\usepackage{hyperref} \usepackage[ngerman]{cleveref} \usepackage{ifthen} %%%Cleveref & Varioref ab Seite statt auf Seite setzen \makeatletter \def\curtlabtype{}% << define temporary variable \let\@old@cref@vref\cref@vref% << save cleveref's definition \def\cref@vref#1#2{% << modify cleveref's definition \cref@gettype{#2}{\curtlabtype}% << get type of label, hier entsteht der Fehler \@old@cref@vref{#1}{#2}}% << call original macro \vref@addto\extrasngerman{% << modify varioref macros \def\reftextfaraway#1{% << only change far away references \ifthenelse{\equal{\curtlabtype}{chapter}}{ab Seite}{auf Seite}~\pageref{#1}}}% \makeatother \begin{document} \chapter{Chap 1} \label{chapt1} \Blindtext[5] \chapter{Chap 2} \label{chapt2} Ein Test auf \vref{chapt1}. Und hier in den Appendix \vref{test}. \Blindtext \appendix \chapter{Chap A} \begin{figure}[h]% \includegraphics[width=0.5\textwidth]{} \caption{test caption} \label{test} \end{figure} \end{document} |
Das ist kein Bug von Ich schlage daher zwei (oder eigentlich drei...) Änderungen an der Definition vor:
Um die Tests bequem zu machen, lade ich Open in writeLaTeX
\ifcsdef{r@<labelname>}{<wahr>}{<falsch>} ob das Label existiert. Allerdings könnte das zu Problemen führen, wenn man vor dieser Verwendung von Open in writeLaTeX
\ifundefinedorrelax{r@<labelname>}{<wahr>}{<falsch>} % oder \scr@ifundefinedorrelax{r@<labelname>}{<wahr>}{<falsch>} zurückgreifen. Beide werden vom Paket Statt Open in writeLaTeX
\ifdefstring{\curtlabtype}{<string>}{<wahr>}{<falsch>} Damit ich auf Open in writeLaTeX
\ifboolexpr { test {\ifdefstring{\curtlabtype}{chapter}} or test {\ifdefstring{\curtlabtype}{appendix}} } {ab Seite} {auf Seite}% Damit erhalte ich: für folgenden Beispielcode: Open in writeLaTeX
\documentclass[ paper=a4, fontsize=12pt, ]{scrreprt} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} \usepackage{blindtext} \usepackage[demo]{graphicx} \usepackage[ngerman]{varioref} %\usepackage{hyperref} \usepackage[ngerman]{cleveref} \usepackage{etoolbox} % Cleveref & Varioref: % für Kapitel `ab Seite' statt `auf Seite' setzen \makeatletter \newcommand*\curtlabtype{} \let\@old@cref@vref\cref@vref \renewcommand*\cref@vref[2]{% \scr@ifundefinedorrelax{r@#2}% teste, ob Label `#2' definiert ist {} {\cref@gettype{#2}{\curtlabtype}}% \@old@cref@vref{#1}{#2}% } \vref@addto\extrasngerman{% \renewcommand*\reftextfaraway[1]{% \ifboolexpr { test {\ifdefstring{\curtlabtype}{chapter}} or test {\ifdefstring{\curtlabtype}{appendix}} } {ab Seite} {auf Seite}% ~\pageref{#1}}% } \makeatother \begin{document} \chapter{Chap 1} \label{chapt1} \Blindtext[5] \chapter{Chap 2} \label{chapt2} Ein Test auf \vref{chapt1}. Und hier in den Appendix \vref{test}. Hier auf \vref{chapA}. \Blindtext \appendix \chapter{Chap A}\label{chapA} \begin{figure}[h]% \includegraphics[width=0.5\textwidth]{} \caption{test caption} \label{test} \end{figure} \end{document} beantwortet 02 Jul '14, 20:17 cgnieder Klappt wunderbar! Die tikzexternalize funktioniert nun ebenfalls. Vielen Dank! Edit: "Bug"-Report an Schlosser gerade abgeschickt.
(02 Jul '14, 20:30)
maphy-psd
@maphy-psd Keine Ursache :) Mal sehen, ob Joachim seinen Blogpost anpasst.
(02 Jul '14, 22:03)
cgnieder
Er will es korrigieren. ;-)
(03 Jul '14, 10:31)
maphy-psd
|
Ich bekomme weder mit einem aktuellen MiKTeX 2.9 noch mit einem aktuellen TeXLive 2014 Fehlermeldungen mit dem Code.
Allerdings funktioniert die Umschaltung auf "ab Seite" für den Anhang nicht, wenn ich das Label auf die Überschrift des Anhanges A verweisen lasse. Es erscheint dann immer nach "auf Seite". Im Anhang ist der entsprechende
\curtlabtype
vermutlichappendix
und nichtchapter
.Mir fällt grad auf, dass er beim ersten Lauf den Fehler anzeigt, beim zweiten Lauf läuft alles sauber durch. Die Unterscheidung nach ab/auf Seite funktioniert auch. Das Problem besteht nun eigentlich darin, dass ich in meiner Arbeit tikzexternalize aktiviert habe und durch den Fehler im 1. Lauf die Bilder nicht erstellt werden.
Ich (akt. TL2014) bekomme beim ersten Kompilieren für jedes neue Label den Fehler, beim zweiten Durchlauf geht es. Für Label für
\chapter
im Anhang kann ich das falsche Verhalten, das @esdd erwähnt, bestätigen.Für Labels chapter erhalte ich ebenfalls keine Unterscheidung, für das Bild schon. Habe ebenfalls TL2014.