我知道有工具可以将 excel 表格导出到 latex,但反过来呢?我从 R 中的函数(例如:texreg)获得了很多 latex 表格,这些表格无法通过代码完美定制,需要进行一些编辑。例如,我将根据模型函数如何解释交互扩展,将 T:X 和 X:T 等变量作为单独的行。我希望能够输入一个表格对象并获取类似 .csv 的表格,然后我可以编辑并重新导出(在我的情况下使用 calc2latex)。
存在这样的事吗?
答案1
远非完美,但对于只有单个表格的文档,您可以使用detex
,然后替换&
并,
删除空行。在 Linux 中,您可以使用一些工具,如grep
和sed
。表格的第一行是列类型,因此您可以手动删除或使用一些工具,如tail
。示例命令行:
detex file.tex | grep -v '^$' | tail -n+2 | sed 's/&/,/g' > file.csv
输入示例file.tex
:
\documentclass{article}
\begin{document}
\begin{tabular}{llll}
11 & 12 & 13 & 14\\
21 & 22 & 23 & 24\\
31 & 32 & 33 & 34\\
41 & 42 & 43 & 44\\
\end{tabular}
\end{document}
输出(file.csv
):
11 , 12 , 13 , 14
21 , 22 , 23 , 24
31 , 32 , 33 , 34
41 , 42 , 43 , 44
答案2
这里还有另一种解决方法,如果您有 Excel 或类似的应用程序,并且可以设法制作仅包含表格的 LaTeX 文件:使用 pandoc 将 LaTeX 文件转换为 HTML,如下所示:
pandoc -o output.html input.tex
然后,将生成的 HTML 表导入 Excel。
答案3
如果您是 Emacs 用户,您可以将此功能保存在您的 init 文件中。
(defun latex-table-export-to-csv-file (&optional file)
"Creates a file <base file name>-<start position>-<end position>.csv from the LaTeX table elements.
The point must be within any LaTeX table & separated.
The filename argument is for a programmatically call.
This function only needs the point (cursor) in a LaTeX table.
It creates a csv file <base file name>-<start position>-<end position>.csv.
There is no check for point not in a LaTeX table but no error."
(interactive )
(let* ((end (save-excursion (search-forward "\\end" nil t)(beginning-of-line)(point)))
(beg(save-excursion (search-backward "\\begin" nil t)
(re-search-forward "^.*&.*" nil t)
(beginning-of-line)(point)))
(tbl (buffer-substring beg end)))
(unless file (setq file (format "%s-%d-%d.csv" (file-name-sans-extension buffer-file-name) beg end)))
(with-temp-buffer
(insert tbl)
(org-table-convert-region (point-min) (point-max) "&\\|\\\\\\\\.*")
(org-table-export file "orgtbl-to-csv" ))))
它只需要点(光标)位于 LaTeX 表中。它会创建一个 csv 文件 <基本文件名>-<起始位置>-<结束位置>.csv。不会检查是否不在 LaTeX 表中,但不会出错。
您可以使用激活此功能M-x latex-table-export-to-csv-file
,也可以定义一个按键序列来激活它。我选择了,C-c t
但您也可以选择其他方式。将此代码保存在您的初始化文件中:
(bind-key (kbd "C-c t") #'latex-table-export-to-csv-file LaTeX-mode-map)
答案4
如果要保留表中的所有 LaTeX,可以使用以下一系列正则表达式。此示例使用 Vim 的正则表达式,通过病毒脚本。
cat table.tex | vims \
'1,/begin{tabular}/d' \
'/end{tabular}/,$d' \
'%g/^\s*$/d' \
'%s/^\s*//g' \
'%s/^/"/g' \
'%s/\s*&\s*/","/g' \
'%s/\\\\/"/g' \
> output.tex
'1,/begin{tabular}/d'
删除至开始{tabular}'/end{tabular}/,$d'
删除至结束{tabular}后的内容'%g/^\s*$/d'
删除空行'%s/^\s*//g'
删除起始缩进'%s/^/"/g'
在开头添加“'%s/\s*&\s*/","/g'
替换&
(捕获附近的空白区域)为","
'%s/\\\\/"/g'
将换行符替换为"