FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung

LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-05-20 12:33
Nicht eingeloggt
MoinMoin!

Ich verwende \hyperlink um auf mit \hypertarget definierte Begriffe zu verweisen. Dazu verwende ich folgende Hilfen:

\newenvironment*{begriff}[1]{\item[\hypertarget{#1}{#1}] }{} \newcommand*{\siehe}[1]{\hyperlink{#1}{$\rightarrow$#1}}
Leider gibt es Probleme, wenn der Begriff Sonderzeichen (Umlaute, Leerzeichen, …) enthält, denn dann wird die Referenz nicht gefunden. Ich dachte, ich könnte das Problem lösen, indem ich als Label nicht den Begriff selbst, sondern eine Prüfsumme (z.B. MD5) verwende. Leider ist es schwierig nach einem entsprechenden Makro im Internet zu suchen, da \checksum für etwas anderes da ist und MD5 als Prüfsumme für LaTeX-Pakete verwendet wird.

Weiß jemand mehr? Gibt's vielleicht einen anderen Weg das Problem zu lösen?

Vielen Dank für die Hilfe!

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-05-20 22:27
Muelli
Hast du ein Minimalbeispiel?

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-27 18:44
Anonymer User
Hmpf. Ja, danke. Beim Erstellen des Minimalbeispiels habe ich bemerkt, dass das Problem nur auftritt, wenn ich "inputenc" verwende:

\documentclass[ngerman]{scrreprt} \usepackage[latin1]{inputenc} \usepackage{hyperref} \newenvironment*{begriff}[2]{\item[\hypertarget{#1:#2}{#2}] }{} \newcommand*{\siehe}[2]{\hyperlink{#1:#2}{$\rightarrow$#2}} \begin{document} \begin{itemize} \begin{begriff}{namespace1}{Flöte} Eine Flöte ist ein Musikinstrument. \end{begriff} \begin{begriff}{namespace1}{Altflöte} Siehe auch \siehe{namespace1}{Flöte} \end{begriff} \end{itemize} \end{document}
Ohne Angabe des Zeichensatzes mit inputenc funktioniert es jedoch korrekt und die Umlaute werden trotzdem richtig angezeigt. Ist "inputenc" heutzutage gar nicht mehr notwendig?

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-27 21:58
Wulf
\usepackage[utf8]{inputenc}latin1 ist bäh.

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-29 11:33
Anonymer User
latin1 ist bäh.
Ja gut, das führt aber nicht zur Lösung des Problems: wenn ich die Datei in UTF-8 speichere und dies mit inputenc angebe, dann erhalte ich die gleichen Fehlermeldungen. Wenn ich inputenc nicht lade, nimmt LaTeX latin1 an und ich erhalte zwar keine Fehlerausgabe, aber auch keine korrekte Ausgabe. Wenn ich die Datei in latin1 speichere und inputenc weglasse, dann funktioniert ja wenigstens alles! Das eigentliche Problem ist damit meiner Meinung jedoch nicht gelöst.

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-29 15:18
Muelli
Bei mir geht dein Beispiel ohne Probleme.


muelli@bigbox /tmp $ cat text.tex
\documentclass[ngerman]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage{hyperref}

\newenvironment*{begriff}[2]{\item[\hypertarget{#1:#2}{#2}] }{}
\newcommand*{\siehe}[2]{\hyperlink{#1:#2}{$\rightarrow$#2}}

\begin{document}
\begin{itemize}

\begin{begriff}{namespace1}{Flöte}
Eine Flöte ist ein Musikinstrument.
\end{begriff}

\begin{begriff}{namespace1}{Altflöte}
Siehe auch \siehe{namespace1}{Flöte}
\end{begriff}

\end{itemize}
\end{document}
muelli@bigbox /tmp $

Und es ist utf-8:
muelli@bigbox /tmp $ xxd text.tex | grep -C1 Fl.te
muelli@bigbox /tmp $ xxd text.tex | grep -C1 Fl..te
0000100: 6966 667d 7b6e 616d 6573 7061 6365 317d iff}{namespace1}
0000110: 7b46 6cc3 b674 657d 0a45 696e 6520 466c {Fl..te}.Eine Fl
0000120: c3b6 7465 2069 7374 2065 696e 204d 7573 ..te ist ein Mus

0000180: 7369 6568 657b 6e61 6d65 7370 6163 6531 siehe{namespace1
0000190: 7d7b 466c c3b6 7465 7d0a 5c65 6e64 7b62 }{Fl..te}.\end{b
00001a0: 6567 7269 6666 7d0a 0a5c 656e 647b 6974 egriff}..\end{it
muelli@bigbox /tmp $
Anhänge text.pdf

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-29 15:45
Muelli
Ah, wobei du dich bestimmt hier

muelli@bigbox /tmp $ pdflatex text.tex
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011)
restricted \write18 enabled.
entering extended mode
(./text.tex
LaTeX2e <2009/09/24>
Babel <v3.8l> and hyphenation patterns for english, dumylang, nohyphenation, lo
aded.
(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrreprt.cls
Document Class: scrreprt 2011/04/02 v3.09 KOMA-Script document class (report)
(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrkbase.sty
(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrbase.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrlfile.sty
Package scrlfile, 2011/03/09 v3.09 KOMA-Script package (loading files)
Copyright (C) Markus Kohm

))) (/usr/share/texlive/texmf-dist/tex/latex/koma-script/tocbasic.sty)
(/usr/share/texlive/texmf-dist/tex/latex/koma-script/scrsize11pt.clo)
(/usr/share/texlive/texmf-dist/tex/latex/koma-script/typearea.sty
Package typearea, 2011/04/02 v3.09 KOMA-Script package (type area)
Copyright (C) Frank Neukam, 1992-1994
Copyright (C) Markus Kohm, 1994-

)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def
(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu)
(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu)
(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu)))
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty))
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty)
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg)
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty))

Package hyperref Message: Driver (autodetected): hpdftex.

(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))
(./text.aux) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty))
(./text.out) (./text.out) [1{/usr/share/texlive/texmf-var/fonts/map/pdftex/updm
ap/pdftex.map}] (./text.aux) )pdfTeX warning (dest): name{namespace1:Fl\\unhbox
\040\\voidb@x\040\\bgroup\040\\let\040\\unhbox\040\\voidb@x\040\\setbox\040\\@t
empboxa\040\\hbox\040{o\\global\040\\mathchardef\040\\accent@spacefactor\040\\s
pacefactor\040}\\accent\040127\040o\\egroup\040\\spacefactor\040\\accent@spacef
actor\040te} has been referenced but does not exist, replaced by a fixed one

</home/muelli/.texlive2011/texmf-var/fonts/pk/ljfour/public/cm/cmsy10.657pk> <
/home/muelli/.texlive2011/texmf-var/fonts/pk/ljfour/public/cm/cmr10.657pk>
Output written on text.pdf (1 page, 8362 bytes).
Transcript written on text.log.
muelli@bigbox /tmp $

Der Hyperlink geht nicht. Ja, spannend. Ist wohl ein Bug. Congratulations :-) Schreibst du den Autor von hyperref Paket an?

Das Problem ist wohl, dass wenn du das fontenc nicht angibst (\include[T1]{fontenc}) dann baut LaTeX dir die Buchstaben mit dem Trema zusammen (anstatt ein festes Zeichen aus dem Pool zu nehmen).

Mit dem Fontenc meckert mein Evince nach einem Klick auf den Link rum: failed to look up namespace1:Fl�te

Vll. geht es mit nem Acroread?

Interessantes Raetsel auf jeden Fall. Ich wuerde ja jetzt gerne von dem PDF wissen, welche Hypertargets es meint zu haben. Aber es scheint gerade nicht so einfach zu sein, an Hyperlinkinformationen von PDFs zu kommen. Wenn jmd also Tagesfreizeit hat, kann er ja mal ein Tool schreiben, was das macht.


Ich hab jedenfalls eine Loesung:
\usepackage{stringenc}

\newenvironment*{begriff}[2]{%
\StringEncodingConvert{\Result}{#1:#2}{utf8}{pdfdoc}%
\item[\hypertarget{\Result}{#2}] }{}

\newcommand*{\siehe}[2]{%
\StringEncodingConvert{\Result}{#1:#2}{utf8}{pdfdoc}%
\hyperlink{\Result}{$\rightarrow$#2}}


HTH
Anhänge text.pdf

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-30 15:17
Anonymer User
Ah, wobei du dich bestimmt hier
[…]
pdfTeX warning (dest): name{namespace1:Fl\\unhbox
\040\\voidb@x\040\\bgroup\040\\let\040\\unhbox\040\\voidb@x\040\\setbox\040\\@t
empboxa\040\\hbox\040{o\\global\040\\mathchardef\040\\accent@spacefactor\040\\s
pacefactor\040}\\accent\040127\040o\\egroup\040\\spacefactor\040\\accent@spacef
actor\040te} has been referenced but does not exist, replaced by a fixed one
Genau das meinte ich. (Warum habe ich die Fehlermeldung eigentlich nicht im ersten Post zitiert?)

Der Hyperlink geht nicht. Ja, spannend. Ist wohl ein Bug. Congratulations :-) Schreibst du den Autor von hyperref Paket an?
Entweder ein Bug oder die Spezifikation erlaubt nur bestimmte Zeichen. Allerdings könnte man das natürlich in die hyperref-Doku reinschreiben. Hast recht, das Anschreiben der Autoren könnte sinnvoll sein. Werde ich gleich mal machen.

Mit dem Fontenc meckert mein Evince nach einem Klick auf den Link rum: failed to look up namespace1:Fl�te

Vll. geht es mit nem Acroread?
Dein PDF geht bei mir im Acroread. Wenn ich allerdings das T1-Fontenc angebe, gibt mir pdflatex trotzdem o.g. Fehler aus.

Ich hab jedenfalls eine Loesung:
\usepackage{stringenc}
Super, danke! Das ist ja noch besser als meine Idee mit der Prüfsumme. So werde ich das vorerst benutzen. Vielen Dank!

RE: LaTeX: Sonderzeichen bei \hypertarget und \hyperlink   /  Prüfsummenberechnung 2011-06-30 21:50
Muelli
Der Hyperlink geht nicht. Ja, spannend. Ist wohl ein Bug. Congratulations :-) Schreibst du den Autor von hyperref Paket an?
Entweder ein Bug oder die Spezifikation erlaubt nur bestimmte Zeichen. Allerdings könnte man das natürlich in die hyperref-Doku reinschreiben. Hast recht, das Anschreiben der Autoren könnte sinnvoll sein. Werde ich gleich mal machen.

Ich hab sehr sehr gute Erfahrungen mit dem Anschreiben von Paketautoren gemacht. Eigtl war immer innerhalb weniger Tage ein Fix bereit. Also ja, dranbleiben und den oder die Autoren anschreiben. Am besten mit deinem Minimalbespiel und einer Fehlermeldung.