Eu gostaria decertoalinhe o texto em colunas no Sublime Text 3 (no Win 8.1, FWIW).
Ou seja, eu quero converter isso
Time Cash Flow
0 -500
1 100
2 200
3 300
nisso
Time Cash Flow
0 -500
1 100
2 200
3 300
com o objetivo final deste
Time Cash Flow
----- ----------
0 -500
1 100
2 200
3 300
Este é ummesa simplesempandoc. Eu tentei os pacotes alignment
and AlignTab
, mas eles parecem se especializar em alinhar alguns delimitadores, em vez de alinhar colunas como eu preciso.
Existe algum truque para fazer isso? Também estou aberto a uma solução que exija vi ou Excel.
Responder1
Ok, aqui está uma solução que envolve Excel ou qualquer outro programa de planilha capaz de exportar CVS.
Você tem que instalar umfiltro de terceiros recém-lançado chamado "csv2table"(<- repositório GitHub) para Pandoc.
Também está disponível comoum filtro independente.
Instale o filtro independente assim:
mkdir ${HOME}/bin wget https://gist.githubusercontent.com/baig/b69e3146251bd90d12e7/raw/d8c8171fbe0ad5543f8aaf0a134250b29c689e57/csv2table.hs \ -O ${HOME}/bin/pandoc-csv2table.hs chmod a+x ${HOME}/bin/pandoc-csv2table.hs export PATH=${HOME}/bin:${PATH}
Meu método de instalação preferido, entretanto, é via
cabal
:cabal update export PATH=${HOME}/.cabal/bin:${PATH} cabal install cabal-install cabal install pandoc-csv2table
Leia odocumentação csv2table.
O que você pode fazer com esse filtro?
Você pode incluir um arquivo CSV externo em seu Markdown...
...ou abusando doimagem incluindo sintaxeassim:
![](/path/to/file.csv)
...ou abusando dobloco de código cercadosintaxe assim:
```` {.table source="/path/to/file.csv" <list-of-attributes>} ````
...ou inserindo diretamente suas linhas CSV na "seção da tabela protegida" assim:
```` {.table <list-of-attributes>} one,two,three 1,2,3 100,2000,55555 ````
Ao invocar o filtro na linha de comando do Pandoc,
--filter=pandoc-csv2table
o CSV será convertido em uma tabela em todos os seus formatos de saída.Além disso, você pode aplicar quase toda a formatação às tabelas suportadas pelo Pandoc:
- Use o atributo
type="multiline"
para criar um arquivomultiline_table
. - Use
type="pipe"
para criar um arquivopipe_table
. - Use
type="simple"
para criar um arquivosimple_table
. - Use
caption="My ***important*** caption for this table"
para adicionar uma legenda à tabela. (Isso pode incluir formatação de redução.) - Use
header="no"
se desejar uma tabela sem cabeçalhos de coluna (o valor padrão usado, se não for fornecido, éheader="yes"
). - Agora o recurso que você deseja:Use
aligns=LRCDR
para ordenar o alinhamento das colunas (da esquerda para a direita) como Esquerda, Direita, Centro, Padrão e Direita novamente.
- Use o atributo
Exemplo
Considere este
my.csv
arquivo:Time,"*Cash* Flow","Third column" 0,-500,loooooooooooong data field with many words 1,*100*, ***2***,`2000`,shorte **3**,30000,(second line is empty)
(Como você pode ver, eu até uso a marcação Markdown para alguns campos de dados das linhas CSV!)
Considere este Markdown
my.md
,:# Título ```` {.table source="./my.csv" aligns="LRCR" type="multiline" caption="Some ***caption***"} ````
Execute este comando para gerar a saída da tabela multilinha Markdown a partir de sua entrada CSV:
pandoc meu.md --filter=pandoc-csv2table -t marcação
Veja esta saída:
Execute este comando para gerar saída PDF com uma tabela multilinha a partir de sua entrada CSV:
pandoc meu.md --filter=pandoc-csv2table -o meu.pdf
Veja esta saída (captura de tela):
Se você deseja gerar"tabelas de tubos"com a sintaxe de dois pontos indicando alinhamento, você deve modificar um pouco o Markdown, bem como a linha de comando:
Modificar reduçãopara incluir
type="pipe"
nas opções de formatação da tabela:# Título ```` {.table source="./my.csv" aligns="LRCR" type="pipe" caption="Some ***caption***"} ````
Modificar linha de comandopara pedir
markdown_phpextra+table_captions
saída:pandoc meu.md --filter=pandoc-csv2table -t markdown_phpextra+table_captions
Veja a saída agora:
Claro, isso também funciona com todos os outros formatos de saída!
Responder2
Eu tenho outra solução. O Pandoc pipe_tables
requer o seguinte formato e pode lidar com alinhamentos à esquerda, ao centro e à direita.
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
: Demonstration of pipe table syntax.
Se eu separar as colunas com pipes |
, quando terminar, poderei
- primeiro alinhe os tubos com o
alignment
pacote no Sublime Text 3 - em seguida, adicione manualmente os dois pontos
:
para obter o alinhamento desejado.
Isso não é tão fácil quanto o filtro do @Kurt (e nem de longe tão robusto :)), mas é bastante simples.