我使用 minted 来突出显示代码。有时我需要排版代码,然后立即显示错误消息,如下所示
some code
error: blah blah
将代码突出显示应用于错误消息并不合适,因此我使用逐字突出显示:
\begin{minted}{haskell}
some code
\end{minted}
\begin{verbatim}
error: blah blah
\end{verbatim}
但这会增加垂直空间,如下所示:
some code
error: blah blah
我可以使用 \vspace 在两个环境之间使用负长度来消除垂直空间,例如
\begin{minted}{haskell}
some code
\end{minted}
\vspace{-\belowdisplayskip}\vspace{-\abovedisplayskip}
\begin{verbatim}
error: blah blah
\end{verbatim}
但这样会减少太多空间。这里应该怎么做呢?
答案1
您还可以使用escapeinside
来删除部分铸块的突出显示。此功能旨在让 LaTeX 处理转义分隔符内的文本格式。但是,它仍然或多或少是逐字的,字体是等宽的,特殊字符(如 ` 或 % 或 ')会正常打印,并且会考虑换行符。
梅威瑟:
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}[escapeinside=~~]{haskell}
some code
~Prelude.head:42:23: empty list
when calling recursively MyModule.scan.go:2009:12 and MyModule.scan.view:2009:7
when calling MyGUI.promptString:1234:321~
\end{minted}
\end{document}
答案2
垂直空间变成了两倍\topsep
多\partopsep
。
\documentclass[10pt]{article}
\usepackage{minted}
\newcommand{\nospacebetweenenvs}{%
\vspace{-\glueexpr(\topsep+\partopsep)*2}%
}
\begin{document}
\begin{minted}{haskell}
some code
\end{minted}
\nospacebetweenenvs
\begin{verbatim}
error: blah blah
\end{verbatim}
\noindent
\begin{minipage}[t]{0.3\textwidth}
\begin{minted}{haskell}
some code
\end{minted}
\nospacebetweenenvs
\begin{verbatim}
error: blah blah
\end{verbatim}
\end{minipage}%
\begin{minipage}[t]{0.3\textwidth}
\texttt{some code}\\
\makebox[0pt]{\vrule width 6cm height0pt depth 0.1pt}\texttt{error: blah blah}
\end{minipage}
\end{document}