将 Latex 表导出到 Excel/ODS/CSV 的程序?

将 Latex 表导出到 Excel/ODS/CSV 的程序?

我知道有工具可以将 excel 表格导出到 latex,但反过来呢?我从 R 中的函数(例如:texreg)获得了很多 latex 表格,这些表格无法通过代码完美定制,需要进行一些编辑。例如,我将根据模型函数如何解释交互扩展,将 T:X 和 X:T 等变量作为单独的行。我希望能够输入一个表格对象并获取类似 .csv 的表格,然后我可以编辑并重新导出(在我的情况下使用 calc2latex)。

存在这样的事吗?

答案1

远非完美,但对于只有单个表格的文档,您可以使用detex,然后替换&,删除空行。在 Linux 中,您可以使用一些工具,如grepsed。表格的第一行是列类型,因此您可以手动删除或使用一些工具,如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'将换行符替换为"

相关内容