用花括号括起代码行并在其旁边添加一些文本

用花括号括起代码行并在其旁边添加一些文本

我目前正在研究一些程序的算法复杂性,我必须处理一行又一行的代码,如果我可以将其中一些行括在右(或左)花括号中并在旁边记下所述行(数学公式)的复杂性,这将非常好并且很有帮助。

我使用这个listings包是因为我认为它在显示代码方面做得非常出色,但说实话,我并不是乳胶专家,这就是为什么到目前为止我只遇到了令人讨厌的错误而什么也没做。我希望你能帮我解决这个问题。

编辑:以下是我希望在纸面上实现的目标: 在此处输入图片描述

答案1

我首先承认,对于您希望实现的目标而言,这种结构可能过于繁琐,但我还是会介绍它。我们在这里所做的是将不同的逐字代码块粘贴到命名的宏中(这些宏是包含给定代码行的框)。如果我们只是按顺序重新调用命名的宏(MWE 中的未标记代码),我们就可以恢复源代码,但请注意,作为一个框,宏不会跨页面中断。

但后来我创建了一个\labelcode{}{}宏,它的第一个参数是一个重现代码框的宏,第二个参数是应用于该块的标签。如果没有嵌套,则非常简单:只需提供与特定环境关联的宏名称myverbbox。但是,如果要嵌套标签,则必须使用\savestack将内部代码和标签填充到新框中,然后应用于\labelcode保存的堆栈宏。

我尝试构造布局\begin{myverbbox}\end{myverbbox}使其不干扰代码流,但我会注意到之前的空白\end{mybox}是动词框的一部分,会影响所应用的任何标签的水平定位。

\documentclass{article}
\usepackage{verbatimbox}
\usepackage{scalerel}
\usepackage[usestackEOL]{stackengine}[2013-10-15]
\makeatletter\let\macroname\@macro@name\makeatother
\newcommand\labelcode[2]{%
  \def\boxname{\csname\macroname{#1}content\endcsname}%
  \scaleleftright[1.5ex]{.}{#1~}{\}}%
    \raisebox{.5\ht\boxname-.5\ht\strutbox}{#2}%
}
\parindent 0in
\parskip 1em
\begin{document}
                                  \begin{myverbbox}{\partitionA}
mt Partition (A, start, end)      \end{myverbbox}
                                  \begin{myverbbox}{\thetaONE}
   pivot = A[start]
   i = start - 1
   j = end + 1          \end{myverbbox}
                                  \begin{myverbbox}{\thetaNa}
      REPEAT
         REPEAT
            i = i + 1
         until A[i] >= pivot
         REPEAT
            j = j - 1
         until A[j] <= pivot      \end{myverbbox}%
                                  \begin{myverbbox}{\thetaI}
         if i < j then
           exchange(A[i], A[j])   \end{myverbbox}
                                  \begin{myverbbox}{\thetaNb}
      until (i >=j)               \end{myverbbox}
                                  \begin{myverbbox}{\partitionB}
   RETURN j                       \end{myverbbox}

MARKED CODE:\\%
\\
\partitionA\\%
\\
\labelcode{\thetaONE}{$\Theta(1)$}\\%
\\
  \savestack{\x}{\Shortstack[l]{\thetaNa\\%
\\
                 \labelcode{\thetaI}{$\Theta(I)$}\\%
\\
                 \thetaNb}}%
\labelcode{\x}{$\Theta(n)$}\\%
\\
\partitionB

UNMARKED CODE:\\%
\\
\partitionA\\%
\\
\thetaONE\\%
\\
\thetaNa\\%
\\
\thetaI\\%
\\
\thetaNb\\%
\\
\partitionB
\end{document}

在此处输入图片描述

相关内容