2

I am trying to show a code-piece inside a box. I was wondering is it possible to has its line numbers inside the box as well, shifting code little to the right?

I have following code:

\expandafter\def\csname ver@fixltx2e.sty\endcsname{}
\documentclass[10pt,journal,compsoc]{IEEEtran}
\PassOptionsToPackage{table}{xcolor}
\ifCLASSOPTIONcompsoc\usepackage[nocompress]{cite}
\else
    \usepackage{cite}
\fi
\ifCLASSINFOpdf\else\fi
\hyphenation{op-tical net-works semi-conduc-tor}
\usepackage[english]{babel}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\input{solidity-highlighting.tex}
\begin{document}
\section{Introduction}
\lstinputlisting[label={fig:withdraw}, belowskip=0
    \baselineskip, basicstyle=\scriptsize\ttfamily, frame=tlrb, rulecolor=\color{black}]{hello.sol}
\end{document}

hello.sol:

function hello() public returns (bool) {
    uint256 amount = 100
    return amount * 100
    return true;
}

and solidity-highlighting.tex

output (its line numbers exceed the left limit of the column as well):

enter image description here

wanted output (best I can do using paint):

enter image description here

alper
  • 1,389

2 Answers2

4

I warmly suggest tcolorbox.

\begin{filecontents*}{\jobname.sol}
function hello() public returns bool {
    uint256 amount = 100
    return amount * 100
    return true;
}
\end{filecontents*}

\documentclass[10pt,journal,compsoc]{IEEEtran}

\usepackage[english]{babel} \usepackage{pgfplots} \usepackage{booktabs} \usepackage{listings} \usepackage[many]{tcolorbox} \tcbuselibrary{listings}

\ifCLASSOPTIONcompsoc \usepackage[nocompress]{cite} \else \usepackage{cite} \fi

\pgfplotsset{compat=1.18} \hyphenation{op-tical net-works semi-conduc-tor}

\definecolor{verylightgray}{rgb}{.97,.97,.97}

\newtcbinputlisting{\inputlisting}[2][]{% listing file={#2}, top=0pt, left=16pt, bottom=0pt, right=8pt, colback=verylightgray, colframe=black, listing only, breakable, sharp corners, boxrule=0.2pt, listing options={#1}, }

\lstdefinelanguage{Solidity}{ keywords=[1]{% generic keywords including crypto operations anonymous, assembly, assert, balance, break, call, callcode, case, catch, class, constant, continue, constructor, contract, debugger, default, delegatecall, delete, do, else, emit, event, experimental, export, external, false, finally, for, function, gas, if, implements, import, in, indexed, instanceof, interface, internal, is, length, library, log0, log1, log2, log3, log4, memory, modifier, new, payable, pragma, private, protected, public, pure, push, require, return, returns, revert, selfdestruct, send, solidity, storage, struct, suicide, super, switch, then, this, throw, transfer, true, try, typeof, using, value, view, while, with, addmod, ecrecover, keccak256, mulmod, ripemd160, sha256, sha3 }, keywordstyle=[1]\color{blue}\bfseries, keywords=[2]{% types; money and time units address, bool, byte, bytes, bytes1, bytes2, bytes3, bytes4, bytes5, bytes6, bytes7, bytes8, bytes9, bytes10, bytes11, bytes12, bytes13, bytes14, bytes15, bytes16, bytes17, bytes18, bytes19, bytes20, bytes21, bytes22, bytes23, bytes24, bytes25, bytes26, bytes27, bytes28, bytes29, bytes30, bytes31, bytes32, enum, int, int8, int16, int24, int32, int40, int48, int56, int64, int72, int80, int88, int96, int104, int112, int120, int128, int136, int144, int152, int160, int168, int176, int184, int192, int200, int208, int216, int224, int232, int240, int248, int256, mapping, string, uint, uint8, uint16, uint24, uint32, uint40, uint48, uint56, uint64, uint72, uint80, uint88, uint96, uint104, uint112, uint120, uint128, uint136, uint144, uint152, uint160, uint168, uint176, uint184, uint192, uint200, uint208, uint216, uint224, uint232, uint240, uint248, uint256, var, void, ether, finney, szabo, wei, days, hours, minutes, seconds, weeks, years}, keywordstyle=[2]\color{teal}\bfseries, keywords=[3]{% environment variables block, blockhash, coinbase, difficulty, gaslimit, number, timestamp, msg, data, gas, sender, sig, value, now, tx, gasprice, origin }, keywordstyle=[3]\color{violet}\bfseries, identifierstyle=\color{black}, sensitive=false, comment=[l]{//}, morecomment=[s]{/}{/}, commentstyle=\color{gray}\ttfamily, stringstyle=\color{red}\ttfamily, morestring=[b]', morestring=[b]" }

\lstset{ language=Solidity, backgroundcolor=\color{verylightgray}, extendedchars=true, basicstyle=\footnotesize\ttfamily, showstringspaces=false, showspaces=false, numbers=left, numberstyle=\footnotesize, numbersep=9pt, tabsize=2, breaklines=true, showtabs=false, captionpos=b }

\begin{document}

\section{Introduction}

\inputlisting{\jobname.sol}

\end{document}

enter image description here

egreg
  • 1,121,712
3

Use the option framexleftmargin to include the numbers:

\expandafter\def\csname ver@fixltx2e.sty\endcsname{}
\documentclass[10pt,journal,compsoc]{IEEEtran}
\PassOptionsToPackage{table}{xcolor}
\ifCLASSOPTIONcompsoc\usepackage[nocompress]{cite}
\else
    \usepackage{cite}
\fi
\ifCLASSINFOpdf\else\fi
\hyphenation{op-tical net-works semi-conduc-tor}
\usepackage[english]{babel}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\input{solidity-highlighting.tex}
\begin{document}
\section{Introduction}
\lstinputlisting[framexleftmargin=5mm,label={fig:withdraw}, belowskip=0
    \baselineskip, basicstyle=\scriptsize\ttfamily, frame=tlrb, rulecolor=\color{black}]{hello.sol}
\end{document}

enter image description here

DG'
  • 21,727
  • It worked but left side exceeds the column ruler please see output: https://gist.github.com/avatar-lavventura/b3824a09a5819477fecab17b1931d004?permalink_comment_id=4154616#gistcomment-4154616 // is it possible to shift it to right to prevent it, or somehow fit into column – alper May 04 '22 at 11:25
  • @alper - You can adjust with the option xleftmargin=. Maybe you have to experiment with the values make the box align smoothly – DG' May 04 '22 at 11:39
  • When I used xleftmargin= now right side exceeds the column limit – alper May 04 '22 at 11:42
  • Then you have to make the box narrower (try xrightmargin). You can find all available commands in the manual – DG' May 04 '22 at 11:45
  • Instead of manually giving xleftmargin and xrightmargin values , can it forces the find best optimal value to be narrowed? – alper May 04 '22 at 11:55