Evitar saltos de línea al comienzo de un nombre largo en `\lstinline`

Evitar saltos de línea al comienzo de un nombre largo en `\lstinline`

Esta pregunta se desarrolló a partir de¿Cómo lidiar con frases lstinline muy largas, como nombres de clases largos?.

Esa pregunta es sobre el salto de línea dentro de una \lstinlinefrase. Proporcioné una respuesta que separa automáticamente las letras mayúsculas y luego, en un comentario, me di cuenta de que a veces _también podría ser útil tener una separación automática de los guiones bajos.

Logré implementar esto, pero persiste un problema: me gustaría evitar la separación automática _de guiones al comienzo del nombre (en Python, por ejemplo, esta es una situación común, ya que por convención, los nombres internos comienzan con un guión bajo (o dos). )).

\documentclass{article}
\usepackage[paperwidth=10cm,paperheight=5cm]{geometry}
\pagestyle{empty}
\usepackage{lstdoc}
\lstMakeShortInline[literate={\_}{\_}{1\discretionary{\_}{}{}}]|

\begin{document}
\textbf{Good line break:} in this paragraph the line break in the
python's variable |a_python_style_name| is good!

\textbf{Bad line break:} the internal variable |_internal_python_name|
is not hyphenated very nicely in this paragraph.
\end{document}

Un salto de línea bueno y uno malo en <code>\listinline</code>

Respuesta1

Evite la \discretionaryinserción insertando algo más sólo para empezar. Aquí hay algunas opciones:

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage[paperwidth=10cm,paperheight=8cm]{geometry}
\pagestyle{empty}
\usepackage{lstdoc}
\lstset{mathescape=true}
\lstMakeShortInline[literate={\_}{\_}{1\discretionary{\_}{}{}} {~}{\_}{1}]|
\newcommand{\preunderscore}{\_}

\begin{document}
\textbf{Good line break:} in this paragraph the line break in the
python's variable |a_python_style_name| is good!

\textbf{Bad line break:} the internal variable |_internal_python_name|\par
|_internal_python_name|

\textbf{Bad line break:} the internal variable |~internal_python_name|\par
|~internal_python_name|

\textbf{Bad line break:} the internal variable |$\preunderscore$internal_python_name|\par
|$\preunderscore$internal_python_name|
\end{document}

Con mathescapepuede insertar una macro en lugar de un literatereemplazo para _. Alternativamente, use un literatepersonaje diferente para comenzar. Hay diferencias en el espaciado.

información relacionada