PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit hyperref und griechischen Buchstaben



shortener
03-06-2009, 21:23
Hallo zusammen!

Ich habe ein Problem mit dem hyperref paket in Kombination mit der jura Dokumentklasse. Meine Textstruktur sieht ungefähr so aus:

http://img41.imageshack.us/img41/5699/gliederung.gif

Wenn ich nun hyperref benutze erhalte ich ein paar Fehlermeldungen. Wie es scheint, hat hyperref mit den griechischen Buchstaben, welche von alphanum erzeugt werden Probleme.

Zur Veranschaulichung hier ein kleines Beispiel:



\documentclass[widefront]{jura}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

\usepackage{jurabib}
\usepackage[unicode]{hyperref}

\begin{document}

\frontmatter
\tableofcontents

\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\sub{Ebene 3}
\sub{Ebene 4}
\sub{Ebene 5}
\sub{Ebene 6}
\sub{Ebene 7}
\sub{Ebene 8}
\sub{Ebene 9}
\sub{Ebene 10}
\end{document}


Error log (Ausschnitt)



(minimalbeispiel.out
! Missing \endcsname inserted.
<to be read again>
\alpha
l.7 ...0e\000n\000e\000\040\0007}{lvlf.$\alpha $)}

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Missing \endcsname inserted.
<to be read again>
\alpha
l.7 ...0e\000n\000e\000\040\0007}{lvlf.$\alpha $)}

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Missing number, treated as zero.
<to be read again>
\B_lvlf.$
l.7 ...0e\000n\000e\000\040\0007}{lvlf.$\alpha $)}

A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)

! Missing $ inserted.
<inserted text>
$
l.7 ...0e\000n\000e\000\040\0007}{lvlf.$\alpha $)}

I've inserted a begin-math/end-math symbol since I think
you left one out. Proceed, with fingers crossed.

LaTeX Font Info: Try loading font information for \\OT1+cmr on input line 7.

LaTeX Font Info: No file \\OT1cmr.fd. on input line 7.

LaTeX Font Warning: Font shape `\\\OT1/cmr/m/n' @undefined
(Font) using `\\OT1/cmr/m/n' instead on input line 7.

LaTeX Font Info: Try loading font information for \\\OT1+cmr on input line 7
.


minimalbeispiel.out



\BOOKMARK [0][-]{lvla.A.}{\376\377\000E\000b\000e\000n\000e\000\04 0\0001}{}
\BOOKMARK [1][-]{lvlb.I.}{\376\377\000E\000b\000e\000n\000e\000\04 0\0002}{lvla.A.}
\BOOKMARK [2][-]{lvlc.1.}{\376\377\000E\000b\000e\000n\000e\000\04 0\0003}{lvlb.I.}
\BOOKMARK [3][-]{lvld.a)}{\376\377\000E\000b\000e\000n\000e\000\04 0\0004}{lvlc.1.}
\BOOKMARK [4][-]{lvle.aa)}{\376\377\000E\000b\000e\000n\000e\000\0 40\0005}{lvld.a)}
\BOOKMARK [5][-]{lvlf.$\alpha $)}{\376\377\000E\000b\000e\000n\000e\000\040\0006 }{lvle.aa)}
\BOOKMARK [6][-]{lvlg.$\alpha $$\alpha $)}{\376\377\000E\000b\000e\000n\000e\000\040\0007 }{lvlf.$\alpha $)}
\BOOKMARK [7][-]{lvlh.(1)}{\376\377\000E\000b\000e\000n\000e\000\0 40\0008}{lvlg.$\alpha $$\alpha $)}
\BOOKMARK [8][-]{lvli.(a)}{\376\377\000E\000b\000e\000n\000e\000\0 40\0009}{lvlh.(1)}
\BOOKMARK [9][-]{lvlj.(aa)}{\376\377\000E\000b\000e\000n\000e\000\ 040\0001\0000}{lvli.(a)}


Ich bin für jede Hilfe dankbar! :)

u_fischer
04-06-2009, 19:04
Du kannst mit
\usepackage[unicode,bookmarksdepth=4]{hyperref} die Tiefe der bookmarks zu begrenzen.

Für eine "richtige" Lösung muss man wahrscheinlich ziemlich tief in alphanum herumwühlen.

Ulrike Fischer

shortener
04-06-2009, 20:34
Hallo Ulrike Fischer,
vielen Dank für deine Antwort.

Das heisst also quasi, dass es keine Lösung gibt wenn ich alle Ebenen benötige.

Dann bleibt mir wohl nur noch die Möglichkeit eine Alternative für hyperref zu finden?

u_fischer
04-06-2009, 20:40
Wozu brauchst du alle Ebenen in den bookmarks? Das Dokument selbst ist ja nicht betroffen.

Ulrike Fischer

shortener
04-06-2009, 20:59
Hallo Ulrike Fischer,

bei langen und stark unterteilten Texten benötige ich alle Ebenen und da stosse ich auch mit deiner Lösung auf Probleme. Allerdings erhalte ich diesmal keine Fehlermeldungen, sondern Buchstaben im Inhaltsverzeichnis "verschwinden".

http://img413.imageshack.us/img413/3192/gliederung1.gif

u_fischer
05-06-2009, 09:41
Die bookmarks sind doch bloß das aufklappbare Inhaltsverzeichnis im pdf-Reader. Die brauchst du doch wirklich nicht alle. Was die verschwinden Nummer ab Ebene 8 angeht: Das ist irgendein interessanter Bug in alphanum.

Wenn du wie im folgenden Code mal \J@Number umdefinierst, kannst du im toc sehen, dass sich alphanum dort um eine Tiefe verheddert. Wenn du in J@LongToc in der markierten Zeile statt -1em 1em benutzt, verschwindet das Problem.


\makeatletter
\renewcommand*{\J@Number}{Tiefe:\the\value{tiefe}\ J@NumberRoot{\value{tiefe}}
\J@NumberEnd{\value{tiefe}}}

\renewcommand*{\J@LongToc}[2][]{%
\@startsection{lvl\alph{tiefe}}{\value{tiefe}}{0pt }
{\ifnum\value{tiefe}=1 -4ex plus-1,5ex minus-0,ex\else
-2,7ex plus-0,8ex minus-0,2ex\fi}
{\ifnum\value{tiefe}>7 -1em plus-0,5em\relax\else %<--da
0,6ex plus0,3ex minus0,1ex\fi}
{\sectfont\csname lvl\alph{tiefe}style\endcsname}[#1]{#2}}



Ulrike Fischer

shortener
05-06-2009, 11:04
Hallo Ulrike Fischer,

ich kann deinen Codeausschnitt leider nirgends finden. Kannst du mir bitte sagen, wo du ihn gefunden hast?

u_fischer
05-06-2009, 12:25
Die Befehle sind in alphanum.sty definiert. Dort kannst du die \newcommand... rauskopieren, in die Präambel deines Dokuments (nach einem \makeatletter) einfügen, \newcommand in \renewcommand ändern und damit rumspielen.

Ulrike Fischer

shortener
05-06-2009, 14:51
Hallo Ulrike Fischer,



Wenn du wie im folgenden Code mal \J@Number umdefinierst, kannst du im toc sehen, dass sich alphanum dort um eine Tiefe verheddert. Wenn du in J@LongToc in der markierten Zeile statt -1em 1em benutzt, verschwindet das Problem.


ja, das mit dem Problem der Tiefe sehe ich. Allerdings bringt mir das Anpassen von -1em zu 1em nichts. Das Problem der verschwindenden Zeichen besteht weiterhin.



\documentclass[widefront]{jura}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

\usepackage{jurabib}


\makeatletter
\renewcommand*{\J@LongToc}[2][]{%
\@startsection{lvl\alph{tiefe}}{\value{tiefe}}{0pt }
{\ifnum\value{tiefe}=1 -4ex plus-1,5ex minus-0,ex\else
-2,7ex plus-0,8ex minus-0,2ex\fi}
{\ifnum\value{tiefe}>7 1em plus-0,5em\relax\else
0,6ex plus0,3ex minus0,1ex\fi}
{\sectfont\csname lvl\alph{tiefe}style\endcsname}[#1]{#2}}

\usepackage[unicode,bookmarksdepth=4]{hyperref}
\begin{document}

\frontmatter
\tableofcontents

\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\sub{Ebene 3}
\sub{Ebene 4}
\sub{Ebene 5}
\sub{Ebene 6}
\sub{Ebene 7}
\sub{Ebene 8}
\sub{Ebene 9}
\sub{Ebene 10}
\end{document}

u_fischer
05-06-2009, 15:32
Ich habe alphanum schon nie leiden können. Nun ja: Jurabib ist schuld, es macht die Neudefinition wieder rückgängig. Versuch:


\usepackage{jurabib}
\AtBeginDocument{\renewcommand ....}


Anmerkung: Die Änderung ändert natürlich den Stil (die Einrückung) der entsprechenden Überschrift. Aber ich sehe derzeit keine Möglichkeit das zu vermeiden. Dazu müsste man erstmal rausfinden, welche \if-Befehl sich da verläuft.


Ulrike Fischer

rais
07-06-2009, 23:26
Moin Ulrike,


Wenn du wie im folgenden Code mal \J@Number umdefinierst, kannst du im toc sehen, dass sich alphanum dort um eine Tiefe verheddert.
da wär' ich mir nicht so sicher:


\documentclass[widefront]{jura}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\makeatletter
\let\org@startsection\@startsection
\renewcommand*\@startsection[6]{%<--nur zur Demo
\typeout{++#1}%
\org@startsection{#1}{#2}{#3}{#4}{#5}{#6}%
}
\makeatother
\begin{document}

\frontmatter
\tableofcontents

\mainmatter
\toc{Ebene 1}
\sub{Ebene 2}
\sub{Ebene 3}
\sub{Ebene 4}
\sub{Ebene 5}
\sub{Ebene 6}
\sub{Ebene 7}
\sub{Ebene 8}
\sub{Ebene 9}
\sub{Ebene 10}
\end{document}

zeigt


++lvla
++lvlb
++lvlc
++lvld
++lvle
++lvlf
++lvlg
++lvlh
++lvli
++lvlj
in der .log bzw. Konsolenausgabe -- und dieser `lvl' wird just von diesem `tiefe'-Zähler beeinflusst ...

MfG

u_fischer
08-06-2009, 08:51
Nun, alphanum verheddert sich ja auch nicht überall. Wenn du



\renewcommand*{\J@Number}{Tiefe:\the\value{tiefe}\ J@NumberRoot{\value{tiefe}}\J@NumberEnd{\value{tie fe}}}


zu deinem Beispiel hinzufügst, kannst du im Inhaltsverzeichnis
die Folge Tiefe 7, Tiefe 9, Tiefe 10, Tiefe 10 sehen. Während auf der nächsten Seite richtig Tiefe 7, Tiefe 8, Tiefe 9, Tiefe 10 steht.

Ulrike Fischer

rais
11-06-2009, 13:16
Hallo Ulrike,

Nun, alphanum verheddert sich ja auch nicht überall. Wenn du



\renewcommand*{\J@Number}{Tiefe:\the\value{tiefe}\ J@NumberRoot{\value{tiefe}}\J@NumberEnd{\value{tie fe}}}


zu deinem Beispiel hinzufügst, kannst du im Inhaltsverzeichnis
die Folge Tiefe 7, Tiefe 9, Tiefe 10, Tiefe 10 sehen. Während auf der nächsten Seite richtig Tiefe 7, Tiefe 8, Tiefe 9, Tiefe 10 steht.

so ganz seh ich noch nicht, wie sich alphanum hier überhaupt verheddern kann, zumal Dein Ansatz mit der positiven Länge in der \J@LongToc-Definition funktioniert: eben dieser Wert wird hier nur an \@startsection weitergereicht, deutet das nicht eher auf ein Verheddern (südlich von) \@startsection hin?
Da hab ich dann mal weiter geschaut:


\documentclass{article}

\usepackage{alphanum}

\makeatletter
\renewcommand*{\J@Number}{Tiefe:\the\value{tiefe}\ J@NumberRoot{\value{tiefe}}\J@NumberEnd{\value{tie fe}}}

\let\org@startsection\@startsection
\renewcommand*\@startsection[6]{%<--nur zur Demo
\typeout{++@startsection: #1}%
\org@startsection{#1}{#2}{#3}{#4}{#5}{#6}%
}

\def\@sect#1#2#3#4#5#6[#7]#8{%
\typeout{++@sect: #1}%<--
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
\else
\typeout{++def @svsechd: #1}%<--
\def\@svsechd{%
\typeout{++call @svsechd: #1}%<--
#6{\hskip #3\relax
\@svsec #8}%
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}}%
\fi
\@xsect{#5}}

\makeatother
\begin{document}
\tableofcontents
\toc{Ebene 1}
\sub{Ebene 2}
\sub{Ebene 3}
\sub{Ebene 4}
\sub{Ebene 5}
\sub{Ebene 6}
\sub{Ebene 7}
\sub{Ebene 8}
\sub{Ebene 9}
\sub{Ebene 10}
\end{document}

mit dem interessanten Teil


++@startsection: lvlh
++@sect: lvlh
++def @svsechd: lvlh
++@startsection: lvli
++call @svsechd: lvli

auf der Konsole, d. h. bis zur Definition von \@svsechd (bei tiefe>7) scheint noch alles zu stimmen, nur aufgerufen wird \@svsechd zu spät oder wird andernorts verändert, aber ``svsechd'' findet sich nicht in alphanum.sty -- zumindest nicht in der mir vorliegenden Kopie.;-)

MfG

u_fischer
15-06-2009, 09:36
Ja, \@startsection ist irgendwie beteiligt. Da kommen irgendwelche \ifnum-Schachtelungen durcheinander. Die Frage ist nur, ob es ein \@startsection-Bug ist, oder ob alphanum den Befehl falsch verwendet. Ich habe aber keine große Lust dem nachzugehen. if-Fehlern nachzuspüren ist mühsam.

Ulrike Fischer