Wie zeichnet man Felder und Tabellen im Klartext


42

In vielen Nur-Text-Dokumenten werden Box-Zeichen verwendet, um diese Boxen in Abbildungen und Tabellen zu zeichnen. Solche Beispiele (aus RFC 5766 ) sind unten aufgeführt. 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 dieser, ebenfalls aus 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
Obwohl dies bereits viele Antworten hat, denke ich, dass es wahrscheinlich auf softwarerecs.stackexchange.com hätte gestellt werden müssen. Wir beantworten so etwas ziemlich oft
Mawg


Für Tabellen können Sie so etwas wie pandoc-placetable verwenden , um von CSV zu Markdown-Tabellen zu wechseln ... (oder einfach Pandoc, wenn Ihre Eingabe HTML oder DocX ist)
mb21

Antworten:


47

Auf 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 würde man sonst noch brauchen?

Hier ist meine wundervolle Kreation mit diesem Tool:

+-------------------------------+
|                               |
|  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 dies über die Schaltflächen auf der rechten Seite tun.
Ismael Miguel

5
Auch der "Download" -Button stellte sich als "Import" -Button heraus. Und der "Upload" -Button wurde zum "Export" -Button. Vielleicht bin ich es, aber das war wirklich verwirrend.
Mixxiphoid

1
@Mixxiphoid Nein, das bist nicht nur du. Und ja, es ist wirklich verwirrend, aber es funktioniert!
Ismael Miguel

17

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 Gnus groffPaket den picBefehl enthalten . Der Link zeigt ein Bild einer typischen PostScript-Ausgabe. nroffWenn Sie jedoch 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, wobei nur tblTabellen aus einfachen Listen erstellt werden.

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


Ist das nicht picähnlich wie bei graphviz dot?
hjpotter92

Ja. graphviz kann im Bildformat ausgeben. Ich denke, sie haben beide den gleichen AT & T Unix-Hintergrund, wobei graphviz eine Spezialanwendung ist, die weiterentwickelt wurde, während pic GUI-ähnlichen Werkzeugen Platz machte.
Meuh

10

Das Zeichnen von Feldern oder anderen Formen mit Zeichen wird als ASCII-Kunst (auch ANSI- oder ISO-Kunst) bezeichnet. Zur Erstellung von ASCII- Grafiken stehen zahlreiche Tools zur Verfügung, z. B. Online- ASCIIFlow , Bildwiedergabe in ASCII , Anwendungen wie Figlet usw. Einige sind in JavaScript implementiert und können in einem Browser unter einem beliebigen Betriebssystem ausgeführt werden.

Unter der Sonne gibt es nichts Neues - die Mikrografie ist eine Untergruppe der Kalligraphie mit einem langen Stammbaum, die seit Hunderten von Jahren verwendet wird und aus Buchstaben Bilder wie den folgenden Kalender erstellt , wobei ein Großteil des Bildes aus Buchstaben besteht.

Omer Kalender, Sotheby's



3

Über die Kommandozeile mit der Terminal-Tabelle von GitHub .

Installieren Sie 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                 |
+----------------------------+---------------------+

Dieselbe Ausgabe erhalten Sie mit Python:

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

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

Durch Auswählen eines Rechtecks ​​im blockvisuellen Modus ( <C-v>) und Drücken von <leader>[werden Strichzeichnungszeichen an den Rand gesetzt und mit bereits vorhandenen Strichzeichnungszeichen zusammengeführt. Wenn Sie +-|stattdessen auf reinem ASCII bestehen , sollte es leicht zu ändern sein.


0

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

  • Zeichne es! Plugin ; Dies hat seit Jahren keine Updates mehr gesehen, aber der Autor ist immer noch aktiv. Dies sagt etwas über seine Reife aus. Es eignet sich hervorragend für Boxen und Verbindungsleitungen. genau das, wonach hier gefragt wird. (Es kann sogar Kreise und Ellipsen machen!)
  • sketch.vim ist nicht gewartet und eher mausgesteuert

Sie können beide Plugins gleichzeitig verwenden, aber nicht beide gleichzeitig.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.