Предотвращение переноса строки в начале длинного имени в `\lstinline`

Предотвращение переноса строки в начале длинного имени в `\lstinline`

Этот вопрос возник изКак работать с очень длинными фразами lstinline, такими как длинные имена классов?.

Этот вопрос касается переноса строк внутри \lstinlineфразы. Я предоставил ответ, который автоматически расставляет переносы на заглавных буквах, а затем, в комментарии, я понял, что иногда может быть полезно иметь автоматический перенос и на подчеркиваниях _.

Мне удалось это реализовать, но осталась одна проблема: я хотел бы предотвратить автоматическую _расстановку переносов в начале имени (например, в Python это обычная ситуация, поскольку по соглашению внутренние имена начинаются с подчеркивания (или двух)).

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

Хороший и плохой перенос строки в <code>\listinline</code>

решение1

Обойти \discretionaryвставку, вставив что-то еще просто для начала. Вот несколько вариантов:

введите описание изображения здесь

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

С помощью mathescapeможно вставить макрос вместо literateзамены для _. В качестве альтернативы используйте другой literateсимвол для начала. Существуют различия в интервалах.

Связанный контент