我为一篇关于框架的论文创建了一个环境,该环境格式化了一些方法的文档。方法位于顶部,每个方法占一行,由\lstinline
包设置listings
。
每当方法签名太长而无法容纳一行并且出现问题时,我都会收到“Underfull \hbox (badness 10000)”的提示。我搜索了一段时间,但处理该警告的建议并不适用于这种情况:
没有手动换行,这会导致 \hbox 不足,它只会在自动换行时发生。
添加连字符不适合程序代码,更改措辞也同样如此
以下是我的环境中的示例文档:
\documentclass{article}
\usepackage{amsmath,listings,changepage,pbox,ifthen,xparse}
\lstset{basicstyle=\ttfamily,breaklines=true}
\newcommand*{\code}[1]{\lstinline[breaklines]{#1}}
\NewDocumentEnvironment{methods}{oomooooo}{
\smallskip
\noindent\textit{\IfNoValueTF{#1}{Methode\IfValueTF{#4}{n:}{:\phantom{n}}}{#1}}%
\hspace{\IfNoValueTF{#2}{1em}{#2}}%
\pbox[t]{0.8\textwidth}{%
\noindent\code{#3}%
\IfValueTF{#4}{\\\code{#4}}{}%
}%
\begin{adjustwidth}{2.5em}{0pt}
}{
\end{adjustwidth}
\bigskip
}
\begin{document}
\begin{methods}{Matrix<T> submatrix()}
This method's signature is short, it does not break and no underful hbox
warning is issued.
\end{methods}
\begin{methods}{Matrix<T> submatrix(int startRow, int startCol, int endRow, int endCol)}
This method's signature is long. An automatic linebreak is inserted,
which results in underful hbox (badness 10000).
\end{methods}
\end{document}
生成的文档看起来符合我的预期,但是在相当长的原始文档中,所有不足的 hbox 警告使得很难注意到真正的问题。
是否有可能仅当在特定环境中出现 underfull hbox 警告时才抑制它们?
环境的简要说明:我希望在左侧有一个变量文本“方法”、“方法”、“构造函数”或类似内容,并在其右侧有一个左对齐的方法列表。我愿意听取有关如何以不同方式实现这一目标的建议。
答案1
我建议使用varwidth
而不是\pbox
;问题似乎出在 中\lstinline
,\raggedright
里面的声明varwidth
应该可以解决问题。我还会更精确地测量代码框的宽度。
\documentclass{article}
\usepackage{amsmath,listings,changepage,ifthen,xparse,lipsum,varwidth}
\usepackage[pass,showframe]{geometry}
\lstset{basicstyle=\ttfamily,breaklines=true,columns=fullflexible}
\newcommand*{\code}{\lstinline[breaklines]}
\NewDocumentEnvironment{methods}{oomooooo}
{\smallskip
\noindent
\sbox0{%
\textit{\IfNoValueTF{#1}{Methode\IfValueTF{#4}{n:}{:\phantom{n}}}{#1}}%
\hspace{\IfNoValueTF{#2}{1em}{#2}}%
}%
\dimen0=\dimexpr\textwidth-\wd0\relax\box0
\begin{varwidth}[t]{\dimen0}\raggedright
\code{#3}\IfValueTF{#4}{\\\code{#4}}{}%
\end{varwidth}\par
\begin{adjustwidth}{2.5em}{0pt}
}
{\end{adjustwidth}\bigskip}
但我不明白你如何能做到五最后的可选参数。在我看来,这不是最好的方法。