gpt4 book ai didi

r - 如何让 org-mode 导出宽或长表以便在 PDF 中可读?

转载 作者:行者123 更新时间:2023-12-04 13:29:49 25 4
gpt4 key购买 nike

我正在使用 R 在 org 模式下创建各种表,并希望将它们包含在导出到 PDF 中。其中一些表格对于标准页面来说太宽了,而有些表格可能太长了。我已经想出了如何旋转一个组织表,但我真的需要旋转一个作为代码块输出的表。

我查看了组织手册,https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-R.html ,建议的问题,https://raw.githubusercontent.com/dfeich/org-babel-examples/ ,和其他地方。这些要么没有提供解决方案,要么我不明白。

借用 https://github.com/dfeich/org-babel-examples/tree/master/latex ,我将这些行附加到我的 org 文件的前端:

#+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 度的格式化表格。我得到了一张略显粗糙的未旋转 table ,似乎用未对齐的管道符号分隔列。

我正在运行 Emacs 26.1 和 org 9.2.4。

想法?如果它有帮助并且被允许,我可以发布 85 行的完整文档。

如果解决方案自然地扩展到跨页面渲染长表格,那就太好了。

更新:@lars

这是我在 PDF 中得到的:

enter image description here

最佳答案

您写的内容有一个基本问题:#+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


现在当你做 C-c C-c在代码块上(或当导出器执行代码块时),结果将可靠且可重复地放置在 #+RESULTS: widetbltest 下指令,这就是 #+CAPTION:#+ATTR_LATEX:附有指令。

另一个问题是代码块的标题。您希望将结果作为表格,但您不想指定 latex那里:只有在您的代码块生成 latex 表而不是 Org 模式表时,您才会使用它。

我也摆脱了 :placement指令,因为在我的实验中我得到一个错误,说 sidewaystable环境不支持。也许这会随着 rotfloat 而改变或 tabu
我没有安装这些软件包中的任何一个。我也摆脱了 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


C-c C-e l o在 p.2 上生成带有侧边表格的 PDF。

顺便说一句,在这些情况下,一种必不可少的调试技术是使用 C-c C-e l l 导出到 latex 文件。然后检查 latex 文件,用你选择的编译器编译它( pdflatex 似乎是你的选择),看看它在哪里以及如何失败。这通常会提供有关您必须对 Org 模式文件执行哪些操作以解决您遇到的任何问题的见解。其中一个推论是您必须了解一些 LaTeX:有些人希望编写 Org 模式文件而不必查看 LaTeX,但这仅适用于最简单的情况:只要您稍微偏离常规有点,拥有一些 LaTeX 知识是非常有帮助的。

关于r - 如何让 org-mode 导出宽或长表以便在 PDF 中可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57795548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com