Cómo separar guiones automáticamente dentro de \texttt cuando se usa codificación T1 y lmodern

Cómo separar guiones automáticamente dentro de \texttt cuando se usa codificación T1 y lmodern

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 \texttty, 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 \texttty 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}

ingrese la descripción de la imagen aquí

Uno de los deberes de \DeclareFontFamily{enc}{fam}{code}es definir \enc+fampara expandirse a code. La secuencia de control \enc+famno se puede utilizar directamente debido a +, por lo que se puede utilizar \@namedef(que es ). \expandafter\def\csname#1\endcsnameDado 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 codeutiliza 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=`\-}

información relacionada