일반 텍스트로 상자와 테이블을 그리는 방법


42

많은 일반 텍스트 문서에서 상자 그리기 문자는 그림과 표에 이러한 상자를 그리는 데 사용됩니다. ( RFC 5766의 ) 이러한 예 는 다음과 같다. 시행 착오 방법을 사용하는 것 외에 이것을 그리는 더 좋은 방법이 있습니까 ( 예 : Unix 명령 행 도구) ?


RFC 5766의 예 :

       +----------------------------+---------------------+
       | TURN client to TURN server | TURN server to peer |
       +----------------------------+---------------------+
       |             UDP            |         UDP         |
       |             TCP            |         UDP         |
       |        TLS over TCP        |         UDP         |
       +----------------------------+---------------------+

그리고 이것은 RFC 5766 에서도 나온 것입니다 :

                                        Peer A
                                        Server-Reflexive    +---------+
                                        Transport Address   |         |
                                        192.0.2.150:32102   |         |
                                            |              /|         |
                          TURN              |            / ^|  Peer A |
    Client's              Server            |           /  ||         |
    Host Transport        Transport         |         //   ||         |
    Address               Address           |       //     |+---------+
   10.1.1.2:49721       192.0.2.15:3478     |+-+  //     Peer A
            |               |               ||N| /       Host Transport
            |   +-+         |               ||A|/        Address
            |   | |         |               v|T|     192.168.100.2:49582
            |   | |         |               /+-+
 +---------+|   | |         |+---------+   /              +---------+
 |         ||   |N|         ||         | //               |         |
 | TURN    |v   | |         v| TURN    |/                 |         |
 | Client  |----|A|----------| Server  |------------------|  Peer B |
 |         |    | |^         |         |^                ^|         |
 |         |    |T||         |         ||                ||         |
 +---------+    | ||         +---------+|                |+---------+
                | ||                    |                |
                | ||                    |                |
                +-+|                    |                |
                   |                    |                |
                   |                    |                |
             Client's                   |            Peer B
             Server-Reflexive    Relayed             Transport
             Transport Address   Transport Address   Address
             192.0.2.1:7000      192.0.2.15:50000     192.0.2.210:49191

                                 Figure 1

2
이것은 이미 많은 답변을 가지고 있지만, 아마 그것은 softwarerecs.stackexchange.com 에 요청되었을 것이라고 생각합니다. 우리는 이런 종류의 질문에 자주 대답합니다
Mawg


테이블의 경우, pandoc-placetable 과 같은 것을 사용 하여 csv에서 markdown 테이블로 이동할 수 있습니다 ... (또는 입력이 html 또는 docx 인 경우 일반 pandoc)
mb21

답변:


47

무료 ASCIIflow 웹 사이트 를 사용하면 텍스트 상자, 텍스트, 선, 화살표, 자유형 선, 지우기, 가져 오기, 내보내기 및 실행 취소 / 다시 실행을 그릴 수 있습니다. 또 무엇이 필요할까요?

이 도구를 사용한 멋진 작품은 다음과 같습니다.

+-------------------------------+
|                               |
|  My first ASCII box           |
|                               |
+---------+---------------------+
          |
          |
          |
          | My first ever ASCII arrow
          |
          |
          |
+---------v----------------------+
|                                |
|  My second ASCII box           |
+--------------------------------+

해당 웹 사이트의 단점 중 하나는 클립 보드 처리입니다. 직접 복사 / 붙여 넣기를 할 수 없습니다. 당신은 오른쪽에있는 버튼을 통해해야합니다.
Ismael Miguel

5
또한 '다운로드'버튼은 가져 오기 버튼으로 밝혀졌습니다. 그리고 '업로드'버튼은 내보내기 버튼이되었습니다. 어쩌면 나일지도 모르지만 정말 혼란 스러웠습니다.
Mixxiphoid

1
@Mixxiphoid 아니요, 당신 만이 아닙니다. 그리고 그렇습니다. 정말 혼란 스럽지만 작동합니다!
Ismael Miguel

17

30 년 전의 도구, 즉 명령 모음의 일부인 그림 을 사용하여 이러한 그림을 그릴 수 있습니다 troff. 요즘 gnu의 groff패키지에는 pic명령 이 포함됩니다 . 이 링크는 일반적인 PostScript 출력의 그림을 보여 주지만 nroff적절한 옵션을 사용 하면 ASCII 버전을 얻을 수 있습니다. 예제는 1991 년 의 사용 설명서 (pdf)를 참조하십시오 .

예제의 테이블은 아마도 tbl간단한 목록에서 테이블을 생성하는 동일한 명령 모음에 의해 생성 될 것입니다 .

A의 GUI의 버전, 당신이 사용할 수있는 artist-mode마우스 나 키보드를 사용하여 상자와 화살표가 붙은 라인 등을 그릴 이맥스에서. YouTube 비디오 데모를 참조하십시오 .


picgraphviz와 유사 하지 dot않습니까?
hjpotter92

예. graphviz는 그림 형식으로 출력 할 수 있습니다. 나는 그들이 같은 AT & T Unix 배경을 가지고 있다고 생각합니다. graphviz는 추가 개발을 거친 특수 목적의 응용 프로그램이며 그림은 GUI 스타일 도구에 사용되었습니다.
meuh

10

문자가있는 상자 나 다른 도형을 ASCII 아트 (ANSI 또는 ISO 아트)라고합니다. 온라인 ASCIIFlow , ASCII 이미지 렌더링 , figlet 과 같은 응용 프로그램 등과 같은 ASCII 아트를 만드는 데 도움이되는 수많은 도구가 있습니다 . 일부는 JavaScript구현되었으며 모든 OS의 브라우저에서 실행할 수 있습니다.

태양 아래에 새로운 것은 없습니다. 현미경 사진은 문자로 만든 많은 이미지와 함께 아래 달력 과 같은 그림을 형성하기 위해 문자를 사용하여 수백 년 동안 사용 된 긴 혈통을 가진 서예의 하위 집합입니다 .

오더 캘린더, 소더비



3

GitHub의 터미널 테이블을 사용하는 명령 행 에서 .

설치 terminal-table:

gem install terminal-table

예를 들면 다음과 같습니다.

irb
require 'terminal-table'

rows = []
rows << ['UDP', 'UDP']
rows << ['TCP', 'UDP']
rows << ['TLS over TCP ', 'UDP']
table = Terminal::Table.new :headings => ['TURN client to TURN server', 'TURN server to peer'], :rows => rows

puts table

샘플 출력 :

+----------------------------+---------------------+
| TURN client to TURN server | TURN server to peer |
+----------------------------+---------------------+
| UDP                        | UDP                 |
| TCP                        | UDP                 |
| TLS over TCP               | UDP                 |
+----------------------------+---------------------+

파이썬을 사용하여 동일한 출력을 얻을 수 있습니다.

pip install terminaltables

예를 들면 다음과 같습니다.

from terminaltables import AsciiTable
table_data = [
    ['TURN client to TURN server', 'TURN server to peer'],
    ['UDP', 'UDP'],
    ['TCP', 'UDP'],
    ['TLS over TCP', 'UDP']
]
table = AsciiTable(table_data)
print table.table

1

나는 이것을 내 안에있다 .vimrc:

vn<silent> <leader>[ :<c-u>cal<sid>rect(1)<cr>
vn<silent> <leader>] :<c-u>cal<sid>rect(2)<cr>
let s:h=split(' ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋','\zs')
let s:e=map(range(81),'[v:val/27%3,v:val/9%3,v:val/3%3,v:val%3]') "base-3 encode
fu s:rect(x) "x:thickness
 if visualmode()!=#"\<c-v>"|retu|en
 let s=&sel|let&sel='inclusive'|let[ls,cs]=[[line("'<"),line("'>")],[virtcol("'<"),virtcol("'>")]]|let&sel=s
 let[l0,l1,c0,c1]=[min(ls),max(ls),min(cs),max(cs)]
 let a=map(map(getline(l0,l1),"split(v:val,'\\zs')"),"extend(v:val,repeat([' '],max([0,c1-len(v:val)])))")
 let x=a:x|let[V,H]=[[x,0,x,0],[0,x,0,x]] "vertical and horizontal line
 "b:list of changes as [line,column,bitmask]
 if l0<l1&&c0<c1|let b=[[l0,c0,[x,0,0,x]],[l0,c1,[x,x,0,0]],[l1,c0,[0,0,x,x]],[l1,c1,[0,x,x,0]]]
                 let b+=map(range(l0+1,l1-1),'[v:val,c0,V]')+map(range(l0+1,l1-1),'[v:val,c1,V]')
                 let b+=map(range(c0+1,c1-1),'[l0,v:val,H]')+map(range(c0+1,c1-1),'[l1,v:val,H]')
 elsei l0<l1    |let b=[[l0,c0,[x,0,0,0]],[l1,c0,[0,0,x,0]]]+map(range(l0+1,l1-1),'[v:val,c0,V]')
 elsei c0<c1    |let b=[[l0,c0,[0,0,0,x]],[l0,c1,[0,x,0,0]]]+map(range(c0+1,c1-1),'[l0,v:val,H]')
 el             |let b=[]|en
 for[l,c,m]in b
  let i=index(s:h,a[l-l0][c-1])
  if i>=0|let z=map(copy(s:e[i]),'max([v:val,m[v:key]])')|let a[l-l0][c-1]=s:h[27*z[0]+9*z[1]+3*z[2]+z[3]]|en
 endfo
 cal setline(l0,map(a,"join(v:val,'')"))
endf

블록 비주얼 모드 ( <C-v>) 에서 사각형을 선택 하고를 누르면 <leader>[선 그리기 문자가 경계에 놓 이고 기존의 선 그리기 문자와 병합됩니다. 순수한 ASCII를 고집 +-|하면 수정하기 쉬워야합니다.


0

모든 Vim 사용자를 위해 두 가지 오래된 oldtimer 플러그인을 사용할 수 있습니다.

  • 그려 봐! 플러그인 ; 이것은 몇 년 동안 업데이트를 보지 못했지만 저자는 여전히 활동 중이므로 성숙에 대해 이야기합니다. 박스와 연결 라인에 좋습니다. 여기에 요구되는 것만. (원이나 타원도 가능합니다!)
  • sketch.vim 은 유지되지 않고 마우스로 그리는 그림 스타일입니다.

두 플러그인을 동시에 사용할 수는 없지만 두 플러그인을 동시에 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.