วิธีการวาดกล่องและตารางในข้อความล้วน


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 tables ... (หรือเพียงแค่ pandoc ธรรมดาหากอินพุตของคุณเป็น html หรือ docx)
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ชุดคำสั่ง groffแพ็คเกจวันนี้ gnu จะมีpicคำสั่ง ลิงก์แสดงรูปภาพของเอาต์พุต PostScript ทั่วไปบางส่วน แต่การใช้nroffหรือตัวเลือกที่เหมาะสมคุณจะได้รับเวอร์ชัน ASCII ดูคู่มือผู้ใช้ (pdf) จาก 1991 สำหรับตัวอย่าง

ตารางในตัวอย่างของคุณอาจถูกสร้างโดยชุดคำสั่งเดียวกันนี้โดยใช้เพียงแค่tblสร้างตารางจากรายการอย่างง่าย

สำหรับเวอร์ชั่นguiคุณสามารถใช้artist-modeใน emacs เพื่อวาดกล่องและเส้นลูกศร ฯลฯ โดยใช้เมาส์หรือแป้นพิมพ์ ดูวิดีโอสาธิตyoutube


ไม่picเหมือนกับกราฟวิซของdotหรือไม่
hjpotter92

ใช่. graphviz สามารถแสดงผลในรูปแบบ pic ฉันคิดว่าพวกเขาทั้งคู่มาจากพื้นหลังของ AT&T Unix เดียวกันกับกราฟวิซเป็นแอพพลิเคชั่นพิเศษที่ได้รับการพัฒนาต่อไปในขณะที่ pic ให้ทางกับเครื่องมือสไตล์ gui
meuh

10

กล่องรูปวาดหรือรูปร่างอื่น ๆ ที่มีตัวอักษรเรียกว่าASCII art (หรือ ANSI หรือ ISO art) มีเครื่องมือมากมายที่จะช่วยในการสร้างงานศิลปะ ASCII เช่นASCIIFlowออนไลน์, การแสดงภาพใน ASCII , แอปพลิเคชั่นเช่นfiglet, ฯลฯมีการใช้งานใน JavaScriptและสามารถเรียกใช้ในเบราว์เซอร์บนระบบปฏิบัติการใด ๆ

ไม่มีอะไรใหม่ภายใต้ดวงอาทิตย์ - micrography เป็นชุดย่อยของการประดิษฐ์ตัวอักษรที่มีสายเลือดยาวใช้มาหลายร้อยปีโดยใช้ตัวอักษรในการสร้างภาพเช่นปฏิทินด้านล่างด้วยภาพส่วนใหญ่ที่เกิดขึ้นจากตัวอักษร

ปฏิทิน Omer ของโซเธบี้


8

ฉันจะวาดตาราง ASCII ได้อย่างไร

หากคุณเพียงต้องการวาดตาราง ASCII (เช่นตัวอย่างแรกของคุณ) ดูตัวสร้างตารางข้อความธรรมดา - TablesGenerator.comสำหรับยูทิลิตี้เว็บที่จะช่วยคุณสร้างตารางข้อมูลที่ดี:

ป้อนคำอธิบายรูปภาพที่นี่


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

เอาต์พุตเดียวกันสามารถรับได้โดยใช้ python:

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

สำหรับผู้ใช้ที่เป็นกลุ่มออกมีสองปลั๊กอิน oldtimer ที่น่าเคารพนับถือมีอยู่:

  • วาดมัน! ปลั๊กอิน ; สิ่งนี้ไม่ได้เห็นการอัปเดตใด ๆ ในรอบหลายปี แต่ผู้แต่งยังคงใช้งานอยู่ดังนั้นสิ่งนี้จึงกล่าวถึงความสมบูรณ์ของมัน มันยอดเยี่ยมสำหรับกล่องและสายเชื่อมต่อ สิ่งที่ถามมาที่นี่ (มันสามารถทำแวดวงและจุดไข่ปลาได้!)
  • sketch.vim ไม่ขยับเขยื้อนและใช้สไตล์เมาส์เพิ่มขึ้น

คุณสามารถใช้ปลั๊กอินทั้งสองแบบขนานกันได้ แต่ไม่ได้ใช้งานทั้งสองอย่างพร้อมกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.