CLRS(알고리즘 소개)에서처럼 열이 포함된 알고리즘을 어떻게 조판할 수 있나요?

CLRS(알고리즘 소개)에서처럼 열이 포함된 알고리즘을 어떻게 조판할 수 있나요?

~ 안에 알고리즘 소개, Thomas Cormen의 이 이미지와 같은 알고리즘이 있습니다. 코드 열 하나, 비용 열 하나, 시간 열 하나가 있습니다.

많이 검색해봤는데 어떻게 하는지 못찾았네요.

여기에 이미지 설명을 입력하세요

답변1

.clrscode

\documentclass[11pt]{article}

\usepackage[noend]{algorithmic}

\newcommand{\TITLE}[1]{\item[#1]}
\renewcommand{\algorithmiccomment}[1]{$/\!/$ \parbox[t]{4.5cm}{\raggedright #1}}
% ugly hack for for/while
\newbox\fixbox
\renewcommand{\algorithmicdo}{\setbox\fixbox\hbox{\ {} }\hskip-\wd\fixbox}
% end of hack
\newcommand{\algcost}[2]{\strut\hfill\makebox[1.5cm][l]{#1}\makebox[4cm][l]{#2}}

\begin{document}
\begin{algorithmic}[1]
  \TITLE{\textsc{Insertion-Sort}$(A)$}
    \algcost{\textit{cost}}{\textit{times}}
  \FOR{$j=2$ \TO $A.\mathit{length}$
    \algcost{$c_1$}{$n$}}
  \STATE $\mathit{key} = A[j]$
    \algcost{$c_2$}{$n-1$}
  \STATE \COMMENT{Insert $A[j]$ to the sorted sequence $A[1..j-1]$}
    \algcost{$0$}{$n-1$}
  \STATE $i = j-1$
    \algcost{$c_4$}{$n-1$}
  \WHILE{$i>0$ \AND $A[i]>key$
    \algcost{$c_5$}{$\sum_{j=2}^{n} t_j$}}
  \STATE $A[i+1]= A[i]$
    \algcost{$c_6$}{$\sum_{j=2}^{n} (t_j-1)$}
  \STATE $i = i-1$
    \algcost{$c_7$}{$\sum_{j=2}^{n} (t_j-1)$}
  \ENDWHILE
  \STATE $A[i+1] = \mathit{key}$
    \algcost{$c_8$}{$n-1$}
  \ENDFOR
\end{algorithmic}
\end{document}

몇 가지 사항에 유의하세요.

  1. 조정이 필요할 수 있는 세 가지 너비(센티미터)가 있습니다.

  2. 비용 forwhile명세서는 괄호 안에 표시되며 해당 괄호와 닫는 괄호 사이에 공백이 있어서는 안 됩니다. 이것은 약간 깨지기 쉽습니다. for if및 기타 모든 블록 문과 동일합니다 .

  3. 3행의 비용은 두 번째 행이 아닌 첫 번째 행 옆에 표시됩니다(원본과 동일). 이렇게 하는게 더 쉬웠는데 나도 이게 더 좋은 것 같다.

이 답변은 패키지를 사용하는 Jubobs의 답변과 반대 경로를 취합니다 clrscode. 를 사용하려는 경우 추가 열을 탭하는 데 clrscode올바르게 사용하는 방법을 찾을 수 있을 것이라고 확신합니다 . 비록 잘 문서화되어 있지는 않습니다. |>또한 알고리즘이 책에 나온 것과 똑같이 보이도록 하려면 다른 이유로도 바람직할 수 있습니다.


결과

답변2

(부분 답변만 가능)

Cormen은 그의 것을 사용했습니다.clrscode패키지CLRS의 두 번째 버전이지만 "강화된" 버전입니다.clrscode3e, 제3판의 경우,삽입 정렬스크린샷의 알고리즘이 촬영됩니다. 자세한 내용은 다음을 참조하세요.이것.

알고리즘을 조판하는 코드(그러나없이"비용" 및 "시간" 열)은 6페이지에서 확인할 수 있습니다.clrscode3e선적 서류 비치. 후자는 열을 조판하는 방법에 대해 언급하지 않습니다. 게다가 패키지의 소스 코드는 이에 대한 (문서화되지 않은) 메커니즘을 제공하지 않는 것 같습니다.

그러나 Cormen의 codebox환경은 환경을 기반으로 합니다 tabbing. 아마도 거기에서 해야 할 일이 있을 것입니다. 하지만 저는 그다지 익숙하지 않습니다 tabbing.

여기에 이미지 설명을 입력하세요

\documentclass{article}

\usepackage{clrscode3e}

\begin{document}

\begin{codebox}
\Procname{$\proc{Insertion-Sort}(A)$}
\li \For $j \gets 2$ \To $\attrib{A}{length}$
\li     \Do
            $\id{key} \gets A[j]$
\li         \Comment Insert $A[j]$ into the sorted sequence
                $A[1 \twodots j-1]$.
\li         $i \gets j-1$
\li         \While $i > 0$ and $A[i] > \id{key}$
\li             \Do
                    $A[i + 1] = A[i]$
\li                 $i \gets i-1$
                \End
\li         $A[i+1] \gets \id{key}$
        \End
\end{codebox}

\end{document}

답변3

CLRS 패키지, 코드 이름 "clrscode3e", 패키지 설명 및 .sty파일이 웹 사이트에서 제공됩니다.http://www.cs.dartmouth.edu/~thc/clrscode/.sty, 쉽게 파일을 다운로드하고 설명도 읽을 수 있습니다 .

\documentclass{article}

\usepackage{clrscode3e}

\begin{document}

\begin{codebox}
\Procname{$\proc{Insertion-Sort}(A)$}
\li \For $j \gets 2$ \To $\attrib{A}{length}$
\li     \Do
            $\id{key} \gets A[j]$
\li         \Comment Insert $A[j]$ into the sorted sequence
                $A[1 \twodots j-1]$.
\li         $i \gets j-1$
\li         \While $i > 0$ and $A[i] > \id{key}$
\li             \Do
                    $A[i + 1] = A[i]$
\li                 $i \gets i-1$
                \End
\li         $A[i+1] \gets \id{key}$
        \End
\end{codebox}
\end{document}

관련 정보