PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Trennung von Typewriter Fonts



Tim77
23-07-2012, 18:08
Hallo,

normalerweise werden \texttt{...} Einträge ja nicht getrennt. Mir ist bekannt, dass man das durch \usepackage[htt]{hyphenat} forcieren kann.

Nun habe ich aber die Problematik, dass ich sehr lange tt-Begriffe habe, die durch einen "." getrennt sind, z.B.:

- \texttt{org.domain.application.security.WatchDog}

Die werden weiterhin nicht getrennt.

In meinem Fall ist es keine Lösung, manuell Trennpunkte zu setzen. Der LaTeX-Code wird automatisch von einem Java-Programm generiert und es sind hunderte solcher Zeichenketten.

ich bin nun auf der Suche nach einer Lösung, die innerhalb solcher tt-Umgebungen:
- einen "." als Trennmöglichkeit erkennt.
- bei den Begriffen zwischen den Punkten auch trennt, wenn sinnvoll (z.B. se-cu-ri-ty).

Hat jemand da eine Idee? Bin für jeden Tipp dankbar! Wie man im Beispiel sieht, wird außerdem selbst im ersten Absatz ("Establishment") nicht wirklich hübsch getrennt bzw. ausgerichtet. Kann man das verbessern?

\documentclass [
parskip=half,
fontsize=10pt
]{scrartcl}

\usepackage{mathpazo}
\usepackage{lipsum}
\usepackage{showframe}
\usepackage[htt]{hyphenat}

\hyphenation{Watch-Dog}

\begin{document}

\section*{Hyphenation with regular words}
\texttt{Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment }

\section*{Hyphenation with full qualified class names}
This is an example for full qualified class names as, for instance, \texttt{org.domain.application.security.WatchDog} implementations. It includes a \texttt{org.domain.application.security.WatchDog}, a \texttt{org.domain.application.security.WatchDog} and a \texttt{org.domain.application.security.WatchDog}.

\section*{Regular text looks just fine...}
\lipsum[1]

\end{document}

Stefan_K
24-07-2012, 09:29
Für den Punkt kannst Du \dothyp verwenden, dann kann getrennt werden. Das Java-Programm sollte dann \dothyp statt Punkte generieren.

Da bei typewriter kein Randausgleich stattfindet, kann man noch unschöne Umbrüche haben. Randausgleich kannst Du dennoch erreichen, hier ist eine Möglichkeit beschrieben: Full justification with typewriter font (http://texblog.net/latex-archive/plaintex/full-justification-with-typewriter-font/).

Stefan

hakaze
24-07-2012, 09:38
Ich fange mal von hinten an:

Im ersten Absatz wird auch mit hyphenat nicht "schön" getrennt, weil der Wortabstand bei ttfamily immer konstant gehalten wird, wir bei den "normalen" Fonts dehnbare Weissräume zwischen den Worten eingefügt werden.

Um die Klassennamen zum Beispiel an jedem Punkt zu trennen, reicht es sie als nolinkurl zu maskieren (Paket hyperref). Das hat im Vergleich zum Standard-URL-Befehl den Vorteil, dass sie nicht verlinkt werden.
Wenn du auch innerhalb der Worte Umbrüche erlauben willst, kannst du UrlBreaks umdefinieren, dass es Umbrüche nach jedem Buchstaben erlaubt (siehe Kommentar im Code-Beispiel).

Eine "richtige"Trennung mit Trennstrich wie im Fließtext ist sicherlich nicht sinnvoll, weil der Leser dann nicht sofort erkennt, ob das "-"-Zeichen jetzt zum Namen dazugehört oder nicht.

\documentclass [parskip=half,fontsize=10pt]{scrartcl}

\usepackage{mathpazo}
\usepackage{lipsum}
\usepackage{showframe}
% Hyphenation with regular words in ttfamily
% \usepackage[htt]{hyphenat}

% Hyphenation with full qualified class names, masked as urls
\usepackage{hyperref}
% Umbruch nach jedem Buchstaben erlauben
%\renewcommand{\UrlBreaks}{\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X \do\Y\do\Z}

\hyphenation{Watch-Dog}

\begin{document}

\section*{Hyphenation with regular words}
\texttt{Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment }

\section*{Hyphenation with full qualified class names}
This is an example for full qualified class names as, for instance, \nolinkurl{org.domain.application.security.WatchDo g} implementations. It includes a \nolinkurl{org.domain.application.security.WatchDo g}, a \nolinkurl{org.domain.application.security.WatchDo g} and a \nolinkurl{org.domain.application.security.WatchDo g}.

\section*{Regular text looks just fine...}
\lipsum[1]

\end{document}

ctansearch
27-07-2012, 00:32
Dies ist zwar keine richtige Lösung, aber ein Hinweis darauf, wie man den Raum besser nutzen kann. Solche massenhaften Informationen benötigen doch eigentlich ein Tabelle, wodurch von vorneherein schon Trennungen vermieden werden, die nur vom Fließtext herrühren und nicht vom URL-Text.

So wird der zur Verfügung stehende Raum, die Spaltenbreite, kalkulierbar. Da die Textzeilen als \nolinkurl gekennzeichnet sind, werden sie auch nicht als aktive Links benutzt. Man hat also im Beispiel 70 Zeichen in einer Zeile zur Verfügung. Dazu kommt, daß longtable die URLs ohne Rücksicht auf die Punkte umbricht, das Problem also verschwindet.

Falls man nun trotzdem Trennungen vermeiden will, weil man die Links in einer Zeile darstellen will (was nicht der Ausgangspunkt war, sich aber bei Tabellen anbietet), kann man das erzeugende Programm (Java etc) anweisen, sich wiederholende Zeichenketten durch Auslassungen zu verkürzen, z.B. durch Weglassen der Vokale.


org.domain.application.security.WatchDog

rg.dmn.pplctn.scrty.WtchDg

Bei geschickter Ausführung bleiben diese Auslassungen auch verständlich, weil sie ein Muster bilden.


\documentclass [parskip=half,fontsize=10pt]{scrartcl}

\usepackage{mathpazo}
\usepackage{lipsum}
\usepackage{showframe,longtable}
% Hyphenation with regular words in ttfamily
% \usepackage[htt]{hyphenat}

% Hyphenation with full qualified class names, masked as urls
\usepackage{hyperref}

\hyphenation{Watch-Dog}
\begin{document}
\section*{Hyphenation with regular words}
\texttt{Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment Establishment }
\section*{Hyphenation with full qualified class names}
\begin{longtable}{p{\columnwidth}}\caption{}\\
\nolinkurl{org.domain.application.security.WatchDo g.meine.deine.ihre.seine.eurebesonderenworte.ihre. eure.solche.org}\\
\nolinkurl{rg.dmn.pplctn.scrty.WtchDg.mne.dne.hr.s n.rbsndrnwrt.hr.r.slch.rg}\\ \nolinkurl{org.domain.application.security.WatchDo g}\\ \nolinkurl{org.domain.application.security.WatchDo g}\\.
\end{longtable}
\section*{Regular text looks just fine...}
\lipsum[1]
\end{document}

PS: Besonders lange Bestandteile werden dann einfach in eine neue Zeile verschoben, siehe "eurebesonderenworte"