在我使用的自定义类中,什么可以阻止列表中的换行?

在我使用的自定义类中,什么可以阻止列表中的换行?

我已经发现如何将代码包装在 lstlisting 块内。当我的文档有article类时,一切都按预期工作。

但是,当我将文档的类别更改为工作中需要的类别时,行不再断开。我不是此类的作者,也不知道问题可能出在哪里。你能帮助我吗?

最小工作示例:

\documentclass{templates/mgragh}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage[polish]{babel}
\usepackage[OT4]{fontenc}
\usepackage{color}
\lstset{
  frame=single,
  breaklines=true,
  postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{red}\hookrightarrow\space}}
}
\begin{document}
\begin{lstlisting}
public void createVoiceComment(File recodedFile) throws CommentNotAddedException;
\end{lstlisting}
\end{document}

文档类别可在此处获取:https://copy.com/sijTRKuBQ9L2

答案1

简短回答

替换中的第 172 行mbwk.cls

\exhyphenpenalty=10000

经过

\exhyphenpenalty=9999

成功了。

更详细的答案

mwbk.cls由您使用的类内部加载的类()mgraph在第 171-172 行设置,

\hyphenpenalty=100
\exhyphenpenalty=10000

将这些值与 Plain TeX(以及 LaTeX 内核)使用的值进行对比:

\hyphenpenalty=50
\exhyphenpenalty=50

这些宏有什么用呢?下面是 TeXbook 中的一段相关段落(第 14 章第 96 页底部):

每个潜在的断点都有一个相关的“惩罚”,它代表在该处断点的“美学成本”。[...] 普通 TeX 集\hyphenpenalty=50\exhyphenpenalty=50

练习 14.6...

解释如何指示 TeX 不要在显式连字符和破折号后进行任何换行。(这在较长的参考书目中很有用。)

及其解决方案......

\exhyphenpenalty=10000根据本章后面的规则,禁止所有此类中断。同样,\hyphenpenalty=10000禁止在隐式(自由)连字符后中断。

... 也相关。

mwbk显然,这些类(和)的作者mgraph希望通过设置\exhyphenpenalty如此高的值(10000 在 TeX 中被认为是无限糟糕),以防止在显式连字符和破折号后出现任何中断。然而,这似乎也会阻止列表中的换行。事实上,只需\exhyphenpenalty在第 172 行中将值减一即可mwbk.cls

\exhyphenpenalty=9999

似乎解决了这个问题。

在此处输入图片描述

\documentclass{templates/mgragh}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\lstset{
  frame=single,
  breaklines=true,
}
\begin{document}
\begin{lstlisting}
public void createVoiceComment(File recodedFile) throws CommentNotAddedException;
\end{lstlisting}
\end{document}

相关内容