防止在 `\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字符作为开头。间距有差异。

相关内容