Hifenização de palavras com sublinhado localmente

Hifenização de palavras com sublinhado localmente

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}

insira a descrição da imagem aqui

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 underscorepacote que você prefere (sem usá-lo). Ativa a hifenização com \newusone 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}

insira a descrição da imagem aqui

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}

insira a descrição da imagem aqui

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 \nobreakpara \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.

insira a descrição da imagem aqui

informação relacionada