PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : spezielle Frage zu Verweisen / etwas dringend



MPS
24-05-2007, 10:02
Hi,

so, schreibe gerade meine Praxisarbeit in LaTeX. So weit ist die auch schon fertig, allerdings bin ich mit den Verweisen etwas unglücklich.
Und zwar benutze ich das varioref Packet mit dem Befehl \vref. Eigentlich schön, nur hätte ich gerne, falls der Verweis sich nicht auf die aktuelle Seite bezieht, dass immer die Seitennummer steht und nicht "auf der nächsten Seite"... Hab schon gegoogelt allerdings noch keine Lösung gefunden. In der Paketdoku bin ich auch nicht fündig geworden.

Einen Befehl selbst definieren kann ich mangels Wissen in LaTeX (noch) nicht, der das entsprechende bewirkt.

Gruß
Mathias

Gnihilo
24-05-2007, 10:56
Moin,

wie man den Befehl dementsprechend ändert, weiß ich auch nicht genau, aber versuch's einfach mal mit

\newcommand{\refx}[1]{\ref{#1} auf Seite~\pageref{#1}}

Damit erhälst Du immer "XY auf Seite X". Wenn Du auf eine Abb. o.ä. auf der gleichen Seite verweisen willst, kannst ja wieder \vref oder einfach \ref verwenden.

Ist zwar nicht besonders elegant, aber funktioniert... :D

Gruß Jonas.

Salnic
24-05-2007, 11:16
Hi MPS,

das geht so einfach nicht. Du kannst den Text anpassen, der ausgegeben wird.


\usepackage{varioref}
\renewcommand{\reftextbefore}{auf der vorherigen Seite}
\renewcommand{\reftextafter}{auf der nächsten Seite}

\begin{document}


Aber eine Seitenzahl ausgeben, dazu müsste man das ganze Packet umschreiben, nicht doll, aber immerhin.


Salnic

MPS
24-05-2007, 11:25
Hmm,

@Gnihilo,
diesen Bsp. habe ich auch bei der varioref Paketbeschreibung gesehen. Allerdings ist ja das Problem, wenn man Text hinzufügt, dass LaTeX die Bilder evtl. auf eine andere Seite setzt und das dann nicht angepasst wird. Aber wird mir wohl nicht viel übrig bleiben außer das so zu machen.

@Salnic
Das habe ich auch in der varioref Beschreibung gelesen. Aber wie gesagt, da hätte ich ja gern die Seitennummer drin. Aber ich werds wohl mit dem Tipp von Gnihilo machen. Sind zum Glück nur 20 Seiten Bericht. Da isses net so wild.

Aber vielleicht hat ja noch jemand anderst ein Tipp für mich...

Trotzdem Danke,
Gruß
Mathias

Salnic
24-05-2007, 11:58
Hi Mathias,

mit der angehängten Modifikation sollte es funktionieren. Packe sie in Deinen Projektordner (umbenennen in *.sty) und fertig.

Ist zwar schade, weil sich Frank Mittelbach (der Autor des Packetes) sehr viel Mühe gemacht hat, rechte und linke Seiten berücksichtigt, aber wenn Du es nicht willst, bitte :-)

Salnic



\documentclass[12p,ngerman,a4paper]{report}
\usepackage{myvarioref}
%\renewcommand{\reftextbefore}{auf der vorherigen Seite}
%\renewcommand{\reftextafter}{auf der nähsten Seite}

\begin{document}
Siehe Tabelle \vref{tab:bsp}

Siehe \vpageref{tab:bsp}\newpage
\begin{table}\caption{Beispiel}\label{tab:bsp}\end {table}
Siehe Tabelle \vref{tab:bsp}

Siehe \vpageref{tab:bsp}\newpage
Siehe Tabelle \vref{tab:bsp}\\
Siehe \vpageref{tab:bsp}\newpage
Siehe Tabelle \vref{tab:bsp}\\
Siehe \vpageref{tab:bsp}\newpage
\end{document}

Gnihilo
24-05-2007, 12:41
Hab auch noch eine Idee,

der neue Befehl \refj im Beispiel sollte so funktionieren, wie Du es willst:



\documentclass{scrartcl}

\usepackage{ifthen}
\usepackage{ngerman}
\usepackage[T1]{fontenc}

\newcommand{\refj}[1]{\ref{#1} \ifthenelse{\pageref{#1}=\thepage}{auf dieser Seite}{auf Seite~\pageref{#1}}}

\begin{document}

\section{a1} \label{sec:a1}
In Kapitel \refj{sec:a1} steht\dots \newline
In Kapitel \refj{sec:b1} steht\dots \newline
In Kapitel \refj{sec:c1} steht\dots

\newpage
\section{b1} \label{sec:b1}

\newpage
\section{c1} \label{sec:c1}

\end{document}


Musst nur das Paket "ifthen" mit einbinden und sparst Dir damit eine modifizierte .sty-Datei.

Gruß J.

MPS
24-05-2007, 13:19
Hi,

@Gnihilo, den Befehl hab ich ausprobiert. Scheint aber nicht 100% zu funktionieren. Siehe Anhang. Das "auf dieser Seite" hab ich durch ein X ersetzt. Auf Seite 2 funktionierts. Allerdings auf Seite 3 ist dann "auf Seite 3" drin. Was ja eigtl. nicht passieren dürfte. Ich find den Fehler jetzt auch nicht. Eventuell kommts dadurch, dass ich im Inhaltsverzeichnis römisch durchnummeriert habe und den Rest arabisch... Hab mindestens 3x n LaTeX durchlauf gemacht...

@Salnic. Das PAckage hab ich auch ausprobiert. Irgendwie total komisch. Vielleicht mach ich nen Fehler, ich weiss es nicht. Auf jeden Fall, dein Beispiel funzt so wie es soll. Aber wenn ich das dann in mein Dokument einbau verhält es sich genau so wie wenn nichts geändert worden wäre. Und das krasse dabei ist, wenn ich den Text "auf der n\"achsten Seite" ändere, wird das im Dokument später auch geändert. Allerdings ist unten ja alles bezülich \reftextafter usw. auskommentiert. Komische Angelegenheit. Hast du irgendwelche Tipps? Ich kann dir das Dokument auch per Mail schicken. Hat allerdings einige MBs. Aber dass ich mein Dokument in mehrere Verzeichnisse und Dateien verteilt habe, dürfte doch das Paket nicht stören, oder? Bin echt ratlos.

Gnihilo
24-05-2007, 13:50
Hmm...

bin jetzt erst mal überfragt :confused:
Hab den Befehl probeweise in meine Studienarbeit eingebunden und da funktioniert er wunderbar...

Schick doch mal ein Minimalbeispiel, vielleicht findet sich da ein Fehler...!

J.

Salnic
24-05-2007, 14:03
DU musst mindestens zwei mal kompilieren, damit Latex seine Verweise aktualisiert, im Notfall auch mal die temp. Dateien löschen.

btw. Jonad, Dein Code gefällt mir recht gut. Habe nicht gewusst, dass man soeinfach an die aktuelle Seite rankommt, man so einfach rausbekommen kann, ob das zu referenzierende Label auf der selben Seite ist.

Mir fällt gerade ein, dass es Probleme geben kann, wenn es am Ende der Seite steht und die Gefahr besteht, dass der referenzierende Text (siehe Seite xxx) auf die nächste Seite rutsch.

statt \refj kannst Du auch \vref

\newcommand{\vref}[1]{\ref{#1} \ifthenelse{\pageref{#1}=\thepage}{auf dieser Seite}{auf Seite~\pageref{#1}}}

definieren, dann muss nichts weiter im Text geändert werden.

Salnic

Gnihilo
24-05-2007, 14:16
Hast recht... aber warum einfach, wenn's auch kompliziert geht :)

MPS
24-05-2007, 14:19
Ja, das refj hab ich schon in vref geändert. Am hab immer noch das gleiche Problem wie oben. Tempdateien hab ich auch schonmal gelöscht. Hat nix gebracht. Naja, wenn nicht machs ich doch per Hand. Sind nur 4 Verweise welche angepasst werden müsste bezüglich nächster Seite usw.

Gnihilo
24-05-2007, 14:43
Mir fällt gerade ein, dass es Probleme geben kann, wenn es am Ende der Seite steht und die Gefahr besteht, dass der referenzierende Text (siehe Seite xxx) auf die nächste Seite rutsch.


Ist tatsächlich ein Problem! Beim originalen \vref dagegen funktioniert es und beim Compilieren wird sogar noch eine Warnung ausgegeben. Vielleicht ist ein Package einem einzeiligen Befehl doch überlegen...? :rolleyes:

fsmaus
24-07-2007, 14:50
Hallo Salnic,

ich habe mir dein myvarioref.sty mal angeschaut - auch bei mir verhält es sich so, als ob ich das ursprüngliche varioref verwende. Es wäre aber tatsächlich ziemlich cool, wenn ich das Skript wie gewünscht anwenden könnte...

Habe mehrfach kompiliert, auch die Temp Dateien gelöscht. Aber das Skript springt immer noch in reftextfaceafter.

Könnt ihr, kannst du mir helfen?

Und dann noch eine Frage: Wenn ich das package nameref einbinde, dann erscheinen die Seitenzahlen, so wie es im varioref.sty eingegeben ist. Welchen Zusammenhang hat dieses package hier??

Salnic
26-07-2007, 12:37
Hi fsmaus,

da mein Minimalbeispiel offensichtlich funktioniert, solltest Du mir ein Minimalbeispiel basteln, in dem es nicht funktioniert. Dann gucke ich mir das gerne an und werde sehen, was man ändern kann.

Salnic