
Ich spiele ein wenig mitlstlistings
und ich frage mich, ob so etwas für alle meine Angebote erreichbar wäre:
Wie erreicht man so etwas?
Hinweis: Ich suche nach einer Lösung, die ich auf alle meine Einträge anwenden kann (beispielsweise durch Definieren eines neuen Befehls) und die die beiden Spalten automatisch ausgleicht …
Antwort1
Derlistings
multicol
Paket kann gut mit dem Paket interagieren. Der Rahmenkram wird mit Hilfe von gemacht tcolorbox
, das wiederum gut mit funktioniert listings
. Es scheint transitiv zu sein!
Die Idee, die Zahlen hervorzuheben, stammt ausGonzalos Antwort.
\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}
BEARBEITENWie gewünscht, eine Version mit zwei führenden Nullen. Zu Ihrer Information: Dies \two@digits
ist ein LaTeX
Kernmakro (siehe texdoc source2e
) und \three@digits
existiert nicht (also definiere ich es, aber Sie könnten wieder ein Problem mit haben \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}