我想正确的在 Sublime Text 3 中按列对齐文本(在 Win 8.1 上,FWIW)。
也就是说,我想将其转换为
Time Cash Flow
0 -500
1 100
2 200
3 300
进入这个
Time Cash Flow
0 -500
1 100
2 200
3 300
最终目标是
Time Cash Flow
----- ----------
0 -500
1 100
2 200
3 300
这是简单表格在潘多克。我尝试了alignment
和AlignTab
包,但它们似乎专门用于对齐一些分隔符,而不是像我需要的那样对齐列。
有什么技巧可以做到这一点吗?我也愿意接受需要 vi 或 Excel 的解决方案。
答案1
好的,这里有一个解决方案,涉及 Excel 或任何其他能够导出 CVS 的电子表格程序。
你必须安装一个新发布的第三方过滤器“csv2table”(<- GitHub 存储库) 用于 Pandoc。
也可以作为独立过滤器。
像这样安装独立过滤器:
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}
我首选的安装方法是通过
cabal
:cabal update export PATH=${HOME}/.cabal/bin:${PATH} cabal install cabal-install cabal install pandoc-csv2table
阅读csv2table 文档。
您可以使用这个过滤器做什么?
您可以通过以下方式将外部 CSV 文件包含到您的 Markdown 中...
...要么滥用包含语法的图像像这样:
![](/path/to/file.csv)
...或者滥用隔离代码块语法如下:
```` {.table source="/path/to/file.csv" <list-of-attributes>} ````
...或者直接将 CSV 行插入到“隔离表部分”,如下所示:
```` {.table <list-of-attributes>} one,two,three 1,2,3 100,2000,55555 ````
通过调用 Pandoc 命令行中的过滤器,
--filter=pandoc-csv2table
CSV 将转换为所有输出格式的表。另外,您可以将几乎所有的格式应用到 Pandoc 支持的表格:
- 使用属性
type="multiline"
创建一个multiline_table
。 - 使用
type="pipe"
来创建一个pipe_table
。 - 使用
type="simple"
来创建一个simple_table
。 - 用于
caption="My ***important*** caption for this table"
添加表格标题。(这可以包括 markdown 格式。) - 如果您想要一个没有列标题的表格,请使用
header="no"
(如果未给出,则使用默认值header="yes"
)。 - 现在您想要的功能:用于
aligns=LRCDR
对列的对齐方式(从左到右)进行排序,分别为左、右、居中、默认和右。
- 使用属性
例子
考虑这个
my.csv
文件:Time,"*Cash* Flow","Third column" 0,-500,loooooooooooong data field with many words 1,*100*, ***2***,`2000`,shorte **3**,30000,(second line is empty)
(正如您所见,我甚至对 CSV 行的一些数据字段使用了 Markdown 标记!)
考虑一下这个 Markdown
my.md
,:# 标题 ```` {.table source="./my.csv" aligns="LRCR" type="multiline" caption="一些***caption***"} ````
运行此命令从 CSV 输入生成 Markdown 多行表输出:
pandoc my.md --filter=pandoc-csv2table -t markdown
查看此输出:
运行此命令从 CSV 输入生成带有多行表的 PDF 输出:
pandoc my.md --filter=pandoc-csv2table -o my.pdf
查看此输出(屏幕截图):
如果你想生成“管道表”使用对齐指示冒号语法,您必须稍微修改 Markdown 以及命令行:
修改 Markdown包括
type="pipe"
在表格格式选项中:# 标题 ```` {.table source="./my.csv" aligns="LRCR" type="pipe" caption="一些***caption***"} ````
修改命令行要求
markdown_phpextra+table_captions
输出:pandoc my.md --filter=pandoc-csv2table -t markdown_phpextra+table_captions
现在查看输出:
当然,这也适用于所有其他输出格式!
答案2
我有另一个解决方案。 Pandocpipe_tables
需要以下格式,并且可以处理左对齐、居中对齐和右对齐。
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
: Demonstration of pipe table syntax.
如果我用管道将列分开|
,那么当我完成后,我可以
- 首先将管道与
alignment
Sublime Text 3 中的包对齐 - 然后手动添加冒号
:
以获得所需的对齐。
这不像@Kurt 的过滤器那么简单(并且也不那么强大:)),但它相当简单。