
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}
Lo intentéesteyestey más sin éxito. Si descomento las figuras del ejemplo, el underscore
paquete 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 underscore
paquete que parece preferir (no usarlo). Activa la separación de palabras con \newuson
y 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}
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}
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 \nobreak
a \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.