我想将带有彩色背景的列表放在双列文档中。出于安全考虑(当列表宽度仅略微超过列宽时),我将列表放在 中\maxsizebox
。这部分可行,但不知何故彩色背景也会缩放:最长的程序行适合列宽,但彩色背景不适合。如果注释掉该\maxsizebox
行,则行宽超过列宽,彩色背景适合它。
另外两个问题:
当标题包含逗号时,包会尝试将逗号后的部分识别为
xkeyval
值当我使用
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
→样式的进一步配置取决于listings
和tcolorbox
。
可以使用 来解决逗号问题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}