将平面文件转换为Latex

时间:2014-12-11 14:08:58

标签: bash latex

我一直在使用bash脚本将平面文本文件转换为乳胶并打印出来时遇到问题。

我有一个这种形式的文件。

Name|LastName|Number|Category

Col1|Col2|Col3|Col4

我想在按类别排序时打印文件,然后按类别排序。我可以使用sort命令来正确排序文件,我可以使用awk和printf打印到屏幕或文件,但我不知道如何将其转换为乳胶。我之前从未使用过乳胶,并且几乎不熟悉它的每个方面。该文件看起来应该是这样的。

Name---------Last Name------Number--------Category

Col1-----------Col2--------------Col3-------------Col4

'-'s只是空格。)

然后我需要使用LaTex将文件另存为PDF。对此的任何帮助都会很精彩。

1 个答案:

答案 0 :(得分:1)

考虑以下

% cat try.csv
four|five|six|cat1
one|two|three|cat3
seven|eight|nine|cat2

这是一个输入文件,似乎是您正在描述的形式。

% sort --field-separator=\| -k 4 try.csv | sed -e 's/|/\&/g' -e 's/$/\\\\/' >table-content.tex 
% cat table-content.tex 
four&five&six&cat1\\
seven&eight&nine&cat2\\
one&two&three&cat3\\

--field-separator选项表示我们希望竖线字符分隔字段,-k 4选项表示我们要对字段4(即类别列)进行排序。它的输出被发送到一个sed脚本,该脚本用&字符替换每个垂直条字符(转义为\&,否则sed将该字符解释为其他字符),以及用$字符串替换行尾(即\\)(这些反斜杠中的每一个都必须使用反斜杠进行转义,或者,sed将其解释为其他内容) 。结果是一个LaTeX对表的想法的文件:它有由&字符分隔的列,每行以\\结束。

然后我们\input进入LaTeX文档:

% cat sorted.tex
\documentclass{article}

\begin{document}

This is a table:

\begin{centering}
\begin{tabular}{cccc}
\input{content}
\end{tabular}\\
\end{centering}

\end{document}

您可以在线搜索有关LaTeX的信息。

然后在此sorted.tex文件上运行LaTex:

% pdflatex sorted
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
 restricted \write18 enabled.
entering extended mode
(./sorted.tex
LaTeX2e <2011/06/27>
... ... ...
Output written on sorted.pdf (1 page, 15286 bytes).
Transcript written on sorted.log.
% 

...结果是一张PDF,其格式很合理。

sed命令有点特殊,因为您必须了解sed正则表达式替换的工作方式(即s/from/to/替换)和LaTeX所需的&\\必须在此处进行转义,这有点令人讨厌。但除此之外,这只是sortsed以及朋友设计用于的目的。