我想在用R markdown编译的PDF报告中包括一个包含2列的表格,其中包括图像和文本(图像描述)。
为此,我对表有以下要求:
需要
figpath <- "Folder/Subfolder/"
然后fig1 <- paste0(figpath, "image1.png")
理想情况下,该表如下所示:
我基于LaTex语法,markdown语法和R markdown语法(使用kable和kableExtra)进行了几次尝试,请参见下面的MWE。
但是,没有一种方法能令人满意。
LaTex方法最接近,但不允许包含引用。
带有图像的表格应稍后包含在由huskydown编译的报告(论文)中,该报告与论文/书本有关。
任何帮助是极大的赞赏!
下表总结了我的方法,下面提供了MWE(有关改进的LaTex MWE,请参见@samcarter的回复)
乳胶法
YAML header:
header-includes:
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{table}[H]
\centering
\caption{My caption}
\begin{tabular}{@{} C{6cm} L{9cm} @{}}
\\
\toprule
Image & Description \\
\toprule
\includegraphics[width=60mm]{Folder/Subfolder/image1.png} &
\textbf{Lorem ipsum dolor sit amet} [@R-base] \linebreak mauris mauris sollicitudin malesuada amet.\\
& \\
\hline
& \\
\includegraphics[width=60mm]{Folder/Subfolder/image2.png} &
\textbf{Lorem ipsum dolor} [@R-bookdown]\linebreak sit amet, mauris mauris sollicitudin malesuada amet. \
\end{tabular}
\end{table}
**bold**
这样的简单markdown文本格式(显然)在LaTex表Markdown 方式(尚无解决方案)
Table: Caption of my table
<!-- Table: (\#tab:myTable-reference) Caption of my table -->
| Image | Description |
| :-------: | :----------- |
| ![](Folder/Subfolder/image1.png){#id .class height=50%} | **Image description** [@R-base] <br/>Lorem ipsum dolor sit amet, ... |
| ![](Folder/Subfolder/image2.png){#id .class height=50%} | **Image description** [@R-bookdown] <br/>Lorem ipsum dolor sit amet, ... |
| | |
**bold**
这样的简单markdown文本格式效果很好<br/>
Table: (\#tab:md-table) My caption
标记表,并使用\ref{tab:md-table}
引用表。但是在一个简单的md文件中呢? 有线方法(尚无解决方案)
Refer to this table with [foo] or \@ref(tab:foo) or \@ref(fig:foo).
(ref:foo-caption) caption
(ref:foo-scaption) short caption
```{r foo, echo=FALSE, out.width='90%', fig.align = "center", fig.cap='(ref:foo-caption)', fig.scap='(ref:foo-scaption)', results='asis'}
library(stringi)
some_text <- stri_rand_lipsum(1)
some_text <- paste("**Image description**", "[@R-bookdown]", "<br/>", some_text)
figpath <- "Folder/Subfolder/"
dat <- data.frame(
Image = c(
paste0("![](", figpath, "image1.png){#id .class height=120px}"),
paste0("![](", figpath, "image2.png){#id .class height=120px}")
),
Description = c(
some_text, # TEXT IMAGE 1
some_text # TEXT IMAGE 2
)
)
library(knitr)
kable(dat, format = 'pandoc')
```
**bold**
这样的简单markdown文本格式效果很好<br/>
kableExtra方法(尚无解决方案)
Refer to this table with [foo2] or \@ref(tab:foo2) or \@ref(fig:foo2).
(ref:foo2-caption) caption
(ref:foo2-scaption) short caption
```{r foo2, echo=FALSE, out.width='90%', fig.align = "center", fig.cap='(ref:foo2-caption)', fig.scap='(ref:foo2-scaption)', results='asis'}
library(kableExtra)
kable(dat) %>%
kable_styling(full_width = F) %>%
column_spec(1, width = "30em")
```
如果有帮助,我很乐意提供一个带有我的方法的Rmd文件以及生成的PDF。
最佳答案
对于您的乳胶方法:
您可以通过组合p列(而不是使用的m列)和顶部对齐的图像来获得所需的对齐方式。对于顶部对齐的图像,将
\usepackage[export]{adjustbox}
添加到标题包括,并将,valign=t
添加到图像选项标题中包含
\graphicspath{{./older/Subfolder/}}
可以轻松使用图像路径其他的建议:
使用
[H]
作为 float 说明符的[htbp]
来确保乳胶为您的图像找到最佳位置。 \toprule
,这就是为\midrule
加载\hline
包时booktabs
,它提供了具有更好间距的替代品\documentclass{article}
\usepackage{booktabs}
\usepackage{graphicx}
\usepackage{array}
\usepackage[export]{adjustbox}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\graphicspath{{./older/Subfolder/}}
\begin{document}
\begin{table}[htbp]
\centering
\caption{My caption}
\label{foo}
\begin{tabular}{@{} L{6cm} L{8.5cm} @{}}
\toprule
Image & Description \\
\midrule
\includegraphics[width=60mm,valign=t]{example-image-duck} &
\textbf{Lorem ipsum dolor sit amet} [@R-base] \linebreak mauris mauris sollicitudin malesuada amet.\\
\midrule
\includegraphics[width=60mm,valign=t]{example-image-duck} &
\textbf{Lorem ipsum dolor} [@R-bookdown]\linebreak sit amet, mauris mauris sollicitudin malesuada amet. \\
\bottomrule
\end{tabular}
\end{table}
\ref{foo}
\end{document}
关于latex - R markdown:如何创建包含图像和文本的表格,这些表格应被编织为PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204272/