- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 kable 为 Rmarkdown PDF 文档生成表格。我想根据它们的值突出显示某些单元格,并且每隔一行都有一个条纹。下图显示了这一点,以及我遇到的问题(取自我的 Adobe PDF 阅读器)。如您所见,中间一排的高亮颜色(对于 Chinstrap 企鹅)与其他两个不太均匀。这是一个小问题,但足以让表格看起来有点乱,所以我希望有人能帮我找到解决办法,或者至少解释原因。
奇怪的是,这个问题似乎取决于我在哪个 PDF 阅读器中查看文档。初始图像来自 Adobe,但是当我在 SumatraPDF(我的 RStudio 编织的默认查看器)中打开文件时,突出显示对所有人来说都是一致的行(见下图)。这种行为似乎不依赖于 PDF 查看器中的缩放级别,但可能与我不知道的另一个设置有关。
问题本身似乎是由浅蓝色条纹而不是高光本身引起的,因为当我删除条纹时,所有三个高光都在两个 PDF 查看器中。通过使用 column_spec(c(2:3), width = "2.1cm", border_right = T)
向表格添加单元格边框,也可以在没有额外突出显示的情况下演示此行为。如最终图像所示。在三行中的两行中,第二列的右边框被 strip 覆盖(这也发生在 kableExtra 中的内置 strip 功能中)。这里要注意的一件有趣的事情是,这似乎确实取决于 PDF 查看器的缩放级别。下面的图像来自 Adobe 在我的默认 View (75.5) 中,但是当我将缩放比例更改为 100 到 200 之间时,所有单元格边框都是正确的,然后再次消失。我的代码如下,感谢您的帮助!
可重现的示例
---
title: "Kable Highlighting Issue"
output: pdf_document
header-includes:
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{array}
- \usepackage{multirow}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
- \usepackage{titling}
- \usepackage{graphicx}
---
knitr::opts_chunk$set(echo = TRUE)
library(palmerpenguins)
library(dplyr)
library(stringr)
library(knitr)
library(kableExtra)
#create table data
table_data <- penguins %>%
group_by(species) %>%
summarise(bill_length_mm= round(mean(bill_length_mm, na.rm = TRUE), digits=2),
bill_depth_mm= round(mean(bill_depth_mm, na.rm = TRUE), digits=2)) %>%
mutate(across(everything(), as.character)) %>%
rename(length= bill_length_mm, depth= bill_depth_mm) #_ is an escaped character in Latex
#add general table striping
#the default Kable striping feature will overwrite the highlighting, so this is an alternative way to add that
#perhaps there's something simpler?
for (row in c(1,3)){
for (col in c(1,3)){
table_data[row,col] <- cell_spec(table_data[row,col], "latex", background = "#ddf1f7")
}
}
#add table highlighting if bill length > 40mm
for (p in table_data$species){
row <- which(table_data[1]==p)
if (table_data[row, 2] > 40){
table_data[row, 2] <- cell_spec(table_data[row, 2], "latex", background = "#00cc66")
} else {
table_data[row, 2] <- cell_spec(table_data[row, 2], "latex", background = "#ff704d")
}
}
#create table
penguin_table <- kable(table_data, format = "latex", booktabs = TRUE, linesep="", escape = FALSE, align=c("l","c","c")) %>%
kable_styling(latex_options = c("scale_down", "hold_position"), position = "center", font_size =12) %>%
row_spec(0, bold = TRUE, hline_after = TRUE) %>%
column_spec(1, width = "5cm") %>%
column_spec(c(2:3), width = "2.1cm")
penguin_table
session 信息
R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] kableExtra_1.3.4 knitr_1.33 stringr_1.4.0
[4] dplyr_1.0.4 palmerpenguins_0.1.0
loaded via a namespace (and not attached):
[1] pillar_1.4.7 compiler_4.0.3 tools_4.0.3 digest_0.6.27
[5] evaluate_0.14 lifecycle_1.0.0 tibble_3.0.4 viridisLite_0.3.0
[9] pkgconfig_2.0.3 rlang_0.4.10 DBI_1.1.0 cli_2.4.0
[13] rstudioapi_0.13 xfun_0.23 httr_1.4.2 xml2_1.3.2
[17] generics_0.1.0 vctrs_0.3.5 systemfonts_1.0.1 webshot_0.5.2
[21] tidyselect_1.1.0 svglite_2.0.0 glue_1.4.2 R6_2.5.0
[25] rmarkdown_2.8 purrr_0.3.4 magrittr_2.0.1 scales_1.1.1
[29] ellipsis_0.3.1 htmltools_0.5.0 assertthat_0.2.1 rvest_0.3.6
[33] colorspace_2.0-0 stringi_1.5.3 munsell_0.5.0 crayon_1.3.4
最佳答案
渲染 pdf_document
依赖生成中间体 latex
代码,它会在您的 latex 解释器中处理以构建文档。对于您的 pdf 文档的任何问题,我建议您查看底层的 Latex 代码(通过添加keep_tex
作为输出参数。
在您的情况下,将生成表代码,其中包含以下几行:
\midrule
\cellcolor[HTML]{ddf1f7}{Adelie} & \cellcolor[HTML]{ff704d}{38.79} & \cellcolor[HTML]{ddf1f7}{18.35}\\
Chinstrap & \cellcolor[HTML]{00cc66}{48.83} & 18.42\\
\cellcolor[HTML]{ddf1f7}{Gentoo} & \cellcolor[HTML]{00cc66}{47.5} & \cellcolor[HTML]{ddf1f7}{14.98}\\
\bottomrule
导致问题的原因是
\cellcolor
导致绘制最终pdf的彩色框。 Adobe Reader 在各种缩放级别上很好地呈现这些内容时遇到了一些麻烦,您会发现边界框在哪个像素获得哪种颜色方面存在一些竞争。 “白色”行没有设置背景颜色,因此红色/绿色框没有其他框可与之竞争,并获得更多空间来渲染。
cell_spec
对于您的行,为什么不将偶数行的背景颜色明确设置为白色?
for (row in 1:nrow(table_data)){
color = ifelse(row %%2 ==1, "#ddf1f7", "#ffffff")
for (col in c(1,3)){
table_data[row,col] <- cell_spec(table_data[row,col], "latex", background = color)
}
}
这将产生一个漂亮、清晰的表格,其中至少所有空间竞争问题都得到平等解决。
关于PDF Kable 重叠条纹/突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69287948/
我正在尝试重用在 jsp 中设置并在 Stripes 布局渲染中使用的变量。 主页:/index.jsp 布局渲染页面:/jsp/widgets/signin/oAuthUrl.jsp 我的/jsp/
我已经测试了几个小时,但我似乎无法让边框图像做我想做的事。 我正在尝试向带有水平条纹的 div 添加底部边框。即2px灰,2px白,2px灰;即灰色和白色条纹。 像这样: 这是我目前所拥有的: .bo
我正在尝试使用一个不错的响应式网站模板 http://html5up.net/striped并遇到了一些问题。我已经设置了一个非常基本的测试。我 downloaded条纹包,在陨石应用程序中创建了一个
为什么这行不通? (例如,为什么脚本没有实际运行并创建付款按钮,就像它不在指令中那样。) .directive('stripeForm', ['$log', function($log) { re
我有一个表(Maintable),里面有信息。此外,每个 tr 都有一个子表,其中包含可以在需要时折叠的更多信息。现在,我希望对 maintable 中的 tr 进行 strip 化。我尝试使用:
我有一个表,其中包含由类标记的行。这些行应该是斑马条纹。需要注意的是它们并不总是连续的。 我尝试过按表和类名进行匹配,但最终结果总是不正确。发生的情况是, strip 化将应用于表级别,然后仅在具有该
原始表(http://highspeedbroadband.com.my/home-package/comparison-chart-for-home-package/) 我想修改下图中突出显示的原始
我有以下 html 文件: .table-striped { padding: 0; margin: 0;
这个问题在这里已经有了答案: CSS technique for a horizontal line with words in the middle (34 个答案) 关闭 9 年前。
我有一个 bootstrap 条纹表 ( .table-striped > tbody > tr:nth-of-type(odd){background-color: #f9f9f9;} ),我正在使
我对 Spring MVC 很有经验,正在试用 Stripes 以决定是否在新项目中试用它。 在 Spring MVC 中,我将准备模型数据并将其传递给 View ,方法是将其添加到由我的 Contr
我正在尝试使用 Rails 在 Stripe 中创建一次一次性充电。我收到以下错误: Stripe::InvalidRequestError (No such token: tok_18nnwSJ6t
在 Stripes 中,如果存在错误的操作类映射,Stripes 的默认行为是将控件转发到发出请求的同一个 JSP,并给出完整的错误堆栈。 我计划修改此行为,并希望在出现错误时提供更加用户友好的消息。
我的问题分为两部分: 如何使用 spark 设置(微调)高级 ORC 参数? 各种帖子显示可能存在问题Spark Small ORC Stripes , How to set ORC stripe s
我有一个 Stripes 框架问题。 这个重定向页面在注解方法之前? 类似于: @Before public void test() { String login=(String)context.
我想使用 Jest 测试我的 nodejs 代码。在我的代码中,我使用了条纹。 当需要条纹时,你必须使用这一行 const stripe=require('stripe')("apikey"); 为了
在这个例子中: https://jsfiddle.net/ywb77uhv/ 为什么将 strip 路径颜色更改为白色以外的颜色会破坏渲染?如何能够更改路径颜色? #stri
我在获取斜条纹背景以在 Chrome 中很好地显示时遇到了问题。 background-image: repeating-linear-gradient(-45deg, rgba(0,0,0,0.1)
我想在图像上绘制黑白条纹,在图像顶部水平和垂直地每 20 列切换一次,同时保持在图像边界内。到目前为止,我可以获得一个带有 1 像素宽垂直条纹的黑色正方形。我尝试过通过切换东西来至少在水平线上获得细长
所以我最近一直在尝试学习 Stripe API...我进展缓慢,但在处理这些元数据信息时遇到了一些障碍。 我希望实现的是在创建订阅和客户时向订阅添加元数据。 这是创建客户和订阅的原始脚本: $cust
我是一名优秀的程序员,十分优秀!