Wie zeichnet man Boxen und Tabellen im Klartext?

4843
jackxujh

In vielen Klartextdokumenten werden Kastenzeichen zum Zeichnen dieser Felder in Abbildungen und Tabellen verwendet. Solche Beispiele (aus RFC 5766 ) sind unten gezeigt. Gibt es eine bessere Möglichkeit, dies zu zeichnen ( z. B. ein Unix-Befehlszeilentool), als die Trial-and-Error-Methode zu verwenden?


Beispiele aus RFC 5766 :

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

Und dies auch von 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 
44
Während dies bereits viele Antworten gibt, denke ich, dass es wahrscheinlich auf https://softwarerecs.stackexchange.com/ hätte gefragt werden müssen. Wir beantworten diese Art von Fragen oft Mawg vor 5 Jahren 2
Standortübergreifendes Duplikat: [Software zum Zeichnen von Formen in einer Textdatei (ASCII / Unicode)] (https://softwarerecs.stackexchange.com/q/3916/3579) phuclv vor 5 Jahren 0
Für Tabellen können Sie etwas wie [pandoc-placetable] (https://github.com/mb21/pandoc-placetable) verwenden, um von csv zu Markdown-Tabellen zu wechseln ... (oder einfach nur pandoc, wenn Sie HTML oder Docx eingeben ) mb21 vor 5 Jahren 0

7 Antworten auf die Frage

49
harrymc

Mit der kostenlosen ASCIIflow-Website können Sie Textfelder, Text, Linien, Pfeile, Freiformlinien zeichnen, löschen, importieren, exportieren und sogar rückgängig machen / wiederholen. Was braucht man sonst noch?

Hier ist meine wunderbare Schöpfung mit diesem Werkzeug:

+-------------------------------+ | | | My first ASCII box | | | +---------+---------------------+ | | | | My first ever ASCII arrow | | | +---------v----------------------+ | | | My second ASCII box | +--------------------------------+ 
Einer der Nachteile dieser Website ist die Handhabung der Zwischenablage. Sie können nicht direkt kopieren / einfügen. Sie müssen es über die Knöpfe auf der rechten Seite tun. Ismael Miguel vor 5 Jahren 0
Auch der Button "Download" erwies sich als Import-Button. Und der "Upload" -Button erwies sich als der Export-Button. Vielleicht bin ich es, aber das war wirklich verwirrend. Mixxiphoid vor 5 Jahren 5
@Mixxiphoid Nein, das sind nicht nur Sie. Und ja, es ist wirklich verwirrend, funktioniert aber! Ismael Miguel vor 5 Jahren 1
17
meuh

Es ist möglich, solche Bilder mit Werkzeugen zu zeichnen, die 30 Jahre alt sind, nämlich pic, das Teil der troffBefehlssuite ist. In diesen Tagen wird das groffPaket von gnu den picBefehl enthalten . Der Link zeigt ein Bild einiger typischer PostScript-Ausgaben. nroffWenn Sie jedoch oder die entsprechenden Optionen verwenden, erhalten Sie eine Ascii-Art-Version. Beispiele finden Sie in der Bedienungsanleitung (pdf) von 1991.

Die Tabellen in Ihrem Beispiel werden wahrscheinlich von derselben Befehlssuite erstellt. Nur tbldie Tabellen erzeugen aus einfachen Listen.

Für eine GUI- Version können Sie artist-modein Emacs Boxen und Pfeile usw. mit der Maus oder der Tastatur zeichnen. Siehe Video- Demo von YouTube .

Ist "pic" nicht ähnlich wie "dot" von graphviz? hjpotter92 vor 5 Jahren 0
Ja. graphviz kann im pic-Format ausgeben. Ich denke, beide stammen aus dem gleichen AT & T-Unix-Hintergrund, wobei Graphviz eine Spezialanwendung ist, die weiterentwickelt wurde, während pic den Werkzeugen im Gui-Stil nachgab. meuh vor 5 Jahren 0
10
DrMoishe Pippik

Das Zeichnen von Boxen oder anderen Formen mit Zeichen ist als ASCII-Art (auch ANSI- oder ISO-Art) bekannt. Es gibt zahlreiche Werkzeuge zur Erstellung von ASCII-Grafiken, wie z. B. Online- ASCIIFlow, Bild-Rendering in ASCII, Anwendungen wie Figlet usw. Einige davon wurden in JavaScript implementiert und können in einem Browser unter einem beliebigen Betriebssystem ausgeführt werden.

Es gibt nichts Neues unter der Sonne - die Mikrographie ist eine Teilmenge der Kalligrafie mit einem langen Stammbaum, die seit Hunderten von Jahren verwendet wird und Buchstaben verwendet, um Bilder wie den untenstehenden Kalender zu bilden, wobei ein Großteil des Bildes aus Buchstaben gebildet wird.

Omer Calendar, Sotheby's

8
DavidPostill

Wie kann ich ASCII-Tabellen zeichnen?

Wenn Sie nur ASCII-Tabellen zeichnen möchten (wie im ersten Beispiel), finden Sie unter Generator für einfache Texttabellen - TablesGenerator.com ein Web-Hilfsprogramm, mit dem Sie nette Datentabellen erstellen können:

enter image description here

3
GAD3R

Von der Kommandozeile aus mit Terminal-Table von GitHub .

Installiere terminal-table:

gem install terminal-table 

Zum Beispiel:

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 

Beispielausgabe:

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

Die gleiche Ausgabe kann mit Python erhalten werden:

pip install terminaltables 

zum Beispiel:

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
ngn

Ich habe das in meinem .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 

Wenn Sie ein Rechteck im block-visuellen Modus auswählen ( <C-v>) und drücken, werden <leader>[die Linienzeichen an den Rand gesetzt und mit den bereits vorhandenen Linienzeichen zusammengefügt. Wenn Sie +-|stattdessen auf reinem ASCII bestehen, sollte es leicht zu ändern sein.

0
Ingo Karkat

Für alle Vim- Benutzer gibt es zwei ehrwürdige Oldtimer-Plugins:

  • Zeichne es! Plugin ; Dieses hat seit Jahren keine Updates mehr erhalten, aber der Autor ist immer noch aktiv. Das sagt etwas über seine Reife aus. Es ist großartig für Boxen und Verbindungslinien. genau das, was hier gefragt wird. (Es können sogar Kreise und Ellipsen gemacht werden!)
  • sketch.vim ist nicht gepflegt und eher mausgesteuert

Sie können beide Plugins parallel verwenden, nur müssen beide nicht gleichzeitig aktiv sein.