From c6866af25e53afc188569f3d68f401f3131714eb Mon Sep 17 00:00:00 2001 From: "W. Joel Schneider" Date: Mon, 4 Mar 2024 02:23:14 -0500 Subject: [PATCH] language options --- .quartoignore | 3 +- NEWS.md | 6 + NEWS.qmd | 4 + _extensions/wjschne/apaquarto/_extension.yml | 4 +- _extensions/wjschne/apaquarto/apa.css | 4 +- _extensions/wjschne/apaquarto/apaandcite.lua | 19 ++- _extensions/wjschne/apaquarto/apacaption.lua | 32 +++- _extensions/wjschne/apaquarto/apalanguage.lua | 53 +++++++ _extensions/wjschne/apaquarto/apamasked.lua | 40 ++--- _extensions/wjschne/apaquarto/apanote.lua | 27 +++- _extensions/wjschne/apaquarto/apaquarto.docx | Bin 31948 -> 32022 bytes _extensions/wjschne/apaquarto/citeprocr.lua | 35 ++++- .../wjschne/apaquarto/docxfrontmatter.lua | 49 +++++- .../wjschne/apaquarto/maskedbibliography.bib | 6 - _extensions/wjschne/apaquarto/template.tex | 36 +++++ docs/options.html | 140 ++++++++++++++++++ docs/search.json | 7 + options.qmd | 67 ++++++++- template.qmd | 16 +- writing.qmd | 75 ++++++++++ 20 files changed, 566 insertions(+), 57 deletions(-) create mode 100644 _extensions/wjschne/apaquarto/apalanguage.lua delete mode 100644 _extensions/wjschne/apaquarto/maskedbibliography.bib create mode 100644 writing.qmd diff --git a/.quartoignore b/.quartoignore index acb18f6..4af5979 100644 --- a/.quartoignore +++ b/.quartoignore @@ -17,4 +17,5 @@ template_manuscript.pdf site_libs/ _extensions/wjschne/embedpdf/ _extensions/embedpdf/ -apa-cv.csl \ No newline at end of file +apa-cv.csl +writing.qmd diff --git a/NEWS.md b/NEWS.md index 32dc8bf..126382f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,12 @@ - Figure and Tables in .pdf jou mode should fit automatically. - Typst version that would allow for easy customization +# Version 3.3.1 (2024-03-04) + +- Implemented [language + options](https://wjschne.github.io/apaquarto/options.html#language-options) + for internationalization and customization. + # Version 3.3.0 (2024-02-29) - Added better documentation of [apaquarto template diff --git a/NEWS.qmd b/NEWS.qmd index d64650a..4683279 100644 --- a/NEWS.qmd +++ b/NEWS.qmd @@ -11,6 +11,10 @@ engine: knitr - Figure and Tables in .pdf jou mode should fit automatically. - Typst version that would allow for easy customization +# Version 3.4.0 (2024-03-04) + +- Implemented [language options](https://wjschne.github.io/apaquarto/options.html#language-options) for internationalization and customization. + # Version 3.3.0 (2024-02-29) - Added better documentation of [apaquarto template options](https://wjschne.github.io/apaquarto/) diff --git a/_extensions/wjschne/apaquarto/_extension.yml b/_extensions/wjschne/apaquarto/_extension.yml index 58ae7d8..50de825 100644 --- a/_extensions/wjschne/apaquarto/_extension.yml +++ b/_extensions/wjschne/apaquarto/_extension.yml @@ -1,6 +1,6 @@ title: My Document in APA Style, Seventh Edition author: W. Joel Schneider -version: 3.3.0 +version: 3.4.0 quarto-required: ">=1.4.549" contributes: formats: @@ -16,6 +16,8 @@ contributes: fig-width: 6.5 fig-height: 6.5 filters: + - at: pre-ast + path: apalanguage.lua - at: pre-ast path: apafloatstoend.lua - at: pre-ast diff --git a/_extensions/wjschne/apaquarto/apa.css b/_extensions/wjschne/apaquarto/apa.css index 9fca653..c28c239 100644 --- a/_extensions/wjschne/apaquarto/apa.css +++ b/_extensions/wjschne/apaquarto/apa.css @@ -81,4 +81,6 @@ blockquote p:nth-child(1) {text-indent: 0} border-bottom: none; } -.tabwid {padding: 0} \ No newline at end of file +.tabwid {padding: 0} + +.Abstract p {text-indent: 0} \ No newline at end of file diff --git a/_extensions/wjschne/apaquarto/apaandcite.lua b/_extensions/wjschne/apaquarto/apaandcite.lua index 4743199..25a24f7 100644 --- a/_extensions/wjschne/apaquarto/apaandcite.lua +++ b/_extensions/wjschne/apaquarto/apaandcite.lua @@ -1,12 +1,25 @@ +local andreplacement = "and" + +local function get_and(m) + if m.language and m.language["citation-last-author-separator"] then + andreplacement = pandoc.utils.stringify(m.language["citation-last-author-separator"]) + end +end + ---From Samuel Dodson ---https://github.com/citation-style-language/styles/issues/3748#issuecomment-430871259 -function Cite(elem) +local function replace_and(elem) if elem.citations[1].mode == "AuthorInText" then elem.content = pandoc.walk_inline(elem, { Str = function(el) - return pandoc.Str(string.gsub(el.text, "&", "and")) + return pandoc.Str(string.gsub(el.text, "&", andreplacement)) end}) return elem.content end return pandoc.Cite(elem.content, elem.citations) -end \ No newline at end of file +end + +return { + { Meta = get_and }, + { Cite = replace_and } +} \ No newline at end of file diff --git a/_extensions/wjschne/apaquarto/apacaption.lua b/_extensions/wjschne/apaquarto/apacaption.lua index 037b3c2..4ef224d 100644 --- a/_extensions/wjschne/apaquarto/apacaption.lua +++ b/_extensions/wjschne/apaquarto/apacaption.lua @@ -1,6 +1,27 @@ -local caption_formatter = function(p) +-- Get names for Figure and Table in language specified in lang field +local figureword = "Figure" +local tableword = "Table" + +local function gettablefig(m) + -- Get names for Figure and Table specified in language field + if m.language then + if m.language["crossref-fig-title"] then + figureword = pandoc.utils.stringify(m.language["crossref-fig-title"]) + end + + if m.language["crossref-tbl-title"] then + tableword = pandoc.utils.stringify(m.language["crossref-tbl-title"]) + end + else + + end +end - if pandoc.utils.stringify(p.content[1]) == "Figure" or pandoc.utils.stringify(p.content[1]) == "Table" then + +-- Format caption +local caption_formatter = function(p) + if pandoc.utils.stringify(p.content[1]) == figureword or pandoc.utils.stringify(p.content[1]) == tableword then + --print(p.content[1]) local figuretitle = pandoc.Para({}) local figurecaption = pandoc.Para({}) @@ -24,7 +45,7 @@ local caption_formatter = function(p) end end -Div = function(div) +local divcaption = function(div) if div.identifier:find("^tbl%-") or div.identifier:find("^fig%-") then if FORMAT == "html" then div.content = div.content:walk {Plain = caption_formatter} @@ -38,3 +59,8 @@ Div = function(div) end +return { + {Meta = gettablefig}, + {Div = divcaption} +} + diff --git a/_extensions/wjschne/apaquarto/apalanguage.lua b/_extensions/wjschne/apaquarto/apalanguage.lua new file mode 100644 index 0000000..0f9519b --- /dev/null +++ b/_extensions/wjschne/apaquarto/apalanguage.lua @@ -0,0 +1,53 @@ +-- from quarto-cli/src/resources/pandoc/datadir/init.lua +-- global quarto params +local paramsJson = quarto.base64.decode(os.getenv("QUARTO_FILTER_PARAMS")) +local quartoParams = quarto.json.decode(paramsJson) + +local function param(name, default) + local value = quartoParams[name] + if value == nil then + if quartoParams.language then + value = quartoParams.language[name] + end + if value == nil then + value = default + end + end + return value +end + +local fields = { + {field = "crossref-fig-title", default = "Figure"}, + {field = "crossref-tbl-title", default = "Table"}, + {field = "citation-last-author-separator", default = "and"}, + {field = "citation-masked-author", default = "Masked Author"}, + {field = "citation-masked-title", default = "Masked Title"}, + {field = "citation-masked-date", default = "n.d."}, + {field = "figure-table-note", default = "Note"}, + {field = "section-title-abstract", default = "Abstract"}, + {field = "section-title-references", default = "References"}, + {field = "title-block-author-note", default = "Author Note"}, + {field = "title-block-correspondence-note", default = "Correspondence concerning this article should be addressed to"}, + {field = "title-block-keywords", default = "Keywords"}, + {field = "title-block-role-introduction", default = "Author roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows:"}, +} + +Meta = function(m) + if not m.language then + m.language = {} + end + + if not m.language["figure-table-note"] then + if param("callout-note-title") then + m.language["figure-table-note"] = param("callout-note-title") + end + end + + for i,x in ipairs(fields) do + if not m.language[x.field] then + m.language[x.field] = param(x.field, x.default) + end + end + + return m +end \ No newline at end of file diff --git a/_extensions/wjschne/apaquarto/apamasked.lua b/_extensions/wjschne/apaquarto/apamasked.lua index 884732d..9f3b8d5 100644 --- a/_extensions/wjschne/apaquarto/apamasked.lua +++ b/_extensions/wjschne/apaquarto/apamasked.lua @@ -11,26 +11,26 @@ local function getmasked(meta) end - local convert2meta = false - for i, v in ipairs(meta.bibliography or {}) do - if pandoc.utils.type(v) == "Inline" then - convert2meta = true - end - end - - if convert2meta then - local orig_bib = meta.bibliography - meta.bibliography = pandoc.MetaList{orig_bib} - end - - - if meta.bibliography then - local maskedfile = "_extensions/wjschne/apaquarto/maskedbibliography.bib" - meta.bibliography:insert({pandoc.Str(maskedfile)}) - else - meta.bibliography = {{pandoc.Str(maskedfile)}} - end - return (meta) + --local convert2meta = false + --for i, v in ipairs(meta.bibliography or {}) do + -- if pandoc.utils.type(v) == "Inline" then + -- convert2meta = true + -- end + --end + -- + --if convert2meta then + -- local orig_bib = meta.bibliography + -- meta.bibliography = pandoc.MetaList{orig_bib} + --end + -- +-- + --if meta.bibliography then + -- local maskedfile = "_extensions/wjschne/apaquarto/maskedbibliography.bib" + -- meta.bibliography:insert({pandoc.Str(maskedfile)}) + -- else + -- meta.bibliography = {{pandoc.Str(maskedfile)}} + --end + --return (meta) end diff --git a/_extensions/wjschne/apaquarto/apanote.lua b/_extensions/wjschne/apaquarto/apanote.lua index 55515be..15c051f 100644 --- a/_extensions/wjschne/apaquarto/apanote.lua +++ b/_extensions/wjschne/apaquarto/apanote.lua @@ -1,6 +1,17 @@ -if FORMAT ~= "latex" then - function Div (elem) - if elem.attributes["apa-note"] then +if FORMAT == "latex" then + return +end + +local beginapanote = "Note" + +local function getnote(m) + if m.language and m.language["figure-table-note"] then + beginapanote = pandoc.utils.stringify(m.language["figure-table-note"]) + end +end + +local function apanote(elem) + if elem.attributes["apa-note"] then hasnote = true elem.content:walk { Div = function(div) @@ -10,7 +21,7 @@ if FORMAT ~= "latex" then end } if hasnote then - local apanotepara = pandoc.Para({pandoc.Emph(pandoc.Str("Note.")), pandoc.Space()}) + local apanotepara = pandoc.Para({pandoc.Emph(pandoc.Str(beginapanote)), pandoc.Str("."),pandoc.Space()}) apanotepara.content:extend(quarto.utils.string_to_inlines(elem.attributes["apa-note"])) local apanote = pandoc.Div(apanotepara) @@ -19,5 +30,9 @@ if FORMAT ~= "latex" then return {elem, apanote} end end - end -end \ No newline at end of file +end + +return { + {Meta = getnote}, + {Div = apanote} +} \ No newline at end of file diff --git a/_extensions/wjschne/apaquarto/apaquarto.docx b/_extensions/wjschne/apaquarto/apaquarto.docx index 5ee147aaa28452c76d32fb9499ba57aed74a5ac4..db82fb0ff36db1b6678c1f9c47000ed6cd865bbd 100644 GIT binary patch delta 11010 zcmZ{q1yCJdljtvSgTuvLgS!U}1b3IHhTymGlHvoSs zl+bK`_52P>cNeJU6MG)KckUs_V>hA^%!~^=`0FtH`d9bOb-&ByaKlJ}X71L6BnhS( zb?Q>})am6prASt-7$s$LVC7UQ{%ypm7K&~48>KoulW$sok4JRrDg@`2qaGm zF)wLa)a1JN6s#2(*G@hkh;@<90lUMO&X~qHz}~P$Le*@Pn3oh-0bfP8X7|i{pG9&xq$(Nchw6`t+t{_L?63W__GWWzzWDOP;JL(QA215 zU~sh-!**=Xd2hbREP_32&EuSZ4P1)qrz;a>j=b;yE1mUd2nu6)n#(fw(8x+RER6S- zBpb26v~B!`7{Y0b@u4iEbeI*!I{LC*-UZ=Ws)upGodH8|wl;~H>{zFSx4n+>_M3ve zq56k;CgdF9a6bq!!=g6b8`cDm`Na;)PRS}HCdq9<+>Ph!!;q|BW$dNU zc+kLIDVyC=G?DXas*~&acXO+D{hb-ueEK2n1N9L##Pl%H<;O}!HRcC05C(Wi`mNFM`8xS-e@k-gtQd`UtxFrCGIyAG;UCD#um?NhH5-Cj_;WACqfk`q^3n#0u2s4j)P>p z;o$`|lqUl3@_I-bes_u@*X;x;0rgS9!g4d^2po)Rqc_sps&g3Uk#h9!%Db0^G&Jug zGoCf=n@u(A(DgxMmF2$j*-M#g*;wlc)Oz?_wwkC;YBT1#-0Q-~g+0a^qIcOJ3|VfT zIz=Qu%bpulo*%m+Gu6broScdIsl4&BA$n&NNph0-QoeLpREm9pZ6*XEj%zuB^Rvc_ zVI%qdQ|hu=rwd-!E zxlQ}ezCsiUz39YI*}&5H=rO(JdIOeFFMtQPw|W z1mGYvd&a^B!T|vNkPtdba6op9&Gko_Pif2*t4$F_OegM>98A--Xwq1;yj5*H@2|*o z4ABs2?&CZbHm=Pz9u6Y?o2O<6H#etpxvwV&&LaBXAV~9jKWWoX$3_-emN_$YT{~n96j003U+xYz-@Q5vT+1#4D%$|q^35f`$3~hiR|jkt_I1?9z!!=3>M&ap>DqT! zR#g^_oZM~hX{SFEeOsB!>x6!l9EOc3M|EbL$<_0er7W1)yB2eIU~3(X7yX*Qwn$)| ztmXef$+tOQcAPnos*L@RlWwomv|dvArez1Pm!xVIO6#}Ni}LZ_`E2sj+b*0x?6Ae+ zgLb~lyjyI}PXc1bbTGu|O=>#x{Hx(Jk9aX+f7qeK{pWjwB7Z>@GUq?%W_-Q*(fCpu zi>f#*vlJJ%3B}zQ*De!ls#Dm$wZ3sUe1mT0W@aqSb#3Jz%auER(Y-6I=L!y#lxL}O z!Q6K05?X!d`o@^bXVBhe-w=0-xE3(e>VIayb9rU}pZDq{`UgBdZAV1ykR$1{__K3~ zMcd3-lXl8bz=6HqzihEgllZ6pe5(D^1bVLdAM^P!l3V7V8tREQqTdQBTWSq-3AIFF z@aYtaPC$`rjy_515HE7mao_KwlOkM&h2AeAHT_I>_)XJl)}Yj{Ji=RxhaLMV z=%NcRbyN3Phl{d9iLkZY%hByaXCylmv3TTKkV98`oo6{%{*gFbT%%m$;0sY|s^_nl zVs_uucmKw-6&Vr*J_y7Xk#J{w;+f-3`FzvyP)EuDb($|NrYCrMet3Tet&hYqM;wH) z+FQ|7r#^xfeKBs+am2WdmwmD0p4-`jp(4KAm$jB8&XfyQne_N%krMuDobR@Ir0>gq z-_;FTVu24uOMlpM%8EPciysBFum z%ie_5yIvu~d{04|Lz~ME*rRI})BU_E*g)S^Zl?MI^_mNey70UL2|UEXl+`8)iIBcI zTdEhCb_H2Kh!5)an5i%8Ck|TvuA<9Xeq}e=H_rznk3mPNnGk>*yRV*AF$N5 zoz8&+@SB7WyyObJk8T`5=Qzf%lkB_;H>Ez?{kkpK=5X0Yg&9Bf+HaxbQL?me^+_r9 zN9n?qgdx1)j&;AH?e?KQ3gB$92NpB-qJt+yun+>xTq7@GOfNzL^QARIV!#?7NQE)CK!1LJ?gV06~JdtTF zIE8m5d|70sj+C+s5Yl)Fl#+HxfPx4nSXv^UQ%6%jC_O`_q~O0V&_-!tZT${=r4%(w zIg9`__QBJz@sSR;BVeQ24J8Pk^0=7iLkgO&r66nv9Pn+I|0=B&U^98W+I zF|nz}n!P~hxgaws(eOb--b3TC2@8Acd}?wiq^+Iamp$4TYXUptO{`*LD+blF++PQalki1@LL&95dt}-l5K%Kg@#4^ zr!vf4(iqpDQc=({0#8GHUmLjFjZCXmaQ~2@k9pb2d~-6}l(a}Pv9r&s!@q7^vCO}q zC|~yi7SBQ*S!=1|6P-wQH)gJ^k8b}w9h^_(T%_rcL=95eR(T!DWPau>{B(Rp5B@(H1mQfAIZ7BF|Y+|Q&!g+P(IJoa2r)c-|=-|74r@JgA>^E+3n?Q zbttYa9 z5x@4GC-O=>_qRulyW!qZzeS)$(5&~)X3rboeg7FfBr`(3o-<#S=Y#hw>(v7%3Lc6k zngnCsJ3n*B^(KqM8wgO3!sY~ndK1sdR0{(Da3KKz1OUjoClRO@LhQ7 zH{Z_(96Y!1gFN{N&$bfXGY%>h9CUqPeBG|!D=OWzGxtWXeOz)%8i$KHj{woZ`ZMlC zAd_;MOf52`oCo;_Eme_mJ#tr7{j?jNWe`w84zUjTUM%#|!SDTi-99&rZL0_-2hFQz z%uJJTmN8E%nG3uvWiav`9>7q_!+urz30?A})lQ;t4~4xUCo;`9Vep#q%xaI_Hc|5y zi$Xz`s<9#xMQgY$kLnog6U;~Bfa}aMmV{}fJ1B(?%O#a-vtl_p2u?!jUV+$x8^V|@ zHXM@sEo?n#um#03RI^Yl6Bxr59KU2dLYLxUDC(mVJA(~`FZ?2+5qlv^mC+2@`Vz67 zA5#+d_SvIPvnT?GO-RC7c2kKxkEWJP?_36m&@F8pebHr4o(YyUO_icOlc9pYpe#<{Q;G zaU|LY#7l~`FSX?wkh5)sb2FRh*mgpVZZfn`Js)m=4U9g{044EBhh`MVdCJ*cjJI^D zUPpB-NaMM_{avJKO=^Z81u5`t&RR5JIx5$oWD6|$0nLa5{QbB7C1E_eskY@RA(aaa zgl(mwL`B6H3-4ezohn~l9E&n%I2L<2jK0;y*N+muFa1v9o3PQlKZkDfHG%1q4?|Sk zi__-Z)Tsf#bn*L<=EN1d$vLh;0Vmv|Ctu7g<2ilfkw4|~!^QSCR{Vtd?~##|5lV&X z!(wpk`y@w){K54|%IV01=)&f~W!&@i9(n8K{qkir%h~B;^9_TyIP`}28o54gcwnNh z0mZ3u$)OItfIb?Y@gCmDYHv`!GMr_K0AoZzwLL1JviWb4FI7tsu3P z%m9xrJloP{;>V~CJAozYjZgTtst)O>O{vY}6_ww43-Pcg9RprwRv1Q7*3e&gwyN3X z-oDY%Wq5WT4qRF5y5Z#$*t^1jBI8C)z&wnpKa+=AbWl2;Mapyv5H1={-ZwiQaqDGy zJ|H5z@mgC-V*voV5G@gT@cFO79XO&L{=>dRvWFP3-)6`LcS?aUQ3vno`wahY!@Z$X zGA|#OyJMrrlbv6(9B7roc#>D+%N%l(Z;z)2?>8~Ui&l3;y>p@f$jzlo(fN$#p&Je%RPY7l$Lyah>b!Cnv!M95K2f4clu zU-^>InPEcQ%OL_Xx-n7Vs$n*cr6QlDqEp=lO)Y2^i?;*GrJWf5BkU|G!k4yg#U0KK z(=IX#%P@GX(T&TvE_WjY)=w~a@BmCwKkmMk9K1tXni$NAaYt%o8ci3Tb;LfXf>YZL zE)jgJ_N?7@G8mm$u>ChNON|n?Any&MX!p0%)gfAiZhA2(DK`+pA-dsvbc6ZTrYJY)5Ta- zW2f)>@kIe({i|Kk;5QNl8nJy=Jp=IlHVHT9FagxBM;z!iZ7-7y@_qaHAzakP=Uci% z_5w2P{1yV9UVOe@eBNHCfysXKi8=I%5Q+?0n+(Rg&+#J!1A?$@;l4m)tmlV5+Pmpc zPZOrs89ZdL^+uKY(MxHqUh1t=|{jga8;9azOgzkw-riS7$Vd`4L$}yJ6w;t@rnX}3oH9W~ zz(1(qoYHXLY2&Smw=NVF?<&?G+(Nd;XTKpN;WZU(xy@1 zx?JlfM&-3KrBh(jroFbfpbvT)jS?IRdPV|H*3VW|_?Yf5zCe>;)@*utn)MO5lT>GS zz~P>Ai2nUsK^4v%3lVm$IjjymC}U<7kZcS9Z}XOckS9AO+C@bL1(sT@@S@VykkLqP z;u3ww0ja*83Da%J@pD?piwq$_-I!$OCJrQnZ(q49yT^Z%P+JB+&l6bThZ?;A7cbBv zLUA|vYnox(kc81%x6hvDQGvOKRn;xuJnt90f82XEL?&yj115GEBRnQpk1+-}JG zo9kGP-v@7|>nR*8qRm@@w&*;TdCmo%=kN$9w1KpaGtijrn_Iu>VMkU_R*2I=;zObF zU4uPA?$1-|>mqhDm}!B0NAL(67O_B2uhTM>&pc4O8bULDCmu(u+-{d9lOw?UK5~jN zTGIqk=eD5w%RC0hyLAp_Og9jZA2APDC!pS=3Hoq!SsZ?b)A8E0F#K?I9eT2{>u%RC z95>XdjyL!Mo)M7ArU~H7XGI0I(YhV8^|&0d_PCr^_r;QX-l+}{T^dN&xKqPIxfBAS zT&Q6F-l3pe=>1>&R8fDu;nTyJzteKTxo`rvx^)LqXD>FVjk(|s=qKP)%E3GohE+R} z{;lEl+lg@8gq-m1ivy0aRmRalu8Y%R_-p68K+4HzvTD%>cp}E?eM=AN_8vm%UHIT= zvP)1oqbtwS#I|nO%ZI8AY!s7L#^j)RDYWlSXO?zMEO^V^R#9%a(4_XejwqPo+jHMG zVPjT*wQU}N!d7SEc%5}Vu7M*yQF_5G_85I#o3WwSWjfCJOn2`3XU1x4x+hPcPp{ob z^e02Ck6nJMyz+{fiL@KJPJelD1ov;>cH4ClgJApfxnRnuxj#}Tu@;80G%-w>$fVoN z0PbgM>{^Tz*uqhYInJPK;_rO;npY>3Rg$&JB)jQHg9)77>GVx_Tj$`?$6iZL0ug`0 zJtGkt?yMqwxeFx}jdkQf55u071Y!7vqW&_&`B4)e%=L#@SR2*LkFYl0)}5^KrRqJ_ zv7rc+am54`KmVsz85iS}bOoYDrNAKfbQH*{2FHQ;_{0CA1peQBoi5R8uB!eHv687o z)Cdxgvy2j$H=G|gbPlzyIWcGLgh5&;LKdm{M5XbeT;o4_70RheBhj;xmBu2cYOP*F z@K2ZaN@2_GVIll#LF(Lp2ST&vlNnlIBV8@MX5$UsrkF6d;6V>PvT>d2Qcu}==!fNp zV`EuPCo+R1iWrUuj~0n!FZ>}Ajgl;HIemNk$<_^4K*f1@`QPxUxtII%kR@p; z@C{?Xj5T_X+P@?hG6yZ^Q7T?Cp%S6AUVziau39P%{FgBCn^OIcI_hWYiUJ&Txx#-5 zpEOgqYqECm31cJtyu5W?`N02XcAVkS@~3*-ij)y^+cKCea?Emp+y#G}z=GK%bQvSL zZPzwT^oU0XqmiDIJDuq|uN2*NUX|i#v_yh+Mis$?xq@I+(}+uryL8-Kmc6v?s~T5e z>702zRpDP0O8iqArIJ3LH1`io{{;_+jCuIXf=}s8Trzf_bgUCrY?}&_{(=$=`G^0B zI#G>Y*W|wibF_`iw$e=hfcoD-_xG_>*}8sNCI26vjsGC^-|_#v$3`w=z{#s4YX8eo z$1|}M``?`iSI)oY@0t!ZuuBhS*i%%7p5=LgUEGMFKB}bRK2%Jk@VQXMmf0rTn`5qpk+b0xz!b;WUcOQ|_a@R{a ziF;U`-1UmXuA7yYRA1e5iDF@3vdh)+{XB8Ent^w0xB7aYm;cQx@!cbiznj$eGo?I= zN1z)nIh+i+mFR)SuyrNaxva9pSlLWbdjRTKkx8A1UcG>y5NwPcK`X?I4dcBoA+vr& z-6f>l9P#GLsdIFKBgS(IoBbz*rIR-u_2@xPEunw!n9jO%U$c~I9p;|Knz!o&1$K-y zmnv*lbp~Tm=GFi={9scymQLo-NK(B)ui2Tbr8o4m@SQJWsv{+sR#B9PRIyC+OH@(N z2Q5bOu#sRS6rB;*@}ns`u}pgLLf^SbM*6U^cTr`QguI#g@N6wLjO6#wJpI3Q>@UCa zaPr^Yg_U2KROX8<9_bdo9379HU70!GIqTUEppPTsANPv3Hc)(3*SkQjzUE3ut$_N( zys`b!p$V(6w}pcBYXP`eQvt#ZL`@*gOM?lbceux z>82eDrhewW%eEYnnvrw)^v`VT6#WMJw2jA5ECg^2=G-!vMv}XJg~l^8`%HJmtn(|O zfm?kA2dL4*GN5buDB=lwarLuOvWq8MrtVZXriS_N`K2DIS^@_2`iKNGRczA|;xg}4 z1G@;NMhTxY493jv4w64lV<+r^>-1;z9^KY~p_8C^m40OQB%ZgQz`9_Bb*{0|ItSs1 zutO9#V+ld<`$tw`7DCTeyT=Zj9}v}((-3N0#mZs%wdxthoGSvPaUTXX$K|IYry16H<^Q zj$R^|Bu6UnCRV9M7EiDgnRJ&110Kjh(>T2S+Z7F(4{dCT{9C@iL`Recm67@{G7%?u z2dqUQq{Vv2nqJ$vD(WC?!h@;uV97yP6RzaInUlP1rmpcT03?&g*3dj=X*CU}GvGk* zxqDIW71b@#z?Cy?H$4BYZa{ce!dqCVR;vqabbUPjiSJQA$~e(iyAmZs5f}4GVBAzZ z`qPhB>-P!Hqbu6xN?fJ5_)AKL3U+IrbYCrdk1b^_9Ag1}t)#uNQW3f%GYIWSeM#V+ zHT&7TJCWsN|9aFpottB&WBPIjEVQTU{K)bjPr+<1Bvq|2I~MwFRb{zq$~FzLW0fj! znSS%URsK`S>4rs0#TT5jf;Vi5#vl<$|Fat@DF$hLHT*TI8t%@0jKs^$wW7%6kqJD&}wc1v~ zNHI+e(Dho%hYHOGdSjI8MHtxs?HIVN;V7|*?=$KB!Pmy8?uy6#U4c;VhZyoJ5lShQc{h`#=EV0p`}ggqnbr1f0&=sqYFFKFM>RoXpd zte=*77ZRmpbzmwR-6o^|Ek`N2;$KPA1rZgGz2PMz;Y zhNH%8;)xu{d%d=|(8r)g?%vQv#B8uj2_sx1sdP;3$JOybyL2}r#AYsp<^f5*GaMj_CZD#A16J^ zyzP!iW^+%Ya#I`pK{80~05XehqV0B_1z9}C;A-^5@_@6?G6NnT+k_Gyox$zXbSuGa zQ8LBT?P-6@&rMMwKyG+l+T+o$sOsx?MMx|1B?lz_ujx3A8}*0E1F*c@b#JzkDq(L` z)>cSIe2319lYkYAws!Qy*J|!e-7NFdrXL>sB?RuQv(xze+izR+cc2v98#edjz0#~L zxcZ?y#`o9yD;^VrhU7TS#?Jn1B@-cr!A|T`*}W0Gmsq>p1Oam%ulCHV(UlvtI5?k~ zQUMEoK8yV02jfpd(%=cDKS)>lD91<1^~9O=f{&YFO*YC&{oCx3*;o-|?T>}uozIs^ zsL3MsGtgwvYLnd(4D(GXx_Q!S zCe3Wa)W^&=)554gO>H2o#EY3&F%=+Yi<ejJZOe@ADu7Khl%#Eu6D7Htt<~T8Wh> z3D>AH7vyuHS{AI7d@5jSjOUHn&#kSr9Kred|He0`n_W%e0@W# zx$oc;fSpeb2InHbt_{%%ZafCUk|lp{j~|HFMP26i<=tqlf3?oIcVl*eoOdeIt06Vg zlgRf$Uos^Jf7np6$HU>pz{PnF+HnzFz#o%u+EL}zm0Fua+8nRS??Yutmih$xTFGuO zxB7$On=JDjVR-TD@xG}h0(3(5tJ7FKj?Qgr<4xTkFqM_kI)Yx-srmfjQ^l-_{ z^yz(-WP?ji#}s{+d~%RL+Q-y(HYy=NNb`u#-ewbq0r#xnO#wH)9_SGJxKUr_*QS;d z$+DfhSa{nu+M+ld zy577R{Hp}>p?++-z}>XwHW)fS=QK>x+^asXobLFkN<32y8yA&2S>#alz9>GgTr~bo zdA_(ce1S!{$?k`yxyGV+BD1(gW=m!a?Beee|0tUpy-?Fa({aC5PBHZhHPkjN3^zq4 zZ5+CvBhoIXv_J9gBxL6qwr*JgFGX9R_~gIgWCp^fk6)$Kr?(7k4&0smSB5e7bqrHN*)!h)E^5OoT zKRczm7iD^h?1|N=oT5}pr286;G94w_49r)lZk%WGgUO=HQ0{sYzVqs}+P!>G`&#aL zAr{IW-Jz>Ix_x2<#Tk0OS2*); z1!}6W)2B=Mwn`UvAA#0Gzl;pZ^z#!$yB^I__2~RqV_>)q`8@p)>ApZq-!NYhu)HCV z$iwiuqNQ`x6XI;QHGTve2{DYLp-aD^9-tp65}zC@T;HjniqO*M?_Y6Mc>UUGd>mCaV( zA0DE0eg;XC)g~i;{0c#^n4p2dMrb*#${#(aZgFbQlY;UbPj+nwezm)g6uV9iTd*m! zMR?JY+v)3H7Og2NvNPyd=*`#5!P$jCr%h~d1lnhtl2}mA7ev;+K~mK&3qyuyN#>&2 z9`=(nrDZ_?{9bk1MFg(`4kUEQIXWU`5aK^5oRHv@K+R28XyAKS|B6{7NcoVR0-O_t z#7kKDcq<4%-*IJtn|J=EFucFR0F-25fLH)n06YKyAP2Am5kU)30KnegXbKttzCOT? z77FYtTKge9oP1!RuL<_YY8F?jLhwjDS*^t1bcs=G0gLfc!Owy!d%K|ne_SleNsQSy zDwm8uSzz;=6Yjb*xEp{w9{S6IN4ZA5;27Nf`>Xb!J&ZAZ{eQr!h|}q6*M2tEbk4dZ z;Y&2%bKkS_J;RE}_gHJLoOay(qY8)mxbFk@8`#G0;hNG7W+P|7PyXD=Wwq!P<)U(%J+iImg@qij7ol1rHvv9SL~wf?#`#Prf4_R~2qtMJ^4fo#o_8F*$dN zUp|Yv>F?KWfUy@kkw&L09)DOabfqx{#_mg zX2`(2X{Xmt#k!sXPkkLiA?{CBf)Ej%V>hMsnYo7htTjdtLaF?Fo+z&!&~owTHdw7d z%oQ+wJ)ME|lN3MTv4Z9@PDBHEakaMnz6Rav(zo4{Phx8db%4v~vjKyUNG5-<`O!rS z&rq|L)d5Rlm9)RVg&W-uP0HgAPVe#lJ0Hv=jpT3G42_vOo6S-Jlqylvr8RFgZ52&2 zTQM%3L@$rGQTy9Y9`nh+yYBx^3?vd85#r^8S`X*)3jLqinF#Lug#VEW2MqvV|BY^< z|84)@7bC>LT@dOLlI8vxDjc%*m!uE^kIzs)A)0@w21)wMOURtZXXsE$NG>HVgx(X4 z@W1kx@c&#kP;n5C zZ(pEtAuZp;p*A6J->3-xE0Qw?0D%6dEk zHN8_c+ub`;-}Y`zciJDw$tTEqFC-X+K|_&bkUtU$;JU_w8h*t;?{$5WH_8PaNu79_ zB1_$-_zV%vP*1gFN)fbs(a9#nSr+Ru9#*ftrQD;{X(uf7S(1n_qrqSdEBaCllSNi@ z{LnEh;N3TmLDl4Q675*3Ila3XwqQ+9fDc1*jhYhOh&{w78<5yM)_BhR$Kfgy|m1iz&YHB2DPsoNfp5p?Pwl4#A zM}LLZ&XUd8pd*hA(Qg_E&UgUlLFizNYcUCNPNza)u<0zG zIBIBZ!|tW1Qr}B%9_Bzzz}>QUz5hyM{l*7N>2!VV=Pc3&{!S;%O++d~JWhKZWEYJ& zO9Spr(b&>Hb1iY?WhiG6YB8dwjJk&*;)@X4w)C5}w)R&#+$TxwxmB#|XO-s(zbukH^-`4)P2y%VS8@ zl?5G=j>6POoaFd?r3GUXN_65|t}4*LA(}`y+~LPZH1whO)bw+mwO3uZ?vVnI<0d*9 zbg#L-vsmUy#4v21$bD#d{3sw6bz*?Nv=$p*hB!oy|L;Q z^zxCZC)1BH)8}Iur_JYP^;oL}aotvuah2a+FwFIlct1!1YzAYB_8IA2gw= zF4EM)5iQgRBUE*^Y>H``u$P{d4uW(vc263J897TJtWa`Hve5Qd8Z0Ed#LK*+a12!h zAfWkUi>TnrIBbT;g@*_R~Yb0%z6q!Id%Jds@i zwLes6)Sk8N)^idHVeXTRb8|;$#+@*V>ql&SCH7~f`?u|YB{^tw=g#Yb9|q9eXRH4} z6LON~=hI&_WBv=UclQ6wyOjDOdgB}JA50vrdgIrOUQRhOc^MBFAVV&!o z!Rl8ozV9f#nVHR7Pt$o!0P*W+iW*{nf6d8AkF`EY38tFiulVFMA&QnF4M5-#rBLrk z%U}YuPOA;g&rQhw38FvmtNw|m$iLAPmR5brf!&tfJI?Fl$y4Hrd0dB0)$+FDb;{Ki zzCtkeKCQz-Fg@P&?zaCIn}(C#9XH}l97e)>bFjrsBXWnFeHyYOhu!C^%)~4UR*p-I;+)~ zT1@G3EyGwnsHDlxt~y<2US-Ho>M-I6E7u^eD}!5A1pIzo0pKlWzSW1`B}Ea*dB(FB z+m4H8Pu6^|C#|I-z^_zq6{20W16$DlEZc|i_eE{)VWp#_aqUFqIf~mEkH4=*acvp@ zCPO@(rAMaSVuhlU1h#Dxt((sa9_4Shb7ZopajzD8Uptpt3mBpDvh_3vZrdtAiy&}a zb!;<%%0*k7d^?Y4CgalRbkAsy_YyBitIELhGevo=6x_rSV7~ITP!8&SZx%oW)tku_^pwa4eBnT`$ra3bgSa`E$-dThrTuO_?5)kF)nuMTJ=x#HJQXSS40Lv8P8n%s}(fEkz_ zAdNg4K|bULs1Q+c&6PQA$0338u;A7)$EJEb1B89DyJ%O z1WydzYpUti!*AsfoWJz6&lZKlvZ+-oEECf`$#SqYsgI3UrsI2GK`X4e5H7<X5~+~PD=#AcY+LYT(`n4z;jD@Y2L+*9e`q!cZ%UBNLc zZojPfZ*eMz%IMh=qnAX383>}A_oyna@p%>zf$o<8(s$<=|pjWkKd z0zhq~iR(Bc`qivhW4qiaVD8v>C*m}doefwC5FxrV93L<9{(U1dL+PR6M#^LV@@>|Z zMM06!p!Ro_`xvvs+2Nv_8Z!P>KDQs?`s3=#k< zXN|S25>=|@M_@H?y;J=ZbAHM9WNZ@dkhn^OQ9;!4vM$~krt{vU5Z~fYXUxNj;~AFO zXQe~?%@K$BbG~`VH(0@+A%n7p(PSy}6cT9Z3{7A3eFB{$p4vZosblX(;xs}?`U7~M z_n#p?<_31sB&%TWvnzJ-2r%`^hw=av_bPQ!;$QNM;SU8&X!d>uQqiEd2ZgLh|c8 zL?d(!-LjkEhFyARQjFBd;oF>a(@wZR{147!s=*Pvk+3^Z5!xMmp?9m`Sv}@d!m$fc zA?tNJ4jRW2$)1I^dspBHrX-I<$`g$k&6ElX&le7fXXImw{%7O}nQ!IG0;UZKQVY}p zqpEdZdFe85-XfSvepDDN&bk&$#WdJiGHIVf#smFbIS zw2Wq74%vZCCbo}R6B3Djv>z!y4?m@h$wKXea3gM@fAZ&1p*Yfl7C#rDxy@T4D28q& z;c#Ph+xTP{*DxX8MLit!Q+1*3n=+@%!86g?_TB=iH;z2K3+>t%#&iz+9p6Vn;ww_w z11csaQ2&_}SjjMAXLFkbFDq=JSTuS~_G>bF^WJ=^{PkNJ(`&Ez*9my}YmoSG7fY{& z|MrmfS8RyTBMwBH#^x%(Tu8*Zs0QbVa(-heJn1{O;+ZHJ_MKk3nXAJV-*Nbt8mHn$ zyqlH{8pfHVMMuHlrd0^{mh#F^$S33`+42rfE6yG*`)7J5*`O`*2&oEZ(YJl0bRWy) zKVCJS7lD^8*23xB>stY-itpXk(npSMMsfaeKO)$zmobU2n&Tz`T9Ri;6dYJTRexqB zCxph#uZBpwQ}kfAbOay9HP80!YNye~W;UV~=~AL@ghHo_kw4)?thTItCimh8mQ1~0 z33II7OLA`-l7^Kyyh@OqOgvBGIIbl2$>Y|!ncCydD(xM2vpA5Ez7|)?U0B@QhYFJ+ ziPq0x3qQxZ9Mld1q8EP$RbK#(u^w9H}Gm?q%S+-=ntmLJR@%{{8_%Mg9XcCIl=5D1idDiJ8^t!^c{Vjjf6g z5D)~QG!9yTx&Gbc#OJf2KVm4KBxpe~rrl73>5oEGiexBGP|10_@ir-?-We6+Ikrz! z1uwf*_`ravQIF4oeKWb7I&GS$KN<`<8A4RW3R6g3_TnQOu1yHElmbHICu9jYr`k84 zJKua;vrp}(Xe#izw`O=6!wWXJXGLU$r--^3kS4SMmNcx;BG-Y8Aje&MVwY6-QHrV? zJcuR>?sJ?0Y#h3cH0x2birU27N}@&@C8Ny4KKTNz&w8T1E=LahK3jM+OSve5;jEq? z*V{LH2(3Kxhfc+Fo?ijaJbb2|eihfOdnvc}A~ois&EX&RCUImW^S%Fso@6{jxq9il zYoHPV(vFjlx1lCRi6g&wnE2yS$sz*zM z>6oj8{Z^GsOUlt+IG6F-`I^ANFUiU1uIv`3;YZCsc1`wLkEK?aBg#vXi&ZEo#Ka zBH1ONjZL0>Hhq%KBETg@z}%8-4>Hq^qpI?HI3Xcm7isj=feaBL^t_pe(3Af(4=siz z2;SuC)x?+yr+g7k3f--wp(0oZPZHwl_F1z1$?d{={8EerBgGy5RusIAB@#OIf;a64 zxRsAZlgx{(8_{I)XJQrKWzkVC!UdTMb?dO{rAdfFMSs!_$th3vTR!FwX6dqFPQk&v zN6OjlP~;++kFc|eJ@AU?2sV1(l;wMk5a%73h;1?UPnsh%EM6s((~{M%ko2R-oWYs5 zN;>6`W5Sss?Xk=@9Emwu&6qenxTx#|nuN*QK&PFLt?Pbo~Nz2#)$6n3sC@gs}{rrq^egi&w?HUdK$%WWm@cCAvj>%TmS z&UEP&DiWk?p+cn={3x?KBp(nKYkI-*pEey>=_Umaw`#KmeyKu*|AerGe(O>PYL&nG z-B&>NwTrqW`-`bv7pIS1XQclW+% z^!l$KYEPbxv%>Xi|jsXsS=vz^$tdCPq8r34D-^B?L*tK=X@OaxJ0Pb zHtq~@%BSxXrveL8cihe}+KUa8=o6u3Y1&Tif=e7z_b+H73>{NJhf=?QF z;EJ{LFQ2lUziGigOyS8GZO%CNx!LNxrL%h(3zOk&eGn#DhRps{WEroACrQeC+f%*q zU4+(ltGr?R_$#tpSaw^(J67!#d&>1ub%b4{Qa}e-KA1=JRnF&<=rTCl1RRc*&b$U| z_h^AwtW0Z=e*6xmF#G@r?v6yjzY-}?OB}Ko8UqizL|z;;oKP9R7@^zSeh;^cj2l)a zC==Q)pQ=w=$cQ#e1#mitvb%?}yN2#Z=SPv}RFLN&O7o;I@#voWl_YXTgHg;d{ZIyJ z?%yI*&%r3gE6+qy4G#jbW>;RgLt8($_L13tJ0@XBXL7Dl#Ww*o(*@~$SNGN=VmjtV zC$K0FcPvQ*(1*QlvO1ic`Y`qzpdV;s_)~BPD_b+yq2n>!TU6cx6f}YLFrl;DxJ4CR za7%Wf$EYkptE3HW89pvh+$^GySnj9emm&is!A9;YHH42_L;`#R!Lw_uUtx+sj)A-! zJm&fvM<3vnz#jk_jfOhCPdP2`ZKAd_Sg)potV`e>IjHaJ@pN*kOfyu8Gj* zsy02o`LpWhJS)sjq1~ibbOMEkCjsa8MrU2S1~uTefR79072o$>pX(3ua~uwU;BnwQo3DVNdzEzZ2ES~4x%<`ykxbq(5*czaBl|Vnp&ElL4+6KS9y-97z&B8J0 zc+Ke9M|db^fM=CZ%nKSja2l5ZB3BhRBEm4Gqd8-Tmm_26d+T!H1ggNZ3hT(THhOh# zlxVL3?cY8o(raKN(wl=|0{lw((9{z#9<;hGH`Pa|2+6~u9dP9S=+&$<74-d<9qMR& z27u3?7bZ8UeX;jG?3;pB4BkXyB`l%O-zV8b;!uV4dgg%~Ya$>0i7EsIH(|%SW{B=| z9a7=~Ehe4#5TS|9mt%kITr2Sgr9E94-e9ma(Pv8mKfvSJ+?u8xE6{5b=Ya!7?6~iY zgdusjV6hFGus+$jeZ(ELew&2*oe_gb5+Gm$hy2{Br)N6l)T~YO_>q^2+~NDgaeZR0 z%AC)%RZqH&CDYwHJ1LgpxvHaOIEsBkceyv^Pt2^}_KZ`g&(BRNOYXG^;!DB9O&R+t z|E*X0k+FBPTUNZ9r%bfQ6@`=0#6PT13G%3mFY~97y~gk(S%(m%$8}jaBcHdQBhbx; zpBuij18b4-V=eca4J3$OBUiI6@CGZRi3b6>JFILy55|Yiol&}#Z1lVO3i<)>W$Q6DJrR{_4tT> zK1Khq`X5Wex2T-1)bBk&(6n0oyAd!))rv6CRu1FUu39y0!#J~dA_+eA2q75)wC5&^ z_XEKKkEeS{)@CBz4APEP*H_MQOm_(Jg4HVE-x*yS8%DnUjzWm=Sy=g%Xjyyk$c0yj zQ=n^E87Nm~5T6_&5W%KiAqoAj&Io5tso+&1Sw5{6qq12-HKV8_%Se_X_pk1rtQUC7 z)B?Y#Yl~Kyy>L*0P5*CA$xtOVM3&7`>_R?yMlsI1gJS0@vX-QN1D7UQTHOd9^b#e!P4q&!>2R1sz7!Y02Jrx^9$ajDdQ3(A%S%h_ZF z+a_z-e;HbH718Q!2LyKD+{*s%&KDm*H82Qfe8meA;Z z^YI18?0U~-AAi^ALcOsJN#9P*v$Tv_Gs}tMX5%i%s0cZtb_?8fcG1ai+{LJANu?N56T&Ulkvz% zF5Z4EqHqMWj78{07}@4-@88PdbTu%CM=lX0u_ND_MJgwxHy5#7T-Bv3V_YN30JWapmfz0OwnvPZJ=k2|yQ5I+3o*Gz|Qg?ppgiJFxnT~cyGZ<=(^gUZUE zxx1X*;d~&@-r=Ea|4fxrtA*J$+sLyf1UEoL*m2DKJgWBWfYT6w20qYM^=Qw5Wvb??Er@h`-Ui5B2bj0#bh{68&zo zSZn@bCMXLQI;`Dx_>5tcdnmsvhPYsIt5NJByvPAQ(d4N4g+hz|Mr2jqq}=LgS)*Lf zx4rsZA$`^8!hdnIQHjvj=?4_hG>dabKivlC7t|hKoAG@wh^MZeJgRC4NiyTqBD2Jy zov5W7RT0)`V-sFKDzuIB-lo*yi}w>eyGviRfbP^>(R2*d42*a{Nmd&~H)n8p@o+K! zh|yt}mTIvbjEyltur?U$|0Zb?oX1t)x_;}YjYHkJuuQM0l&6=P-ELfpmq#CUj`I=N z)UR4Y8+m=(5%aT9&RIhCDM28y6Y(JV1xE166jB*8o(!F8GGrhmuZQKL*Hq~T^0S6V+W~rjfWgV z+Vj9RRDUi3Br97T0Mt#`6sv%8y(E6`ZCZ2y-H8 zyNpD?U50QHtUltG!p^eyAe`tM6b+;z0n3Q+v_qs*x(u>byoum+w)P~dUkz~_A8yghW2 zm8%h23ce|JQ7{*|CRdHsYx{AC@|%0%K&zbX=$UfKKj6dffGVY?Ye#-PRqJMqCp-9Q ze$0=y^`%^Gp_5zo*SzScQ6y-QHvA*w1-fDU9v6 zi^W$Yp?!LR!M*EV%CSkDspf1=jgsMCHE3Tg>xDK?BuYB(onhFn1La0(_UGfLSI;Z0 ziN1~C{T2>U8ON0ee0F09$k33kEZiGHaa!eC(@a0H;psE%hSel98a#ZGQ0sqeE_U;5 zAT+*52v>?_Pf;Gn5d_?8VZo<|kz22PthJX9KTt%lN7-H(QsAK&NAnFdfwWM#k5 zGUsXCYOd5ADNf$>=l@V6*r?6h4Fe~G^Vg9(mI*$(0WVG0JTXN&ie{X5L+_#3&$_G+H6`8Nd9i&c ztJrd5Up`7dv|$+O>JyQbWSB@c@fa-`u%^5@sa71GN83MX)_H~} zR^|7HORl?>brgIpZAshMlp?rIj3`R4q9o4!jzOdh^aN6EF7x zhZaBO=L$P8IyQESr;%kFQZv`(i{+&2wmXS{*}kB7v8op~L(doMTl3rD6#s9SLW-8; z@2#ni9hvuAG~lrlU!FRdy1Qhvx9MP4C#NQ`#)hJBd-}yesNMt8c>2aT_me?p;XS}) z=%DgCBp#M7qYrV6CB>KN^Y*OM7=(~+zI2fa<3R{`@@6gEW2arJh_JbD;*TjfX?Xyg zl!n_a<)F&Feo<%IPeLAcbi5t-6nMm%U$W?(UeV3hVG}II&RWaoN@*(h+kVaN_!{Nb zyL@i7ORrw2UUkflFCWhxH%S*O+O3eBAd}|iwXyjui8HWeUEvFp;|LqLjrk&ad&}uy zF`#vTP(g=JI9W3`ZK@XZogx#@$MtV=0H^pSuo@aZF41CKef6cnvwI##o#F%9Iu3Y) z^3%-lU5;e7lEF}!7P)z%>N;xuLbTmo$gkbo4u==dE&CEqhcCsyaH%acB}2fISNrSM zNR*vBjnM46F=l+O@xCFunw-$Dv!GhJI}IwY#ag+{aV@y4Lj3YJ*QzqPn({J0OJN7` zr}av9EOSI7(s_qHYE_k4OSlKrIQYB+L6=@^|;U;gB;3aI3l@ID(M5?6(~rM_SF69`(Cw6(OVeMx^ng=(ovOHAm*H zdhkzsU)Hh*-hk2D@wmsZOaeX(q{>yzjGxodFVpeX@;CIacRl|)_S@8g#)SEkr!8#P zbY#l{35@w=m#s_4tp|-myO8K)K4K?#GFB_fp)cQUXItu9Sv-2X&b;#Q%5n)WXx76y zgeLQnsm4MjD!7nx^Zud1*%d^HElr-6lO0usgPn?5&yMA!Rmb0IwiVHbq;jUPQCm8& zwsQcP*{@*R+L9e7I<{+dlr71E`;aX7J0Nogft$~@eQHXKLxL>!uw;Csyab6;ZM6b{ z?4Pg}NNV~h$R77v3hdlG`ji8B?MypiYxQOZ`o6N5v9vl6v|u=SJbipK=0=B z(x*c(!qf;tBoTG~5wM?7u{~dp^Gc56#qNaX?pb+`3*o&}n?)4EtE>eY`Q{oFO`$|( zniFcSM@5l4J;(EQ)|7D1-1{eG2iRM{u%aZjQ5YU%-_aR(?8N$4RSk6Ocz{$>qysx7 z04?4C6CF)Dv^3BP8@ZmRnW+>ymQ2zh)nqI@t|wqMQ6VHKq;{|$F*IdoRYhdRwpFug z#$|=Yb3w3wZ+EW(eE&0A89L56?h9w<89L~A@a$zq@HH?JR!x%DK(Fb8nT|`|Z%DpW z%LC5?o3H1X$#@SNZ8fvbKkww>ke^(IfS#l4=pB6P+Ww5h)YvMb?X2b-zMt|5cdRNx zw6-U~n((*M0X9}~BTCmvSS`{PcJo07{(8w@IEJ(?NXNo?T zxN3q<`R=Wv{>D%x-f~J>V&E;4NJ8ww=~vQA<}okt>N}`!fQiNs+an2w->k53F@7EI zql+|HBD-l`zb)bj^H&e~_R^Opo5MX{u5V5}Wf;=btZ$09-2Z%qP<>^{9mF6ZAZGri zyf7f(Awh-y7)>P(@Q^?kNL0C>1#{$zDj=flVUCTEr7;dZqzUf#mWR`i61((P@u-_l z{gkLI@7bN3L(ZP<=eD}jmkL#DlqK0>b^$_`SP?{ZS@6{LtEFNYF7J%TQ0i>r?gt)$ znYy|;emlK-qhN8!Lc?&ctu}VK+!fJ*O_FAhlZ9cfjfgqNiVDDvwt%I`PQ(wNm8-1C zZHuGiwRhKR%l-<8sgC7QIwsp8%n0i4R6mdZWf1s;N6;TTsUX`=St^)33M-lG0-U-6 zC=xRkiF$FplTdZ*vkkoOThtT%zv7d)8{&ums*_aryBw7K97~8Fs zf*N+5r?u!q}4}$X( zhV%nT`$ 1 then - credit_paragraph.content:insert(1, pandoc.Str("Author roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows: ")) + + local authorroleintroduction = pandoc.Str("Author roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows:") + if meta.language and meta.language["title-block-role-introduction"] then + authorroleintroduction = meta.language["title-block-role-introduction"] + end + + credit_paragraph.content:insert(1, pandoc.Space()) + for i,j in pairs(authorroleintroduction) do + credit_paragraph.content:insert(i, j) + end if not mask then body:extend({credit_paragraph}) end @@ -407,14 +421,26 @@ return { if #corresponding_paragraph.content > 1 then - corresponding_paragraph.content:insert(1, pandoc.Str("Correspondence concerning this article should be addressed to ")) + local correspondencenote = pandoc.Str("Correspondence concerning this article should be addressed to ") + if meta.language and meta.language["title-block-correspondence-note"] then + correspondencenote = meta.language["title-block-correspondence-note"] + end + corresponding_paragraph.content:insert(1, pandoc.Space()) + for i,j in pairs(correspondencenote) do + corresponding_paragraph.content:insert(i, j) + end + if not mask then body:extend({corresponding_paragraph}) end end if meta.apaabstract and #meta.apaabstract > 0 then - local abstractheader = pandoc.Header(1, "Abstract") + local abstractheadertext = pandoc.Str("Abstract") + if meta.language and meta.language["section-title-abstract"] then + abstractheadertext = meta.language["section-title-abstract"] + end + local abstractheader = pandoc.Header(1, abstractheadertext) abstractheader.classes = {"unnumbered", "unlisted", "AuthorNote"} abstractheader.identifier = "abstract" if FORMAT:match 'docx' then @@ -426,26 +452,35 @@ return { if pandoc.utils.type(meta.apaabstract) == "Inlines" then abstract_paragraph.content:extend(meta.apaabstract or meta.abstract) - body:extend({abstract_paragraph}) + local abstractdiv = pandoc.Div(abstract_paragraph) + abstractdiv.classes:insert("Abstract") + body:extend({abstractdiv}) end if pandoc.utils.type(meta.apaabstract) == "Blocks" then + local abstractdiv = pandoc.Div() meta.apaabstract:walk { LineBlock = function(lb) lb:walk { Inlines = function(el) local lbpara = pandoc.Para(el) - body:extend({lbpara}) + abstractdiv.content:extend({lbpara}) end } end } + body:extend({abstractdiv}) end end if meta.keywords then - local keywords_paragraph = pandoc.Para({pandoc.Emph(pandoc.Str("Keywords")), pandoc.Str(":")}) + local keywordsword = pandoc.Str("Keywords") + if meta.language and meta.language["title-block-keywords"] then + keywordsword = stringify(meta.language["title-block-keywords"]) + end + + local keywords_paragraph = pandoc.Para({pandoc.Emph(keywordsword), pandoc.Str(":")}) for i, k in ipairs(meta.keywords) do if i == 1 then keywords_paragraph = extend_paragraph(keywords_paragraph, k) diff --git a/_extensions/wjschne/apaquarto/maskedbibliography.bib b/_extensions/wjschne/apaquarto/maskedbibliography.bib deleted file mode 100644 index c45e69f..0000000 --- a/_extensions/wjschne/apaquarto/maskedbibliography.bib +++ /dev/null @@ -1,6 +0,0 @@ -@book{maskedreference, - title = {Masked Titles}, - author = {{Masked Citations}}, - year = {n.d.}, - publisher = {Masked Sources} -} diff --git a/_extensions/wjschne/apaquarto/template.tex b/_extensions/wjschne/apaquarto/template.tex index 761dbf2..7e51839 100644 --- a/_extensions/wjschne/apaquarto/template.tex +++ b/_extensions/wjschne/apaquarto/template.tex @@ -1,5 +1,37 @@ $doc-class.tex()$ +$if(lang)$ +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +$if(babel-lang)$ +\babelprovide[main,import]{$babel-lang$} +$if(title-block-keywords)$ +\StartBabelCommands{$babel-lang$}{captions} [unicode, fontenc=TU EU1 EU2, charset=utf8] \SetString{\keywordname}{$title-block-keywords$} +\EndBabelCommands +$endif$ + + +$if(mainfont)$ +\ifPDFTeX +\else +\babelfont{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +\fi +$endif$ +$endif$ +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +$for(babelfonts/pairs)$ +\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$endif$ + \RequirePackage{longtable} % \setlength\LTleft{0pt} \RequirePackage{threeparttablex} @@ -119,6 +151,10 @@ \urlstyle{same} + + + + \begin{document} \maketitle $if(numbersections)$ diff --git a/docs/options.html b/docs/options.html index e5d9ff1..b57045c 100644 --- a/docs/options.html +++ b/docs/options.html @@ -202,6 +202,7 @@

On this page

  • Options for .docx
  • Options for .pdf
  • Options for .html
  • +
  • Language Options
  • @@ -886,6 +887,145 @@

    Options for .pdf

    Options for .html

    Everything that works for .docx should work for .html.

    +
    +
    +

    Language Options

    +

    You can alter the names of Abstract, Figures, Tables, and References by setting the lang field to one of these languages:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CodeLanguage
    enEnglish
    zhChinese
    esSpanish
    frFrench
    jaJapanese
    deGerman
    ptPortuguese
    ruRussian
    csCzech
    fiFinnish
    nlDutch
    itItalian
    plPolish
    koKorean
    +

    However, there are a few options that are specific to apaquarto and thus were not anticipated by Quarto.

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldExplanationDefault
    citation-last-author-separatorAPA-style in-text citations with multiple authors are separated by commas with the appropriate translation of the word and before the last author.and
    citation-masked-authorThe phrase to replace author names in masked citations.Masked Citation
    citation-masked-dateThe abbreviated translation for “no date” in masked citationsn.d.
    citation-masked-titleThe phrase to replace the title in a masked referenceMasked Title
    title-block-author-noteThe heading of the author noteAuthor Note
    title-block-correspondence-noteThe phrase introducing the correspondence note.Correspondence concerning this article should be addressed to
    title-block-role-introductionThe phrase introducing the author roles.Author roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows:
    +

    All these options must be listed under the language field . For example, if we set the lang field to en (Spanish), the remaining options can also be set:

    +
    lang: es
    +language: 
    +  citation-last-author-separator: "y""
    +  citation-masked-author: "Cita Enmascarada"
    +  citation-masked-title: "Título Enmascarado"
    +  citation-masked-date: "n.f."
    +  title-block-author-note: "Nota de Autores"
    +  title-block-correspondence-note: "La correspondencia relativa a este artículo debe dirigirse a"
    +  title-block-role-introduction: "Los roles de autor se clasificaron utilizando la taxonomía de roles de colaborador (CRediT; https://credit.niso.org/) de la siguiente manera:"
    +

    In addition, many terms translated automatically can be overridden. The full list is [here](https://github.com/quarto-dev/quarto-cli/blob/main/src/resources/language/_language.yml). For example, if I wanted “Figure” in figure captions to be “Plot” instead, I would specify the change like so:

    +
    language: 
    +  crossref-fig-title: "Plot"
    diff --git a/docs/search.json b/docs/search.json index 958ad84..46a0fb8 100644 --- a/docs/search.json +++ b/docs/search.json @@ -110,5 +110,12 @@ "title": "Template Options", "section": "Options for .html", "text": "Options for .html\nEverything that works for .docx should work for .html." + }, + { + "objectID": "options.html#language-options", + "href": "options.html#language-options", + "title": "Template Options", + "section": "Language Options", + "text": "Language Options\nYou can alter the names of Abstract, Figures, Tables, and References by setting the lang field to one of these languages:\n\n\n\n\n\n\n\nCode\nLanguage\n\n\n\n\nen\nEnglish\n\n\nzh\nChinese\n\n\nes\nSpanish\n\n\nfr\nFrench\n\n\nja\nJapanese\n\n\nde\nGerman\n\n\npt\nPortuguese\n\n\nru\nRussian\n\n\ncs\nCzech\n\n\nfi\nFinnish\n\n\nnl\nDutch\n\n\nit\nItalian\n\n\npl\nPolish\n\n\nko\nKorean\n\n\n\nHowever, there are a few options that are specific to apaquarto and thus were not anticipated by Quarto.\n\n\n\n\n\n\n\n\nField\nExplanation\nDefault\n\n\n\n\ncitation-last-author-separator\nAPA-style in-text citations with multiple authors are separated by commas with the appropriate translation of the word and before the last author.\nand\n\n\ncitation-masked-author\nThe phrase to replace author names in masked citations.\nMasked Citation\n\n\ncitation-masked-date\nThe abbreviated translation for “no date” in masked citations\nn.d.\n\n\ncitation-masked-title\nThe phrase to replace the title in a masked reference\nMasked Title\n\n\ntitle-block-author-note\nThe heading of the author note\nAuthor Note\n\n\ntitle-block-correspondence-note\nThe phrase introducing the correspondence note.\nCorrespondence concerning this article should be addressed to\n\n\ntitle-block-role-introduction\nThe phrase introducing the author roles.\nAuthor roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows:\n\n\n\nAll these options must be listed under the language field . For example, if we set the lang field to en (Spanish), the remaining options can also be set:\nlang: es\nlanguage: \n citation-last-author-separator: \"y\"\"\n citation-masked-author: \"Cita Enmascarada\"\n citation-masked-title: \"Título Enmascarado\"\n citation-masked-date: \"n.f.\"\n title-block-author-note: \"Nota de Autores\"\n title-block-correspondence-note: \"La correspondencia relativa a este artículo debe dirigirse a\"\n title-block-role-introduction: \"Los roles de autor se clasificaron utilizando la taxonomía de roles de colaborador (CRediT; https://credit.niso.org/) de la siguiente manera:\"\nIn addition, many terms translated automatically can be overridden. The full list is [here](https://github.com/quarto-dev/quarto-cli/blob/main/src/resources/language/_language.yml). For example, if I wanted “Figure” in figure captions to be “Plot” instead, I would specify the change like so:\nlanguage: \n crossref-fig-title: \"Plot\"" } ] \ No newline at end of file diff --git a/options.qmd b/options.qmd index 5ed5679..e3c1315 100644 --- a/options.qmd +++ b/options.qmd @@ -52,7 +52,6 @@ format: --- ``` - # General Options +--------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -617,3 +616,69 @@ All of the .pdf-specfic options for apaquarto come directly from the \[apa7 $\La ## Options for .html Everything that works for .docx should work for .html. + +## Language Options + +You can alter the names of Abstract, Figures, Tables, and References by setting the `lang` field to one of these languages: + +| Code | Language | +|------|------------| +| `en` | English | +| `zh` | Chinese | +| `es` | Spanish | +| `fr` | French | +| `ja` | Japanese | +| `de` | German | +| `pt` | Portuguese | +| `ru` | Russian | +| `cs` | Czech | +| `fi` | Finnish | +| `nl` | Dutch | +| `it` | Italian | +| `pl` | Polish | +| `ko` | Korean | + +: {.hover .primary tbl-colwidths="\[20,80\]"} + +However, there are a few options that are specific to apaquarto and thus were not anticipated by Quarto. + ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| Field | Explanation | Default | ++===================================+=======================================================================================================================================================+===================================================================================================================+ +| `citation-last-author-separator` | APA-style in-text citations with multiple authors are separated by commas with the appropriate translation of the word *and* before the last author. | *and* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| `citation-masked-author` | The phrase to replace author names in masked citations. | *Masked Citation* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| `citation-masked-date` | The abbreviated translation for "no date" in masked citations | *n.d.* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| `citation-masked-title` | The phrase to replace the title in a masked reference | *Masked Title* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| `title-block-author-note` | The heading of the author note | *Author Note* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| `title-block-correspondence-note` | The phrase introducing the correspondence note. | *Correspondence concerning this article should be addressed to* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ +| `title-block-role-introduction` | The phrase introducing the author roles. | *Author roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows:* | ++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+ + +: {.hover .primary tbl-colwidths="\[30,40,30\]"} + +All these options must be listed under the `language` field . For example, if we set the `lang` field to `en` (Spanish), the remaining options can also be set: + +``` yaml +lang: es +language: + citation-last-author-separator: "y"" + citation-masked-author: "Cita Enmascarada" + citation-masked-title: "Título Enmascarado" + citation-masked-date: "n.f." + title-block-author-note: "Nota de Autores" + title-block-correspondence-note: "La correspondencia relativa a este artículo debe dirigirse a" + title-block-role-introduction: "Los roles de autor se clasificaron utilizando la taxonomía de roles de colaborador (CRediT; https://credit.niso.org/) de la siguiente manera:" +``` + +In addition, many terms translated automatically can be overridden. The full list is \[here\](https://github.com/quarto-dev/quarto-cli/blob/main/src/resources/language/\_language.yml). For example, if I wanted "Figure" in figure captions to be "Plot" instead, I would specify the change like so: + +``` yaml +language: + crossref-fig-title: "Plot" +``` diff --git a/template.qmd b/template.qmd index bd53533..6a836dd 100644 --- a/template.qmd +++ b/template.qmd @@ -92,6 +92,16 @@ mask: false masked-citations: - schneider2012cattell - schneider2015intelligence +# Language options. See https://quarto.org/docs/authoring/language.html +lang: en +language: + citation-last-author-separator: "and" + citation-masked-author: "Masked Citation" + citation-masked-date: "n.d." + citation-masked-title: "Masked Title" + title-block-author-note: "Author Note" + title-block-correspondence-note: "Correspondence concerning this article should be addressed to" + title-block-role-introduction: "Author roles were classified using the Contributor Role Taxonomy (CRediT; https://credit.niso.org/) as follows:" format: apaquarto-docx: default apaquarto-html: default @@ -174,11 +184,7 @@ ggplot(data.frame(x = c(0, 35)), aes(x)) + To refer to any figure or table, use the `@` symbol followed by the reference label, eg., @fig-myplot. -## Updated Syntax for Figures and Tables -A previous version of this extension used the `apafg-` prefix for figure chunk labels and `apatb-` prefix for tables. It was always in the plan to use standard Quarto syntax as soon as possible. It is now possible. Replace all instances of `apafg-` with the standard Quarto prefix `fig-`. Likewise, replace the non-standard `apatb-` prefix with the standard Quarto prefix `tbl-`. - -Also replace all text references to figures and tables using standard Quarto syntax. For example, `{apafg-myplot}` should now be `@fig-myplot` instead. ## Imported Graphics @@ -254,7 +260,7 @@ Here are some variations on parenthetical citations: Suppose you want to cite a previous reference of yours, but your anonymity is supposed to be protected in the review process. You can "mask" any citation you wish by setting the `mask` field in the metadata yaml to `true`. Then list all citations that need to be masked in the `masked-citations` field as shown in this template. If the `mask` field is set to `false`, they will print as usual. Depending if it is an inline or parenthetical citation, will be listed as "Masked Citations (n.d)" or "(Masked Citations, n.d)". -I have set two of my publications to be masked. If you set `mask: true` in the yaml metadata, they will appear masked. In previous studies, things were asserted [@schneider2015intelligence]. @schneider2012cattell asserted them emphatically. +I have set two of my publications to be masked. If you set `mask: true` in the yaml metadata, they will appear masked. In previous studies, things were asserted [@schneider2015intelligence]. @schneider2012cattell made additional points. You can mix masked and unmasked citations [@cohen2003applied; @schneider2015intelligence]. diff --git a/writing.qmd b/writing.qmd new file mode 100644 index 0000000..1b0ee0b --- /dev/null +++ b/writing.qmd @@ -0,0 +1,75 @@ +--- +title: "APA Style via Markdown" +editor: visual +--- + +[Markdown](https://daringfireball.net/projects/markdown/) makes writing in a consistent style straightforward and easy. Its plain-text format was designed to be easy to read and easy to write, yet also flexible and specific enough that it could be converted automatically into fully formatted documents. + +If you are used to writing with a word processor (e.g., MS Word, Google Docs), it might feel disconcerting to not see what the document will look like as you type. This feeling will pass, and the benefits of typing in a plain-text format will become evident. Formatting inconsistencies are much easier to spot and fix. + + +# Headings + +## Level 1 Headings. + +APA-Style has a small number of level-1 headings with standard names: + +- Method +- Results +- Discussion +- References +- Appendices + +There should be no level-1 heading for the introduction. The title acts as the heading for the introduction, and apaquarto places it there automatically. + +## Other Headings + +Readers are better able to follow your ideas if you differentiate sections in your introduction with headings. APA Style differentiates between \[headings at 5 levels\](https://apastyle.apa.org/style-grammar-guidelines/paper-format/headings). + +In markdown, a heading starts with the `#`, a space, and then the text of the heading. The number of `#`s in a row determines the level of the heading: + +``` md + +# Level 1 Heading + +## Level 2 Heading + +### Level 3 Heading + +#### Level 4 Heading + +##### Level 5 Heading +``` + +Quarto expects headings to have at least one blank line above and below them. If you forget to follow this advice, Quarto will try its best, but it might not parse the document correctly. + +Anything can follow immediately after headings at levels 1--3, including other headings. Headings at levels 4 and 5 must have text paragraphs below them. Why? When rendered, level-4 and level-5 headings appear on the same line as the paragraphs they summarize. + +``` md + +# Level 1 Heading + +This text paragraph will follow the level-1 heading. + +## Level 2 Heading + +### This Level-3 Heading Directly Follows the Level-2 Heading. + +This text paragraph will follow the level-3 heading. + +#### Level 4 Heading + +This text paragraph will appear on the same line as the level-4 heading. + +##### Level 5 Heading + +This text paragraph will appear on the same line as the level-5 heading. +``` + +# Figures + +## Updated Syntax for Figures and Tables + +A previous version of this extension used the `apafg-` prefix for figure chunk labels and `apatb-` prefix for tables. It was always in the plan to use standard Quarto syntax as soon as possible. It is now possible. Replace all instances of `apafg-` with the standard Quarto prefix `fig-`. Likewise, replace the non-standard `apatb-` prefix with the standard Quarto prefix `tbl-`. + +Also replace all text references to figures and tables using standard Quarto syntax. For example, `{apafg-myplot}` should now be `@fig-myplot` instead.