Listagem com duas colunas em um único quadro sofisticado

Listagem com duas colunas em um único quadro sofisticado

estou brincando um pouco comlstlistingse me pergunto se tal coisa seria possível para todas as minhas listagens:

listagem

Como conseguir esse tipo de coisa?

Nota: estou procurando uma solução que possa aplicar a todas as minhas listagens (definindo um novo comando, por exemplo), e que equilibre automaticamente as duas colunas...

Responder1

Olistingspacote pode interagir bem com o multicolpacote. O material do quadro é feito com a ajuda do tcolorboxqual, por sua vez, funciona muito bem com o listings. Parece ser transitivo!

A ideia de destacar os números é retirada deA resposta de Gonçalo.

insira a descrição da imagem aqui

\documentclass[landscape]{article}
\usepackage[margin = 2cm, includeheadfoot]{geometry}
\usepackage{lmodern}
\usepackage{multicol}
\usepackage{tcolorbox}
\tcbuselibrary{skins,listings}
\newtcblisting{mycpptwocol}[1][]{%
  enhanced,
  arc = 0pt,
  outer arc = 0pt,
  colback = blue!5,
  colframe = blue!50!black,
  listing only,
  fonttitle = \bfseries,
  listing options = {%
    language = C++,
    basicstyle = \ttfamily,
    multicols = 2,
    numbers = left,
    xleftmargin = 1em,
    showstringspaces = false,
  },
  overlay = {%
    \fill[gray!30] 
      (interior.north west)
      rectangle 
      ([xshift = 2em]interior.south west);
    \fill[gray!30] 
      ([xshift = -1em]interior.north)
      rectangle 
      ([xshift = 1em]interior.south);
    \draw[ultra thick, blue!50!black]
      ([xshift = -1em]interior.north) -- 
      ([xshift = -1em]interior.south); 
  },
  /utils/exec = {%
    \def\thelstnumber{%
      \texttt{\csname two@digits\endcsname{\the\value{lstnumber}}}}},
  title = {\centering\ttfamily #1}
}
\begin{document}

\begin{mycpptwocol}[helloworld.cpp]
#include <iostream>

int main()
{
    std::cout<<"Hello World``;
    return 0;
}
// This is a second column, just
// for fun !!!
\end{mycpptwocol}
\end{document}

EDITARConforme solicitado, uma versão com dois zeros à esquerda. Para sua informação, \two@digitsé uma LaTeXmacro central (consulte texdoc source2e) e \three@digitsnão existe (então eu a defino, mas você pode ter algum problema novamente com \makeatletter).

\documentclass[landscape]{article}
\usepackage[margin = 2cm, includeheadfoot]{geometry}
\usepackage{lmodern}
\usepackage{multicol}
\usepackage{tcolorbox}
\tcbuselibrary{skins,listings}
\makeatletter
\def\three@digits#1{\ifnum#1<10 00\else\ifnum#1<100 0\fi\fi\number#1}
\makeatother
\newtcblisting{mycpptwocol}[1][]{%
  enhanced,
  arc = 0pt,
  outer arc = 0pt,
  colback = blue!5,
  colframe = blue!50!black,
  listing only,
  fonttitle = \bfseries,
  listing options = {%
    language = C++,
    basicstyle = \ttfamily,
    multicols = 2,
    numbers = left,
    xleftmargin = 1.5em,
    showstringspaces = false,
  },
  overlay = {%
    \fill[gray!30] 
      (interior.north west)
      rectangle 
      ([xshift = 2.5em]interior.south west);
    \fill[gray!30] 
      ([xshift = -1em]interior.north)
      rectangle 
      ([xshift = 1.5em]interior.south);
    \draw[ultra thick, blue!50!black]
      ([xshift = -1em]interior.north) -- 
      ([xshift = -1em]interior.south); 
  },
  /utils/exec = {%
    \def\thelstnumber{%
      \texttt{\csname three@digits\endcsname{\the\value{lstnumber}}}}},
  title = {\centering\ttfamily #1}
}
\begin{document}

\begin{mycpptwocol}[helloworld.cpp]
#include <iostream>

int main()
{
    std::cout<<"Hello World``;
    return 0;
}
// This is a second column, just
// for fun !!!
//
\end{mycpptwocol}
\end{document}

insira a descrição da imagem aqui

informação relacionada