浮动环境中的边距注释 – 错误:浮动丢失

浮动环境中的边距注释 – 错误:浮动丢失

基于这个问题:浮动环境中的边距注释 – 错误:浮动丢失我现在有其他问题。解决方案很好用。

但我想使用浮点数来列出列表,以防止代码内部出现分页符(约 30 行)。使用浮点数时,我收到错误:

 ! LaTeX Error: Float(s) lost.
\documentclass{article}

\usepackage{listings}
%\usepackage{marginnote}

\begin{document}

\lstset{language=C++,numbers=left,escapeinside={(*@}{@*)}, float, floatplacement=H}

\begin{lstlisting}
for (int i = 0; i < 10; i++)
{
    cout << i << endl;
}
\end{lstlisting}

\begin{lstlisting}
for (int i = 0; i < 10; i++)
{
 cout << i << endl;(*@\marginpar{margin note}@*)
}
\end{lstlisting}

%% I've tried to wrap \marginnote with boxes, but could't fix it.

\begin{lstlisting}
for (int i = 0; i < 10; i++)
{
cout << i << endl;(*@\marginpar{margin note}@*)
}
\end{lstlisting}

通过在环境中设置列表minipage并不能解决问题。

答案1

您不能嵌套浮动环境;\marginpar是浮动的。您可以定义一个命令来模仿 ,marginpar方法是使其不浮动且不可见:

\documentclass{article}

\usepackage{listings,calc}
\lstset{language=C++,numbers=left,escapeinside={(*@}{@*)}}

\newcommand*{\marginnote}[1]{%
  \makebox[0pt][l]{%
    \makebox[\linewidth+\marginparsep][l]{}%
    \parbox[t][0pt][t]{1\marginparwidth}{#1}%
  }%
}

\usepackage[showframe]{geometry}

\begin{document}

\begin{lstlisting}[float, floatplacement=t]
for (int i = 0; i < 10; i++)
{
(*@\marginnote{margin note}@*)cout << i << endl;
}
\end{lstlisting}

\noindent\mbox{}

\begin{lstlisting}[float, floatplacement=h]
for (int i = 0; i < 10; i++)
{
(*@\marginnote{margin\\ note}@*)    cout << i << endl;
}
\end{lstlisting}
\end{document}

在此处输入图片描述

相关内容