Düz metinde kutular ve tablolar nasıl çizilir


42

Birçok düz metin belgesinde, bu kutuları şekil ve tablolarda çizmek için kutu çizim karakterleri kullanılır. Bu tür örnekler ( RFC 5766'dan ) aşağıda gösterilmiştir. Deneme ve yanma yöntemini kullanmaktan başka , bunu çizmenin daha iyi bir yolu var mı ( örneğin, bir Unix komut satırı aracı) ?


RFC 5766'dan örnekler :

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

Ve bu, aynı zamanda RFC 5766’dan :

                                        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
Bunun zaten çok fazla cevabı olmasına rağmen, muhtemelen softwarerecs.stackexchange.com
veriyoruz


tablolar için, gibi bir şey kullanabilirsiniz -placetable Pandoc (girişinizi html veya docx ise ya da sade Pandoc) ... markdown tablolara csv den gitmek
mb21

Yanıtlar:


47

Ücretsiz ASCIIflow web sitesi , metin kutuları, metinler, çizgiler, oklar, serbest biçimli çizgiler çizmenize, silmenize, dışa aktarmanıza, dışa aktarmanıza ve hatta geri almanıza / geri almanıza izin verir. Başka neye ihtiyaç duyulur?

İşte bu aracı kullanarak benim harika yaratım:

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

Bu web sitesinin dezavantajlarından biri pano kullanımıdır. Doğrudan kopyalayıp yapıştıramazsınız. Sağ taraftaki düğmelerden yapmalısınız.
Ismael Miguel,

5
Ayrıca 'İndir' düğmesinin içe aktarma düğmesi olduğu ortaya çıktı. Ve 'Upload' butonu ihracat butonu oldu. Belki benim, ama bu gerçekten kafa karıştırıcıydı.
Mixxiphoid

1
@Mixxiphoid Hayır, sadece sen değilsin. Ve evet, gerçekten kafa karıştırıcı, ama işe yarıyor!
Ismael Miguel,

17

Bu resimleri 30 yıl öncesine ait araçları, yani komut odasının bir parçası olan pic kullanarak çizmek mümkündür troff. Bugünlerde gnu'nun groffpaketi pickomutu içerecek . Bağlantı gösterileri bazı tipik PostScript çıktı resim, ancak kullanarak nroffbir ascii-art versiyonu alacak veya uygun seçenekler. Örnekler için 1991 kullanım kılavuzuna (pdf) bakınız .

Örneğinizdeki tablolar muhtemelen aynı komut takımı tarafından üretiliyor tbl, basit listelerden tablo üretiliyor.

Bir gui sürümü için, artist-modefareyi veya klavyeyi kullanarak kutular ve oklu çizgiler vb. Çizmek için emacs'de kullanabilirsiniz . Youtube video demosuna bakın .


picGraphviz's benzer değil dotmi?
hjpotter92

Evet. graphviz, pic biçiminde çıktı verebilir. Her ikisinin de aynı AT&T Unix arka planından geldiğini düşünüyorum, graphviz daha fazla gelişme gösteren özel amaçlı bir uygulama iken, pic gui tarzı araçlara yol açtı.
meuh

10

Kutuları veya karakterli diğer şekilleri çizmek ASCII resmi (ayrıca ANSI veya ISO resmi) olarak bilinir . Çevrimiçi ASCIIFlow , ASCII'de görüntü oluşturma , figlet vb. Uygulamalar gibi ASCII sanatını yaratmada yardımcı olacak çok sayıda araç vardır . Bazıları JavaScript'te uygulanmıştır ve herhangi bir işletim sisteminde bir tarayıcıda çalıştırılabilir.

Güneşin altında yeni bir şey yok - mikrografi, yüzlerce yıl boyunca kullanılan, aşağıdaki takvim gibi resimler oluşturmak için harfleri kullanarak, harflerin oluşturduğu görüntünün çoğunu kullanan uzun bir soyağacına sahip bir hat alt kümesidir .

Ömer Takvimi, Sotheby's



3

Komut satırından GitHub'dan terminal tablosu kullanarak .

Yükleyin terminal-table:

gem install terminal-table

Örneğin:

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

Örnek çıktı:

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

Aynı çıktı python kullanılarak elde edilebilir:

pip install terminaltables

Örneğin:

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

Bu benim içinde var .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

Blok görsel modunda ( <C-v>) bir dikdörtgen seçmek ve tuşuna basmak <leader>[, çizgi çizme karakterlerini kenarlarına koyar ve bunları önceden var olan çizgi çizme karakterleriyle birleştirir. +-|Bunun yerine saf ASCII konusunda ısrar ediyorsanız , değiştirilmesi kolay olmalıdır.


0

Dışarıdaki tüm Vim kullanıcıları için iki saygıdeğer oldtimer eklentisi mevcut:

  • Çiz! eklenti ; Bu yıllardır herhangi bir güncelleme görmedi, ancak yazarı hala aktif, bu nedenle vadesiyle ilgili bir şeyler söylüyor. Kutular ve bağlantı hatları için harika; tam burada ne isteniyor. (Daireler ve elipsler bile yapabilir!)
  • sketch.vim bakımsız ve fare odaklı, boyama stili

Her iki eklentiyi de paralel olarak kullanabilirsiniz, ancak her ikisini de aynı anda etkin değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.