Как нарисовать коробки и таблицы в виде простого текста

4756
jackxujh

Во многих текстовых документах символы рисования блоков используются для рисования этих блоков на рисунках и в таблицах. Такие примеры (из 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 
44
Хотя на этот вопрос уже есть много ответов, я думаю, что об этом, вероятно, следовало бы спросить на https://softwarerecs.stackexchange.com/. Мы часто отвечаем на подобные вопросы. Mawg 5 лет назад 2
дублирование между сайтами: [Программное обеспечение для рисования фигур в текстовом файле (ASCII / Unicode)] (https://softwarerecs.stackexchange.com/q/3916/3579) phuclv 5 лет назад 0
для таблиц вы можете использовать что-то вроде [pandoc-placetable] (https://github.com/mb21/pandoc-placetable) для перехода от csv к таблицам уценки ... (или просто обычный pandoc, если вы вводите html или docx ) mb21 5 лет назад 0

7 ответов на вопрос

49
harrymc

Бесплатный веб-сайт ASCIIflow позволит вам рисовать текстовые поля, текст, линии, стрелки, линии произвольной формы, стирать, импортировать, экспортировать и даже отменять / повторять. Что еще нужно?

Вот мое замечательное творение с использованием этого инструмента:

+-------------------------------+ | | | My first ASCII box | | | +---------+---------------------+ | | | | My first ever ASCII arrow | | | +---------v----------------------+ | | | My second ASCII box | +--------------------------------+ 
Одним из недостатков этого сайта является работа с буфером обмена. Вы не можете копировать / вставлять напрямую. Вы должны сделать это с помощью кнопок на правой стороне. Ismael Miguel 5 лет назад 0
Также кнопка «Скачать» оказалась кнопкой импорта. И кнопка «Загрузить» оказалась кнопкой экспорта. Может быть, это я, но это действительно сбивало с толку. Mixxiphoid 5 лет назад 5
@ Mixixiphoid Нет, это не только ты. И да, это действительно сбивает с толку, но работает! Ismael Miguel 5 лет назад 1
17
meuh

Можно сделать такие фотографии, используя инструменты, датируемые 30 лет, а именно рис, который является частью troffкоманды набора. В эти дни groffпакет gnu будет содержать picкоманду. Ссылка показывает изображение некоторых типичных выходных данных PostScript, но, используя nroffили соответствующие параметры, вы получите версию ascii-art. См. Руководство пользователя (pdf) от 1991 года для примеров.

Таблицы в вашем примере, вероятно, создаются этим же набором команд, используя только то, tblчто создает таблицы из простых списков.

Для версии с графическим интерфейсом вы можете использовать artist-modeв emacs для рисования рамок, линий со стрелками и т. Д., Используя мышь или клавиатуру. Смотрите видео демо YouTube .

Разве `pic` не похож на` dot` в graphviz? hjpotter92 5 лет назад 0
Да. Graphviz может выводить в формате Pic. Я думаю, что они оба из одного и того же опыта AT & T Unix. Graphviz - это приложение специального назначения, которое получило дальнейшее развитие, в то время как pic уступил место инструментам в стиле gui. meuh 5 лет назад 0
10
DrMoishe Pippik

Рисование прямоугольников или других фигур с символами известно как искусство ASCII (также искусство ANSI или ISO). Существуют многочисленные инструменты, помогающие в создании искусства ASCII, такие как онлайн ASCIIFlow, рендеринг изображений в ASCII, приложения, такие как figlet и т. Д. Некоторые из них были реализованы на JavaScript и могут быть запущены в браузере в любой ОС.

Под солнцем нет ничего нового - микрография - это подмножество каллиграфии с длинной родословной, используемой в течение сотен лет с использованием букв для формирования рисунков, таких как календарь ниже, с большей частью изображения, образованного из букв.

Omer Calendar, Sotheby's

8
DavidPostill

Как я могу рисовать таблицы ASCII?

Если вы просто хотите нарисовать таблицы ASCII (как ваш первый пример), см. Генератор таблиц простого текста - TablesGenerator.com для веб-утилиты, которая поможет вам создать красивые таблицы данных:

enter image description here

3
GAD3R

Из командной строки используется терминал-таблица из 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
ngn

У меня есть это в моем .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
Ingo Karkat

Для всех пользователей Vim доступны два почтенных старых плагина:

  • Нарисуй это! плагин ; Это не было обновлений в течение многих лет, но его автор все еще активен, так что это говорит о его зрелости. Отлично подходит для коробок и соединительных линий; только то, что просят здесь. (Это может даже сделать круги и эллипсы!)
  • sketch.vim не поддерживается и более управляемый мышью стиль рисования

Вы можете использовать оба плагина параллельно, но не активировать оба одновременно.