
Estou tentando hifenizar palavras-chave longas, como mostrado no exemplo:
\documentclass[10pt]{article}
\usepackage{underscore}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{TESTSTRING\_TESTSTRING\_HYPHENATION}
\\\\
%\begin{figure}[here]
%\centerline{\includegraphics*[width=0.8\paperwidth]{/pictures/regular_testname.png}}
%\centerline{\includegraphics*[width=0.8\paperwidth]{/pictures/escaped\_testname.png}}
%\end{figure}
\end{document}
tenteiesseeessee mais sem sucesso. Se eu descomentar as figuras do exemplo, o underscore
-package produzirá problemas porque o sublinhado nos nomes dos arquivos não será mais interpretado corretamente. Sem usar este pacote, as imagens podem ser inseridas, mas não consigo hifenizar minhas strings.
Você tem uma idéia de como hifenizar corretamente e apenas localmente, como, por exemplo, nesse tipo: TESTSTRING\myUnderTESTSTRING\myUnderHYPHENATION
?
E como posso controlar que nenhum hífen seja escrito ao hifenizar a string? Isto seria ainda preferível.
Como pergunta paralela: no meu exemplo, por que a primeira parte da string não está sendo hifenizada?
Responder1
Talvez algo assim ajudasse, sem usar o underscore
pacote que você prefere (sem usá-lo). Ativa a hifenização com \newuson
e restaura a definição original de \_
com \newusoff
. Através deste mecanismo liga/desliga, você pode controlar o escopo das modificações.
Além disso, a "hifenização" do sublinhado é sem o travessão, o que também me pareceu desejado, se entendi bem a pergunta.
Em qualquer caso, para hifenizar a primeira palavra de um parágrafo, \hspace{0pt}
é necessário a para iniciar o parágrafo.
\documentclass{article}
%\usepackage{underscore}
\textwidth0pt
\let\svus\_
\newcommand\newuson{\def\_{\svus\allowbreak\hspace{0pt}}}
\newcommand\newusoff{\let\_\svus}
\begin{document}
TESTSTRING\_TESTSTRING\_HYPHENATION
\newuson
\hspace{0pt}TESTSTRING\_TESTSTRING\_HYPHENATION
\newusoff
TESTSTRING\_TESTSTRING\_HYPHENATION
\end{document}
Responder2
Se você deseja manter suas strings longas com sublinhado como argumento para uma macro, é fácil:
\documentclass[10pt]{article}
\DeclareRobustCommand\Name[1]{{%
\let\_\hyphenationunderscore#1%
}}
\newcommand{\hyphenationunderscore}{%
\textunderscore\nobreak\hspace{0pt}%
}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{
\hspace{0pt}%
\Name{TESTSTRING\_TESTSTRING\_HYPHENATION}
}
\end{document}
Você também pode redefinir \_
globalmente:
\documentclass[10pt]{article}
\renewcommand{\_}{%
\textunderscore\nobreak\hspace{0pt}%
}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{
\hspace{0pt}%
TESTSTRING\_TESTSTRING\_HYPHENATION
}
\end{document}
Alternativamente, você pode tornar _
ativo:
\documentclass[10pt]{article}
\newcommand{\hyphenationunderscore}{%
\textunderscore\nobreak\hspace{0pt}%
}
\catcode`_=\active
\protected\def_{\ifmmode\sb\else\hyphenationunderscore\fi}
\begin{document}
\pagestyle{empty}
\parbox{1pt}{
\hspace{0pt}%
TESTSTRING_TESTSTRING_HYPHENATION
}
\end{document}
Observe que sem \hspace{0pt}
você não há hifenização no \parbox
, porque o TeX não hifeniza uma palavra que não seja precedida por cola.
Se você quiser quebrar também após o sublinhado, mude \nobreak
para \linebreak[0]
o final. Por exemplo, a segunda solução torna-se
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\renewcommand{\_}{%
\textunderscore\linebreak[0]\hspace{0pt}%
}
\begin{document}
\pagestyle{empty}
TESTSTRING\_TESTSTRING\_HYPHENATION
\parbox{1pt}{
\hspace{0pt}%
TESTSTRING\_TESTSTRING\_HYPHENATION
}
\end{document}
A saída aqui também mostra o que acontece com T1.