
Eu estava procurando uma maneira de ativar a hifenização dentro do arquivo \texttt
. eu encontreiesta respostae parecia perfeito: simples e útil para muitas pessoas.
Optei por ativar a hifenização globalmente \texttt
e, conforme sugerido, adicionei a seguinte linha:
\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}
Infelizmente, não funcionou e teve um efeito colateral indesejado: a fonte da máquina de escrever não era mais usada internamente \texttt
e o seguinte erro apareceu na saída do console:
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
Este erro me apontou o caminho certo: eu sempre uso a codificação T1 e as fontes lmodern em meus documentos LaTeX:
\usepackage[T1]{fontenc}
\usepackage{lmodern}
e assim que comentei essas falas, tudo funcionou bem.
Existe uma maneira de adaptar a resposta original a este caso também? Eu teria adicionado um comentário a esse post, mas infelizmente ainda não tenho reputação suficiente para fazer isso.
Muito obrigado.
Responder1
O problema pode ser resolvido de uma maneira diferente, que requer o carregamento manual do arquivo de definição de fonte e a alteração do hífen antes de qualquer fonte dessa família ser usada:
\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}
Uma das funções de \DeclareFontFamily{enc}{fam}{code}
é definir \enc+fam
para expandir para code
. A sequência de controle \enc+fam
não pode ser usada diretamente por causa de +
, então \@namedef
(que é \expandafter\def\csname#1\endcsname
) pode ser usada. Como a declaração normal é
\DeclareFontFamily{T1}{lmtt}{\hyphenchar=-1 }
o que faz
\@namedef{T1+lmtt}{\hyphenchar=-1 }
nós neutralizamos isso fazendo
\@namedef{T1+lmtt}{}
O code
é usado assim que um formato de fonte relativo à família de fontes é selecionado e anexado permanentemente à fonte escolhida. Portanto, é importante que a redefinição aconteça antes de qualquer fonte ser realmente selecionada.
Responder2
A resposta de Frank está faltando um ponto importante: quando você declara uma família de fontes em seu preâmbulo, o látex não tenta mais inserir o arquivo .fd e, portanto, todas as outras declarações de fontes são perdidas. Você pode inseri-los antes de fazer a alteração:
\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}
Ou alternativamente:
\ttfamily
\hyphenchar\font=`\-
\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}