PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Paket url bricht nicht immer korrekt um



Dee
09-12-2008, 20:53
Hallo,

ich fall mal mit der Tür ins Haus:

Minimalbeispiel: http://www.deesaster.org/sonst/url-umbruch.tex
PDF-Dokument: http://www.deesaster.org/sonst/url-umbruch.pdf

Das Problem ist, dass die URLs nicht immer korrekt umgebrochen werden am Rand. Bei Link 2 verstehe ich es, da es kein Zeichen in der Kette gibt, welches als Umbruch definiert ist. Wieso trennt er die anderen aber nicht eher?

Kann man \url zwingen, dass es niemals über den Rand schreibt? Was wären ansonsten die Lösungen? Eigene Definition der \UrlBreaks? (Ist die aktuelle Lösung, aber bei 100 Links Dokument, wovon 30 falsch sind, doch recht aufwändig.)

Gruß Dee

Stefan_K
10-12-2008, 18:44
Hallo Dee,

\UrlBreaks zu redefinieren hat ja zunächst nicht viel direkt mit der Link-Anzahl zu tun. Man definiert nur weitere Stellen, an denen umgebrochen werden darf. Hier (http://matheplanet.com/default3.html?call=viewtopic.php?rd2&topic=109318&start=0&ref=http%3A%2F%2Ftexblog.net%2Flatex-archive%2Fplaintex%2Fexpandafter%2F#p797300) findest Du dafür ein umfassendes Beispiel (Beitrag 29 (http://matheplanet.com/default3.html?call=viewtopic.php?rd2&topic=109318&start=0&ref=http%3A%2F%2Ftexblog.net%2Flatex-archive%2Fplaintex%2Fexpandafter%2F#p797300)), zu dortigem \expandafter siehe vllt. Using \expandafter for macro redefinitions (http://texblog.net/latex-archive/plaintex/expandafter/) sowie dortige Links.

Viele Grüße,

Stefan

Dee
10-12-2008, 20:02
Hallo Stefan,

Danke für die Antwort.


\UrlBreaks zu redefinieren hat ja zunächst nicht viel direkt mit der Link-Anzahl zu tun.
Doch schon. Zum Beispiel habe ich für den zweiten Link im Minimalbeispiel erlaubt, dass er an jeder Zahl umbrechen darf. Danach gab es aber Links, die dann "falsch" bzw. optisch schlecht umgebrochen wurden, sodass ich die Redefinition rückgängig machen musste (wobei ich nicht mal weiß, ob ich alle Umbrüche getroffen habe).

Das ist im übrigen auch die aktuelle Lösung. Also ein:



\newcommand{\breakurlX}{\renewcommand*\UrlBreaks{\ do\;\do=\do.\do\,\do\-\do\_\do\:\do\/\do\/\do\?\do\+\do\&\do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9 }}

\newcommand{\breakurl}{\renewcommand*\UrlBreaks{\d o\;\do=\do.\do\,\do\-\do\_\do\:\do\/\do\/\do\?\do\+\do\&}}

\item normaler Link \breakurlX
\item zu langer Link \breakurl
\item Normaler Link



Man definiert nur weitere Stellen, an denen umgebrochen werden darf. Hm, eigentlich definiert man doch einen Ersatz und nicht zusätzliche Stellen, oder? Also
\renewcommand*\UrlBreaks{\do\A} bricht NUR nach A um und nicht mehr nach / oder -.

Mein obiger Code ist aber nicht optimal, da könnte expandafter vielleicht etwas helfen, um es kürzer zu halten. Mal schauen, ob ich den alten Zustand damit auch herstellen kann.

Eine andere Möglichkeit gibt es nicht außer UrlBreaks umzudefinieren?

Drei Ideen, die ich gut fände:
1. Man sagt eben, dass \url nicht über den Rand schreiben darf und umbricht, egal wo. (Aber eben nur als Notfalllösung, wenn die normale Trennung nicht will.)
2. Man kann in der \url selbst einen manuellen Umbruch angeben, also sowas wie
\url{http://www.diesisteinlanger\\Link} und bei \\ wird umgebrochen.
3. Man kann \UrlBreaks leicht ergänzen. (Aktuell überschreibe ich es ja und muss eben die bereits funktionierenden Umbrüche auch mit definieren. Ggf. klappt das aber mit expandafter.)

Edit: Aktuelle Lösung sieht nun so aus. Ist aber eben noch sehr manuell, wovon ich gerne weg würde und vor allem immer noch nicht richtig:



\newcommand{\expandurl}[1]{\expandafter\def\expandafter\UrlBreaks\expandafte r{\UrlBreaks#1}}

\begin{small}
\begin{enumerate}
\item \url{http://www.linuxdevices.com/news/articles/NS6684279122.html}
\expandurl{\do\9}
\item \url{http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cf7ee554f3a324e98181b0ea249d9d5 be3a0acb8}
\expandurl{\do\h}
\item \url{http://itmanagement.earthweb.com/features/article.php/3785236/Netbook+Smackdown:+Compare+the+Six+Top+Netbooks.ht m}
\expandurl{\do\s}
\item \url{http://www.gin-online.de/archive/downloads/nachwuchspreis_2007/Diplomarbeit_Neis.pdf}
\end{enumerate}
\end{small}


Das führt beim dritten Link leider dazu, dass das so umgebrochen wird:


3. http://itmanagement.earth
web.com/features/article.ph
p/3785236/Netbook+Smackdown:
+Compare+the+Six+Top+Netbooks.
htm


Der Umbruch nach "ph" in "php" ist natürlich blöd, besser wäre der Umbruch nach dem Punkt in "article.". Manuelles Definieren ist also noch nicht das Wahre (außer man testet, denn mit \do\b) klappt es besser).

Viele Grüße Dee

PS: Nur als Hinweis: Die Matroids-Links gehen ohne Cookies leider nicht.

Dee
13-12-2008, 07:33
Hat noch jemand Ideen?

Gruß Dee