Separación de sílabas para palabras con guión bajo localmente

Separación de sílabas para palabras con guión bajo localmente

Estoy intentando separar palabras clave largas con guiones como se muestra en el ejemplo:

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

ingrese la descripción de la imagen aquí

Lo intentéesteyestey más sin éxito. Si descomento las figuras del ejemplo, el underscorepaquete produjo problemas porque el guión bajo en los nombres de archivos ya no se interpreta correctamente. Sin usar este paquete, las imágenes se pueden insertar, pero no obtengo cadenas con guiones.

¿Tiene una idea de cómo dividir con guiones correctamente y solo localmente, como por ejemplo en ese tipo TESTSTRING\myUnderTESTSTRING\myUnderHYPHENATION:?

¿Y cómo puedo controlar que no se escriba ningún guión al dividir la cadena? Esto sería incluso preferible.

Como pregunta paralela: en mi ejemplo, ¿por qué no se divide con guiones la primera parte de la cadena?

Respuesta1

Quizás algo como esto ayudaría, sin usar el underscorepaquete que parece preferir (no usarlo). Activa la separación de palabras con \newusony restaura la definición original de \_con \newusoff. A través de este mecanismo de encendido/apagado, puedes controlar el alcance de las modificaciones.

Además, la "separación de guiones" del guión bajo no tiene el guión, lo que también parecía deseable, si entendí la pregunta correctamente.

En cualquier caso, para que la primera palabra de un párrafo se separe con guiones, \hspace{0pt}se requiere a para comenzar el párrafo.

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

ingrese la descripción de la imagen aquí

Respuesta2

Si desea mantener cadenas largas con guión bajo como argumento de una macro, es 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}

ingrese la descripción de la imagen aquí

También podrías redefinir \_globalmente:

\documentclass[10pt]{article}

\renewcommand{\_}{%
  \textunderscore\nobreak\hspace{0pt}%
}

\begin{document}

\pagestyle{empty}

\parbox{1pt}{
  \hspace{0pt}%
  TESTSTRING\_TESTSTRING\_HYPHENATION
}

\end{document}

Alternativamente, puedes _activar:

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

Tenga en cuenta que sin \hspace{0pt}usted no se separan guiones en el \parbox, porque TeX no divide con guiones una palabra que no esté precedida por pegamento.

Si desea romper también después del guión bajo, cambie \nobreaka \linebreak[0]todo. Por ejemplo, la segunda solución se convierte en

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

El resultado aquí también muestra lo que sucede con T1.

ingrese la descripción de la imagen aquí

información relacionada