
Estaba buscando una manera de habilitar la separación de palabras dentro de \texttt
. encontréesta respuestay me pareció perfecto: sencillo y útil para mucha gente.
Elegí habilitar la separación de palabras globalmente \texttt
y, como se sugiere allí, agregué la siguiente línea:
\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}
Desafortunadamente, no funcionó y tuvo un efecto secundario no deseado: la fuente de la máquina de escribir ya no se usaba en el interior \texttt
y apareció el siguiente error en la salida de la consola:
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
Este error me indicó el camino correcto: siempre uso la codificación T1 y fuentes lmodern en mis documentos LaTeX:
\usepackage[T1]{fontenc}
\usepackage{lmodern}
y tan pronto como comenté esas líneas, todo funcionó bien.
¿Hay alguna manera de adaptar la respuesta original a este caso también? Habría agregado un comentario a esa publicación, pero desafortunadamente todavía no tengo la reputación suficiente para hacerlo.
Muchas gracias.
Respuesta1
El problema se puede resolver de una manera diferente, que requiere cargar el archivo de definición de fuente manualmente y cambiar el guión antes de usar cualquier fuente de esa familia:
\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}
Uno de los deberes de \DeclareFontFamily{enc}{fam}{code}
es definir \enc+fam
para expandirse a code
. La secuencia de control \enc+fam
no se puede utilizar directamente debido a +
, por lo que se puede utilizar \@namedef
(que es ). \expandafter\def\csname#1\endcsname
Dado que la declaración normal es
\DeclareFontFamily{T1}{lmtt}{\hyphenchar=-1 }
que hace
\@namedef{T1+lmtt}{\hyphenchar=-1 }
lo contrarrestamos haciendo
\@namedef{T1+lmtt}{}
Se code
utiliza tan pronto como se selecciona una forma de fuente relativa a la familia de fuentes y se adjunta permanentemente a la fuente elegida. Por lo tanto, es importante que la redefinición se realice antes de seleccionar cualquier fuente.
Respuesta2
A la respuesta de Frank le falta un punto importante: cuando declara una familia de fuentes en su preámbulo, el látex ya no intenta ingresar el archivo .fd, por lo que todas las demás declaraciones de fuentes se pierden. Puede ingresarlos antes de realizar el cambio:
\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}
O alternativamente:
\ttfamily
\hyphenchar\font=`\-
\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}