\marginnote 里面的 \listings 环境?

\marginnote 里面的 \listings 环境?

一般情况下,可以在内部或边缘使用\listings或使用类似的环境吗?\marginnote

\marginnote{
    \begin{lstlisting}
        test
    \end{lstlisting}
}

如果没有的话,如果我只是想将编码注释放在页边距中,有什么解决方法吗?

答案1

以下是我对这个listings包的看法。下面的代码定义了一个新环境,\lstnewenvironment它将列表保存在一个框中,然后将其排版在一个\marginpar(或者\marginnote如果你喜欢):

\documentclass{article}
\usepackage[marginparwidth=5cm,includemp,showframe]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings,xcolor}

\newbox\marginlst
\newlength\marginlstoffset
% framerule + framesep + rulesep:
\setlength\marginlstoffset{\dimexpr2mm+3pt+2pt\relax}

\lstnewenvironment{marginlisting}
  {%
    \lstset{
      basicstyle = \small\ttfamily,
      frame = leftline ,
      framerule = 2mm ,
      rulecolor = \color{black!20},
      breaklines = true ,
      linewidth = \dimexpr\marginparwidth-\marginlstoffset\relax
    }%
    \setbox\marginlst\hbox\bgroup
  }
  {%
    \egroup
    % or \marginnote:
    \marginpar{\hspace*{\marginlstoffset}\unhbox\marginlst}%
  }

\usepackage{lipsum}

\begin{document}

Some initial words
\begin{marginlisting}
BEGIN
    FOR k IN c2(o.id) LOOP
        dbms_output.put_line('test');
    END LOOP;
END.
\end{marginlisting}
\lipsum[2]


\end{document}

在此处输入图片描述

答案2

fancyvrb可以使用环境形式:

\documentclass{article}
\usepackage[marginparwidth=5cm,includemp]{geometry}

\usepackage{marginnote,fancyvrb,xcolor}
\usepackage{lipsum}

\newsavebox{\marginlistingbox}
\newenvironment{marginlisting}
  {\fvset{tabsize=3,frame=leftline,framerule=2mm,rulecolor=\color{black!20}}%
   \setbox\marginlistingbox=\vtop\bgroup
     \hsize=\marginparwidth
     \topsep=0pt\partopsep=0pt
     \vspace*{-1.4\baselineskip}%
     \Verbatim}
  {\endVerbatim\egroup\marginnote{\leavevmode\box\marginlistingbox}}

\begin{document}
Some initial words%
\begin{marginlisting}
BEGIN
    FOR k IN c2(o.id) LOOP
        dbms_output.put_line('test');
    END LOOP;
END.
\end{marginlisting}
\lipsum[2]
\end{document}

在此处输入图片描述

我不太抱有你能完成这件事的希望listings

答案3

所以最后我选择了fancyvrb以下解决方案约翰·威克森指出。对于在页边距中使用的小代码片段来说,它似乎非常有用(尽管据我所知没有关键字功能)

% set options globally
\fvset{tabsize=3,frame=leftline,framerule=2mm,rulecolor=\color{black!20}} 

% define and save
\begin{SaveVerbatim}{name} 
BEGIN
    FOR k IN c2(o.id) LOOP
        dbms_output.put_line('test');
    END LOOP;
END.
\end{SaveVerbatim}

% use it
\marginnote{\UseVerbatim{name}}

... Lorem ipsum dolor sit amet, consectetur ...

给出:

Verbatim_result

CTAN 的 fancyvrb

相关内容