From a0a336a044bc889d0acf6f4c55cea3b57aa4db28 Mon Sep 17 00:00:00 2001 From: olivroy Date: Wed, 2 Oct 2024 11:45:35 -0400 Subject: [PATCH] fix LaTeX text size, add visual test + refactor test --- NEWS.md | 2 ++ R/utils_render_latex.R | 21 ++++++++++++--------- pkgdown/assets/gt-latex.pdf | Bin 31364 -> 31431 bytes pkgdown/assets/gt-latex.tex | 8 ++++---- tests/testthat/_snaps/as_latex.md | 4 ++-- tests/testthat/test-as_latex.R | 11 +++-------- vignettes/gt-visual.qmd | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/NEWS.md b/NEWS.md index a9a4d4418e..868767ecb6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -73,6 +73,8 @@ * `cols_add()` works in more cases (#1893). +* LaTeX now correctly renders if text size is changed (@olivroy, #1885). + # gt 0.11.0 ## New features diff --git a/R/utils_render_latex.R b/R/utils_render_latex.R index 71cefe8570..48e0cd48c3 100644 --- a/R/utils_render_latex.R +++ b/R/utils_render_latex.R @@ -1230,14 +1230,14 @@ remove_footnote_encoding <- function(x) { convert_font_size_l <- function(x) { size_map <- c( - `xx-small` = "\\tiny", - `x-small` = "\\scriptsize", - small = "\\small", - medium = "\\normalsize", - large = "\\large", - `x-large` = "\\Large", - `xx-large` = "\\LARGE", - `xxx-large` = "\\huge" + `xx-small` = "\\tiny ", + `x-small` = "\\scriptsize ", + small = "\\small ", + medium = "\\normalsize ", + large = "\\large ", + `x-large` = "\\Large ", + `xx-large` = "\\LARGE ", + `xxx-large` = "\\huge " ) if (as.character(x) %in% names(size_map)) @@ -1478,12 +1478,15 @@ apply_cell_styles_l <- function(content, style_obj) { "{", .apply_style_style_l(style_obj), .apply_style_weight_l(style_obj), + # Can generate "\small for example .apply_style_fontsize_l(style_obj), .apply_style_indentation_l(style_obj), x, "}" ) - } else out_text <- just_content + } else { + out_text <- just_content + } ifelse(mark_side == "right", paste0(out_text, mark), diff --git a/pkgdown/assets/gt-latex.pdf b/pkgdown/assets/gt-latex.pdf index 49393edd6a659e0ab0f936fed06f9766486aa108..3b2e5c66dc55316c32840e945f51cfea2e2633bb 100644 GIT binary patch delta 17979 zcmZ5`LwGJ+&}3}ewr$(CZRf^#W8=n7Zfx7OZQHiyn`buvKbu~jMc3)>>go!41|EF| z{woE*B}VFg)x3k0GlqcpTg9(tL;9RL(OMC1hw{24`tXaGvp@KG-V&G7BvWD5-8V30 z`ofQ;!B15Q_p6N_@EhCl-QP^x)05}>Tc>&}s0}WG8mQUX-GH$?!eg&=ebeI*>)em! zV+%LTpj|_Xg<7{sguMC%FW8<$fR9s?v`-6g?zHDGqA-=JS@PTT(;)Ov1u9!3<_Ure zNOUJIlZV<+siG>gtS#S4xQ+Yvq_S6GnAND>tbdLbmEXBXo40kbW|QU&Fgp{buw2)+ zYQ_M9h9G*4w>NQZJ-+sBuLvE58KSlQ!!m9`gv3TRB3vX2haMj8V7h+O(l%D}fiMK< zKAbZ#B%$jgyNF|4V-*6!o=>9$p?hVjyif0oC}L(X9&$KjjaoHq_+{y#M4IHD>wkZz z)sH%qwu_Y@T`+2_Pq9<(s8dOg{v?T;+M80^A~;HU$17t}H>2bm>ABY$ftyNouCXC< z6~Itrndzh$+=-GQcTB?VLrwt_>RuI+C7*taWYikuB(8D=2^IC1uQcssbQLK^{gc0=(N_*=A^DX)6 z{lxD4KDC(Nm7FuCX^&(6T-+u4V50H-jK@q6jKChTO7jN!Dry_uGcqD-yNSLP^JS7T zA$Yi4(hk*!?3NUD7li{Sog`h}HJ?O8UU~=uTlM1^C(R?GCN+RkfHE_4ByEDS(B2Uz zpqW#?P+2?I#@mT!V*6)vQp*ccGCRL1$|(%|`g(r?_xcCV_6qoZC2@g~07f69o9=XV zXO=TuxtvJ%JOf?t5?0fK6CrN7N_(yHYWEm_eZMcCPFGW)1SwB){wxAYf;Faa_@QU< z5EtX6ZD+-xj)!_ndlh>T#RR}8?9$;-6)XdXvB8CvtHFT(pcq;*r&NK104IY%2?M3P z;fs+ygDROXlt1_+^(x7E0lMT^tL-p^4GoHTE$oD{kp`TFmGqOOwBh=}A7wy^&Ml5n zLO7<N(k?G0vrcuOXcH0X&)0Iy~inErawjagt8qK0Z*nE{>vu8BM4 z!tQ27Y`uF1Y`$GE)9Jo(sM+Sw&lp3S_C@p`!yXWP0kHF`1gS8F zns@6Hrvy91a&H%PAFECHIAYjC*g&Ko6Pe6IyyiplLrrF+kSET&yc#YK!c%@(c-M$i^^TU0cUsU(8zW49m_TeOG_M)aj9YfTJToF? zY)!a7aw54DHR<&gr2u@tz!~xko8*?$(d5dX$UP3rFg7t@oXT@iC)1U9y{GI5O;78||DQ~8bJk0{9qe2XiJ5>a!5CJFrIkceh{j;YfDYe~4 z^oSX?`k$l03F+h1-2|CJA%B)a*qT0uoU8`CnFtmUr}Z|Dpa(nJ`ECiK60yLo!>Ojq zntXFh!oCD-9PsxjIF`QreIBgY9pB=Yz7qDSC*ky#mD5fwix~(y(s(vyTkyT8JLqTK z7}43uep339LjiSD)&Dg~S{W0lYPq-oaoRyJc8@uZl(2!9A~sRv2s_1~3$UwHkBY|V zYcHlC_(|3Fmx$9EH4Vr$VTeVS5@`BHeh<@y;?TS#9~t{UNW|jdq!kCF2Pz5X_!(47 zYHfe78dL5673R$hzEwNF6=KjPJ;1_c~N4Cu&LJv2#93whIO`=Hq)u$BvLViRcKZ~ z3^YAk3joY=4(?EVKJO<}T#!!QR7?;WdW{3c2={;Xk$AOfmkTF;*ae}Jq zb~SvOza(c~9x1eFYU5sx-L;LZ`3(kjQRFud9(5iRF;hT#B`FuCM?3uWXeK*$hAI+e zenUCe!*q?^Cn>6oCNggu1H%OC;hUPAN5m2V>vTBEnk3ZJL+G77-n+Z*D!)@NB1zba z4Bv7z1-s~35<*`Zhu($y6Ph4y(I$H)eosIPdhnRBDX<^Q+KKJAa zYfD;;6xkIDOFsJd?c`C>9qVWO<9>w?3G`3xHxUAZ!8FfdQCDcM%8Hk~Kf!Iv5qv=w z=S|JN37S_C(oq%KoynX{d}ZEeZ7)RL2M=9X3Um}ZNry|1?WN86McS{D&q9G(D%F5E zE{I@T9OtTZe3q7<#{mZb4&n+vY_y9jX+m`s<$%ekIT}kWTU&vtD#c`@wuW z3MnVaLh4E2lH^6_z(?zEC6yASg=qq5QefHjGvieSCWnE|e0ITBkd?jlt_;DGhFls5 z+kDAJanOGdjskN7-K$N_sO3`FwnhN!6RJdzKBugYL|a7h^WxM1IyhDhhj!|B^zsU5 zZE0L>4vs3m4oRWOzK}Khcp*vu+9D;<3;XJ~)a8j(&TH>uZ#~0$ll9m$(dTIFqiUX7 z{W7on?mti!H6s2hG@0t_HASEI+hda1JHu3G@XdYzAS zS}NO;4Oph5_7$y8Nee$;3RaYv-P?3OQI-6S{RL2oyv4e#Uo9Up$=tAvruTBg!MP+XQS2%owDr-x>T zc7g8D1#+SFX3=yU{`FUzN4-34S|&%T#h+*rd>zb0;bZ@4Zzb}y3-l!gLb8 z>O?UDQ%--K`<=}jPslMol8;Yw>L!9gwQ*f@IVdXT>mU0}-A?++X4gv1(G3ga{e!S4 z>i5f#bzwue64{r^r{d$5;2t)(f?HZ#pP9)5%jI3ti( zvg7VGlw}ZoSwWDs?rrjRHE*S0v#43w3V+f%sf`}Db>KPYS;b)V8#Z1h%U1{D#%GD^ zWsB>v+hvPTmH=yp*LA&Z6w00d!tc%W^0pFVFxbiabr^BE7hp2_;=V>t0UqrDms3lY zLA98tuT>Twnp4wbY78c&tGk1=H_Li3jY%;5qnVb9-f;sx`MIsf1iTm*c_ei)k%sOP zcaruj5$!Q6K_t%an71F*kfzd>7Uy|nEAGqTqJlVTc9vk2L3bVRz30fX_^@PV3D;Hk zM~o&5H7WJw1aNrUs`lDneNKPc(zl*pb|bVUuSsV)smsEn-u_r3QLtSS3&pmf;@t;- zzBwVHnl}?EKJBT8d|fx$B<{kQ0_LK|{h> zQJ&!PtP&3i*S`r@-m(veU`V4S5%5g{+99^`nT^#e*8#hXv60g8um+(j>qhSq-dBxH#N!`V0mij8iKzuV~*zGwi zHN1P9-L3_^cYM7&dMnF_*&4rp)Ppfrsl#FcFEAR`{(7e@Q1byu2sEjMWy=NcfT))_ zzrOB|#e)kQ17 zGWwC!pwq?)$!75mbp>ohF zfhM)Iuq#X9Lgoapz1C`DN{cTf{)6Juj179wKH0E?*kY3z6+_M&Po~IWR9k>PqBn%1 z<2b=D{If8UHLkbd)S+ZejNJ20%bC_iRe4~m44~KhJB+o;ccVWDZ(C*GvKXB(AhUQy zNx)rT(Y*k`MJ7tMzK~s!{rYpucAOe7#1p@EM;`lmb&%BjX8$x{p_s*^W`RQD^?`T@c)r$=W$uVgTp@UKtSSI%{a zzk2EN!s`z~ViQfl5^Y|jVd%@mmq7fX*IN(OA4e`gn&W%(`-DD@v^Q1M6IZg~L$SD>iQrS1$VXJ9O;qJrgu|7=`U#@5h>>&qsG{8 zH=n-*Or~JC*xnU{pd$l~YU*t6_J$HXy#n7=&RD0+ZjgCPaG*n%L7X}|*C3~!F1rp; zWux!qQIlf5a>))AIB`E7=;SPqjS3S8OoP;d=2N-9Yq(hv9A>^%td)QgcW(ZoJwH#2 z>Xv*G-K&icB^iTrC}+nSj|SnDkV)+U!gjK~rw026cpqXez)~B4!FL5cr+x|bE&q?V zTOe(+oa2sUt%PF?tuKVH({GGmG|LTe1|+pnh5vUaLxU)oa|pRR^1J3!M$)>O~fRwrOh6>cH-6jnI~FQVLmjQxV4)`m1Cwh)u- zHEm>~Pcoxzj+^%2y!gSkIv7&)17Rf0BSFC824SbUO*2jZ;eyk##IK$xH5UO8&~@-z z5*RsaFR;I4Y59eZq0cp+p<%67WUA4TTyiwoIxoJmr7w4hhm|?(E48Cref54;`(w9N zU#x0sghkva2}p)xHcpQEY3zz)#?@mToDf3iEO$dw$by%bDLDxzD|W3B^?;kUF29`% zyWvyu=C{m|=%k8_iKKa+b}9rYTS|b_CRbNC-jS;_x8E=P0dlLckNfb{eYXooMrsmTWf_ly=X6D$!SbVq9VpjFR8713ZyRSqIVJS8|6m16Tuj`n|)NnM^W@H_~Muxt8oZ;A^Nqoi< zJk;v0BLdeXIApf64qE_R#~D0W*3M|v@t*5RsSpl?3#}>XX3Xa5A-i6t^O}Mj%y!L` zf#~~a_CYPVFHGaSgp9_pLTjy#{?0HYZ7zJM~u&u8Y%@l0VAk#@Ve}o0ji5@4W}Cia5f+U zqo7x9%B9Q6Z+qFOR#^9lt5SpRYxkHV{j%*I`~}(}q{wKlT{yod$CG0kqw2ESQeTZ$@5EuYSAj1AT;`T1G?^W#g{YiiHi zJes!ei-rOqqH777dolD%e#hfX3&ojtZ*hO)1(Vbh;h7tHR1AizqFp>@O!K^C&z-LJ zH!ry3hl@`RUMeq%P~P%T<=kq=Dz|;qEcn3$w@WWy`Y0q-tO^s4mw)^{L<^sk&oNl6 zq5unDG5EMpAZ%7Oe;QFZ*A{%mE6}DTD^qk61wa5YWttRrn|_q60|={2%xYKJiHdYN zRe2(p$K5(K*G|Z(86rMH`o8drlYW}ez^jY*{v8C!K0ev5E~GEdoGmGK2oCI2qsq5` zeP&)>Zd6QmRp!NM>doxUv@%-CL75=DSnx$E!d%8>8~$0y8!5F4b-gbN;ct`ViB`(_ z8Mg*hrzi)&$Sa);-`9#;aMZ7bzv!r%l*Iv%AGip)t6sb*!?|IJx*mU9VT_jqD@D$Z zXR47P))oH?pK{emEthYgG$F$0U37gU#Z4}=GN2Imvk#jqV#wK@jn7m?Z+%h~R<|#k9G)o8mSeMQ5o2$Fw1*2eDDL%nBsp=985^vuYK5dA7!VEKLA+ z`G8El{{t`D=M!j1YaVHAf`4B_mnYoa!fM~M`xDi1E#QN2Y0#~uF&GCQ9Kg){Kl!SD zg0gKe6VmAJH`;3(bJU22y>Q4(&7M{(Gwl<*{ER}Gbi_;ku0I8(pB7P|;g3gJ=htAv zhI$1q@mGt^5|_v(wYBpcCoR&9=eb&+$=@6-%ZJjlcIbhJzG=!^4;svAfb*=%-!+w^dk3V0j7oh!LWwKdWt*`_Afm4f7{tQv!9|S=R)Nk=M%sDz z3lK$l?a!watizvr)iHo9>CB#k2oC0 z&hy1|$IH?k<8s^LbVHfm|Gj5tQ#nUx)zjy^wx{L7YPLE$QH|Z6A13s-qcY5@-oHAG zP~CF*;PZBHGSAV_&|voiP~#%){cAD18b7g1xYHV`5zFuV@y(%?0&~mpxoO_CJ(J_z ztS2EuUt)W0{>16lYV%R}%~JdQ6#HDwTiH42O{np*YW!B0<5n0|*Z{YWvQYUsVh~o* z(&J)@OMiGyyX?a2XKtqdxa*JXdhJ>9tKlz@%O^j2$fYYJeQ8E6s;|IXWUGQzpX%jU-TZncoyDc!jb)gBD?= zyu{*GABc_h#V!NH1_$(tl$8`2&~ay zItrATM24oy7StXvgw!-q7nKxaH|1{jIZ(mBus{CYYwjggkq}XqLNYLV`CmN7_{UlK zJ^SONGmROeot9hYd}lxB6Q1bqzan0+zmNR~BWe-^DJ6jWe?gfzZ4)en7WyhMOs6Yz zXGj`>)EqR|L{2eB7i&nzkS41#mSTcE z%KJQIX>`2|>&Z@l$Kge1b zONVO~h>(bfi&j_y#q$X?q2x*iSjQLx2R~C|KRyUfc3>P=?f^OpG?^nv4oH@TkrBR4 z)I&`U+_N?nSWP&>CGymn^MbHR-wuwBw&rhpi~8rvoDlx*E6&BL>t>SI@-QUemmOXE za~jB0O*m$&`r4?!m)d1{S0Nt34#ASkVx)_~qc95=KiF1&^a*Lc+?xuMbU=iX)JgXL zaGJ#E3o1 z7cXd0dF{Q)5uEuAuiyL{%)?=i|5e->Hc=TY$Znr#tac{O?Fo}PeBGmYgRsk_bUR~cBx)&DB$?$qArYRNa3iXAtc zJ&ky4X}jSD;m6p%N?OJ-fyY}UN{Ac4e@8@b$xOm(IdC`1LUH_WVPy0WSfiiDu z@xD>%ar#Z0tf#uSyEV)>-1J#FjGE7fU~sW%3?o4!p$afZk@$%%ZA-$Qj7n`5p(h-l zFva==R-I3-?GkaJ5pnU3q9eJGh>EEzHo@9}1;t9M_BYhKoqRzgPKub%6`PU)p}>1) zYqU507#Rh#OzOVKfY?IuZ#wk8$+>KxZ2uRGUKJAmWN4A4iZEa3U6Ut<=ZOlUqPz#Z zg*&KmY9nAFY?+N(3^E7FwlbsI7$FlTjN6LGDm{2)c<;O@sEXoqc(44txqtC)WDN+eCXd!p)z3-)+ui_K^FxQC$pb1G+{0xu&1XgNsgo9Q58_;CBFV z!T&2$N=jh1BnC=6K(noIh`ckDEw4@IYdT(zQWDZ(@P8vJLEuUVq}TP`mBHTt9sQR5 zZC7RvhrNm45=N4lI%>{n)s-%QVa1oEABVJE;=^J2+#hGCe&A7Trezi(2gRNj4Wh#uWRDvnxLmQ2}@j?pI^vQUB`?=+1%a;KVP(aZP(+WZkDrE zG#?N8XmD|fY&3sbjiI6l)Kl#YaH^1c@3HK1iGz)@3 zB#hX~u#)omB`S;M8B3^3NlSD#9PHtlvi#!Hr5H-lWtL^bODZKH`wB_te z(MviLNe=}E1uLom+_Kmu+9e7b)?<15{1%nXvg;)U8_Z+bcjZoM08PMu>ra^yO?K2j zl5#2;>FZ)OHMruE11frSN7*Y;1KRQw3)yvLo{L`b9g?K!MUEW~aE>&4%*~Uv9%I_I z@+*HNN2Jr}-*AK?M=6Gl_+~~d(ReQtxuWYF@_8l(n*yUE*7JY_f2d5i7? zX%Yc9b&AYuKsc)7*E|(p33Btmh@(+q_22dWR7-p*1|hGEdfx)Lc+`ub@WrPvDDC7p z%_3*dEu(ILR_%!^OMCLv)DoGs8LVNf|3BNzw>SlO!YTG2sxa|ChicAsVet`m2exg5 zXBQYf!Gn`VywTfdfB{~UQn|ub$%FX-()NfVThXrIYsT%utFvU&& z97AmFTH6Xc+H>ZACc*g*f-GvukK_%nvl3MYcNcbmt1i>jWNGckmQ_UlZ}A*TR>}r{+g<>-ca|{PuO@|4wK z{KRHJi@G|ei(ASyJiAJPVgzeY?fkPWDp{s`W;&_}9-X;7Z!KN9cp7e8-gTP6t`qJi z37+I-;rm#GMNgD1{?cu+8%;qiMo&<%UZ!&J+d?1x4fUBh=m3A7*kT{1p4CaPBJN7K z^Ya_jCFj7Rn&z{mPTy_QJbl<* zE2{fWR;b6AWDUUKWGOXEh$X%%kHl(33lp+1gr`SxVTCa$oKrAQ}82NpAa5 z*MAWBT)KLri)E{4$?v!f=j?;f?t86SSJlf0-&##y3HSt~q>!c}riwXv9@C^M`rV`P z6xb%fP-@l<6K}LI4KsbXd*cNt{`mehue@*!*+HE=OU}D>RIJ1Cd3c7IcW{0(81&d2 zHU~P^7_@u0J2rB%6q2q$`AcXXjMoW^~GCw6I;?&ADbd(R7-ZbN-gv=|0%#$p!X$TWiA86;~{q?qH<-{ z*LzBrB=kQ0kf$5{F@J#x91M$AoL#Z_cU`Z$klcVys{klD+=J6MoO}iPUhwcFA>h4q zzM5j@UpxQA?hD!+=bg4fmos*z_v=15$kH^o{8V3*;i6n~e|}L<_)FB*uq`YW`6f_} zcpxf*@L-PjC6k7K)X5Ft+pOV@QIvSo=C=9C*2D%KP^R znk+4E=(-BKe-6pi7FTiz6#ACG$&+g;De0+E+G}bKlS`C6v#%$CWon&$s{5tG4Bkf0hq-*?n>dAfGNI~eyL6Pj`;6OTU!eX z$bQ30%_`5I$ov63Y3bvdWUf=m$;nY$5C)mOy(GUt6XO8hs+*+k?w=i?(J90Egq7U6 zu#3sehe`MsA6Q&ggs}?T$qnu>JBIJf1kxRh%l{Coq1`Cly z;4hfjZG1hg@GXV6Vj*jgK8%VZnPGUtIkP}o>F+TVvE9xu^zrCczFC*}xCB~V{5F6saM)v`5f)fz^gENtoaYxjNSyd-_QcbgQIJ*Sy zjKoK>Ega=sp?gPE(yd4I4D>8MfWj8JwA7p|36mH5F3Idv>k(*ePa@EMOD$rB%CSlM z1oh=qc7%*OZBjLC{av2k&#&-PW0rRloKRm96+FT?ulv@RM-K!9>#+3iE*MbB_b(JMnKb_yP?TQR2?tPP)SLP-ae`}TEiNJWYAV40dHTz=>$Z;Y8|rb zHB~-3&Cc(1hP7sZBsKyJl~5Mwp~%)K>}^Tu zh*{AIrXwhzrIhGIsDRGIPz~V1kQOl-S^9l`5T;)A6hw$^F^}fAL(v;=O8zPt4JWMtI$^&-Fj{H zql7F2)R91J;R6!t;_hhbdi_rc^7(Wc7H~n&dP}rpE~yHRg>y$-VRbVS2n{9pZj$uxpw^@b@gNY2 z3=1k23ch5loi+6TpzXwNJ3$kCeyDEq&P}*-a&nIAz+6O0n|wkNs|Y3xL6~}MLvzR0 zIO;nKNR&)06;Y;IpqaVWVMWv2i!h!a3a1Y?cu_I4^V2G48UV_y9m2PVB4wd+F2kw6 z|866yeu{6Oe$M{N?X>(u+A(ni&)q#Q^fVuCAk9*I#_w@L4SW&MP13549G^p>JxJZv zh<+_TF*BEHR`1v-Dac*`7uqM8w`>-{I??S5zZA~83N&l_a$a(CwS{&b!j&51;S z6s0X#&BCp{=?>^>Eh+5kqDWkdfP|cG^clCiygzKNHaBnf`6fstWHr9{B{jsU-;O2L zSd&Wjg7VSbnwInoZb=@7hFR+2{AZp7w<%AV3=#i(AzkP7`kXuBjS&7RRYmPsKD>SB zYfREPe!6bS-&M2I?z8-~KaD!cA6YFBltdDU%FsypC<2I1GTSIa>*cG#`;0_|_j0yx zI0?$M0S(6-yy?|9T8CtS`M$FCx{xuUiIo_>UQIT3te-K8uuW^my{LrKDA<#UVpmM+ zEss+IKe5e!A=nhxa;(UVpAtXk7KWDjd3JSt9JY?7YS-7VWo)+e|FBf7uGjone{8J> z9jN>TJOgyr=sQ}1HQk-3YT=!It9qBBpSOe!SApz<-86-g;ONyMc^v z=coF%4;gQpBwW)?L3B}nsaX~0piS31j#e=o0o49EoIGU40(D1@xVC=x$Tx;86&qz( z>eXwRK17Q>9dGb4qRe47@{LvbH5G2@-<`SL2LN*(Ymk|uwgEAug8Gndye}OWZWykP zRx9o4L>$gv7V%f<^Nb$V)xLZe1u^2NY1-*3TnCUgcy?fu1{9J-Wskm87DMb7{rjzg z=2{_yaDrrP$0SP~;5IriA-CU0qKtV1#(!_%Cu05M4&=!sgNx?(zu&izS~F8CSQ8O5 zBMKe%4V{BgE{Bo-a?a|a)SX9Io3dYgVHte-lkB89`&f2WFD?ytrX@$TKIQf_Q|h%xYvGfq*Gz=imQY=ibG<{)__h>4_JnO~0I>V| zNohIgf#~FQQmfPJ&g9vj5W!=_lO#ktE+Te9&ob04tT8%q@Lz84U2+QWa4;oDHAK$B z1x%osn>2(*7_^wD)7z#%mCjGSMO*f?dtH_ByWUG)yc;&0VHY^6n;Y{}`<<0xJCs?w?Ma*mj5%WM`)qWT&tBhtT@;GwT6s0$Yx0LK$nC1iCJyEuBDxb>eUbJL0LY){RHvSI zc0ld4K!%?8>zMWOgskhX` zs3Ng%geNdtbOi`IefKmH3V_GxV#jqT|81}ZNd94sf6XY$l*4Tr3)2f8JUdY~Q@54csr&z*2q31#%FFBta?81R8VEu>-bl3F68qklzl-gRo? zcLHZ4T+jXJrE4i)H+u2&^l?aJ$pvx;%q_3_t@1_$(sm#$hx}4003DgDE~KxkNvsU} z!1X+WjQ3?%RtAyvVYWX5N(rk*j{jg=p7)sF&tIU;*?lvrC~GT-^E$ym590Di2|>ijcQ5jdC>Aof9rs1n!TpeqaC?7_S zcifUaD}jjj(a85NbDkh{U^o_0@e3LyTy{MWJt>dr_g}9EsbR+FcS?|RD(i&B{lK$B zhxa1)1ew#jwVjYRt6x!{4}xr<)&*aL6Bu5?j_tn}Vty27lLmD!is)^^ zAe#Ra^$ab?0F|i(QOC_tyNx0H`YTLZAfM!KFgK{9)-H{xMfvc)^eEZqVIn;>Dm+^X zg7!hAX1`QzeFI_VOwgM~oulC&`?&snNm9j*uRuk6p)1J^o+X&>S}jwsct#XcOxwNA z-xsKF&PQfHkf)x)CtQchQ3a`g<0W(SRAoXjWsJ40+5M?w@vgd3;!Hh9>m?u;*9O%? zAs#FLG4#&O*LV5@{1ft5oc3aaA@N3`;Zc94e;8}|kD-!^Y~+#nzwci^&KYlRd4PcU zw4i>HfNhlk%q;&?Pc~QclS9))+C3J)xZ}D{ZA=;7eg+KzffU~qOTvH!iHZaQRojEeAWB5J~$qheRCl&?zUh<%A~;XoIytk2Ybl-uBM zR$qKg^tzp%$}&9ROzLND#~XC^bzcBJ;MGgKTYy64venTrH;2{986-W9AnXbVE}slgU!1*y`z)4o)KFb{wZGAm9& zE}HzTu|aUX;2rT7vPbKh9?`icb+gG}Vz<++=xF^Xo1Uz%myL}T8#}aT$Ib)lBg5<( zo6|Y7w1S7nC@$9AcsSN|=&a@K>XrvAoV~)n@K!PhOPtTEf=})EvTPf9VBV4Nvr;V& z)=es>r({ZFCr{z{EY0vSNG(mTz3{T?nAu}vTXnAN5~;Hq@9=O5W*YcL>%H84_WzS> zI!QGxn~x=qqy&7$epo352EGA|eExneI-U!eYi&nMTshrCGbdX1RSAu_a_?O?>I%O; z#tSfg7{tfj?$mRBx#Uo##BfTM9|EkD*h&XUxa<7WqlS8A4X$ zJ97~%y58=;m;u5|rKrtKAI#d^L?7@%6GbP;RN!}@hIgc}!`OSxOpLxb;3IbRXpd|$ zC{#5f`IHQtP!cEOG0_074ezRBt4d0*=7YVrkxjG^zBhO*i1+DbSZm(cKdI!6TXMtL zvxMu@LiqE$>?{1zfjUA0&Qq#OAZb)dPWm6x)2Ap`z|_BD_wnrvCff$ae~}4Mj>cpo ztXP@b%w4}B(O`7i(CCF~e+eM^(?)m{pO~=0+EJXi*VT1WQ!oJX#LYkgyRp!xiU=%& z+cl#6OQFP##W~8+IVqxlmtbij?pXI$y)e~0%nu0e7Fv>_KHaZ(UyaGTo2`Pm6GUJu zjCVBQ z|G1R3XMxn>Jm~;(7jsJPNTiiye8Q8DlOs+#4)QZR+nk-Gt-N7Q|5fhCC1!hN>_vL= z183^YsZo;|#sPhu-aCG5L={*s-A@%M4Z>4@U6} z1mTmCFb5fC1lqE)-1FG22H6c)k7?k5zfd*cs(v!O$7cgNd~Z+uP+`vgz4I6YaF?m^ z&Ww!c=V{ndHPke38A@C2HDgN1I2?+VwCv6XhIXbnAX#(gTQQw}G|PE6qxs@}|Cm^o z{I2BOM;9osIYX8I)2#>vMTo+rxrUP=lL_Ick7fVQ4u3wcEI!ieK{KmT_r*eWBWo^` zGV#<3s}c=hM-(de2yBhcMrPluy0;%?!*DoJ>c#>zn)yUye9DJfpjfZ|o zJ)BMA3?Y;}_ke2l$^3{)rjf#lT-&_4*Q%g)MA_wV46(Nl&rEJ=<(sZ}Kv8Sd+xeHh ztgCzZXJv^S7w3baLapXwfACqp8S>I5(?(t37pOqroaMjPiJDaBlnr3{U+1`HEp1g? zX%zoFLuJQcchQTEc=#YFp+T%#es`z0^j!bH#bM`K`5IEwA@8rB<|z(j7}b&?|KhqD zdnROvxen!|eA!T=q=Qo|CX7d!@aa%fwa2jq6m%)jA19d4wUGj;`@t}SsK;DtiAF-0 z{*tDs0GML^uG`}y=4dL!vPxvZu3r4B?}oqv`up_rn^M%^$AxXg*HwR;l%1k@5MY%iOdbE%Are| zNd>B4_(CB9>9qyBnv_zn%0zgE-YeOgFd>~8$d1F8-4Q+(e#q~c&(YpXa{-$O+nVd(4rZBHTX|g0e@vNz58{(L0QwwW zFZDhN+sV6GR}c9fhPkEtbnt1o6^LcbfVpD+s@Bg7FHL^6X*R)&mG2j~#Voe!Lgq32 zd76e@Z^UC9Xmo6f6S%TbE&H=bHg45|R2hrU2|D(&)P_#Bvz2+YG9a;^`iqH}5|gq@ zJWtYG+YLJU*}B%b&hc__wmL7#=BfTngDT?!N+Wv&}`+I^5ue3fUwn+@>S|27jQ7zgP)WGhsrjTT2xJ6ao>J^@Ig}N z+5Z!<1y1@<8B>-Hk)^|8a+ZVl<)G@F)!$fJNCg0bCGP|9YA0C@wH9}%z;h@%%*kZ2dXA-l2-fMcp`kqiMeQu;F zl*x@1h2ePVFqjX|JIB@5P}b8dgkO{6W? zA$kDi2vm}7j5-Dt4aT)k`*InMkSYEmWuK>nAiI{24YZCqqU@H9~H zW)`@QflCZBtxWEbbC<;F$k5G`kk@I)M>dKyNR&B?_Ft#tgLQ@PGIN0#AtYjSFc71` zn2r;;VG%nbK}aumBC*hXzO#S%8)Ks(EM$y~J4Ua{#BecKu~U=VZN#}XU4EyM1xrYw z1hrEq0V0jda0Pd}`NeubDTO8iV!k&6f(Zl!s{&<*2D**X(OJ_9r>jILLZT5EwRZ7{ zXk9EyEA?KB=J))vOKT$V?5sB}BlXLd+qbvB{PW%W>)vQ8c>Am#4v2sC`f1vf50|66 zI+pqSYT8Vmj!p;lx3ZOepbokk-5*^JP}HmDsRb+J@vwZLlF!lFk#4+_{Yf=OMW%0= zRB^hW@yzh-Gkr;2ykHAYm;Bl3v`?BmxAfM=d0PaXUBjnOcwjB+*7!|X-T#@GPXD_9 zTn(B(nQ=PmI-?h&t?_@Yv@HX*t`=Vt1a4<`iF#M{Pe=E|lJV?f*t^HuXQeP4+MiJI zk5MH@^|URGeokibQDxnpKcZe#!&2c&rRNU`EgN{ZCG5okz2aor^MtqGWWS91 z^#F&Et?Z>_4SFzN(`#$en|V{;jw*1MC^|2BupJ_AKi$6j`UZcFT-6V~k&tb`;c?iT z8~`SM9VV9l2u!Tmi4x^jQG!y}hC$#eXrKi5Y%5CaPJoyf0J1ZCDK6C>Lj6znpztIKvMI6e~A?qJIb|VJA>@SOtoT<%Ir~DBRx;l%3gI0>!E| zpqM>?vP=8EKnZ`(fFk}6puBy1^?Mi2yst;~L2+U?aN=Ku6X*OACsN97I3b=TPB>r1 z33Ad_vDb|MNw(Wz;$DDB*bS2%xm!VrTSH0M2PNB;?+X&)pP@wVkCI=1JOA{dy8_w6 z^d^q4W5mfH>P>{+RZOgst03`~iiu&uaw;Zh)Boco{-BW@a=rWHe=EG&MLeH8D3iVKp@~I5A{qGG#boVr4i! zJU3=$G&E#1Wo0xqI59ObH#uQ7H8VIdWM(pDIAUUDIFmkkMt?FsJ_>Vma%Ev{3V7Nr z&r41MQ4mJq`T-vZNGm9UC}N8=52ZoZ0CU6K88PXJ3|*FC<__F|yI|r5@Sc>DFQ-yB zsa!ML?Q&MK8|Xj_61ayE4B!#QU|KKCC_xVLP=Gy{!bDc}cl&Uu{HKox(1vH2DT;k@ z2v=(T`dEZ2oL0aQoI(vsP=^T0a0chlfC?PL1zbZ@ouBZ9?n@wE1$ym3|IJVKm3(`3 zl}27erJ2{Q<{PgEE&jK$makr^mS0|X%IaQE%GO>zy>G*zkHqW`;#U{glU#Zo3o$S; LHVP#rMNdWw#PUrA delta 17908 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 Apa1{> diff --git a/pkgdown/assets/gt-latex.tex b/pkgdown/assets/gt-latex.tex index 0ba6588858..c520186551 100644 --- a/pkgdown/assets/gt-latex.tex +++ b/pkgdown/assets/gt-latex.tex @@ -202,7 +202,7 @@ \title{LaTeX Quarto test} \author{} -\date{2024-08-14} +\date{2024-10-02} \begin{document} \maketitle @@ -236,7 +236,7 @@ \end{Shaded} \begin{verbatim} -[1] '1.5.54' +[1] '1.5.57' \end{verbatim} \newpage{} @@ -292,7 +292,7 @@ \FunctionTok{tab\_spanner}\NormalTok{(}\StringTok{"Second level spanners"}\NormalTok{, }\FunctionTok{c}\NormalTok{(char, num, fctr)) }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{tab\_stubhead}\NormalTok{(}\StringTok{"Stubhead label"}\NormalTok{) }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{tab\_style}\NormalTok{(} - \AttributeTok{style =} \FunctionTok{list}\NormalTok{(}\FunctionTok{cell\_fill}\NormalTok{(}\StringTok{"\#f0f0f0"}\NormalTok{), }\FunctionTok{cell\_text}\NormalTok{(}\AttributeTok{weight =} \StringTok{"bold"}\NormalTok{)),} + \AttributeTok{style =} \FunctionTok{list}\NormalTok{(}\FunctionTok{cell\_fill}\NormalTok{(}\StringTok{"\#f0f0f0"}\NormalTok{), }\FunctionTok{cell\_text}\NormalTok{(}\AttributeTok{weight =} \StringTok{"bold"}\NormalTok{, }\AttributeTok{size =} \StringTok{"small"}\NormalTok{, }\AttributeTok{color =} \StringTok{"blue"}\NormalTok{)),} \FunctionTok{cells\_stubhead}\NormalTok{()} \NormalTok{ ) }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{tab\_header}\NormalTok{(}\AttributeTok{title =} \StringTok{"Stubhead styling and multiple spanner levels"}\NormalTok{)} @@ -313,7 +313,7 @@ \cmidrule(lr){3-5} \multicolumn{2}{l}{} & \multicolumn{2}{c}{spanners} & & & & & \\ \cmidrule(lr){3-4} -\multicolumn{2}{c}{{\bfseries \cellcolor[HTML]{F0F0F0}{Stubhead label}}} & char & num & fctr & date & time & datetime & currency \\ +\multicolumn{2}{c}{{\bfseries \small \cellcolor[HTML]{F0F0F0}{\textcolor[HTML]{0000FF}{Stubhead label}}}} & char & num & fctr & date & time & datetime & currency \\ \midrule\addlinespace[2.5pt] \multirow{4}{*}{grp\_a} & row\_1 & apricot & 1.111e-01 & one & 2015-01-15 & 13:35 & 2018-01-01 02:22 & 49.950 \\ & row\_2 & banana & 2.222e+00 & two & 2015-02-15 & 14:40 & 2018-02-02 14:33 & 17.950 \\ diff --git a/tests/testthat/_snaps/as_latex.md b/tests/testthat/_snaps/as_latex.md index 0b8c4640aa..f671e8c95f 100644 --- a/tests/testthat/_snaps/as_latex.md +++ b/tests/testthat/_snaps/as_latex.md @@ -3,7 +3,7 @@ Code gt_latex_styled Output - [1] "\\begingroup\n\\fontsize{12.0pt}{14.4pt}\\selectfont\n\\setlength{\\LTpost}{0mm}\n\\begin{longtable}{l|rlcrrr}\n\\toprule\n & \\multicolumn{3}{c}{{\\itshape heading}} & & \\multicolumn{2}{c}{heading} \\\\ \n\\cmidrule(lr){2-4} \\cmidrule(lr){6-7}\n{$\\overline{\\mbox{stubhead}}$} & {NUM} & char & fctr\\textsuperscript{\\textit{1}} & time & {DATETIME} & currency \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{grp\\_a} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_1}}} & 0.1111 & apricot & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{one}} & 13:35 & {\\scriptsize2018-01-01 02:22} & 49.95 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_2}}} & 2.2220 & {\\bfseries \\hspace{15pt}banana} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{two}} & 14:40 & {\\scriptsize2018-02-02 14:33} & 17.95 \\\\ \n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_3}}} & 33.3300 & coconut & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{three}} & \\textsuperscript{\\textit{2}}{\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{15:45}}} & {\\scriptsize2018-03-03 03:44} & 1.39 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_4}}} & 444.4000 & {\\bfseries \\hspace{15pt}durian} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{four}} & {\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{16:50}}} & {\\scriptsize2018-04-04 15:55} & 65100.00 \\\\ \n\\midrule \nTotal & {\\cellcolor[HTML]{00FF00}{480.06}} & — & — & — & — & {\\cellcolor[HTML]{00FF00}{65,169.29}} \\\\ \nAvg & 120.02 & — & — & — & — & 16,292.32 \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{{\\bfseries \\cellcolor[HTML]{CCCCFF}{grp\\_b}}} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_5}}} & 5550.0000 & {\\bfseries \\hspace{15pt}NA} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{five}} & 17:55 & {\\scriptsize2018-05-05 04:00} & 1325.81 \\\\ \n\\midrule \n\\midrule \n{\\bfseries Grand Total} & {\\cellcolor[HTML]{AAAAAA}{6,030.06}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{66,495.10}} \\\\ \n\\bottomrule\n\\end{longtable}\n\\begin{minipage}{\\linewidth}\n\\textsuperscript{\\textit{1}}{\\bfseries This is a footnote in the column labels.}\\\\\n\\textsuperscript{\\textit{2}}{\\bfseries This is a footnote. With a second line.}\\\\\n{\\itshape \\fontsize{6}{7.5}\\selectfont NOTES: A mtcars example.\\\\\n}\\end{minipage}\n\\endgroup\n" + [1] "\\begingroup\n\\fontsize{12.0pt}{14.4pt}\\selectfont\n\\setlength{\\LTpost}{0mm}\n\\begin{longtable}{l|rlcrrr}\n\\toprule\n & \\multicolumn{3}{c}{{\\itshape heading}} & & \\multicolumn{2}{c}{heading} \\\\ \n\\cmidrule(lr){2-4} \\cmidrule(lr){6-7}\n{$\\overline{\\mbox{stubhead}}$} & {NUM} & char & fctr\\textsuperscript{\\textit{1}} & time & {DATETIME} & currency \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{grp\\_a} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_1}}} & 0.1111 & apricot & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{one}} & 13:35 & {\\scriptsize 2018-01-01 02:22} & 49.95 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_2}}} & 2.2220 & {\\bfseries \\hspace{15pt}banana} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{two}} & 14:40 & {\\scriptsize 2018-02-02 14:33} & 17.95 \\\\ \n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_3}}} & 33.3300 & coconut & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{three}} & \\textsuperscript{\\textit{2}}{\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{15:45}}} & {\\scriptsize 2018-03-03 03:44} & 1.39 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_4}}} & 444.4000 & {\\bfseries \\hspace{15pt}durian} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{four}} & {\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{16:50}}} & {\\scriptsize 2018-04-04 15:55} & 65100.00 \\\\ \n\\midrule \nTotal & {\\cellcolor[HTML]{00FF00}{480.06}} & — & — & — & — & {\\cellcolor[HTML]{00FF00}{65,169.29}} \\\\ \nAvg & 120.02 & — & — & — & — & 16,292.32 \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{{\\bfseries \\cellcolor[HTML]{CCCCFF}{grp\\_b}}} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_5}}} & 5550.0000 & {\\bfseries \\hspace{15pt}NA} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{five}} & 17:55 & {\\scriptsize 2018-05-05 04:00} & 1325.81 \\\\ \n\\midrule \n\\midrule \n{\\bfseries Grand Total} & {\\cellcolor[HTML]{AAAAAA}{6,030.06}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{66,495.10}} \\\\ \n\\bottomrule\n\\end{longtable}\n\\begin{minipage}{\\linewidth}\n\\textsuperscript{\\textit{1}}{\\bfseries This is a footnote in the column labels.}\\\\\n\\textsuperscript{\\textit{2}}{\\bfseries This is a footnote. With a second line.}\\\\\n{\\itshape \\fontsize{6}{7.5}\\selectfont NOTES: A mtcars example.\\\\\n}\\end{minipage}\n\\endgroup\n" attr(,"class") [1] "knit_asis" attr(,"knit_meta") @@ -106,7 +106,7 @@ Code gt_latex_styled Output - [1] "\\begin{table}[!t]\n\\fontsize{12.0pt}{14.4pt}\\selectfont\n\\begin{tabular*}{\\linewidth}{@{\\extracolsep{\\fill}}l|rlcrrr}\n\\toprule\n & \\multicolumn{3}{c}{{\\itshape heading}} & & \\multicolumn{2}{c}{heading} \\\\ \n\\cmidrule(lr){2-4} \\cmidrule(lr){6-7}\n{$\\overline{\\mbox{stubhead}}$} & {NUM} & char & fctr\\textsuperscript{\\textit{1}} & time & {DATETIME} & currency \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{grp\\_a} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_1}}} & 0.1111 & apricot & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{one}} & 13:35 & {\\scriptsize2018-01-01 02:22} & 49.95 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_2}}} & 2.2220 & {\\bfseries \\hspace{15pt}banana} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{two}} & 14:40 & {\\scriptsize2018-02-02 14:33} & 17.95 \\\\ \n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_3}}} & 33.3300 & coconut & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{three}} & \\textsuperscript{\\textit{2}}{\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{15:45}}} & {\\scriptsize2018-03-03 03:44} & 1.39 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_4}}} & 444.4000 & {\\bfseries \\hspace{15pt}durian} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{four}} & {\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{16:50}}} & {\\scriptsize2018-04-04 15:55} & 65100.00 \\\\ \n\\midrule \nTotal & {\\cellcolor[HTML]{00FF00}{480.06}} & — & — & — & — & {\\cellcolor[HTML]{00FF00}{65,169.29}} \\\\ \nAvg & 120.02 & — & — & — & — & 16,292.32 \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{{\\bfseries \\cellcolor[HTML]{CCCCFF}{grp\\_b}}} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_5}}} & 5550.0000 & {\\bfseries \\hspace{15pt}NA} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{five}} & 17:55 & {\\scriptsize2018-05-05 04:00} & 1325.81 \\\\ \n\\midrule \n\\midrule \n{\\bfseries Grand Total} & {\\cellcolor[HTML]{AAAAAA}{6,030.06}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{66,495.10}} \\\\ \n\\bottomrule\n\\end{tabular*}\n\\begin{minipage}{\\linewidth}\n\\textsuperscript{\\textit{1}}{\\bfseries This is a footnote in the column labels.}\\\\\n\\textsuperscript{\\textit{2}}{\\bfseries This is a footnote. With a second line.}\\\\\n{\\itshape \\fontsize{6}{7.5}\\selectfont NOTES: A mtcars example.\\\\\n}\\end{minipage}\n\\end{table}\n" + [1] "\\begin{table}[!t]\n\\fontsize{12.0pt}{14.4pt}\\selectfont\n\\begin{tabular*}{\\linewidth}{@{\\extracolsep{\\fill}}l|rlcrrr}\n\\toprule\n & \\multicolumn{3}{c}{{\\itshape heading}} & & \\multicolumn{2}{c}{heading} \\\\ \n\\cmidrule(lr){2-4} \\cmidrule(lr){6-7}\n{$\\overline{\\mbox{stubhead}}$} & {NUM} & char & fctr\\textsuperscript{\\textit{1}} & time & {DATETIME} & currency \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{grp\\_a} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_1}}} & 0.1111 & apricot & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{one}} & 13:35 & {\\scriptsize 2018-01-01 02:22} & 49.95 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_2}}} & 2.2220 & {\\bfseries \\hspace{15pt}banana} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{two}} & 14:40 & {\\scriptsize 2018-02-02 14:33} & 17.95 \\\\ \n{\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_3}}} & 33.3300 & coconut & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{three}} & \\textsuperscript{\\textit{2}}{\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{15:45}}} & {\\scriptsize 2018-03-03 03:44} & 1.39 \\\\ \n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_4}}} & 444.4000 & {\\bfseries \\hspace{15pt}durian} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{four}} & {\\fontsize{15}{18.75}\\selectfont \\underline{\\textcolor[HTML]{FF0000}{16:50}}} & {\\scriptsize 2018-04-04 15:55} & 65100.00 \\\\ \n\\midrule \nTotal & {\\cellcolor[HTML]{00FF00}{480.06}} & — & — & — & — & {\\cellcolor[HTML]{00FF00}{65,169.29}} \\\\ \nAvg & 120.02 & — & — & — & — & 16,292.32 \\\\ \n\\midrule\\addlinespace[2.5pt]\n\\multicolumn{7}{l}{{\\bfseries \\cellcolor[HTML]{CCCCFF}{grp\\_b}}} \\\\[2.5pt] \n\\midrule\\addlinespace[2.5pt]\n{\\slshape \\hspace{11.25pt}\\cellcolor[HTML]{AA0000}{\\textcolor[HTML]{FFFFFF}{\\hspace*{3.75pt} row\\_5}}} & 5550.0000 & {\\bfseries \\hspace{15pt}NA} & {\\fontsize{15}{18.75}\\selectfont \\textcolor[HTML]{0000FF}{five}} & 17:55 & {\\scriptsize 2018-05-05 04:00} & 1325.81 \\\\ \n\\midrule \n\\midrule \n{\\bfseries Grand Total} & {\\cellcolor[HTML]{AAAAAA}{6,030.06}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{—}} & {\\cellcolor[HTML]{AAAAAA}{66,495.10}} \\\\ \n\\bottomrule\n\\end{tabular*}\n\\begin{minipage}{\\linewidth}\n\\textsuperscript{\\textit{1}}{\\bfseries This is a footnote in the column labels.}\\\\\n\\textsuperscript{\\textit{2}}{\\bfseries This is a footnote. With a second line.}\\\\\n{\\itshape \\fontsize{6}{7.5}\\selectfont NOTES: A mtcars example.\\\\\n}\\end{minipage}\n\\end{table}\n" attr(,"class") [1] "knit_asis" attr(,"knit_meta") diff --git a/tests/testthat/test-as_latex.R b/tests/testthat/test-as_latex.R index 2ad2906e4d..c417019b6e 100644 --- a/tests/testthat/test-as_latex.R +++ b/tests/testthat/test-as_latex.R @@ -5,14 +5,10 @@ test_that("Table width correctly output in LaTeX using longtable", { tab_options(table.width = pct(90), latex.use_longtable = TRUE) %>% as_latex() - start_pt <- regexpr("begin\\{longtable", gt_latex_width_1) - - expect_gt(start_pt, 0) # Verifies the long table command appears in the text - - end_pt <- regexpr("end\\{longtable", gt_latex_width_1) - - expect_gt(end_pt, 0) + expect_match(gt_latex_width_1, "begin\\{longtable") + expect_match(gt_latex_width_1, "end\\{longtable") + start_pt <- regexpr("begin\\{longtable", gt_latex_width_1) latex_prefix <- substr(gt_latex_width_1, 1L, start_pt) # Verify that LTleft and LTright are correctly specified @@ -27,7 +23,6 @@ test_that("Table width correctly output in LaTeX using longtable", { as_latex() expect_match(gt_latex_width_2, "\\\\setlength\\\\LTleft\\{\\\\dimexpr\\(0.5\\\\linewidth - 225pt\\)\\}") - expect_match(gt_latex_width_2, "\\\\setlength\\\\LTright\\{\\\\dimexpr\\(0.5\\\\linewidth - 225pt\\)\\}") }) diff --git a/vignettes/gt-visual.qmd b/vignettes/gt-visual.qmd index 943a424ac6..5866c924f5 100644 --- a/vignettes/gt-visual.qmd +++ b/vignettes/gt-visual.qmd @@ -85,7 +85,7 @@ tab <- exibble %>% tab_spanner("Second level spanners", c(char, num, fctr)) %>% tab_stubhead("Stubhead label") %>% tab_style( - style = list(cell_fill("#f0f0f0"), cell_text(weight = "bold")), + style = list(cell_fill("#f0f0f0"), cell_text(weight = "bold", size = "small", color = "blue")), cells_stubhead() ) %>% tab_header(title = "Stubhead styling and multiple spanner levels")