基于这个问题:浮动环境中的边距注释 – 错误:浮动丢失我现在有其他问题。解决方案很好用。
但我想使用浮点数来列出列表,以防止代码内部出现分页符(约 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}