Automatische Silbentrennung innerhalb von \texttt bei Verwendung der T1-Kodierung und lmodern

Automatische Silbentrennung innerhalb von \texttt bei Verwendung der T1-Kodierung und lmodern

Ich suchte nach einer Möglichkeit, die Silbentrennung innerhalb zu aktivieren \texttt. Ich fanddiese Antwortund es schien perfekt: einfach und für viele Leute nützlich.

Ich habe mich dafür entschieden, die Silbentrennung global zu aktivieren \textttund wie dort vorgeschlagen die folgende Zeile hinzugefügt:

\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}

Leider funktionierte dies nicht und hatte einen unerwünschten Nebeneffekt: Die Schreibmaschinenschriftart wurde darin nicht mehr verwendet \textttund der folgende Fehler erschien in der Konsolenausgabe:

LaTeX Font Warning: Some font shapes were not available, defaults substituted.

Dieser Fehler hat mich auf die richtige Spur gebracht: Ich verwende in meinen LaTeX-Dokumenten immer die T1-Kodierung und moderne Schriftarten:

\usepackage[T1]{fontenc}
\usepackage{lmodern}

und sobald ich diese Zeilen auskommentiert habe, hat alles einwandfrei funktioniert.

Gibt es eine Möglichkeit, die ursprüngliche Antwort auch auf diesen Fall anzupassen? Ich hätte diesem Beitrag einen Kommentar hinzugefügt, aber leider habe ich noch nicht genügend Reputation, um das zu tun.

Vielen Dank.

Antwort1

Das Problem kann auch auf andere Weise gelöst werden. Dazu muss die Schriftdefinitionsdatei manuell geladen und das Bindestrichzeichen geändert werden, bevor eine beliebige Schriftart dieser Familie verwendet wird:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\makeatletter
\input{t1lmtt.fd}
\@namedef{T1+lmtt}{}
\makeatother

\begin{document}
\parbox{0pt}{\ttfamily
  \hspace{0pt}hyphenation in typewriter type 
}
\end{document}

Bildbeschreibung hier eingeben

Eine der Aufgaben von ist es , die Erweiterung auf \DeclareFontFamily{enc}{fam}{code}zu definieren . Die Steuersequenz ist aufgrund von nicht direkt verwendbar , daher kann (was ist ) verwendet werden. Da die normale Deklaration lautet\enc+famcode\enc+fam+\@namedef\expandafter\def\csname#1\endcsname

\DeclareFontFamily{T1}{lmtt}{\hyphenchar=-1 }

was

\@namedef{T1+lmtt}{\hyphenchar=-1 }

Wir wirken dem entgegen, indem wir

\@namedef{T1+lmtt}{}

Dies codewird verwendet, sobald eine Schriftform relativ zur Schriftfamilie ausgewählt und dauerhaft an die ausgewählte Schriftart gebunden wird. Daher ist es wichtig, dass die Neudefinition erfolgt, bevor tatsächlich eine Schriftart ausgewählt wird.

Antwort2

In Franks Antwort fehlt ein wichtiger Punkt: Wenn Sie in Ihrer Präambel eine Schriftfamilie deklarieren, versucht Latex nicht mehr, die .fd-Datei einzulesen, und daher gehen alle anderen Schriftdeklarationen verloren. Sie können sie vor der Änderung eingeben:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lipsum}
\makeatletter
\input{t1lmtt.fd}
\makeatother
\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}


\begin{document}
\ttfamily abc \lipsum
\end{document}

Oder alternativ:

\ttfamily
\hyphenchar\font=`\-
\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}

verwandte Informationen