断线对于 lstlisting 包不起作用,而 hyphenat 包中没有使用任何选项

断线对于 lstlisting 包不起作用,而 hyphenat 包中没有使用任何选项

下面的代码是tex文件内容,其中包含listing包。

\documentclass[12pt,a4paper]{report}
\usepackage{hyperref}
\usepackage[english]{babel}
\usepackage{xcolor}
\usepackage{listings} % display coding 

\usepackage[none]{hyphenat}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    language=C++,
    breaklines=true,
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle={\nhttfamily\footnotesize},
    breakatwhitespace=false,    
    frame=shadowbox,
    numbers=left,
    numbersep=10pt,
    linewidth=\textwidth,
    columns=flexible,
}
\lstset{style=mystyle}



% document starts here...
\begin{document}

\lstinputlisting{xxx.cpp}

\end{document}

xxx.cpp 的 cpp 文件内容如下所示。

 1   //(title name) This Programme gives the ouput for the theory of the Programme gives the ouput for the theory of the Programme gives the ouput for the theory.
 2   #include <iostream>
 3  using namespace std;
 4  int main() {
    
 5  Code goes here...
 
 6     return 0;
 7 }

yyy.tex文件运行时,第一行xxx.cpp出现在右边距之外。但是当我在包中将选项“ none”更改为“ htt”时hyphenat,它会给出正确的输出。但 tex 文档中除列表之外的其余内容都启用了连字符。

我所需要的是,\usepackage[none]{hyphenat}我需要 cpp 的第一行出现在框架内。或者任何可以满足我的两个需求的解决方案,即我的文档中的所有内容都应该不带连字符,并且 .cpp 的第一行保留在框架内。

提前致谢,

答案1

您可以在列出之前更改惩罚(它也适用于 \lstinputlisting):

\documentclass[12pt,a4paper]{report}
\usepackage[none]{hyphenat}


\usepackage{listings}
\lstdefinestyle{mystyle}{
    breaklines=true,
    breakatwhitespace=false,    
}
\lstset{style=mystyle}

\makeatletter\lst@AddToHook{PreSet}{\exhyphenpenalty=50 }\makeatother

\begin{document}

\begin{lstlisting}
1   //(title name) This Programme gives the ouput for the theory of the Programme gives the ouput for the theory of the 
\end{lstlisting}

\end{document}

在此处输入图片描述

相关内容