消除 Adjustbox 中列出的过满水平盒子警告

消除 Adjustbox 中列出的过满水平盒子警告

我的文档中有以下内容,它可以按我预期的方式工作,缩放列表以适合页面,但它给了我一个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}

相关内容