PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Seitennummerierung + hyperref + pagebackref = has been referenced but does not



leo2k
17-11-2011, 07:13
Hallo Forum,

dieses Forum hat mir mit den zahlreichen Infos schon oft weiter geholfen.
Bei meinem aktuellen Problem komme ich jedoch nicht weiter und mit google finde ich auch nichts passendes.
Ich habe die Seitennummerierung in meinem Anhang mittels
\renewcommand{\thepage}{{{\thechapter}.\arabic{pag e}}} modifiziert. Außerdem benutze ich pagebackref und einen Codeschnipsel den ich glaube ich sogar von hier habe, welcher unter den Einträgen im Quellenverzeichnis ein "Zitiert auf Seite" setzt. Das funktionierte bisher alles ganz prima. Nun habe ich das Problem dass wenn ich im Anhang eine Quelle zitiere das pagebackref meine modifizierte Seitenzahlen nicht mehr findet und einen Fehler ala
(dest): name{page.{A}.3} has been referenced but does not exis
t, replaced by a fixed one wirft.
Ich habe mir Mühe gegeben aus meinem riesen Dokument ein Minimalbeispiel zu bauen, welches diesen Fehler produziert. Hier ist es:

\documentclass
[
a4paper,
ngerman,
oneside,
numbers=noenddot,
]
{scrreprt}

\usepackage[latin1]{inputenc} % Zeichensatz, ermöglicht die direkte Eingabe
\usepackage[english, ngerman]{babel} % Silbentrennung nach der neuen deutschen
\usepackage[
pdftex, % Verwende pdftex um direkt PDFs zu erzeugen
pagebackref, % Links im Literaturverzeichnis zurück auf die Seite(n) wo zitiert wurde
]{hyperref} %


% erzeugt in der Bibliographie Links im Format "Zitiert auf Seite"
% redefinition of the actually used \backrefalt
\renewcommand*{\backrefalt}[4]{
\ifcase #1 %
% case: not cited
\par \vspace{0pt} \footnotesize (Nicht zitiert)
\or
% case: cited on exactly one page
\par \vspace{0pt} \footnotesize (Zitiert auf Seite~#2)
\else
% case: cited on multiple pages
\par \vspace{01pt} \footnotesize (Zitiert auf den Seiten~#2)
\fi}

\bibliographystyle{alphadin}

\begin{document}
\selectlanguage{ngerman}

\chapter{Normales Kapitel}
Hier ist ein ganz normales Kapitel. Danach kommt der Anhang.

\appendix
\renewcommand{\thepage}{{{\thechapter}.\arabic{pag e}}}
\chapter{Einführung}
\section{Testsection}
Hier steht eine Referenz auf \cite{buchzitat}.

\bibliography{LIB}
\end{document}
Dazu braucht ihr dann noch die LIB.bib:

% This file was created with JabRef 2.6.
% Encoding: Cp1252

@BOOK{ buchzitat,
title = {Testtitel},
publisher = {Testpublisher},
year = {20011},
author = {Testauthor},
}


@comment{jabref-meta: selector_publisher:}

@comment{jabref-meta: selector_author:}

@comment{jabref-meta: selector_journal:}

@comment{jabref-meta: selector_keywords:}


evtl. gibt es ja eine andere Möglichkeit die Seitenzahlen so zu verbiegen dass es funktioniert?

Schonmal vielen Dank an alle die sich darüber den Kopf zerbrechen werden :)

Viele Grüße,
Leo

Schweinebacke
17-11-2011, 08:42
Was sollen denn die ganzen TABs im Code? Die machen das nur extrem unübersichtlich. Lass die bitte künftig weg. Wenn ich Dein Problem richtig verstehe, dann funktioniert bei mir:
\begin{filecontents*}{LIB.bib}
% This file was created with JabRef 2.6.
% Encoding: Cp1252

@BOOK{ buchzitat,
title = {Testtitel},
publisher = {Testpublisher},
year = {20011},
author = {Testauthor},
}


@comment{jabref-meta: selector_publisher:}

@comment{jabref-meta: selector_author:}

@comment{jabref-meta: selector_journal:}

@comment{jabref-meta: selector_keywords:}
\end{filecontents*}

\documentclass
[
a4paper,
ngerman,
oneside,
numbers=noenddot,
]
{scrreprt}
\usepackage{chngcntr}
\usepackage[latin1]{inputenc} % Zeichensatz, ermöglicht die direkte Eingabe
\usepackage[english, ngerman]{babel} % Silbentrennung nach der neuen deutschen
\usepackage[
% hyperref kann pdftex vollständig alleine erkennen!
pagebackref% Links im Literaturverzeichnis zurück auf die Seite(n) wo zitiert wurde
]{hyperref} %


% erzeugt in der Bibliographie Links im Format "Zitiert auf Seite"
% redefinition of the actually used \backrefalt
\renewcommand*{\backrefalt}[4]{
\ifcase #1 %
% case: not cited
\par \vspace{0pt} \footnotesize (Nicht zitiert)
\or
% case: cited on exactly one page
\par \vspace{0pt} \footnotesize (Zitiert auf Seite~#2)
\else
% case: cited on multiple pages
\par \vspace{01pt} \footnotesize (Zitiert auf den Seiten~#2)
\fi}

\bibliographystyle{alphadin}

\begin{document}
\chapter{Normales Kapitel}
Hier ist ein ganz normales Kapitel. Danach kommt der Anhang.

\appendix
\counterwithin{page}{chapter}
\chapter{Einführung}
\section{Testsection}
Hier steht eine Referenz auf \cite{buchzitat}.

\bibliography{LIB}
\end{document}
Ich finde die Änderung der Seitennummerierung allerdings eher von Nachteil für den Leser.

leo2k
17-11-2011, 09:44
Sorry, die TABs habe ich total übersehen, das war keine Absicht :(

Nach lesen der chngcntr Doku erschließt sich mir nun auch was sie tut :)
Diese Lösung kompiliert zwar ohne Warning, jedoch zeigt der Link im pagebackref immernoch auf den Anfang des Dokuments.

Schweinebacke
17-11-2011, 10:15
Diese Lösung kompiliert zwar ohne Warning, jedoch zeigt der Link im pagebackref immernoch auf den Anfang des Dokuments.
Bei mir nicht:
*File List*
scrreprt.cls 2011/06/16 v3.09a KOMA-Script document class (report)
scrkbase.sty 2011/06/16 v3.09a KOMA-Script package (KOMA-Script-dependent basics and keyval usage)
scrbase.sty 2011/06/16 v3.09a KOMA-Script package (KOMA-Script-independent basics and keyval usage)
keyval.sty 1999/03/16 v1.13 key=value parser (DPC)
scrlfile.sty 2011/03/09 v3.09 KOMA-Script package (loading files)
tocbasic.sty 2011/05/30 v3.09a KOMA-Script package (handling toc-files)
scrsize11pt.clo 2011/06/16 v3.09a KOMA-Script font size class option (11pt)
typearea.sty 2011/06/16 v3.09a KOMA-Script package (type area)
chngcntr.sty 2009/09/02 v1.0a change counter resetting
inputenc.sty 2008/03/30 v1.1d Input encoding file
latin1.def 2008/03/30 v1.1d Input encoding file
babel.sty 2008/07/08 v3.8m The Babel package
ngermanb.ldf 2008/07/06 v2.6n new German support from the babel system
english.ldf 2005/03/30 v3.3o English support from the babel system
hyperref.sty 2011/08/19 v6.82h Hypertext links for LaTeX
hobsub-hyperref.sty 2011/04/23 v1.4 Bundle oberdiek, subset hyperref (HO)
hobsub-generic.sty 2011/04/23 v1.4 Bundle oberdiek, subset generic (HO)
hobsub.sty 2011/04/23 v1.4 Subsetting bundle oberdiek (HO)
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/message (HO)
ltxcmds.sty 2011/04/18 v1.20 LaTeX kernel commands for general use (HO)
ifluatex.sty 2010/03/01 v1.3 Provides the ifluatex switch (HO)
ifvtex.sty 2010/03/01 v1.5 Switches for detecting VTeX and its modes (HO)
intcalc.sty 2007/09/27 v1.1 Expandable integer calculations (HO)
ifpdf.sty 2011/01/30 v2.3 Provides the ifpdf switch (HO)
etexcmds.sty 2011/02/16 v1.5 Prefix for e-TeX command names (HO)
kvsetkeys.sty 2011/04/07 v1.13 Key value parser (HO)
kvdefinekeys.sty 2011/04/07 v1.3 Defining keys (HO)
pdftexcmds.sty 2011/04/22 v0.16 Utilities of pdfTeX for LuaTeX (HO)
pdfescape.sty 2011/04/04 v1.12 Provides string conversions (HO)
bigintcalc.sty 2011/01/30 v1.2 Expandable big integer calculations (HO)
bitset.sty 2011/01/30 v1.1 Data type bit set (HO)
uniquecounter.sty 2011/01/30 v1.2 Provides unlimited unique counter (HO)
letltxmacro.sty 2010/09/02 v1.4 Let assignment for LaTeX macros (HO)
hopatch.sty 2011/01/30 v1.0 Wrapper for package hooks (HO)
xcolor-patch.sty 2011/01/30 xcolor patch
atveryend.sty 2011/04/23 v1.7 Hooks at very end of document (HO)
atbegshi.sty 2011/01/30 v1.15 At begin shipout hook (HO)
refcount.sty 2010/12/01 v3.2 Data extraction from references (HO)
hycolor.sty 2011/01/30 v1.7 Color options of hyperref/bookmark (HO)
ifxetex.sty 2010/09/12 v0.6 Provides ifxetex conditional
kvoptions.sty 2010/12/23 v3.10 Keyval support for LaTeX options (HO)
pd1enc.def 2011/08/19 v6.82h Hyperref: PDFDocEncoding definition (HO)
hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
backref.sty 2010/08/30 v1.36 Bibliographical back referencing
rerunfilecheck.sty 2011/04/15 v1.7 Rerun checks for auxiliary files (HO)
url.sty 2006/04/12 ver 3.3 Verb mode for urls, etc.
hpdftex.def 2011/08/19 v6.82h Hyperref driver for pdfTeX
nameref.sty 2010/04/30 v2.40 Cross-referencing by name of section
gettitlestring.sty 2010/12/03 v1.4 Cleanup title references (HO)
test.out
test.out
test.bbl
***********

Du hast schon die Aufrufreihenfolge:

pdflatex
bibtex
pdflatex
pdflatex

eingehalten? Die zwei Läufe am Ende sind notwendig, weil beim ersten davon erst die Rücklinks ermittelt und im zweiten dann korrekt eingefügt werden.

leo2k
17-11-2011, 10:21
ähm, darüber habe ich mir noch nie gedanken gemacht O.o
Ich nutze TeXnicenter und bin es seit jeher gewohnt sehr oft auf compilieren zu klicken.
... jetzt muss ich nur noch rausfinden wie ich überprüfen in welcher reihenfolge texnicenter das macht. bzw wie entscheidet texnicenter ob es jetzt bibtex oder latex ausführt wenn ich auf compilieren klicke?

Edit:
Halt stop :D
Ich habe gerade eben testweise latex auf der konsole ausgeführt. Da kam dann die Fehlermeldung dass chngcntr.sty nicht gefunden werden konnte. Folglich hat Texnicenter das paket nicht automatisch installiert - mich darüber aber auch nicht informiert -.-
Nachdem ich jetzt das Paket von Hand installiert habe läuft es durch und die Links passen auch.
Aber seitdem das funktionert habe ich das Problem dass der \counterwithin{page}{chapter} zähler bei null anfängt, ich will aber dass es bei A.1 anfängt...

bobmalaria
17-11-2011, 10:29
hi,

soweit ich das weiss entscheided texniccenter das ueberhaut nicht und du musst normal bibtex extra ausfuehren. normal wird nur pdflatex ausgefuehrt.

ausser du hast bibtex als nachbearbeitungsprofil in deinem LaTeX=>PDF eintrag extra angelegt.

du kannst dein projekt mal reinigen, also alle temporaeren dateien loeschen (gibt es als funktion im texniccenter). dannach kannst du kompilieren, bibtex ausfuehren und noch 2x kompilieren.

gruss

leo2k
17-11-2011, 10:47
also in meinem texnicenter ist die option "verwendet bibtex" gesetzt. ich weiß zwar nicht wie genau, aber dadurch scheint sich texnicenter um die problematik zu kümmern.
nachdem ich chngcntr jetzt manuell installiert habe, funktioniert das kompilieren auch so wie es soll.
nur das problem mit der numerierung ab A.0 besteht weiterhin. in der doku von chngcntr steht
If you
want to change the value after one of these commands, use \setcounter{
<ctr>}{<. . . >}, and to change the typeseting style use \renewcommand{\
the<ctr>}{<. . . >}.
aber wenn ich \setcounter{page}{1} mache, macht das keinen unterschied.

Schweinebacke
17-11-2011, 10:56
Kannst Du etwas genauer sein, beispielsweise in dem von mir gezeigten Beispiel Deine Änderungen einfügen und dann das geänderte Beispiel zeigen und daran erklären, was Du Dir anders erhoffst?

PS: Willst Du vielleicht das (nur ein paar Zeilen mit der Änderung):
\appendix
\counterwithin{page}{chapter}

\chapter{Einführung}
\stepcounter{page}
\section{Testsection}
Hier steht eine Referenz auf \cite{buchzitat}.
Falls dem so ist, bekommen wir das auch automatisch hin …

leo2k
17-11-2011, 11:57
ja, genau so hätte ich das gerne. und zwar bei jedem anhang, sodass es mit A.1, B.1 usw anfängt.
dein beispiel funktioniert auch bei mir, und wenn ich an die selbe stelle \setcounter{page}{1} schreibe, funktioniert es auch. kannst du mir erklären wieso es nicht funktioniert wenn ich statt
\appendix
\counterwithin{page}{chapter}

\chapter{Einführung}
\setcounter{page}{1}
\section{Testsection}
Hier steht eine Referenz auf \cite{buchzitat}.
das hier schreibe?:

\appendix
\counterwithin{page}{chapter}
\setcounter{page}{1}
\chapter{Einführung}

\section{Testsection}
Hier steht eine Referenz auf \cite{buchzitat}.

wenn du mir jetzt noch sagst wie ich das ganze automatisiere, sodass ich nicht bei jedem chapter \setcounter{page}{1} schreiben muss, dann bin ich glücklich :)

gruß,
leo

Schweinebacke
17-11-2011, 12:21
Da bei jedem Erhöhen des Zähler <code>chapter</code> in Folge von <code>\counterwithin</code> der Zähler <code>page</code> auf 0 gesetzt wird und da <code>\chapter</code> den Zähler <code>chapter</code> um eins erhöht, ist es völlig logisch dass ein <code>\setcounter{page}{…}</code> oder <code>\stepcounter{page}</code> vor <code>\chapter</code> keine sichtbaren Auswirkungen für die Kapitelanfangsseite hat.

Um nun all Deine Wünsche als Teil von <code>\appendix</code> zu haben, schlage ich vor:
\listfiles
\begin{filecontents*}{LIB.bib}
% This file was created with JabRef 2.6.
% Encoding: Cp1252

@BOOK{ buchzitat,
title = {Testtitel},
publisher = {Testpublisher},
year = {20011},
author = {Testauthor},
}


@comment{jabref-meta: selector_publisher:}

@comment{jabref-meta: selector_author:}

@comment{jabref-meta: selector_journal:}

@comment{jabref-meta: selector_keywords:}
\end{filecontents*}

\documentclass
[
a4paper,
ngerman,
oneside,
numbers=noenddot,
]
{scrreprt}
\usepackage{chngcntr}
\usepackage[latin1]{inputenc} % Zeichensatz, ermöglicht die direkte Eingabe
\usepackage[english, ngerman]{babel} % Silbentrennung nach der neuen deutschen
\usepackage[
% hyperref kann pdftex vollständig alleine erkennen!
pagebackref% Links im Literaturverzeichnis zurück auf die Seite(n) wo zitiert wurde
]{hyperref} %


% erzeugt in der Bibliographie Links im Format "Zitiert auf Seite"
% redefinition of the actually used \backrefalt
\renewcommand*{\backrefalt}[4]{
\ifcase #1 %
% case: not cited
\par \vspace{0pt} \footnotesize (Nicht zitiert)
\or
% case: cited on exactly one page
\par \vspace{0pt} \footnotesize (Zitiert auf Seite~#2)
\else
% case: cited on multiple pages
\par \vspace{01pt} \footnotesize (Zitiert auf den Seiten~#2)
\fi}

% \appendix so erweitern, dass der Anhang kapitelweise nummeriert wird:
\makeatletter
\g@addto@macro\appendix{%
\counterwithin{page}{chapter}%
\g@addto@macro\cl@chapter{\stepcounter{page}}%
}
\makeatother

\bibliographystyle{alphadin}

\begin{document}
\chapter{Normales Kapitel}
Hier ist ein ganz normales Kapitel. Danach kommt der Anhang.

\appendix

\chapter{Einführung}
\section{Testsection}
Hier steht eine Referenz auf \cite{buchzitat}.

\chapter{Und noch ein Kapitel im \appendixname}
Mit Text.

% Und jetzt hast Du gleich ein Problem, wenn das Literaturverzeichnis nicht
% nummeriert wird. Ein Gund mehr, nicht kapitelweise zu nummerieren. Für den
% Leser ist das ohnehin eher von Nachteil, weil es die Orientierung aus dem
% Inhaltsverzeichnis oder Stichwortverzeichnis heraus erschwert.
\bibliography{LIB}
\end{document}

Falls Du als Ausweg das Literaturverzeichnis nummerieren möchtest, sei auf Option <code>bibliography</code> in der KOMA-Script-Anleitung, scrguide.pdf, oder auf Option <code>toc</code> (ebenda) hingewiesen.

leo2k
17-11-2011, 13:36
In meinem eigentlichen Dokument ist das Literaturverzeichnis sowieso vor den Anhängen (und dort auch anders nummeriert). Ich verstehe den Code der die Nummerierung automatisiert zwar nicht, aber es funktioniert und ich bin zufrieden.
Vielen Dank für deine Hilfe :)

Schweinebacke
17-11-2011, 13:55
<code>\g@addto@macro</code> ist eine Anweisung aus dem LaTeX-Kern, mit der man eine existierende Anweisung (erstes Argument) um weiteren Code (zweites Argument) ergänzen kann. Im konkreten Fall wird also \appendix erweitert.

<code>\cl@capter</code> ist die sogenannte clear list des Zählers <code>chapter</code>. Normalerweise besteht die aus Anweisungen der Art <code>\@elt{section}\@elt{equation}</code> etc. Bei jedem <code>\stepcounter{chapter}</code> oder <code>\refstepcounter{chapter}</code> wird <code>\@elt</code> zu einer Anweisung, die den Zähler aus dem Argument auf 0 setzt und dann <code>\cl@chapter</code> ausgführt. Ich füge der Liste nun einfach ein <code>\stepcounter{page}</code> zu, so dass der Seitenzähler (nachdem er zuvor via <code>\@elt{page}</code> auf 0 gesetzt wurde) um eins erhöht wird.

Näheres zu <code>\cl@ZÄHLER</code> und anderen Interna von LaTeX ist source2e.pdf zu entnehmen.