我的文档中有以下内容,它可以按我预期的方式工作,缩放列表以适合页面,但它给了我一个Overfull \hbox
我想要摆脱的虚假警告:
\begin{adjustbox}{max width=\linewidth}
\begin{lstlisting}
A long line of code which I want to be scaled to fit the page.
\end{lstlisting}
\end{adjustbox}
以下是警告:
Overfull \hbox (27.00378pt too wide) in paragraph at lines 8--9
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
[]
其中第 8 行是列表内的长行。
有没有一种干净的方法可以消除警告?
答案1
警告Overfull \hbox
来自lstlisting
创建段落框\linewidth
长且内容比其宽的环境。之后将其缩小使其适合,但不会消除先前的警告。
避免这种情况的一个简单方法是使列表段落更宽,可以通过将其包装到varwidth
具有足够宽度的环境中来实现。adjustbox
您可以通过添加varwidth=<width>
密钥来做到这一点。在这里您可以采取一些措施\maxdimen
来确保它尽可能宽。
\documentclass{article}
\usepackage{listings}
\usepackage{adjustbox}
\usepackage{lipsum}
\begin{document}
\begin{adjustbox}{varwidth=\maxdimen,max width=\linewidth}
\begin{lstlisting}
A long line of code which I want to be scaled to fit the page.
\end{lstlisting}
\end{adjustbox}
\lipsum[1]
\end{document}
答案2
hfuzz=<dimen>
使用时插入的具体过程adjustbox
环境可以自动化使用etoolbox
:
\documentclass{article}
\usepackage{listings,adjustbox,etoolbox,lipsum}
\AtBeginEnvironment{adjustbox}{\hfuzz=100pt}% Choose your poison
\begin{document}
\begin{adjustbox}{max width=\linewidth}
\begin{lstlisting}
A long line of code which I want to be scaled to fit the page.
\end{lstlisting}
\end{adjustbox}
\lipsum[1-50]
\end{document}
答案3
根据 marmot 的建议,使用\hfuzz
来删除警告是可行的。不过,我认为这个解决方案并不优雅。在我看来,adjustbox 中的列表一开始就给出警告,这似乎是一个错误。
\documentclass[a4paper, 10pt]{article}
\usepackage{listings}
\usepackage{adjustbox}
\begin{document}
\begin{adjustbox}{max width=0.5\linewidth}
\begin{lstlisting}
A long line of code which I want to be scaled to fit the page.
\end{lstlisting}
\end{adjustbox}
% No warning:
{\hfuzz=10000pt
\begin{adjustbox}{max width=0.5\linewidth}
\begin{lstlisting}
A long line of code which I want to be scaled to fit the page.
\end{lstlisting}
\end{adjustbox}
}
% Warning:
\begin{adjustbox}{max width=0.5\linewidth}
\begin{lstlisting}
A long line of code which I want to be scaled to fit the page.
\end{lstlisting}
\end{adjustbox}
\end{document}