簡體   English   中英

如何使用org-mode導出寬表或長表,以便在PDF中可讀?

[英]How do you get org-mode to export a wide or long table so it's readable in PDF?

我正在使用R在組織模式下創建各種表,並希望將它們包含在導出為PDF中。 其中一些表格對於標准頁面而言太寬,有些可能太長。 我已經弄清楚如何旋轉組織表,但我真的需要旋轉一個代碼塊輸出的表。

我查看了Org手冊, https: //orgmode.org/worg/org-contrib/babel/languages/ob-doc-R.html,SO建議的問題, https://raw.githubusercontent.com/ dfeich / org-babel-examples / ,和其他地方。 這些都沒有提供解決方案,或者我不理解它。

借用https://github.com/dfeich/org-babel-examples/tree/master/latex ,我將這些行添加到我的組織文件的前端:

#+latex_compiler: pdflatex
#+LATEX_HEADER_EXTRA: \usepackage{rotfloat}
#+LATEX_HEADER_EXTRA: \usepackage{lmodern}
#+LATEX_HEADER: \hypersetup{colorlinks=true, linkcolor=blue}
#+LATEX_HEADER_EXTRA: \usepackage{tabularx}
#+LATEX_HEADER_EXTRA: \usepackage{tabu,longtable}
#+LATEX_HEADER_EXTRA: \usepackage{booktabs}

並創建了一個這樣的表:

#+NAME: widetbltest
#+CAPTION: Sideways Table Test
#+ATTR_LATEX: :float sideways :placement [H]
#+HEADER: :exports results :results table latex :colnames yes
#+begin_src R
  y  <- data.frame(
      a = seq(1,20,by = 1),
      b = seq(1,20,by = 1),
      c = seq(1,20,by = 1),
      d = seq(1,20,by = 1),
      e = seq(1,20,by = 1),
      f = seq(1,20,by = 1),
      g = seq(1,20,by = 1),
      h = seq(1,20,by = 1),
      i = seq(1,20,by = 1),
      j = seq(1,20,by = 1),
      k = seq(1,20,by = 1),
      l = seq(1,20,by = 1),
      m = seq(1,20,by = 1),
      n = seq(1,20,by = 1),
      o = seq(1,20,by = 1),
      p = seq(1,20,by = 1),
      q = seq(1,20,by = 1),
      r = seq(1,20,by = 1),
      s = seq(1,20,by = 1)
      )
  y
#+end_src

我期望一個旋轉90度的格式化表格。 我有一個略顯粗糙的未旋轉的桌子,看起來是用不對齊的管道符號分隔列。

我正在運行Emacs 26.1和org 9.2.4。

想法? 如果它有幫助並且被允許,我可以發布85行完整文檔。

如果解決方案自然地擴展到很好地跨頁面渲染長表,那將是很好的。

更新:@lars

這是我在PDF中得到的:

在此輸入圖像描述

您編寫的內容存在一個基本問題: #+CAPTION:#+ATTR_LATEX:指令必須應用於代碼塊生成的表,而不是代碼塊本身。 我發現這樣做的最好方法是給代碼塊命名,以便在該名稱下生成結果,然后將指令附加到結果:

#+NAME: widetbltest
#+HEADER: :exports results :results table :colnames yes
#+begin_src R
 ....
#+end_src

#+CAPTION: Sideways Table Test
#+ATTR_LATEX: :float sideways
#+RESULTS: widetbltest

現在當您在代碼塊上執行Cc Cc時(或者當導出器執行代碼塊時),結果將在#+RESULTS: widetbltest指令下可靠且可重復地放置,這就是#+CAPTION:#+ATTR_LATEX:指令附加到。

另一個問題是代碼塊的標題。 您希望將結果作為表格,但您不希望在那里指定latex :如果您的代碼塊生成了乳膠表而不是Org模式表,則只能使用它。

我也擺脫了:placement指令,因為在我的實驗中我得到一個錯誤,說sidewaystable環境不支持它。 也許這會改變rotfloattabu但我沒有安裝這些軟件包。 我也擺脫了longtable因為它已經包含在默認值中(至少是我的默認值)。

這是一個適合我的最終版本:

#+LATEX_HEADER_EXTRA: \usepackage{lmodern}
#+LATEX_HEADER_EXTRA: \usepackage{tabularx}
#+LATEX_HEADER_EXTRA: \usepackage{booktabs}
#+LATEX_HEADER: \hypersetup{colorlinks=true, linkcolor=blue}

* Wide table
#+NAME: widetbltest
#+HEADER: :exports results :results table :colnames yes
#+begin_src R
  y  <- data.frame(
      a = seq(1,20,by = 1),
      b = seq(1,20,by = 1),
      c = seq(1,20,by = 1),
      d = seq(1,20,by = 1),
      e = seq(1,20,by = 1),
      f = seq(1,20,by = 1),
      g = seq(1,20,by = 1),
      h = seq(1,20,by = 1),
      i = seq(1,20,by = 1),
      j = seq(1,20,by = 1),
      k = seq(1,20,by = 1),
      l = seq(1,20,by = 1),
      m = seq(1,20,by = 1),
      n = seq(1,20,by = 1),
      o = seq(1,20,by = 1),
      p = seq(1,20,by = 1),
      q = seq(1,20,by = 1),
      r = seq(1,20,by = 1),
      s = seq(1,20,by = 1),
      t = seq(1,20,by = 1),
      u = seq(1,20,by = 1),
      v = seq(1,20,by = 1),
      w = seq(1,20,by = 1),
      x = seq(1,20,by = 1),
      y = seq(1,20,by = 1),
      z = seq(1,20,by = 1)
      )
  y
#+end_src

#+CAPTION: Sideways Table Test
#+ATTR_LATEX: :float sideways
#+RESULTS: widetbltest

執行Cc Ce lo會在第2頁上生成帶有側面表格的PDF。

BTW,在這些情況下,一個必不可少的調試技術是使用Cc Ce ll導出到latex文件,然后檢查latex文件,使用您選擇的編譯器編譯它( pdflatex似乎是您的選擇),並查看它失敗的位置和方式。 這通常可以讓您深入了解要對Org模式文件執行的操作,以解決您遇到的任何問題。 其中一個必然結果是你必須要知道一些LaTeX:有些人希望編寫Org模式文件而不必看LaTeX,但這只能在最簡單的情況下工作:一旦你走出人跡罕至的路徑甚至一點點有一些LaTeX知識非常有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM