以双列模式列出

以双列模式列出

我想将带有彩色背景的列表放在双列文档中。出于安全考虑(当列表宽度仅略微超过列宽时),我将列表放在 中\maxsizebox。这部分可行,但不知何故彩色背景也会缩放:最长的程序行适合列宽,但彩色背景不适合。如果注释掉该\maxsizebox行,则行宽超过列宽,彩色背景适合它。

另外两个问题:

  1. 当标题包含逗号时,包会尝试将逗号后的部分识别为xkeyval

  2. 当我使用lstlisting环境而不是时lstinputlisting,编译挂起。


\documentclass[14pt,twocolumn]{memoir}
   \usepackage{listings}
   \usepackage{xcolor}
   \usepackage{mwe}
   \usepackage{adjustbox}
   \newcommand\MESourceFile[4][]{
   \noindent\maxsizebox{\columnwidth}{.5\textheight}
        {
        %   \begin{lstlisting}[language=C,backgroundcolor=\color{green!10}]
        %int main ( int argc, char ** argv )
        %{
        %std::cout << "Hello World" << std::endl;
        %}      
        %   \end{lstlisting}

                \lstinputlisting[ label=#4, name=#4,linewidth=\columnwidth,
                caption =#3,language=C,backgroundcolor=\color{green!10}
                ]{#2}
            }   
       }

\begin{document}
    \blindtext
    \MESourceFile{HelloWorld.cpp}{The hello
 %          ,with comma
        }{lst:hello1}
        \blindtext
\end{document}

答案1

我建议使用一个tcbinputlisting框和列表选项breaklines=true→样式的进一步配置取决于listingstcolorbox

可以使用 来解决逗号问题caption={#3},即使用一{...}对!

C++ 文件:

  #include <iostream>
  // Hello World - Example
  int main( int argc, char **argv )
  {
    std::cout << "Hello World\n";
    return 0;
  }

LaTeX 来源:

\documentclass[14pt,twocolumn]{memoir}
\usepackage{xcolor}
\usepackage{blindtext}
\usepackage[most]{tcolorbox}
\newcommand\MESourceFile[4][]{%
  \tcbinputlisting{%
    enhanced jigsaw,
    boxrule = 0pt,
    sharp corners,
    listing remove caption=false,
    nobeforeafter,
    listing options={label=#4, name=#4,breaklines=true,
      caption={#3},language=C},
    colback=red!70,
    listing file={#2},
    listing only,
    left=1pt,
    fontupper={\tiny},
  }%
}


\begin{document}
\blindtext
\MESourceFile{HelloWorld.cpp}{Some text, with a comma}{lst:hello1}
\blindtext
\end{document}

在此处输入图片描述

相关内容