如何在框内代码中写入行号

如何在框内代码中写入行号

我正在尝试在一个框内显示一段代码。我想知道是否可以在框内显示其行号,并将代码稍微向右移动一点?

我有以下代码:

\expandafter\def\csname [email protected]\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}

你好.sol:

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

solidity-highlighting.tex

输出(其行号也超出了列的左限制):

在此处输入图片描述

想要的输出(使用绘画我能做到最好):

在此处输入图片描述

答案1

我热情建议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}

在此处输入图片描述

答案2

使用该选项framexleftmargin来包含数字:

\expandafter\def\csname [email protected]\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}

在此处输入图片描述

相关内容