diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 7e78df17b8..b2f0e3ea23 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -119,8 +119,72 @@ jobs: Deploy from GHA: ${{ github.event.pull_request.title || format('manual from PR {0}', github.event.issue.number) }} alias: deploy-preview-${{ github.event.pull_request.number || github.event.issue.number }} # these all default to 'true' - enable-pull-request-comment: true + enable-pull-request-comment: false enable-commit-comment: false enable-commit-status: true overwrites-pull-request-comment: false timeout-minutes: 1 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v46.0.5 + with: + files: | + # don't consider modifications on file used for includes for now. + docs/**/[^_]*.qmd + docs/**/[^_]*.md + docs/extensions/listings/*.yml + json: true + escape_json: false + + - name: Create custom PR comment + if: github.event.pull_request || github.event.issue.pull_request + uses: actions/github-script@v7 + env: + DEPLOY_URL: ${{ steps.netlify-deploy.outputs.deploy-url }} + CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request?.number || context.payload.issue.number; + const deployUrl = process.env.DEPLOY_URL; + const changedFiles = JSON.parse(process.env.CHANGED_FILES); + + let commentBody = `## ๐Ÿ“ Preview Deployment\n\n`; + commentBody += `๐Ÿ” Full site preview: [${deployUrl}](${deployUrl})\n\n`; + + if (changedFiles.length > 0) { + commentBody += `### ๐Ÿ”„ Modified Documents\n\n`; + changedFiles.forEach(file => { + let fileUrlPath; + + // Define a mapping for special files to their corresponding URLs + const specialFileMapping = { + 'docs/extensions/listings/shortcodes-and-filters.yml': 'docs/extensions/index.html', + 'docs/extensions/listings/journal-articles.yml': 'docs/extensions/index.html', + 'docs/extensions/listings/custom-formats.yml': 'docs/extensions/index.html', + 'docs/extensions/listings/revealjs-formats.yml': 'docs/extensions/index.html', + 'docs/extensions/listings/revealjs.yml': 'docs/extensions/index.html' + }; + + // Check if the file is in the special mapping + if (specialFileMapping[file]) { + fileUrlPath = specialFileMapping[file]; + } else if (file.endsWith('.qmd') || file.endsWith('.md')) { + // Convert path to URL (removing file extension and adding appropriate path) + fileUrlPath = file.replace(/\.(qmd|md)$/, '.html'); + } + + if (fileUrlPath) { + const fileUrl = `${deployUrl}/${fileUrlPath}`; + commentBody += `- [${file}](${fileUrl})\n`; + } + }); + } + + github.rest.issues.createComment({ + issue_number: prNumber, + owner: context.repo.owner, + repo: context.repo.repo, + body: commentBody + }); \ No newline at end of file diff --git a/Pipfile b/Pipfile index 399c69428e..c0b864a8ca 100644 --- a/Pipfile +++ b/Pipfile @@ -27,6 +27,7 @@ plotly = "*" pathlib = "*" nbformat = "*" statsmodels = "*" +plotnine = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index dca14db2b0..6690c3174a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "89550e4b55d2e7f6712e56775c44da890b46e10856735e329b78dc50a39760ff" + "sha256": "25363e7e006bb787e866b044fccf157954e2cd823fe841d3b8a175819b2d6a55" }, "pipfile-spec": 6, "requires": { @@ -350,74 +350,66 @@ }, "contourpy": { "hashes": [ - "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0", - "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", - "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", - "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad", - "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", - "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", - "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", - "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", - "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", - "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", - "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", - "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", - "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", - "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", - "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", - "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", - "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", - "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", - "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", - "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", - "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", - "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", - "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", - "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", - "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", - "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", - "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", - "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", - "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", - "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", - "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", - "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", - "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", - "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42", - "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", - "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", - "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", - "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49", - "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", - "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7", - "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", - "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", - "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", - "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", - "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", - "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8", - "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", - "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", - "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", - "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", - "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", - "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", - "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", - "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", - "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", - "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", - "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", - "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", - "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", - "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c", - "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", - "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", - "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", - "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", - "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c" + "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", + "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", + "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", + "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", + "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", + "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", + "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", + "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", + "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", + "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", + "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", + "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", + "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", + "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", + "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", + "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", + "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", + "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", + "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", + "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", + "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", + "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", + "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", + "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", + "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", + "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", + "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", + "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", + "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", + "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", + "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", + "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", + "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", + "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", + "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", + "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", + "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", + "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", + "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", + "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", + "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", + "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", + "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", + "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", + "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", + "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", + "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", + "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", + "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", + "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", + "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", + "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", + "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", + "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", + "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", + "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", + "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c" ], - "markers": "python_version >= '3.9'", - "version": "==1.3.0" + "markers": "python_version >= '3.10'", + "version": "==1.3.2" }, "cycler": { "hashes": [ @@ -488,57 +480,51 @@ }, "fonttools": { "hashes": [ - "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6", - "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263", - "sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1", - "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e", - "sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556", - "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d", - "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e", - "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2", - "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986", - "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb", - "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd", - "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882", - "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44", - "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac", - "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20", - "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d", - "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a", - "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c", - "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d", - "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff", - "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7", - "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10", - "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02", - "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2", - "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07", - "sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b", - "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08", - "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab", - "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285", - "sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c", - "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58", - "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9", - "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc", - "sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab", - "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55", - "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714", - "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8", - "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33", - "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d", - "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e", - "sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664", - "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7", - "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a", - "sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b", - "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13", - "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a", - "sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386", - "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac" + "sha256:052444a5d0151878e87e3e512a1aa1a0ab35ee4c28afde0a778e23b0ace4a7de", + "sha256:169b99a2553a227f7b5fea8d9ecd673aa258617f466b2abc6091fe4512a0dcd0", + "sha256:209b75943d158f610b78320eacb5539aa9e920bee2c775445b2846c65d20e19d", + "sha256:21e606b2d38fed938dde871c5736822dd6bda7a4631b92e509a1f5cd1b90c5df", + "sha256:241313683afd3baacb32a6bd124d0bce7404bc5280e12e291bae1b9bba28711d", + "sha256:26731739daa23b872643f0e4072d5939960237d540c35c14e6a06d47d71ca8fe", + "sha256:2e7cf8044ce2598bb87e44ba1d2c6e45d7a8decf56055b92906dc53f67c76d64", + "sha256:31003b6a10f70742a63126b80863ab48175fb8272a18ca0846c0482968f0588e", + "sha256:332bfe685d1ac58ca8d62b8d6c71c2e52a6c64bc218dc8f7825c9ea51385aa01", + "sha256:37c377f7cb2ab2eca8a0b319c68146d34a339792f9420fca6cd49cf28d370705", + "sha256:37e01c6ec0c98599778c2e688350d624fa4770fbd6144551bd5e032f1199171c", + "sha256:401b1941ce37e78b8fd119b419b617277c65ae9417742a63282257434fd68ea2", + "sha256:4536f2695fe5c1ffb528d84a35a7d3967e5558d2af58b4775e7ab1449d65767b", + "sha256:4c908a7036f0f3677f8afa577bcd973e3e20ddd2f7c42a33208d18bee95cdb6f", + "sha256:51ab1ff33c19e336c02dee1e9fd1abd974a4ca3d8f7eef2a104d0816a241ce97", + "sha256:524133c1be38445c5c0575eacea42dbd44374b310b1ffc4b60ff01d881fabb96", + "sha256:57bb7e26928573ee7c6504f54c05860d867fd35e675769f3ce01b52af38d48e2", + "sha256:60f6665579e909b618282f3c14fa0b80570fbf1ee0e67678b9a9d43aa5d67a37", + "sha256:62224a9bb85b4b66d1b46d45cbe43d71cbf8f527d332b177e3b96191ffbc1e64", + "sha256:6770d7da00f358183d8fd5c4615436189e4f683bdb6affb02cad3d221d7bb757", + "sha256:6801aeddb6acb2c42eafa45bc1cb98ba236871ae6f33f31e984670b749a8e58e", + "sha256:70d6b3ceaa9cc5a6ac52884f3b3d9544e8e231e95b23f138bdb78e6d4dc0eae3", + "sha256:78813b49d749e1bb4db1c57f2d4d7e6db22c253cb0a86ad819f5dc197710d4b2", + "sha256:841b2186adce48903c0fef235421ae21549020eca942c1da773ac380b056ab3c", + "sha256:84fc186980231a287b28560d3123bd255d3c6b6659828c642b4cf961e2b923d0", + "sha256:885bde7d26e5b40e15c47bd5def48b38cbd50830a65f98122a8fb90962af7cd1", + "sha256:8b4309a2775e4feee7356e63b163969a215d663399cce1b3d3b65e7ec2d9680e", + "sha256:8d77f92438daeaddc05682f0f3dac90c5b9829bcac75b57e8ce09cb67786073c", + "sha256:902425f5afe28572d65d2bf9c33edd5265c612ff82c69e6f83ea13eafc0dcbea", + "sha256:9bcc1e77fbd1609198966ded6b2a9897bd6c6bcbd2287a2fc7d75f1a254179c5", + "sha256:a408c3c51358c89b29cfa5317cf11518b7ce5de1717abb55c5ae2d2921027de6", + "sha256:a9bf8adc9e1f3012edc8f09b08336272aec0c55bc677422273e21280db748f7c", + "sha256:b818db35879d2edf7f46c7e729c700a0bce03b61b9412f5a7118406687cb151d", + "sha256:b8974b2a266b54c96709bd5e239979cddfd2dbceed331aa567ea1d7c4a2202db", + "sha256:be392ec3529e2f57faa28709d60723a763904f71a2b63aabe14fee6648fe3b14", + "sha256:d3972b13148c1d1fbc092b27678a33b3080d1ac0ca305742b0119b75f9e87e38", + "sha256:d40dcf533ca481355aa7b682e9e079f766f35715defa4929aeb5597f9604272e", + "sha256:e93df708c69a193fc7987192f94df250f83f3851fda49413f02ba5dded639482", + "sha256:efd7e6660674e234e29937bc1481dceb7e0336bfae75b856b4fb272b5093c5d4", + "sha256:f9b3a78f69dcbd803cf2fb3f972779875b244c1115481dfbdd567b2c22b31f6b", + "sha256:fa39475eaccb98f9199eccfda4298abaf35ae0caec676ffc25b3a5e224044464", + "sha256:fbce6dae41b692a5973d0f2158f782b9ad05babc2c2019a970a1094a23909b1b" ], - "markers": "python_version >= '3.8'", - "version": "==4.54.1" + "markers": "python_version >= '3.9'", + "version": "==4.59.0" }, "fqdn": { "hashes": [ @@ -803,123 +789,89 @@ }, "kiwisolver": { "hashes": [ - "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", - "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95", - "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", - "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", - "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d", - "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", - "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", - "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", - "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", - "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", - "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", - "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", - "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", - "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", - "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", - "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", - "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd", - "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", - "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", - "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e", - "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", - "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", - "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", - "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e", - "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", - "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", - "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", - "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5", - "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", - "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", - "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", - "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", - "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", - "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", - "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", - "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", - "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3", - "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a", - "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", - "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", - "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", - "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", - "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", - "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", - "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", - "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", - "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", - "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", - "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", - "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", - "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b", - "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", - "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", - "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", - "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", - "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", - "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", - "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", - "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", - "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", - "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", - "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39", - "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", - "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933", - "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", - "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", - "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", - "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503", - "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", - "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", - "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", - "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", - "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", - "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", - "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf", - "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d", - "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", - "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", - "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", - "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", - "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2", - "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", - "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade", - "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a", - "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c", - "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", - "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00", - "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", - "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", - "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", - "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", - "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", - "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09", - "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", - "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", - "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89", - "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", - "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", - "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", - "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583", - "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", - "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", - "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d", - "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935", - "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", - "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", - "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b", - "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417", - "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", - "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", - "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", - "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", - "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", - "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052" + "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", + "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c", + "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", + "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", + "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", + "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79", + "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", + "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2", + "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605", + "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", + "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab", + "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", + "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", + "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8", + "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", + "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", + "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", + "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", + "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff", + "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", + "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", + "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0", + "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6", + "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", + "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", + "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0", + "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", + "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", + "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d", + "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b", + "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", + "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", + "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", + "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc", + "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", + "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", + "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", + "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c", + "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", + "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", + "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561", + "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", + "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc", + "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db", + "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", + "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751", + "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", + "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", + "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", + "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", + "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84", + "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", + "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", + "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25", + "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", + "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271", + "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", + "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", + "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e", + "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", + "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b", + "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7", + "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03", + "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b", + "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d", + "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", + "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d", + "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3", + "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67", + "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f", + "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c", + "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", + "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", + "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954", + "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", + "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a", + "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", + "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed", + "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34", + "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794" ], - "markers": "python_version >= '3.8'", - "version": "==1.4.7" + "markers": "python_version >= '3.10'", + "version": "==1.4.8" }, "linkify-it-py": { "hashes": [ @@ -1005,50 +957,44 @@ }, "matplotlib": { "hashes": [ - "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21", - "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5", - "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697", - "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9", - "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca", - "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64", - "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e", - "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03", - "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae", - "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa", - "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3", - "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e", - "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a", - "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc", - "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea", - "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b", - "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e", - "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447", - "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b", - "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92", - "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb", - "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66", - "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9", - "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7", - "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2", - "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30", - "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d", - "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7", - "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4", - "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41", - "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2", - "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556", - "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f", - "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772", - "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c", - "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a", - "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51", - "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49", - "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c", - "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413" + "sha256:0ab1affc11d1f495ab9e6362b8174a25afc19c081ba5b0775ef00533a4236eea", + "sha256:0ef061f74cd488586f552d0c336b2f078d43bc00dc473d2c3e7bfee2272f3fa8", + "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", + "sha256:213fadd6348d106ca7db99e113f1bea1e65e383c3ba76e8556ba4a3054b65ae7", + "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", + "sha256:2a818d8bdcafa7ed2eed74487fdb071c09c1ae24152d403952adad11fa3c65b4", + "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", + "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", + "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", + "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", + "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", + "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", + "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", + "sha256:748ebc3470c253e770b17d8b0557f0aa85cf8c63fd52f1a61af5b27ec0b7ffee", + "sha256:7c5f0283da91e9522bdba4d6583ed9d5521566f63729ffb68334f86d0bb98049", + "sha256:86ab63d66bbc83fdb6733471d3bff40897c1e9921cba112accd748eee4bce5e4", + "sha256:8c21ae75651c0231b3ba014b6d5e08fb969c40cdb5a011e33e99ed0c9ea86ecb", + "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", + "sha256:a48f9c08bf7444b5d2391a83e75edb464ccda3c380384b36532a0962593a1751", + "sha256:a49e39755580b08e30e3620efc659330eac5d6534ab7eae50fa5e31f53ee4e30", + "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", + "sha256:c0b9849a17bce080a16ebcb80a7b714b5677d0ec32161a2cc0a8e5a6030ae220", + "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", + "sha256:cb73d8aa75a237457988f9765e4dfe1c0d2453c5ca4eabc897d4309672c8e014", + "sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05", + "sha256:cf4636203e1190871d3a73664dea03d26fb019b66692cbfd642faafdad6208e8", + "sha256:d3bec61cb8221f0ca6313889308326e7bb303d0d302c5cc9e523b2f2e6c73deb", + "sha256:d96985d14dc5f4a736bbea4b9de9afaa735f8a0fc2ca75be2fa9e96b2097369d", + "sha256:dbed9917b44070e55640bd13419de83b4c918e52d97561544814ba463811cbc7", + "sha256:ed70453fd99733293ace1aec568255bc51c6361cb0da94fa5ebf0649fdb2150a", + "sha256:eef6ed6c03717083bc6d69c2d7ee8624205c29a8e6ea5a31cd3492ecdbaee1e1", + "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", + "sha256:fd5641a9bb9d55f4dd2afe897a53b537c834b9012684c8444cc105895c8c16fd", + "sha256:fdfa07c0ec58035242bc8b2c8aae37037c9a886370eef6850703d7583e19964b" ], "index": "pypi", - "markers": "python_version >= '3.9'", - "version": "==3.9.2" + "markers": "python_version >= '3.10'", + "version": "==3.10.3" }, "matplotlib-inline": { "hashes": [ @@ -1084,11 +1030,11 @@ }, "mizani": { "hashes": [ - "sha256:9126989fe48de83017bd130fe1558ae459987fc869cbe074b990c8e6a0bb3bbc", - "sha256:eb03df7f598990cc3159fe80c9d564aa46b67648cdeec8b348025ae2b8577e77" + "sha256:c35fdfa9a68824e80c724ffbd9bb776db23bf73ea94b90b46dbc7f58cb2233cb", + "sha256:d7180bf7c6fa60a7aa5b78da903bc6b2ffc30602d479a4a07b5240bc5330491d" ], - "markers": "python_version >= '3.9'", - "version": "==0.11.0" + "markers": "python_version >= '3.10'", + "version": "==0.14.2" }, "nbclient": { "hashes": [ @@ -1141,63 +1087,61 @@ }, "numpy": { "hashes": [ - "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8", - "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466", - "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35", - "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c", - "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4", - "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6", - "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0", - "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7", - "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a", - "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a", - "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e", - "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62", - "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2", - "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5", - "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee", - "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe", - "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a", - "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e", - "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf", - "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c", - "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3", - "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86", - "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df", - "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98", - "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d", - "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2", - "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146", - "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550", - "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8", - "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb", - "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e", - "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d", - "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366", - "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0", - "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db", - "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe", - "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426", - "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952", - "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03", - "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f", - "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7", - "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b", - "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17", - "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5", - "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1", - "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142", - "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884", - "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a", - "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9", - "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445", - "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1", - "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1", - "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648" + "sha256:0025048b3c1557a20bc80d06fdeb8cc7fc193721484cca82b2cfa072fec71a93", + "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280", + "sha256:0bb3a4a61e1d327e035275d2a993c96fa786e4913aa089843e6a2d9dd205c66a", + "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e", + "sha256:15aa4c392ac396e2ad3d0a2680c0f0dee420f9fed14eef09bdb9450ee6dcb7b7", + "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1", + "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b", + "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c", + "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8", + "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d", + "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc", + "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992", + "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0", + "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8", + "sha256:467db865b392168ceb1ef1ffa6f5a86e62468c43e0cfb4ab6da667ede10e58db", + "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943", + "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1", + "sha256:5ccb7336eaf0e77c1635b232c141846493a588ec9ea777a7c24d7166bb8533ae", + "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952", + "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e", + "sha256:6ea9e48336a402551f52cd8f593343699003d2353daa4b72ce8d34f66b722070", + "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29", + "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30", + "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e", + "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc", + "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42", + "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25", + "sha256:a5ee121b60aa509679b682819c602579e1df14a5b07fe95671c8849aad8f2115", + "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8", + "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d", + "sha256:a8b740f5579ae4585831b3cf0e3b0425c667274f82a484866d2adf9570539369", + "sha256:ad506d4b09e684394c42c966ec1527f6ebc25da7f4da4b1b056606ffe446b8a3", + "sha256:afed2ce4a84f6b0fc6c1ce734ff368cbf5a5e24e8954a338f3bdffa0718adffb", + "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8", + "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0", + "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee", + "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb", + "sha256:c6e0bf9d1a2f50d2b65a7cf56db37c095af17b59f6c132396f7c6d5dd76484df", + "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48", + "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76", + "sha256:d4580adadc53311b163444f877e0789f1c8861e2698f6b2a4ca852fda154f3ff", + "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee", + "sha256:e344eb79dab01f1e838ebb67aab09965fb271d6da6b00adda26328ac27d4a66e", + "sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb", + "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab", + "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660", + "sha256:eabd7e8740d494ce2b4ea0ff05afa1b7b291e978c0ae075487c51e8bd93c0c68", + "sha256:ebb8603d45bc86bbd5edb0d63e52c5fd9e7945d3a503b77e486bd88dde67a19b", + "sha256:ec0bdafa906f95adc9a0c6f26a4871fa753f25caaa0e032578a30457bff0af6a", + "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244", + "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77" ], "index": "pypi", - "markers": "python_version >= '3.10'", - "version": "==2.1.2" + "markers": "python_version >= '3.11'", + "version": "==2.3.1" }, "overrides": { "hashes": [ @@ -1209,47 +1153,60 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", + "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==25.0" }, "pandas": { "hashes": [ - "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863", - "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2", - "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1", - "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad", - "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db", - "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76", - "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51", - "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32", - "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08", - "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b", - "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4", - "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921", - "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288", - "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee", - "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0", - "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24", - "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99", - "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151", - "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd", - "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce", - "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57", - "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef", - "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54", - "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a", - "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238", - "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23", - "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772", - "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce", - "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad" + "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232", + "sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7", + "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2", + "sha256:0f951fbb702dacd390561e0ea45cdd8ecfa7fb56935eb3dd78e306c19104b9b0", + "sha256:1b916a627919a247d865aed068eb65eb91a344b13f5b57ab9f610b7716c92de1", + "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956", + "sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da", + "sha256:22c2e866f7209ebc3a8f08d75766566aae02bcc91d196935a1d9e59c7b990ac9", + "sha256:2323294c73ed50f612f67e2bf3ae45aea04dce5690778e08a09391897f35ff88", + "sha256:2b0540963d83431f5ce8870ea02a7430adca100cec8a050f0811f8e31035541b", + "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9", + "sha256:2eb789ae0274672acbd3c575b0598d213345660120a257b47b5dafdc618aec83", + "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab", + "sha256:342e59589cc454aaff7484d75b816a433350b3d7964d7847327edda4d532a2e3", + "sha256:3462c3735fe19f2638f2c3a40bd94ec2dc5ba13abbb032dd2fa1f540a075509d", + "sha256:3583d348546201aff730c8c47e49bc159833f971c2899d6097bce68b9112a4f1", + "sha256:4645f770f98d656f11c69e81aeb21c6fca076a44bed3dcbb9396a4311bc7f6d8", + "sha256:4d544806b485ddf29e52d75b1f559142514e60ef58a832f74fb38e48d757b299", + "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8", + "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444", + "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3", + "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a", + "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb", + "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928", + "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4", + "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a", + "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22", + "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275", + "sha256:98bcc8b5bf7afed22cc753a28bc4d9e26e078e777066bc53fac7904ddef9a678", + "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e", + "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8", + "sha256:b3cd4273d3cb3707b6fffd217204c52ed92859533e31dc03b7c5008aa933aaab", + "sha256:b4b0de34dc8499c2db34000ef8baad684cfa4cbd836ecee05f323ebfba348c7d", + "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679", + "sha256:cd05b72ec02ebfb993569b4931b2e16fbb4d6ad6ce80224a3ee838387d83a191", + "sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e", + "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12", + "sha256:e6723a27ad7b244c0c79d8e7007092d7c8f0f11305770e2f4cd778b3ad5f9f85", + "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9", + "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96", + "sha256:fe67dc676818c186d5a3d5425250e40f179c2a89145df477dd82945eaea89e97", + "sha256:fe7317f578c6a153912bd2292f02e40c1d8f253e93c599e82620c7f69755c74f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==2.2.2" + "version": "==2.3.1" }, "pandocfilters": { "hashes": [ @@ -1277,10 +1234,11 @@ }, "patsy": { "hashes": [ - "sha256:19056886fd8fa71863fa32f0eb090267f21fb74be00f19f5c70b2e9d76c883c6", - "sha256:95c6d47a7222535f84bff7f63d7303f2e297747a598db89cf5c67f0c0c7d2cdb" + "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", + "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4" ], - "version": "==0.5.6" + "markers": "python_version >= '3.6'", + "version": "==1.0.1" }, "pexpect": { "hashes": [ @@ -1292,84 +1250,115 @@ }, "pillow": { "hashes": [ - "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", - "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5", - "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", - "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", - "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", - "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2", - "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9", - "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f", - "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", - "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", - "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d", - "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2", - "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316", - "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a", - "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", - "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd", - "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba", - "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", - "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273", - "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa", - "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", - "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", - "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", - "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae", - "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291", - "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97", - "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06", - "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", - "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b", - "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b", - "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", - "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", - "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947", - "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb", - "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", - "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5", - "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f", - "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", - "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944", - "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830", - "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", - "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", - "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", - "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", - "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7", - "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", - "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", - "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9", - "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", - "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4", - "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", - "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd", - "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50", - "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c", - "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086", - "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba", - "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306", - "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", - "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e", - "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488", - "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", - "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", - "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", - "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9", - "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", - "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", - "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790", - "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734", - "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916", - "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1", - "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", - "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", - "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", - "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", - "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9" + "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", + "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", + "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", + "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", + "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", + "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", + "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", + "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", + "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", + "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", + "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", + "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", + "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", + "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", + "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", + "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", + "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", + "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860", + "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", + "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", + "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", + "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", + "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", + "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", + "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", + "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", + "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", + "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", + "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", + "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967", + "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", + "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", + "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", + "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", + "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", + "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", + "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f", + "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", + "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", + "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", + "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", + "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", + "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", + "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", + "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", + "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", + "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad", + "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", + "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", + "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", + "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", + "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", + "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", + "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", + "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", + "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", + "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", + "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081", + "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", + "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", + "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", + "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", + "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", + "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", + "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", + "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", + "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", + "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", + "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", + "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", + "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", + "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", + "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", + "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", + "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", + "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", + "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", + "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", + "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", + "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", + "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", + "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", + "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", + "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", + "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe", + "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", + "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", + "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", + "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", + "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", + "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", + "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", + "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", + "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", + "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", + "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", + "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", + "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", + "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", + "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", + "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", + "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", + "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", + "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", + "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", + "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3" ], "markers": "python_version >= '3.9'", - "version": "==11.0.0" + "version": "==11.3.0" }, "platformdirs": { "hashes": [ @@ -1388,6 +1377,15 @@ "markers": "python_version >= '3.8'", "version": "==5.20.0" }, + "plotnine": { + "hashes": [ + "sha256:1ce9a109c124fc9b657039591ebb8acbc1c5ae238c9d9256aea9284bc6188436", + "sha256:8dc491f5000062f6af7cf29429ee78b617daa8b2c22a1dd4e8b593f08bb51c20" + ], + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==0.15.0" + }, "prometheus-client": { "hashes": [ "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89", @@ -1458,18 +1456,18 @@ }, "pyparsing": { "hashes": [ - "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", - "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c" + "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", + "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be" ], "markers": "python_version >= '3.9'", - "version": "==3.2.0" + "version": "==3.2.3" }, "python-dateutil": { "hashes": [ "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==2.9.0.post0" }, "python-json-logger": { @@ -1490,10 +1488,10 @@ }, "pytz": { "hashes": [ - "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", - "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" + "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", + "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" ], - "version": "==2024.1" + "version": "==2025.2" }, "pywin32": { "hashes": [ @@ -1683,22 +1681,6 @@ "markers": "python_version >= '3.6'", "version": "==25.1.2" }, - "qtconsole": { - "hashes": [ - "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b", - "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc" - ], - "markers": "python_version >= '3.8'", - "version": "==5.5.1" - }, - "qtpy": { - "hashes": [ - "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b", - "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987" - ], - "markers": "python_version >= '3.7'", - "version": "==2.4.1" - }, "questionary": { "hashes": [ "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2", @@ -1846,34 +1828,46 @@ }, "scipy": { "hashes": [ - "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", - "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", - "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", - "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", - "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", - "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", - "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", - "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", - "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", - "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", - "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", - "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", - "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", - "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", - "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", - "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", - "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", - "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", - "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", - "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", - "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", - "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", - "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", - "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", - "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f" - ], - "markers": "python_version >= '3.9'", - "version": "==1.13.1" + "sha256:03931b4e870c6fef5b5c0970d52c9f6ddd8c8d3e934a98f09308377eba6f3824", + "sha256:1d8747f7736accd39289943f7fe53a8333be7f15a82eea08e4afe47d79568c32", + "sha256:1dbc8fdba23e4d80394ddfab7a56808e3e6489176d559c6c71935b11a2d59db1", + "sha256:26ec28675f4a9d41587266084c626b02899db373717d9312fa96ab17ca1ae94d", + "sha256:4f720300a3024c237ace1cb11f9a84c38beb19616ba7c4cdcd771047a10a1706", + "sha256:512c4f4f85912767c351a0306824ccca6fd91307a9f4318efe8fdbd9d30562ef", + "sha256:58e0d4354eacb6004e7aa1cd350e5514bd0270acaa8d5b36c0627bb3bb486974", + "sha256:6b65d232157a380fdd11a560e7e21cde34fdb69d65c09cb87f6cc024ee376351", + "sha256:6c4abb4c11fc0b857474241b812ce69ffa6464b4bd8f4ecb786cf240367a36a7", + "sha256:75b2094ec975c80efc273567436e16bb794660509c12c6a31eb5c195cbf4b6dc", + "sha256:79a3c13d43c95aa80b87328a46031cf52508cf5f4df2767602c984ed1d3c6bbe", + "sha256:7dcf42c380e1e3737b343dec21095c9a9ad3f9cbe06f9c05830b44b1786c9e90", + "sha256:7eb6bd33cef4afb9fa5f1fb25df8feeb1e52d94f21a44f1d17805b41b1da3180", + "sha256:88a6ca658fb94640079e7a50b2ad3b67e33ef0f40e70bdb7dc22017dae73ac08", + "sha256:8cb824c1fc75ef29893bc32b3ddd7b11cf9ab13c1127fe26413a05953b8c32ed", + "sha256:90452f6a9f3fe5a2cf3748e7be14f9cc7d9b124dce19667b54f5b429d680d539", + "sha256:952358b7e58bd3197cfbd2f2f2ba829f258404bdf5db59514b515a8fe7a36c52", + "sha256:a16ba90847249bedce8aa404a83fb8334b825ec4a8e742ce6012a7a5e639f95c", + "sha256:a2f0bf2f58031c8701a8b601df41701d2a7be17c7ffac0a4816aeba89c4cdac8", + "sha256:aad603e9339ddb676409b104c48a027e9916ce0d2838830691f39552b38a352e", + "sha256:adf9b1999323ba335adc5d1dc7add4781cb5a4b0ef1e98b79768c05c796c4e49", + "sha256:ae902626972f1bd7e4e86f58fd72322d7f4ec7b0cfc17b15d4b7006efc385176", + "sha256:b2243561b45257f7391d0f49972fca90d46b79b8dbcb9b2cb0f9df928d370ad4", + "sha256:b370f8f6ac6ef99815b0d5c9f02e7ade77b33007d74802efc8316c8db98fd11e", + "sha256:b5ef54021e832869c8cfb03bc3bf20366cbcd426e02a58e8a58d7584dfbb8f62", + "sha256:bbba55fb97ba3cdef9b1ee973f06b09d518c0c7c66a009c729c7d1592be1935e", + "sha256:d2b83c37edbfa837a8923d19c749c1935ad3d41cf196006a24ed44dba2ec4358", + "sha256:d30c0fe579bb901c61ab4bb7f3eeb7281f0d4c4a7b52dbf563c89da4fd2949be", + "sha256:de2db7250ff6514366a9709c2cba35cb6d08498e961cba20d7cff98a7ee88938", + "sha256:deec06d831b8f6b5fb0b652433be6a09db29e996368ce5911faf673e78d20085", + "sha256:e69f798847e9add03d512eaf5081a9a5c9a98757d12e52e6186ed9681247a1ac", + "sha256:e6d7dfc148135e9712d87c5f7e4f2ddc1304d1582cb3a7d698bbadedb61c7afd", + "sha256:e85800274edf4db8dd2e4e93034f92d1b05c9421220e7ded9988b16976f849c1", + "sha256:e9f414cbe9ca289a73e0cc92e33a6a791469b6619c240aa32ee18abdce8ab451", + "sha256:eb9f147a1b8529bb7fec2a85cf4cf42bdfadf9e83535c309a11fdae598c88e8b", + "sha256:f56296fefca67ba605fd74d12f7bd23636267731a72cb3947963e76b8c0a25db", + "sha256:f91b87e1689f0370690e8470916fe1b2308e5b2061317ff76977c8f836452a47" + ], + "markers": "python_version >= '3.11'", + "version": "==1.16.0" }, "seaborn": { "hashes": [ @@ -1903,11 +1897,11 @@ }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.17.0" }, "sniffio": { "hashes": [ @@ -1942,34 +1936,40 @@ }, "statsmodels": { "hashes": [ - "sha256:0e46e9d59293c1af4cc1f4e5248f17e7e7bc596bfce44d327c789ac27f09111b", - "sha256:10f2b7611a61adb7d596a6d239abdf1a4d5492b931b00d5ed23d32844d40e48e", - "sha256:201c3d00929c4a67cda1fe05b098c8dcf1b1eeefa88e80a8f963a844801ed59f", - "sha256:29c78a7601fdae1aa32104c5ebff2e0b72c26f33e870e2f94ab1bcfd927ece9b", - "sha256:4864a1c4615c5ea5f2e3b078a75bdedc90dd9da210a37e0738e064b419eccee2", - "sha256:50fcb633987779e795142f51ba49fb27648d46e8a1382b32ebe8e503aaabaa9e", - "sha256:55d1742778400ae67acb04b50a2c7f5804182f8a874bd09ca397d69ed159a751", - "sha256:5827a12e3ede2b98a784476d61d6bec43011fedb64aa815f2098e0573bece257", - "sha256:7a91f6c4943de13e3ce2e20ee3b5d26d02bd42300616a421becd53756f5deb37", - "sha256:876794068abfaeed41df71b7887000031ecf44fbfa6b50d53ccb12ebb4ab747a", - "sha256:8875823bdd41806dc853333cc4e1b7ef9481bad2380a999e66ea42382cf2178d", - "sha256:890550147ad3a81cda24f0ba1a5c4021adc1601080bd00e191ae7cd6feecd6ad", - "sha256:8e004cfad0e46ce73fe3f3812010c746f0d4cfd48e307b45c14e9e360f3d2510", - "sha256:90fd2f0110b73fc3fa5a2f21c3ca99b0e22285cccf38e56b5b8fd8ce28791b0f", - "sha256:9edefa4ce08e40bc1d67d2f79bc686ee5e238e801312b5a029ee7786448c389a", - "sha256:a87ef21fadb445b650f327340dde703f13aec1540f3d497afb66324499dea97a", - "sha256:ac780ad9ff552773798829a0b9c46820b0faa10e6454891f5e49a845123758ab", - "sha256:afbd92410e0df06f3d8c4e7c0e2e71f63f4969531f280fb66059e2ecdb6e0415", - "sha256:c254c66142f1167b4c7d031cf8db55294cc62ff3280e090fc45bd10a7f5fd029", - "sha256:df5d6f95c46f0341da6c79ee7617e025bf2b371e190a8e60af1ae9cabbdb7a97", - "sha256:eb0ba1ad3627705f5ae20af6b2982f500546d43892543b36c7bca3e2f87105e7", - "sha256:f36494df7c03d63168fccee5038a62f469469ed6a4dd6eaeb9338abedcd0d5f5", - "sha256:f450fcbae214aae66bd9d2b9af48e0f8ba1cb0e8596c6ebb34e6e3f0fec6542c", - "sha256:f870d14a587ea58a3b596aa994c2ed889cc051f9e450e887d2c83656fc6a64bf" + "sha256:128872be8f3208f4446d91ea9e4261823902fc7997fee7e1a983eb62fd3b7c6e", + "sha256:145bc39b2cb201efb6c83cc3f2163c269e63b0d4809801853dec6f440bd3bc37", + "sha256:1cab9e6fce97caf4239cdb2df375806937da5d0b7ba2699b13af33a07f438464", + "sha256:1e9742d8a5ac38a3bfc4b7f4b0681903920f20cbbf466d72b1fd642033846108", + "sha256:26c028832730aebfbfd4e7501694e1f9ad31ec8536e776716673f4e7afd4059a", + "sha256:2a06bca03b7a492f88c8106103ab75f1a5ced25de90103a89f3a287518017939", + "sha256:37e7364a39f9aa3b51d15a208c2868b90aadb8412f868530f5cba9197cb00eaa", + "sha256:4263d7f4d0f1d5ac6eb4db22e1ee34264a14d634b9332c975c9d9109b6b46e12", + "sha256:4a060c7e0841c549c8ce2825fd6687e6757e305d9c11c9a73f6c5a0ce849bb69", + "sha256:4b7091a8442076c708c926de3603653a160955e80a2b6d931475b7bb8ddc02e5", + "sha256:4e5e26b21d2920905764fb0860957d08b5ba2fae4466ef41b1f7c53ecf9fc7fa", + "sha256:56da20def5350d676388213a330fd40ed15d0e8dd0bb1b92c0e4b0f2a65d3ad2", + "sha256:5a085d47c8ef5387279a991633883d0e700de2b0acc812d7032d165888627bef", + "sha256:6264fb00e02f858b86bd01ef2dc05055a71d4a0cc7551b9976b07b0f0e6cf24f", + "sha256:86224f6e36f38486e471e75759d241fe2912d8bc25ab157d54ee074c6aedbf45", + "sha256:906263134dd1a640e55ecb01fda4a9be7b9e08558dba9e4c4943a486fdb0c9c8", + "sha256:9118f76344f77cffbb3a9cbcff8682b325be5eed54a4b3253e09da77a74263d3", + "sha256:9dc4ee159070557c9a6c000625d85f653de437772fe7086857cff68f501afe45", + "sha256:9f866b2ebb2904b47c342d00def83c526ef2eb1df6a9a3c94ba5fe63d0005aec", + "sha256:9fc2b5cdc0c95cba894849651fec1fa1511d365e3eb72b0cc75caac44077cd48", + "sha256:afb37ca1d70d99b5fd876e8574ea46372298ae0f0a8b17e4cf0a9afd2373ae62", + "sha256:b23b8f646dd78ef5e8d775d879208f8dc0a73418b41c16acac37361ff9ab7738", + "sha256:b2ed065bfbaf8bb214c7201656df840457c2c8c65e1689e3eb09dc7440f9c61c", + "sha256:b8d96b0bbaeabd3a557c35cc7249baa9cfbc6dd305c32a9f2cbdd7f46c037e7f", + "sha256:c3dd760a6fa80cd5e0371685c697bb9c2c0e6e1f394d975e596a1e6d0bbb9372", + "sha256:d7c14fb2617bb819fb2532e1424e1da2b98a3419a80e95f33365a72d437d474e", + "sha256:de260e58cccfd2ceddf835b55a357233d6ca853a1aa4f90f7553a52cc71c6ddf", + "sha256:ec56f771d9529cdc17ed2fb2a950d100b6e83a7c5372aae8ac5bb065c474b856", + "sha256:f2ad5aee04ae7196c429df2174df232c057e478c5fa63193d01c8ec9aae04d31", + "sha256:f402fc793458dd6d96e099acb44cd1de1428565bf7ef3030878a8daff091f08a" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==0.14.2" + "version": "==0.14.5" }, "tabulate": { "hashes": [ @@ -1980,14 +1980,6 @@ "markers": "python_version >= '3.7'", "version": "==0.9.0" }, - "tenacity": { - "hashes": [ - "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a", - "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c" - ], - "markers": "python_version >= '3.7'", - "version": "==8.2.3" - }, "terminado": { "hashes": [ "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", @@ -2004,14 +1996,6 @@ "markers": "python_version >= '3.7'", "version": "==1.2.1" }, - "toolz": { - "hashes": [ - "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85", - "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d" - ], - "markers": "python_version >= '3.7'", - "version": "==0.12.1" - }, "tornado": { "hashes": [ "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0", @@ -2062,11 +2046,11 @@ }, "tzdata": { "hashes": [ - "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", - "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252" + "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", + "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" ], "markers": "python_version >= '2'", - "version": "==2024.1" + "version": "==2025.2" }, "uc-micro-py": { "hashes": [ diff --git a/_freeze/docs/authoring/cross-references/execute-results/html.json b/_freeze/docs/authoring/cross-references/execute-results/html.json index a8b34b5957..ca95e2f2d9 100644 --- a/_freeze/docs/authoring/cross-references/execute-results/html.json +++ b/_freeze/docs/authoring/cross-references/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "ef3190005aac9766972a9802450db689", + "hash": "73687d731b0958f2db2cfbc7be4ad153", "result": { "engine": "jupyter", - "markdown": "---\ntitle: \"Cross References\"\nformat: html\ntoc-expand: 2\ntoc-depth: 4\naliases: \n - /docs/authoring/cross-references-listings.html\n - /docs/authoring/cross-references-callouts.html\n---\n\n\n\n\n## Overview\n\nCross-references make it easier for readers to navigate your document by providing numbered references and hyperlinks to various entities like figures and tables. Every cross-referenceable entity requires a label---a unique identifier prefixed with a cross-reference type e.g. `#fig-element`. For example, this is a cross-referenceable figure:\n\n``` markdown\n![Elephant](elephant.png){#fig-elephant}\n```\n\nThe presence of the label (`#fig-elephant`) makes this figure referenceable. This enables you to use the following syntax to refer to it elsewhere in the document:\n\n``` markdown\nSee @fig-elephant for an illustration.\n```\n\nHere is what this would look like rendered to HTML:\n\n![](images/crossref-figure.png){.border fig-alt=\"A line drawing of an elephant. The caption 'Figure 1: Elephant' is centered beneath it.\" width=\"100%\"}\n\nNote that cross reference identifiers must start with their type (e.g. `fig-` or `tbl-`). So the identifier `#fig-elephant` is valid for a cross-reference but the identifiers `#elephant` and `#elephant-fig` are not.\n\n::: {#reserved-prefixes}\n::: {.callout-warning}\n\n## Reserved Prefixes \n\nUnless you are creating a cross-reference, avoid using the reserved cross-reference prefixes for code cell labels (e.g. set using the `label` code cell option) and element IDs (set using a `#` in an attribute). \n \nThe reserved prefixes are: `fig`, `tbl`, `lst`, `tip`, `nte`, `wrn`, `imp`, `cau`, `thm`, `lem`, `cor`, `prp`, `cnj`, `def`, `exm`, `exr`, `sol`, `rem`, `eq`, `sec`.\n\nAlso avoid using underscores (`_`) in labels and IDs as this can cause problems when rendering to PDF with LaTeX.\n\n:::\n:::\n\nQuarto enables you to create cross-references to figures, tables, equations, sections, code listings, theorems, proofs, and more. Cross references can also be applied to dynamic output from Knitr and Jupyter. \n\nOn this page you'll learn:\n\n* Different ways to use the `@` syntax to create [References](#references).\n* How to add [Lists](#lists) of references in LaTeX / PDF output.\n\nThen, we enumerate the syntax for the different types of elements you might want to reference:\n\n* [Floats](#floats): [Figures](#figures), [Tables](#tables) and [Code Listings](#code-listings)\n* Blocks: [Callouts](#callouts), [Theorems and Proofs](#theorems-and-proofs) and [Equations](#equations) \n* [Sections](#sections)\n\nThere are options available that control the text used for titles and references. For example, you could change \"Figure 1\" to read \"Fig 1\" or \"fig. 1\". See the [options documentation](cross-reference-options.qmd) for details on how to customize the text used for cross-references.\n\n## References\n\nThe examples on this page all use the default syntax for inline references (e.g. `@fig-elephant`), which results in the reference text \"Figure 1\", \"Table 1\", etc.\n\nYou can customize the appearance of inline references by either changing the syntax of the inline reference or by setting options. Here are the various ways to compose a cross-reference and their resulting output:\n\n| Type | Syntax | Output |\n|---------------|-----------------------|----------|\n| Default | `@fig-elephant` | Figure 1 |\n| Capitalized | `@Fig-elephant` | Figure 1 |\n| Custom Prefix | `[Fig @fig-elephant]` | Fig 1 |\n| No Prefix | `[-@fig-elephant]` | 1 |\n\nNote that the capitalized syntax makes no difference for the default output, but would indeed capitalize the first letter if the default prefix had been changed via an [option](cross-reference-options.qmd#references) to use lower case (e.g. \"fig.\").\n\nThese syntax variations work not only for Figures, but for all cross-referenceable elements in Quarto such as Tables, Equations, Theorems, and so on.\n\nYou can also group cross-references using the following syntax:\n\n``` markdown\nAs illustrated in [@fig-elephant; @fig-panther; @fig-rabbit].\n```\n\nThere are a number of options that can be used to further customize the treatment of cross-references. See the guide on [Cross Reference Options](cross-reference-options.qmd#references) for additional details.\n\n## Lists\n\nFor LaTeX / PDF output, you can use the raw LaTeX commands `\\listoffigures`, `\\listoftables` and `\\listoflistings` to produce listings of all figures, tables, etc. within a document. You can use the `lof-title`, `lot-title`, and `lol-title` crossref options to customize the title of the listing.\n\nFor example:\n\n``` markdown\n---\ntitle: \"My Document\"\ncrossref:\n lof-title: \"List of Figures\"\nformat: pdf\n---\n\n\\listoffigures\n```\n\nNote that the default titles for the lists use the form displayed above (i.e. \"List of \\\").\n\n## Floats\n\n[Figures](#figures), [tables](#tables) and [code listings](#code-listings) are known as \"float\" cross-references. Floats can appear in the rendered document at locations other than where they are defined, i.e. they float, and usually have captions. \n\nIn addition to the compact syntax for the most common uses of float cross-references, you can also define float cross-references with a div syntax. Use the div syntax when you need more flexibility in the content of your cross-reference, for example, to have a [video](cross-references-divs.qmd#videos) be referenced as a figure. Basic examples of the div syntax are included in the sections below, but you can find more complicated examples in [Cross-Reference Div Syntax](cross-references-divs.qmd). \n\nYou can also define custom types of float cross-reference to reference elements beyond figures, tables and code listings. Read more at [Custom Float Cross-References](cross-references-custom.qmd).\n\n\n### Figures\n\nAs described on the Overview above, this is the markdown used to create a cross-referenceable figure and then refer to it:\n\n``` markdown\n![Elephant](elephant.png){#fig-elephant}\n\nSee @fig-elephant for an illustration.\n```\n\nNote again that cross-reference identifiers must start with their type (e.g. `#fig-`) and that cross-reference identifiers must be all lower case.\n\n\nTo create a cross-reference to a figure using div syntax, create a fenced div with an id starting with `fig-`, include the image followed by the caption inside the div:\n\n````markdown\n::: {#fig-elephant}\n\n![](elephant.png)\n\nAn Elephant\n:::\n````\n\n\n\nYou can read about using div syntax with figures at [Cross-Reference Div Syntax](cross-references-divs.qmd#figures).\n\n#### Subfigures\n\nYou may want to create a figure composed of multiple subfigures. To do this, enclose the figures in a div (with its own label and caption) and give each subfigure its own label and (optionally) caption. You can then refer to either the entire figure in a reference or a single subfigure:\n\n``` markdown\n::: {#fig-elephants layout-ncol=2}\n\n![Surus](surus.png){#fig-surus}\n\n![Hanno](hanno.png){#fig-hanno}\n\nFamous Elephants\n:::\n\nSee @fig-elephants for examples. In particular, @fig-hanno.\n```\n\nHere is what this looks like when rendered as HTML:\n\n![](images/crossref-subfigures.png){.preview-image .border fig-alt=\"An artistic rendition of Surus, Hannibal's last war elephant, is on the left. Underneath this picture is the caption '(a) Surus.' On the right is a line drawing of Hanno, a famous elephant. Underneath this picture is the caption '(b) Hanno.' The words 'Figure 1: Famous elephants' are centered beneath both pictures. The text 'See fig. 1 for examples. In particular, fig. 1(b).' is underneath this text and is aligned to the left.\" width=\"100%\"}\n\nNote that we also used the `layout-ncol` attribute to specify a two-column layout. See the article on [Figures](figures.qmd) for more details on laying out panels of figures.\n\n#### Computations\n\nFigures produced by Jupyter and Knitr can also be cross-referenced. To do this, add a `label` and `fig-cap` option at the top of the code block. For example:\n\n::: panel-tabset\n##### Jupyter\n\n ```{{python}}\n #| label: fig-plot\n #| fig-cap: \"Plot\"\n\n import matplotlib.pyplot as plt\n plt.plot([1,23,2,4])\n plt.show()\n ```\n\n For example, see @fig-plot.\n\n![](images/crossref-figure-jupyter.png){fig-alt=\"A line plot with the label 'Figure 1: Plot' centered underneath it. The text 'For example, see fig. 1' is underneath this label and aligned to the left.\"}\n\n##### Knitr\n\n ```{{r}}\n #| label: fig-plot\n #| fig-cap: \"Plot\"\n\n plot(cars)\n ```\n\n For example, see @fig-plot.\n\n![](images/crossref-figure-r.png){fig-alt=\"A scatter plot of speed versus distance for the `cars` dataset. The label 'Figure 1: Plot' is centered beneath it. The text 'For example, see fig. 1' is aligned to the left underneath that.\"}\n:::\n\n\n::: {.callout-tip}\n\n## Computed Captions\n\nIf you need to generate a dynamic caption, instead of using the `fig-cap` or `tbl-cap` code cell option, combine inline code with the [Cross-Reference Div Syntax](/docs/authoring/cross-references-divs.qmd#computed-captions).\n\n:::\n\n\n\nYou can also create multiple figures within a code cell and reference them as subfigures. To do this use `fig-cap` for the main caption, and `fig-subcap` to provide an array of subcaptions. For example:\n\n ```{{python}}\n #| label: fig-plots\n #| fig-cap: \"Plots\" \n #| fig-subcap:\n #| - \"Plot 1\"\n #| - \"Plot 2\" \n #| layout-ncol: 2\n\n import matplotlib.pyplot as plt\n plt.plot([1,23,2,4])\n plt.show()\n\n plt.plot([8,65,23,90])\n plt.show()\n ```\n\n See @fig-plots for examples. In particular, @fig-plots-2.\n\n![](images/crossref-subfigures-jupyter.png){fig-alt=\"Two line plots side-by-side. The plot on the left has the caption '(a) Plot 1' centered underneath it. The plot on the right has the caption '(b) Plot 2' centered underneath it. The text 'Figure 1: Plots' is centered underneath both of these plots. The text 'See fig. 1 for examples. In particular, fig. 1(b)' is aligned to the left underneath that.\"}\n\nNote that subfigure reference labels are created automatically based on the main chunk label (e.g. `@fig-plots-1`, `@fig-plots-2`, etc.).\n\nIf you'd like subfigure captions that include only an identifier, e.g. \"(a)\", and not a text caption, then specify `fig-subcap: true` rather than providing explicit subcaption text:\n\n```{{python}}\n#| label: fig-plots\n#| fig-cap: \"Plots\" \n#| fig-subcap: true\n#| layout-ncol: 2\n```\n\n### Tables\n\n\n\n\nFor markdown tables, add a caption below the table, then include a `#tbl-` label in braces at the end of the caption. For example:\n\n``` markdown\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\n: My Caption {#tbl-letters}\n\nSee @tbl-letters.\n```\n\nWhich looks like this when rendered to HTML:\n\n![](images/crossref-table.png){fig-alt=\"A table with 3 columns and four rows. The text 'Table 1: My Caption' is above the header column. The text 'See tbl. 1' is aligned to the left underneath the last column.\" width=\"500\"}\n\n\n\n::: callout-important\n## Label Prefix\n\nIn order for a table to be cross-referenceable, its label must start with the `tbl-` prefix.\n:::\n\n\nTo create a cross-reference to a table using div syntax, create a fenced div with an id starting with `tbl-`, include the table followed by the caption inside the div:\n\n````markdown\n::: {#tbl-letters}\n\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\nMy Caption\n\n::: \n````\n\n\n\nYou can read more about using div syntax with tables at [Cross-Reference Div Syntax](cross-references-divs.qmd#tables).\n\n#### Subtables\n\n\nYou may want to create a composition of several sub-tables. To do this, create a div with a main identifier, then apply sub-identifiers (and optional caption text) to the contained tables. For example:\n\n``` markdown\n::: {#tbl-panel layout-ncol=2}\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\n: First Table {#tbl-first}\n\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\n: Second Table {#tbl-second}\n\nMain Caption\n:::\n\nSee @tbl-panel for details, especially @tbl-second.\n```\n\nWhich looks like this when rendered to HTML:\n\n![](/docs/authoring/images/crossref-subtable.png){fig-alt=\"Two tables side-by-side. Both tables have 3 columns and 4 rows. The table on the left is titled '(a) First table'. The table on the right is titled '(b) Second Table'. Centered underneath both tables is the text 'Table 1: Main Caption'. The text 'See tbl. 2 for details, especially tbl. 2 (b)' is aligned to the left underneath that.\"}\n\nNote that the \"Main Caption\" for the table is provided as the last block within the containing div.\n\n\n\n#### Computations\n\nYou can also cross-reference tables created from code executed via computations. To do this, add the `label` and `tbl-cap` cell options. For example:\n\n```{{r}}\n#| label: tbl-iris\n#| tbl-cap: \"Iris Data\"\n\nlibrary(knitr)\nkable(head(iris))\n```\n\n![](/docs/authoring/images/crossref-table-knitr.png){fig-alt=\"Example table output.\" fig-align=\"center\" width=\"80%\"}\n\n\n::: {.callout-tip}\n\n## Computed Captions\n\nIf you need to generate a dynamic caption, instead of using the `fig-cap` or `tbl-cap` code cell option, combine inline code with the [Cross-Reference Div Syntax](/docs/authoring/cross-references-divs.qmd#computed-captions).\n\n:::\n\n\n\nYou can also create multiple tables within a code cell and reference them as subtables. To do this, add a `tbl-subcap` option with an array of subcaptions. For example:\n\n```{{r}}\n#| label: tbl-tables\n#| tbl-cap: \"Tables\"\n#| tbl-subcap:\n#| - \"Cars\"\n#| - \"Pressure\"\n#| layout-ncol: 2\n\nlibrary(knitr)\nkable(head(cars))\nkable(head(pressure))\n```\n\n![](/docs/authoring/images/crossref-subtable-knitr.png){fig-alt=\"Two tables side-by-side. Each table has 2 columns and 8 rows. The table on the left is titled '(a) Cars'. The table on the right is titled '(b) Pressure'. Centered underneath both tables is the text 'Table 1: Tables.'\" fig-align=\"center\" width=\"80%\"}\n\nIf you'd like subtable captions that include only an identifier, e.g. \"(a)\", and not a text caption, then specify `tbl-subcap: true` rather than providing explicit subcaption text:\n\n```{{r}}\n#| label: tbl-tables\n#| tbl-cap: \"Tables\"\n#| tbl-subcap: true\n#| layout-ncol: 2\n\nlibrary(knitr)\nkable(head(cars))\nkable(head(pressure))\n```\n\n![](/docs/authoring/images/crossref-subtable-nocaption-knitr.png){fig-align=\"center\" width=\"80%\"}\n\n\n### Code Listings\n\nTo create a reference-able code block, add a `#lst-` identifier along with a `lst-cap` attribute. For example:\n\n```` markdown\n```{#lst-customers .sql lst-cap=\"Customers Query\"}\nSELECT * FROM Customers\n```\n\nThen we query the customers database (@lst-customers).\n````\n\n\nTo create a cross-reference to a code listing using div syntax, create a fenced div with an id starting with `lst-`, include the code cell followed by the caption inside the div: \n\n````markdown\n::: {#lst-customers}\n\n```{.sql}\nSELECT * FROM Customers\n```\n\nCustomers Query\n\n:::\n````\n\n\n\nYou can read more about using div syntax for code listings in [Cross-Reference Div Syntax](cross-references-divs.qmd).\n\n\nTo cross-reference code from an executable code block, add the code cell options `lst-label` and `lst-cap`. The option `lst-label` provides the cross reference identifier and must begin with the prefix `lst-` to be treated as a code listing. The value of `lst-cap` provides the caption for the code listing. For example:\n\n````{.markdown}\n```{{python}}\n#| lst-label: lst-import\n#| lst-cap: Import pyplot\n\nimport matplotlib.pyplot as plt\n```\n\n@lst-import...\n````\n\nWhen rendered, this results in the following:\n\n::: {.border .p-3}\n\n::: {#7c670c7d .cell execution_count=1}\n``` {#lst-import .python .cell-code lst-cap=\"Import pyplot\"}\nimport matplotlib.pyplot as plt\n```\n:::\n\n\n@lst-import...\n\n:::\n\nIf the code cell produces a figure or table, you can combine the `lst-` options with `label` and `fig-cap`/`tbl-cap` to create cross references to both the code and output:\n\n````{.markdown}\n```{{python}}\n#| label: fig-plot\n#| fig-cap: Figure caption\n#| lst-label: lst-plot\n#| lst-cap: Listing caption\n\nplt.plot([1,23,2,4])\nplt.show()\n```\n\nThe code in @lst-plot produces the figure in @fig-plot.\n````\n\nWhen rendered, this produces the following output:\n\n:::{.border .p-3}\n\n::: {#cell-fig-plot .cell execution_count=2}\n``` {#lst-plot .python .cell-code lst-cap=\"Listing caption\"}\nplt.plot([1,23,2,4])\nplt.show()\n```\n\n::: {.cell-output .cell-output-display}\n![Figure caption](cross-references_files/figure-html/fig-plot-output-1.png){#fig-plot width=566 height=411}\n:::\n:::\n\n\nThe code in @lst-plot produces the plot in @fig-plot.\n:::\n\n\n\n## Callouts\n\n\nTo cross-reference a callout, add an ID attribute that starts with the appropriate callout prefix (see @tbl-callout-prefixes). You can then reference the callout using the usual `@` syntax. For example, here we add the ID `#tip-example` to the callout, and then refer back to it:\n\n``` markdown\n::: {#tip-example .callout-tip}\n## Cross-Referencing a Tip\n\nAdd an ID starting with `#tip-` to reference a tip.\n:::\n\nSee @tip-example...\n```\n\nThis renders as follows:\n\n::: {.border .p-3}\n::: {#tip-example .callout-tip}\n## Cross-Referencing a Tip\n\nAdd an ID starting with `#tip-` to reference a tip.\n:::\n\nSee @tip-example...\n:::\n\nThe prefixes for each type of callout are:\n\n| Callout Type | Prefix |\n|--------------|---------|\n| `note` | `#nte-` |\n| `tip` | `#tip-` |\n| `warning` | `#wrn-` |\n| `important` | `#imp-` |\n| `caution` | `#cau-` |\n\n: Prefixes for callout cross-references {#tbl-callout-prefixes}\n\n\n\n## Theorems and Proofs\n\nTheorems are commonly used in articles and books in mathematics. To include a reference-able theorem, create a div with a `#thm-` label (or one of other theorem-type labels described below). You also need to specify a theorem name either via the first heading in the block. You can include any content you like within the div. For example:\n\n``` markdown\n::: {#thm-line}\n\n## Line\n\nThe equation of any straight line, called a linear equation, can be written as:\n\n$$\ny = mx + b\n$$\n:::\n\nSee @thm-line.\n```\n\n![](images/crossref-theorem.png){fig-alt=\"A snippet of a LaTeX document. The first line reads: 'Thereom 1 (Line) The equation of any straight line, called a linear equation, can be written as:' Cenetered on a separate line is the equation 'y = mx + b'. The text 'See thm. 1' is aligned to the left underneath that.\"}\n\nFor LaTeX output, the [amsthm](https://ctan.org/pkg/amsthm?lang=en) package is used for typesetting theorems. For other formats an appropriate treatment is used (the above is an example of HTML output).\n\nThere are a number of theorem variations supported, each with their own label prefix:\n\n| **Label Prefix** | **Printed Name** | **LaTeX Environment** |\n|------------------|------------------|-----------------------|\n| `#thm-` | Theorem | theorem |\n| `#lem-` | Lemma | lemma |\n| `#cor-` | Corollary | corollary |\n| `#prp-` | Proposition | proposition |\n| `#cnj-` | Conjecture | conjecture |\n| `#def-` | Definition | definition |\n| `#exm-` | Example | example |\n| `#exr-` | Exercise | exercise |\n| `#sol-` | Solution | solution |\n| `#rem-` | Remark | remark |\n\nThe `proof` environment receives similar typesetting as theorems, however it is not numbered (and therefore cannot be cross-referenced). To create a proof add the `.proof` class to a div:\n\n``` markdown\n::: {.proof}\nBy induction.\n:::\n```\n\nAs with theorems you can optionally include a heading as the first element of the div (or a `name` attribute) to give the environment a caption for typesetting (this typically appears in parentheses after the environment title).\n\nFor LaTeX output the [amsthm](https://ctan.org/pkg/amsthm?lang=en) package is used to typeset these environments. For other formats a similar treatment is used, but you can further customizing this using CSS.\n\n## Equations\n\nProvide an `#eq-` label immediately after an equation to make it referenceable. For example:\n\n``` markdown\nBlack-Scholes (@eq-black-scholes) is a mathematical model that seeks to explain the behavior of financial derivatives, most commonly options:\n\n$$\n\\frac{\\partial \\mathrm C}{ \\partial \\mathrm t } + \\frac{1}{2}\\sigma^{2} \\mathrm S^{2}\n\\frac{\\partial^{2} \\mathrm C}{\\partial \\mathrm S^2}\n + \\mathrm r \\mathrm S \\frac{\\partial \\mathrm C}{\\partial \\mathrm S}\\ =\n \\mathrm r \\mathrm C \n$$ {#eq-black-scholes}\n```\n\nBlack-Scholes (@eq-black-scholes) is a mathematical model that seeks to explain the behavior of financial derivatives, most commonly options:\n\n$$\n\\frac{\\partial \\mathrm C}{ \\partial \\mathrm t } + \\frac{1}{2}\\sigma^{2} \\mathrm S^{2}\n\\frac{\\partial^{2} \\mathrm C}{\\partial \\mathrm S^2}\n + \\mathrm r \\mathrm S \\frac{\\partial \\mathrm C}{\\partial \\mathrm S}\\ =\n \\mathrm r \\mathrm C \n$$ {#eq-black-scholes}\n\nNote that the equation number is included (via `\\qquad`) in the right margin of the equation.\n\n## Sections\n\nTo reference a section, add a `#sec-` identifier to any heading. For example:\n\n``` markdown\n## Introduction {#sec-introduction}\n\nSee @sec-introduction for additional context.\n```\n\nNote that when using section cross-references, you will also need to enable the `number-sections` option (so that section numbering is visible to readers). For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nnumber-sections: true\n---\n```\n\n", + "markdown": "---\ntitle: \"Cross References\"\nformat: html\ntoc-expand: 2\ntoc-depth: 4\naliases: \n - /docs/authoring/cross-references-listings.html\n - /docs/authoring/cross-references-callouts.html\n---\n\n## Overview\n\nCross-references make it easier for readers to navigate your document by providing numbered references and hyperlinks to various entities like figures and tables. Every cross-referenceable entity requires a label---a unique identifier prefixed with a cross-reference type e.g. `#fig-element`. For example, this is a cross-referenceable figure:\n\n``` markdown\n![Elephant](elephant.png){#fig-elephant}\n```\n\nThe presence of the label (`#fig-elephant`) makes this figure referenceable. This enables you to use the following syntax to refer to it elsewhere in the document:\n\n``` markdown\nSee @fig-elephant for an illustration.\n```\n\nHere is what this would look like rendered to HTML:\n\n![](images/crossref-figure.png){.border fig-alt=\"A line drawing of an elephant. The caption 'Figure 1: Elephant' is centered beneath it.\" width=\"100%\"}\n\nNote that cross reference identifiers must start with their type (e.g. `fig-` or `tbl-`). So the identifier `#fig-elephant` is valid for a cross-reference but the identifiers `#elephant` and `#elephant-fig` are not.\n\n::: {#reserved-prefixes}\n::: {.callout-warning}\n\n## Reserved Prefixes \n\nUnless you are creating a cross-reference, avoid using the reserved cross-reference prefixes for code cell labels (e.g. set using the `label` code cell option) and element IDs (set using a `#` in an attribute). \n \nThe reserved prefixes are: `fig`, `tbl`, `lst`, `tip`, `nte`, `wrn`, `imp`, `cau`, `thm`, `lem`, `cor`, `prp`, `cnj`, `def`, `exm`, `exr`, `sol`, `rem`, `alg`, `eq`, `sec`.\n\nAlso avoid using underscores (`_`) in labels and IDs as this can cause problems when rendering to PDF with LaTeX.\n\n:::\n:::\n\nQuarto enables you to create cross-references to figures, tables, equations, sections, code listings, theorems, proofs, and more. Cross references can also be applied to dynamic output from Knitr and Jupyter. \n\nOn this page you'll learn:\n\n* Different ways to use the `@` syntax to create [References](#references).\n* How to add [Lists](#lists) of references in LaTeX / PDF output.\n\nThen, we enumerate the syntax for the different types of elements you might want to reference:\n\n* [Floats](#floats): [Figures](#figures), [Tables](#tables) and [Code Listings](#code-listings)\n* Blocks: [Callouts](#callouts), [Theorems and Proofs](#theorems-and-proofs) and [Equations](#equations) \n* [Sections](#sections)\n\nThere are options available that control the text used for titles and references. For example, you could change \"Figure 1\" to read \"Fig 1\" or \"fig. 1\". See the [options documentation](cross-reference-options.qmd) for details on how to customize the text used for cross-references.\n\n## References\n\nThe examples on this page all use the default syntax for inline references (e.g. `@fig-elephant`), which results in the reference text \"Figure 1\", \"Table 1\", etc.\n\nYou can customize the appearance of inline references by either changing the syntax of the inline reference or by setting options. Here are the various ways to compose a cross-reference and their resulting output:\n\n| Type | Syntax | Output |\n|---------------|-----------------------|----------|\n| Default | `@fig-elephant` | Figure 1 |\n| Capitalized | `@Fig-elephant` | Figure 1 |\n| Custom Prefix | `[Fig @fig-elephant]` | Fig 1 |\n| No Prefix | `[-@fig-elephant]` | 1 |\n\nNote that the capitalized syntax makes no difference for the default output, but would indeed capitalize the first letter if the default prefix had been changed via an [option](cross-reference-options.qmd#references) to use lower case (e.g. \"fig.\").\n\nThese syntax variations work not only for Figures, but for all cross-referenceable elements in Quarto such as Tables, Equations, Theorems, and so on.\n\nYou can also group cross-references using the following syntax:\n\n``` markdown\nAs illustrated in [@fig-elephant; @fig-panther; @fig-rabbit].\n```\n\nThere are a number of options that can be used to further customize the treatment of cross-references. See the guide on [Cross Reference Options](cross-reference-options.qmd#references) for additional details.\n\n## Lists\n\nFor LaTeX / PDF output, you can use the raw LaTeX commands `\\listoffigures`, `\\listoftables` and `\\listoflistings` to produce listings of all figures, tables, etc. within a document. You can use the `lof-title`, `lot-title`, and `lol-title` crossref options to customize the title of the listing.\n\nFor example:\n\n``` markdown\n---\ntitle: \"My Document\"\ncrossref:\n lof-title: \"List of Figures\"\nformat: pdf\n---\n\n\\listoffigures\n```\n\nNote that the default titles for the lists use the form displayed above (i.e. \"List of \\\").\n\n## Floats\n\n[Figures](#figures), [tables](#tables) and [code listings](#code-listings) are known as \"float\" cross-references. Floats can appear in the rendered document at locations other than where they are defined, i.e. they float, and usually have captions. \n\nIn addition to the compact syntax for the most common uses of float cross-references, you can also define float cross-references with a div syntax. Use the div syntax when you need more flexibility in the content of your cross-reference, for example, to have a [video](cross-references-divs.qmd#videos) be referenced as a figure. Basic examples of the div syntax are included in the sections below, but you can find more complicated examples in [Cross-Reference Div Syntax](cross-references-divs.qmd). \n\nYou can also define custom types of float cross-reference to reference elements beyond figures, tables and code listings. Read more at [Custom Float Cross-References](cross-references-custom.qmd).\n\n\n### Figures\n\nAs described on the Overview above, this is the markdown used to create a cross-referenceable figure and then refer to it:\n\n``` markdown\n![Elephant](elephant.png){#fig-elephant}\n\nSee @fig-elephant for an illustration.\n```\n\nNote again that cross-reference identifiers must start with their type (e.g. `#fig-`) and that cross-reference identifiers must be all lower case.\n\nTo create a cross-reference to a figure using div syntax, create a fenced div with an id starting with `fig-`, include the image followed by the caption inside the div:\n\n````markdown\n::: {#fig-elephant}\n\n![](elephant.png)\n\nAn Elephant\n:::\n````\n\n\nYou can read about using div syntax with figures at [Cross-Reference Div Syntax](cross-references-divs.qmd#figures).\n\n#### Subfigures\n\nYou may want to create a figure composed of multiple subfigures. To do this, enclose the figures in a div (with its own label and caption) and give each subfigure its own label and (optionally) caption. You can then refer to either the entire figure in a reference or a single subfigure:\n\n``` markdown\n::: {#fig-elephants layout-ncol=2}\n\n![Surus](surus.png){#fig-surus}\n\n![Hanno](hanno.png){#fig-hanno}\n\nFamous Elephants\n:::\n\nSee @fig-elephants for examples. In particular, @fig-hanno.\n```\n\nHere is what this looks like when rendered as HTML:\n\n![](images/crossref-subfigures.png){.preview-image .border fig-alt=\"An artistic rendition of Surus, Hannibal's last war elephant, is on the left. Underneath this picture is the caption '(a) Surus.' On the right is a line drawing of Hanno, a famous elephant. Underneath this picture is the caption '(b) Hanno.' The words 'Figure 1: Famous elephants' are centered beneath both pictures. The text 'See fig. 1 for examples. In particular, fig. 1(b).' is underneath this text and is aligned to the left.\" width=\"100%\"}\n\nNote that we also used the `layout-ncol` attribute to specify a two-column layout. See the article on [Figures](figures.qmd) for more details on laying out panels of figures.\n\n#### Computations\n\nFigures produced by Jupyter and Knitr can also be cross-referenced. To do this, add a `label` and `fig-cap` option at the top of the code block. For example:\n\n::: panel-tabset\n##### Jupyter\n\n ```{{python}}\n #| label: fig-plot\n #| fig-cap: \"Plot\"\n\n import matplotlib.pyplot as plt\n plt.plot([1,23,2,4])\n plt.show()\n ```\n\n For example, see @fig-plot.\n\n![](images/crossref-figure-jupyter.png){fig-alt=\"A line plot with the label 'Figure 1: Plot' centered underneath it. The text 'For example, see fig. 1' is underneath this label and aligned to the left.\"}\n\n##### Knitr\n\n ```{{r}}\n #| label: fig-plot\n #| fig-cap: \"Plot\"\n\n plot(cars)\n ```\n\n For example, see @fig-plot.\n\n![](images/crossref-figure-r.png){fig-alt=\"A scatter plot of speed versus distance for the `cars` dataset. The label 'Figure 1: Plot' is centered beneath it. The text 'For example, see fig. 1' is aligned to the left underneath that.\"}\n:::\n\n::: {.callout-tip}\n\n## Computed Captions\n\nIf you need to generate a dynamic caption, instead of using the `fig-cap` or `tbl-cap` code cell option, combine inline code with the [Cross-Reference Div Syntax](/docs/authoring/cross-references-divs.qmd#computed-captions).\n\n:::\n\n\nYou can also create multiple figures within a code cell and reference them as subfigures. To do this use `fig-cap` for the main caption, and `fig-subcap` to provide an array of subcaptions. For example:\n\n ```{{python}}\n #| label: fig-plots\n #| fig-cap: \"Plots\" \n #| fig-subcap:\n #| - \"Plot 1\"\n #| - \"Plot 2\" \n #| layout-ncol: 2\n\n import matplotlib.pyplot as plt\n plt.plot([1,23,2,4])\n plt.show()\n\n plt.plot([8,65,23,90])\n plt.show()\n ```\n\n See @fig-plots for examples. In particular, @fig-plots-2.\n\n![](images/crossref-subfigures-jupyter.png){fig-alt=\"Two line plots side-by-side. The plot on the left has the caption '(a) Plot 1' centered underneath it. The plot on the right has the caption '(b) Plot 2' centered underneath it. The text 'Figure 1: Plots' is centered underneath both of these plots. The text 'See fig. 1 for examples. In particular, fig. 1(b)' is aligned to the left underneath that.\"}\n\nNote that subfigure reference labels are created automatically based on the main chunk label (e.g. `@fig-plots-1`, `@fig-plots-2`, etc.).\n\nIf you'd like subfigure captions that include only an identifier, e.g. \"(a)\", and not a text caption, then specify `fig-subcap: true` rather than providing explicit subcaption text:\n\n```{{python}}\n#| label: fig-plots\n#| fig-cap: \"Plots\" \n#| fig-subcap: true\n#| layout-ncol: 2\n```\n\n### Tables\n\n\n\nFor markdown tables, add a caption below the table, then include a `#tbl-` label in braces at the end of the caption. For example:\n\n``` markdown\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\n: My Caption {#tbl-letters}\n\nSee @tbl-letters.\n```\n\nWhich looks like this when rendered to HTML:\n\n![](images/crossref-table.png){fig-alt=\"A table with 3 columns and four rows. The text 'Table 1: My Caption' is above the header column. The text 'See tbl. 1' is aligned to the left underneath the last column.\" width=\"500\"}\n\n\n::: callout-important\n## Label Prefix\n\nIn order for a table to be cross-referenceable, its label must start with the `tbl-` prefix.\n:::\n\nTo create a cross-reference to a table using div syntax, create a fenced div with an id starting with `tbl-`, include the table followed by the caption inside the div:\n\n````markdown\n::: {#tbl-letters}\n\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\nMy Caption\n\n::: \n````\n\n\nYou can read more about using div syntax with tables at [Cross-Reference Div Syntax](cross-references-divs.qmd#tables).\n\n#### Subtables\n\nYou may want to create a composition of several sub-tables. To do this, create a div with a main identifier, then apply sub-identifiers (and optional caption text) to the contained tables. For example:\n\n``` markdown\n::: {#tbl-panel layout-ncol=2}\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\n: First Table {#tbl-first}\n\n| Col1 | Col2 | Col3 |\n|------|------|------|\n| A | B | C |\n| E | F | G |\n| A | G | G |\n\n: Second Table {#tbl-second}\n\nMain Caption\n:::\n\nSee @tbl-panel for details, especially @tbl-second.\n```\n\nWhich looks like this when rendered to HTML:\n\n![](/docs/authoring/images/crossref-subtable.png){fig-alt=\"Two tables side-by-side. Both tables have 3 columns and 4 rows. The table on the left is titled '(a) First table'. The table on the right is titled '(b) Second Table'. Centered underneath both tables is the text 'Table 1: Main Caption'. The text 'See tbl. 2 for details, especially tbl. 2 (b)' is aligned to the left underneath that.\"}\n\nNote that the \"Main Caption\" for the table is provided as the last block within the containing div.\n\n\n#### Computations\n\nYou can also cross-reference tables created from code executed via computations. To do this, add the `label` and `tbl-cap` cell options. For example:\n\n```{{r}}\n#| label: tbl-iris\n#| tbl-cap: \"Iris Data\"\n\nlibrary(knitr)\nkable(head(iris))\n```\n\n![](/docs/authoring/images/crossref-table-knitr.png){fig-alt=\"Example table output.\" fig-align=\"center\" width=\"80%\"}\n\n::: {.callout-tip}\n\n## Computed Captions\n\nIf you need to generate a dynamic caption, instead of using the `fig-cap` or `tbl-cap` code cell option, combine inline code with the [Cross-Reference Div Syntax](/docs/authoring/cross-references-divs.qmd#computed-captions).\n\n:::\n\n\nYou can also create multiple tables within a code cell and reference them as subtables. To do this, add a `tbl-subcap` option with an array of subcaptions. For example:\n\n```{{r}}\n#| label: tbl-tables\n#| tbl-cap: \"Tables\"\n#| tbl-subcap:\n#| - \"Cars\"\n#| - \"Pressure\"\n#| layout-ncol: 2\n\nlibrary(knitr)\nkable(head(cars))\nkable(head(pressure))\n```\n\n![](/docs/authoring/images/crossref-subtable-knitr.png){fig-alt=\"Two tables side-by-side. Each table has 2 columns and 8 rows. The table on the left is titled '(a) Cars'. The table on the right is titled '(b) Pressure'. Centered underneath both tables is the text 'Table 1: Tables.'\" fig-align=\"center\" width=\"80%\"}\n\nIf you'd like subtable captions that include only an identifier, e.g. \"(a)\", and not a text caption, then specify `tbl-subcap: true` rather than providing explicit subcaption text:\n\n```{{r}}\n#| label: tbl-tables\n#| tbl-cap: \"Tables\"\n#| tbl-subcap: true\n#| layout-ncol: 2\n\nlibrary(knitr)\nkable(head(cars))\nkable(head(pressure))\n```\n\n![](/docs/authoring/images/crossref-subtable-nocaption-knitr.png){fig-align=\"center\" width=\"80%\"}\n\n\n### Code Listings\n\nTo create a reference-able code block, add a `#lst-` identifier along with a `lst-cap` attribute. For example:\n\n```` markdown\n```{#lst-customers .sql lst-cap=\"Customers Query\"}\nSELECT * FROM Customers\n```\n\nThen we query the customers database (@lst-customers).\n````\n\nTo create a cross-reference to a code listing using div syntax, create a fenced div with an id starting with `lst-`, include the code cell followed by the caption inside the div: \n\n````markdown\n::: {#lst-customers}\n\n```{.sql}\nSELECT * FROM Customers\n```\n\nCustomers Query\n\n:::\n````\n\n\nYou can read more about using div syntax for code listings in [Cross-Reference Div Syntax](cross-references-divs.qmd).\n\nTo cross-reference code from an executable code block, add the code cell options `lst-label` and `lst-cap`. The option `lst-label` provides the cross reference identifier and must begin with the prefix `lst-` to be treated as a code listing. The value of `lst-cap` provides the caption for the code listing. For example:\n\n````{.markdown}\n```{{python}}\n#| lst-label: lst-import\n#| lst-cap: Import pyplot\n\nimport matplotlib.pyplot as plt\n```\n\n@lst-import...\n````\n\nWhen rendered, this results in the following:\n\n::: {.border .p-3}\n\n::: {#68913ba5 .cell execution_count=1}\n``` {#lst-import .python .cell-code lst-cap=\"Import pyplot\"}\nimport matplotlib.pyplot as plt\n```\n:::\n\n\n@lst-import...\n\n:::\n\nIf the code cell produces a figure or table, you can combine the `lst-` options with `label` and `fig-cap`/`tbl-cap` to create cross references to both the code and output:\n\n````{.markdown}\n```{{python}}\n#| label: fig-plot\n#| fig-cap: Figure caption\n#| lst-label: lst-plot\n#| lst-cap: Listing caption\n\nplt.plot([1,23,2,4])\nplt.show()\n```\n\nThe code in @lst-plot produces the figure in @fig-plot.\n````\n\nWhen rendered, this produces the following output:\n\n:::{.border .p-3}\n\n::: {#cell-fig-plot .cell execution_count=2}\n``` {#lst-plot .python .cell-code lst-cap=\"Listing caption\"}\nplt.plot([1,23,2,4])\nplt.show()\n```\n\n::: {.cell-output .cell-output-display}\n![Figure caption](cross-references_files/figure-html/fig-plot-output-1.png){#fig-plot width=566 height=411}\n:::\n:::\n\n\nThe code in @lst-plot produces the plot in @fig-plot.\n:::\n\n\n## Callouts\n\nTo cross-reference a callout, add an ID attribute that starts with the appropriate callout prefix (see @tbl-callout-prefixes). You can then reference the callout using the usual `@` syntax. For example, here we add the ID `#tip-example` to the callout, and then refer back to it:\n\n``` markdown\n::: {#tip-example .callout-tip}\n## Cross-Referencing a Tip\n\nAdd an ID starting with `#tip-` to reference a tip.\n:::\n\nSee @tip-example...\n```\n\nThis renders as follows:\n\n::: {.border .p-3}\n::: {#tip-example .callout-tip}\n## Cross-Referencing a Tip\n\nAdd an ID starting with `#tip-` to reference a tip.\n:::\n\nSee @tip-example...\n:::\n\nThe prefixes for each type of callout are:\n\n| Callout Type | Prefix |\n|--------------|---------|\n| `note` | `#nte-` |\n| `tip` | `#tip-` |\n| `warning` | `#wrn-` |\n| `important` | `#imp-` |\n| `caution` | `#cau-` |\n\n: Prefixes for callout cross-references {#tbl-callout-prefixes}\n\n\n## Theorems and Proofs\n\nTheorems are commonly used in articles and books in mathematics. To include a reference-able theorem, create a div with a `#thm-` label (or one of other theorem-type labels described below). You also need to specify a theorem name either via the first heading in the block. You can include any content you like within the div. For example:\n\n``` markdown\n::: {#thm-line}\n\n## Line\n\nThe equation of any straight line, called a linear equation, can be written as:\n\n$$\ny = mx + b\n$$\n:::\n\nSee @thm-line.\n```\n\n![](images/crossref-theorem.png){fig-alt=\"A snippet of a LaTeX document. The first line reads: 'Thereom 1 (Line) The equation of any straight line, called a linear equation, can be written as:' Cenetered on a separate line is the equation 'y = mx + b'. The text 'See thm. 1' is aligned to the left underneath that.\"}\n\nFor LaTeX output, the [amsthm](https://ctan.org/pkg/amsthm?lang=en) package is used for typesetting theorems. For other formats an appropriate treatment is used (the above is an example of HTML output).\n\nThere are a number of theorem variations supported, each with their own label prefix:\n\n| **Label Prefix** | **Printed Name** | **LaTeX Environment** |\n|------------------|------------------|-----------------------|\n| `#thm-` | Theorem | theorem |\n| `#lem-` | Lemma | lemma |\n| `#cor-` | Corollary | corollary |\n| `#prp-` | Proposition | proposition |\n| `#cnj-` | Conjecture | conjecture |\n| `#def-` | Definition | definition |\n| `#exm-` | Example | example |\n| `#exr-` | Exercise | exercise |\n| `#sol-` | Solution | solution |\n| `#rem-` | Remark | remark |\n| `#alg-` | Algorithm | algorithm |\n\nThe `proof` environment receives similar typesetting as theorems, however it is not numbered (and therefore cannot be cross-referenced). To create a proof add the `.proof` class to a div:\n\n``` markdown\n::: {.proof}\nBy induction.\n:::\n```\n\nAs with theorems you can optionally include a heading as the first element of the div (or a `name` attribute) to give the environment a caption for typesetting (this typically appears in parentheses after the environment title).\n\nFor LaTeX output the [amsthm](https://ctan.org/pkg/amsthm?lang=en) package is used to typeset these environments. For other formats a similar treatment is used, but you can further customizing this using CSS.\n\n## Equations\n\nProvide an `#eq-` label immediately after an equation to make it referenceable. For example:\n\n``` markdown\nBlack-Scholes (@eq-black-scholes) is a mathematical model that seeks to explain the behavior of financial derivatives, most commonly options:\n\n$$\n\\frac{\\partial \\mathrm C}{ \\partial \\mathrm t } + \\frac{1}{2}\\sigma^{2} \\mathrm S^{2}\n\\frac{\\partial^{2} \\mathrm C}{\\partial \\mathrm S^2}\n + \\mathrm r \\mathrm S \\frac{\\partial \\mathrm C}{\\partial \\mathrm S}\\ =\n \\mathrm r \\mathrm C \n$$ {#eq-black-scholes}\n```\n\nBlack-Scholes (@eq-black-scholes) is a mathematical model that seeks to explain the behavior of financial derivatives, most commonly options:\n\n$$\n\\frac{\\partial \\mathrm C}{ \\partial \\mathrm t } + \\frac{1}{2}\\sigma^{2} \\mathrm S^{2}\n\\frac{\\partial^{2} \\mathrm C}{\\partial \\mathrm S^2}\n + \\mathrm r \\mathrm S \\frac{\\partial \\mathrm C}{\\partial \\mathrm S}\\ =\n \\mathrm r \\mathrm C \n$$ {#eq-black-scholes}\n\nNote that the equation number is included (via `\\qquad`) in the right margin of the equation.\n\n## Sections\n\nTo reference a section, add a `#sec-` identifier to any heading. For example:\n\n``` markdown\n## Introduction {#sec-introduction}\n\nSee @sec-introduction for additional context.\n```\n\nNote that when using section cross-references, you will also need to enable the `number-sections` option (so that section numbering is visible to readers). For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nnumber-sections: true\n---\n```\n\n", "supporting": [ "cross-references_files" ], diff --git a/_freeze/docs/authoring/cross-references/figure-html/fig-plot-output-1.png b/_freeze/docs/authoring/cross-references/figure-html/fig-plot-output-1.png index db01a62e33..5e48f0a773 100644 Binary files a/_freeze/docs/authoring/cross-references/figure-html/fig-plot-output-1.png and b/_freeze/docs/authoring/cross-references/figure-html/fig-plot-output-1.png differ diff --git a/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/execute-results/html.json b/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/execute-results/html.json new file mode 100644 index 0000000000..f6c2cf0228 --- /dev/null +++ b/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/execute-results/html.json @@ -0,0 +1,17 @@ +{ + "hash": "6aca55a2acf2260b85bc3cee1ab1f297", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: Quarto 1.7 \ndescription: |\n Quarto 1.7 brings big improvements to dark mode along with updates to Typst, Pandoc, a new `version` shortcode, and improvements to the `julia` engine.\ncategories:\n - Quarto 1.7\n - Releases\nauthor: Charlotte Wickham\ndate: \"2025-04-28\"\ndraft: false\nimage: thumbnail-1.7.jpeg\nimage-alt: \"Quarto 1.7: half the Quarto logo is light on dark, the other half dark on light\"\n---\n\nQuarto 1.7 is out! You can get the current release from the [download page](/docs/download/index.qmd).\n\nWe are especially enthusiastic about the improvements 1.7 brings to dark mode: you can now specify light and dark themes via brand, map computational outputs to themes, and have your website theme follow your viewer's preference.\nTo celebrate these changes, this site, [quarto.org](/), now has a light and dark mode.\nToggle the switch in the navigation bar (``{=html}) to see the difference.\n\nYou can read about these improvements and some other highlights below. You can find all the changes in this version in the [Release Notes](/docs/download/changelog/1.7/).\n\n## Dark Mode Improvements\n\n### Specify light and dark themes via **brand.yml**\n\nYou can now specify a light and dark brand.\nFor example, at a project-level you can provide two brand files:\n\n```{.yaml filename=\"_quarto.yml\"}\nbrand:\n light: light-brand.yml\n dark: dark-brand.yml\n```\n\nStandalone HTML pages, websites, and dashboards will gain a light switch toggle allowing viewers to switch between the light and dark themes. \n\n::: {layout-ncol=2}\n\n![`light` brand](light.png){fig-alt=\"Screenshot of a webpage with a light blue body and charcoal text. A switch toggle in the navbar is 'off'.\"}\n\n![`dark` brand](dark.png){fig-alt=\"Screenshot of a webpage with a dark charcoal body and light blue text. A switch toggle in the navbar is 'on'.\"}\n\n:::\n\n\nBy default Typst documents will use the light brand, but you can set the `brand-mode` option to use the dark brand instead:\n\n```{.yaml filename=\"document.qmd\"}\n---\nformat:\n typst:\n brand-mode: dark\n---\n```\n\nRead about other ways to set a light and dark brand in [Guide > Brand](/docs/authoring/brand.qmd#dark-brand).\n\n\n### Map computational outputs to themes\n\nA new code cell option, `renderings`, allows you to indicate which computational outputs should be displayed in light and dark mode. \nCreate light and dark versions of your outputs in a single code cell, \nand add the option `renderings` to specify the order of the outputs.\nFor example, this cell creates a `light` version of a plot, \nthen a `dark` version:\n\n\n::: {.cell renderings='[\"light\",\"dark\"]'}\n\n````{.cell-code}\n```{{r}}\n#| renderings: [light, dark]\nplot(1:10) # Shown in `light` mode\n\npar(bg = \"#000000\", fg = \"#FFFFFF\", col.axis = \"#FFFFFF\")\nplot(1:10) # Shown in `dark` mode\n```\n````\n\n::: {.cell-output-display}\n![](index_files/figure-html/unnamed-chunk-1-1.png){width=672}\n:::\n\n::: {.cell-output-display}\n![](index_files/figure-html/unnamed-chunk-1-2.png){width=672}\n:::\n:::\n\n\nBoth outputs are produced, but you'll only see the one corresponding to the current state of the light switch.\nToggle the switch in the navigation bar to see the image change to reflect the theme.\n\n### Respect user color scheme\n\nSet the new `html` format option `respect-user-color-scheme` to `true` if you would like your site to honor the viewerโ€™s operating system or browser preference for light or dark mode:\n\n```{.yaml filename=\"_quarto.yml\"}\nformat:\n html:\n respect-user-color-scheme: true\n```\n\n## Other Highlights\n\n- Typst updated to 0.13.0\n- Pandoc updated to 3.6.3\n- New [`version` shortcode](/docs/authoring/version.qmd) to insert the version of Quarto used to build your document:\n \n ::: {layout-ncol=2 layout-valign=\"center\"}\n \n ```{.markdown shortcodes=\"false\"}\n Rendered with Quarto {{< version >}}\n ```\n ::: {.border .p-1}\n Rendered with Quarto {{< version >}}\n :::\n\n :::\n\n- Updated LaTeX and Beamer template partials:\n\n - [LaTeX partials](/docs/journals/templates.html#latex-partials)\n - [Beamer partials](/docs/journals/templates.html#beamer-partials)\n\n These changes reflect the updates made in Pandoc 3.5 to separate the LaTeX and Beamer document templates and introduce some additional partials for both. \n If you have custom formats that provide custom templates or partials, you may need to update them to work with the new partials. \n\n- Improvements to the `julia` engine: \n - [`juliaup` integration](/docs/computations/julia.qmd#juliaup-integration): Use specific versions of Julia in your notebooks.\n \n - [R and Python support](/docs/computations/julia.qmd#r-and-python-support): Include `{r}` and `{python}` executable code cells via the RCall and PythonCall packages.\n \n - [Caching](/docs/computations/julia.qmd#caching-julia): Save time rendering long-running notebooks by caching results.\n \n - [Revise.jl integration](/docs/computations/julia.qmd#revise.jl-integration): Automatically update function definitions in Julia sessions.\n\n\n\n## Acknowledgements\n\nWe'd like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests:\n\n[AndreasThinks](https://github.com/AndreasThinks), \n[ArthurData](https://github.com/ArthurData), \n[BrendonChau](https://github.com/BrendonChau), \n[DanStuder](https://github.com/DanStuder), \n[DavidFirth](https://github.com/DavidFirth), \n[Eli-78-fas](https://github.com/Eli-78-fas), \n[EllaKaye](https://github.com/EllaKaye), \n[EmilHvitfeldt](https://github.com/EmilHvitfeldt), \n[EvoArt](https://github.com/EvoArt), \n[FMKerckhof](https://github.com/FMKerckhof), \n[FrankwaP](https://github.com/FrankwaP), \n[JanPalasek](https://github.com/JanPalasek), \n[Jocarnail](https://github.com/Jocarnail), \n[MHellmund](https://github.com/MHellmund), \n[MichaelHatherly](https://github.com/MichaelHatherly), \n[Noghpu](https://github.com/Noghpu), \n[PeneLoopy](https://github.com/PeneLoopy), \n[Rafnuss](https://github.com/Rafnuss), \n[SergeCroise](https://github.com/SergeCroise), \n[TonyFly3000](https://github.com/TonyFly3000), \n[actuaristai](https://github.com/actuaristai), \n[alex-r-bigelow](https://github.com/alex-r-bigelow), \n[andrewheiss](https://github.com/andrewheiss), \n[ant-durrant](https://github.com/ant-durrant), \n[antoine4ucsd](https://github.com/antoine4ucsd), \n[arnaudgallou](https://github.com/arnaudgallou), \n[aronatkins](https://github.com/aronatkins), \n[arthurgailes](https://github.com/arthurgailes), \n[bkowshik](https://github.com/bkowshik), \n[boshek](https://github.com/boshek), \n[cbrnr](https://github.com/cbrnr), \n[cl-roberts](https://github.com/cl-roberts), \n[cmadland](https://github.com/cmadland), \n[coatless](https://github.com/coatless), \n[deepayan](https://github.com/deepayan), \n[devmcp](https://github.com/devmcp), \n[dhimmel](https://github.com/dhimmel), \n[dkapitan](https://github.com/dkapitan), \n[dmenne](https://github.com/dmenne), \n[eamcvey](https://github.com/eamcvey), \n[edavidaja](https://github.com/edavidaja), \n[fredguth](https://github.com/fredguth), \n[fuhrmanator](https://github.com/fuhrmanator), \n[gadenbuie](https://github.com/gadenbuie), \n[github-actions[bot]](https://github.com/apps/github-actions), \n[glin](https://github.com/glin), \n[gwbrck](https://github.com/gwbrck), \n[hchulkim](https://github.com/hchulkim), \n[hguturu](https://github.com/hguturu), \n[hturner](https://github.com/hturner), \n[ihrke](https://github.com/ihrke), \n[jdutant](https://github.com/jdutant), \n[jenslaufer](https://github.com/jenslaufer), \n[jkrumbiegel](https://github.com/jkrumbiegel), \n[jmgirard](https://github.com/jmgirard), \n[joelostblom](https://github.com/joelostblom), \n[kandolfp](https://github.com/kandolfp), \n[kapsner](https://github.com/kapsner), \n[kazuyanagimoto](https://github.com/kazuyanagimoto), \n[kdheepak](https://github.com/kdheepak), \n[kingo55](https://github.com/kingo55), \n[knuesel](https://github.com/knuesel), \n[kubu4](https://github.com/kubu4), \n[kv9898](https://github.com/kv9898), \n[kylie-foster](https://github.com/kylie-foster), \n[loneguardian](https://github.com/loneguardian), \n[lwjohnst86](https://github.com/lwjohnst86), \n[ma2048](https://github.com/ma2048), \n[markjholmes](https://github.com/markjholmes), \n[maurosilber](https://github.com/maurosilber), \n[mipmip](https://github.com/mipmip), \n[mroavi](https://github.com/mroavi), \n[mroberts1](https://github.com/mroberts1), \n[msh855](https://github.com/msh855), \n[mvuorre](https://github.com/mvuorre), \n[nathanj3](https://github.com/nathanj3), \n[odysseu](https://github.com/odysseu), \n[parmsam](https://github.com/parmsam), \n[peter-gy](https://github.com/peter-gy), \n[pvelayudhan](https://github.com/pvelayudhan), \n[raffaem](https://github.com/raffaem), \n[robmcd](https://github.com/robmcd), \n[ryanzomorrodi](https://github.com/ryanzomorrodi), \n[stragu](https://github.com/stragu), \n[sun123zxy](https://github.com/sun123zxy), \n[t-kalinowski](https://github.com/t-kalinowski), \n[temospena](https://github.com/temospena), \n[tjni](https://github.com/tjni), \n[torven-schalk](https://github.com/torven-schalk), \n[turcotte](https://github.com/turcotte), \n[wenyaoliu](https://github.com/wenyaoliu), \n[yhkee0404](https://github.com/yhkee0404).\n\n", + "supporting": [ + "index_files" + ], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/figure-html/unnamed-chunk-1-1.png b/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/figure-html/unnamed-chunk-1-1.png new file mode 100644 index 0000000000..73244bdd73 Binary files /dev/null and b/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/figure-html/unnamed-chunk-1-1.png differ diff --git a/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/figure-html/unnamed-chunk-1-2.png b/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/figure-html/unnamed-chunk-1-2.png new file mode 100644 index 0000000000..2b618d785b Binary files /dev/null and b/_freeze/docs/blog/posts/2025-04-28-1.7-release/index/figure-html/unnamed-chunk-1-2.png differ diff --git a/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/execute-results/html.json b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/execute-results/html.json new file mode 100644 index 0000000000..50ca3ae19f --- /dev/null +++ b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/execute-results/html.json @@ -0,0 +1,17 @@ +{ + "hash": "eaf4705019cee9d3d958f8443a2eef44", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: Quarto 1.7 \ndescription: |\n Quarto 1.7 brings big improvements to dark mode along with updates to Typst, Pandoc, a new `version` shortcode, and improvements to the `julia` engine.\ncategories:\n - Quarto 1.7\n - Releases\nauthor: Charlotte Wickham\ndate: \"xx/xx/2025\"\ndraft: false\nimage: thumbnail-1.7.jpeg\nimage-alt: \"Quarto 1.7: half the Quarto logo is light on dark, the other half dark on light\"\n---\n\nQuarto 1.7 is out! You can get the current release from the [download page](/docs/download/index.qmd).\n\nWe are especially enthusiastic about the improvements 1.7 brings to dark mode: you can now specify light and dark themes via brand, map computational outputs to themes, and have your website theme follow your viewer's preference.\nTo celebrate these changes, this site, [quarto.org](/), now has a light and dark mode.\nToggle the switch in the navigation bar (``{=html}) to see the difference.\n\nYou can read about these improvements and some other highlights below. You can find all the changes in this version in the [Release Notes](/docs/download/changelog/1.7/).\n\n## Dark Mode Improvements\n\n### Specify light and dark themes via **brand.yml**\n\nYou can now specify a light and dark brand.\nFor example, at a project-level you can provide two brand files:\n\n```{.yaml filename=\"_quarto.yml\"}\nbrand:\n light: light-brand.yml\n dark: dark-brand.yml\n```\n\nStandalone HTML pages, websites, and dashboards will gain a light switch toggle allowing viewers to switch between the light and dark themes. \n\n::: {layout-ncol=2}\n\n![`light` brand](light.png){fig-alt=\"Screenshot of a webpage with a light blue body and charcoal text. A switch toggle in the navbar is 'off'.\"}\n\n![`dark` brand](dark.png){fig-alt=\"Screenshot of a webpage with a dark charcoal body and light blue text. A switch toggle in the navbar is 'on'.\"}\n\n:::\n\n\nBy default Typst documents will use the light brand, but you can set the `brand-mode` option to use the dark brand instead:\n\n```{.yaml filename=\"document.qmd\"}\n---\nformat:\n typst:\n brand-mode: dark\n---\n```\n\nRead about other ways to set a light and dark brand in [Guide > Brand](/docs/authoring/brand.qmd#dark-brand).\n\n\n### Map computational outputs to themes\n\nA new code cell option, `renderings`, allows you to indicate which computational outputs should be displayed in light and dark mode. \nCreate light and dark versions of your outputs in a single code cell, \nand add the option `renderings` to specify the order of the outputs.\nFor example, this cell creates a `light` version of a plot, \nthen a `dark` version:\n\n\n::: {.cell renderings='[\"light\",\"dark\"]'}\n\n````{.cell-code}\n```{{r}}\n#| renderings: [light, dark]\nplot(1:10) # Shown in `light` mode\n\npar(bg = \"#000000\", fg = \"#FFFFFF\", col.axis = \"#FFFFFF\")\nplot(1:10) # Shown in `dark` mode\n```\n````\n\n::: {.cell-output-display}\n![](index_files/figure-html/unnamed-chunk-1-1.png){width=672}\n:::\n\n::: {.cell-output-display}\n![](index_files/figure-html/unnamed-chunk-1-2.png){width=672}\n:::\n:::\n\n\nBoth outputs are produced, but you'll only see the one corresponding to the current state of the light switch.\nToggle the switch in the navigation bar to see the image change to reflect the theme.\n\n### Respect user color scheme\n\nSet the new `html` format option `respect-user-color-scheme` to `true` if you would like your site to honor the viewerโ€™s operating system or browser preference for light or dark mode:\n\n```{.yaml filename=\"_quarto.yml\"}\nformat:\n html:\n respect-user-color-scheme: true\n```\n\n## Other Highlights\n\n- Typst updated to 0.13.0\n- Pandoc updated to 3.6.3\n- New [`version` shortcode](/docs/authoring/version.qmd) to insert the version of Quarto used to build your document:\n \n ::: {layout-ncol=2 layout-valign=\"center\"}\n \n ```{.markdown shortcodes=\"false\"}\n Rendered with Quarto {{< version >}}\n ```\n ::: {.border .p-1}\n Rendered with Quarto {{< version >}}\n :::\n\n :::\n\n- Improvements to the `julia` engine: \n - [`juliaup` integration](/docs/computations/julia.qmd#juliaup-integration): Use specific versions of Julia in your notebooks.\n \n - [R and Python support](/docs/computations/julia.qmd#r-and-python-support): Include `{r}` and `{python}` executable code cells via the RCall and PythonCall packages.\n \n - [Caching](/docs/computations/julia.qmd#caching-julia): Save time rendering long-running notebooks by caching results.\n \n - [Revise.jl integration](/docs/computations/julia.qmd#revise.jl-integration): Automatically update function definitions in Julia sessions.\n\n\n## Acknowledgements\n\nWe'd like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests:\n\n[AndreasThinks](https://github.com/AndreasThinks), \n[ArthurData](https://github.com/ArthurData), \n[BrendonChau](https://github.com/BrendonChau), \n[DanStuder](https://github.com/DanStuder), \n[DavidFirth](https://github.com/DavidFirth), \n[Eli-78-fas](https://github.com/Eli-78-fas), \n[EllaKaye](https://github.com/EllaKaye), \n[EmilHvitfeldt](https://github.com/EmilHvitfeldt), \n[EvoArt](https://github.com/EvoArt), \n[FMKerckhof](https://github.com/FMKerckhof), \n[FrankwaP](https://github.com/FrankwaP), \n[JanPalasek](https://github.com/JanPalasek), \n[Jocarnail](https://github.com/Jocarnail), \n[MHellmund](https://github.com/MHellmund), \n[MichaelHatherly](https://github.com/MichaelHatherly), \n[Noghpu](https://github.com/Noghpu), \n[PeneLoopy](https://github.com/PeneLoopy), \n[Rafnuss](https://github.com/Rafnuss), \n[SergeCroise](https://github.com/SergeCroise), \n[TonyFly3000](https://github.com/TonyFly3000), \n[actuaristai](https://github.com/actuaristai), \n[alex-r-bigelow](https://github.com/alex-r-bigelow), \n[andrewheiss](https://github.com/andrewheiss), \n[ant-durrant](https://github.com/ant-durrant), \n[antoine4ucsd](https://github.com/antoine4ucsd), \n[arnaudgallou](https://github.com/arnaudgallou), \n[aronatkins](https://github.com/aronatkins), \n[arthurgailes](https://github.com/arthurgailes), \n[bkowshik](https://github.com/bkowshik), \n[boshek](https://github.com/boshek), \n[cbrnr](https://github.com/cbrnr), \n[cl-roberts](https://github.com/cl-roberts), \n[cmadland](https://github.com/cmadland), \n[coatless](https://github.com/coatless), \n[deepayan](https://github.com/deepayan), \n[devmcp](https://github.com/devmcp), \n[dhimmel](https://github.com/dhimmel), \n[dkapitan](https://github.com/dkapitan), \n[dmenne](https://github.com/dmenne), \n[eamcvey](https://github.com/eamcvey), \n[edavidaja](https://github.com/edavidaja), \n[fredguth](https://github.com/fredguth), \n[fuhrmanator](https://github.com/fuhrmanator), \n[gadenbuie](https://github.com/gadenbuie), \n[github-actions[bot]](https://github.com/apps/github-actions), \n[glin](https://github.com/glin), \n[gwbrck](https://github.com/gwbrck), \n[hchulkim](https://github.com/hchulkim), \n[hguturu](https://github.com/hguturu), \n[hturner](https://github.com/hturner), \n[ihrke](https://github.com/ihrke), \n[jdutant](https://github.com/jdutant), \n[jenslaufer](https://github.com/jenslaufer), \n[jkrumbiegel](https://github.com/jkrumbiegel), \n[jmgirard](https://github.com/jmgirard), \n[joelostblom](https://github.com/joelostblom), \n[kandolfp](https://github.com/kandolfp), \n[kapsner](https://github.com/kapsner), \n[kazuyanagimoto](https://github.com/kazuyanagimoto), \n[kdheepak](https://github.com/kdheepak), \n[kingo55](https://github.com/kingo55), \n[knuesel](https://github.com/knuesel), \n[kubu4](https://github.com/kubu4), \n[kv9898](https://github.com/kv9898), \n[kylie-foster](https://github.com/kylie-foster), \n[loneguardian](https://github.com/loneguardian), \n[lwjohnst86](https://github.com/lwjohnst86), \n[ma2048](https://github.com/ma2048), \n[markjholmes](https://github.com/markjholmes), \n[maurosilber](https://github.com/maurosilber), \n[mipmip](https://github.com/mipmip), \n[mroavi](https://github.com/mroavi), \n[mroberts1](https://github.com/mroberts1), \n[msh855](https://github.com/msh855), \n[mvuorre](https://github.com/mvuorre), \n[nathanj3](https://github.com/nathanj3), \n[odysseu](https://github.com/odysseu), \n[parmsam](https://github.com/parmsam), \n[peter-gy](https://github.com/peter-gy), \n[pvelayudhan](https://github.com/pvelayudhan), \n[raffaem](https://github.com/raffaem), \n[robmcd](https://github.com/robmcd), \n[ryanzomorrodi](https://github.com/ryanzomorrodi), \n[stragu](https://github.com/stragu), \n[sun123zxy](https://github.com/sun123zxy), \n[t-kalinowski](https://github.com/t-kalinowski), \n[temospena](https://github.com/temospena), \n[tjni](https://github.com/tjni), \n[torven-schalk](https://github.com/torven-schalk), \n[turcotte](https://github.com/turcotte), \n[wenyaoliu](https://github.com/wenyaoliu), \n[yhkee0404](https://github.com/yhkee0404).\n\n", + "supporting": [ + "index_files" + ], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-1-1.png b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-1-1.png new file mode 100644 index 0000000000..73244bdd73 Binary files /dev/null and b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-1-1.png differ diff --git a/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-1-2.png b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-1-2.png new file mode 100644 index 0000000000..2b618d785b Binary files /dev/null and b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-1-2.png differ diff --git a/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-2-1.png b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-2-1.png new file mode 100644 index 0000000000..b8c381bf92 Binary files /dev/null and b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-2-1.png differ diff --git a/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-2-2.png b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-2-2.png new file mode 100644 index 0000000000..d0eefdf7cf Binary files /dev/null and b/_freeze/docs/blog/posts/2025-xx-xx-1.7-release/index/figure-html/unnamed-chunk-2-2.png differ diff --git a/_freeze/docs/computations/execution-options/execute-results/html.json b/_freeze/docs/computations/execution-options/execute-results/html.json index 99b694ea77..5b5d66984f 100644 --- a/_freeze/docs/computations/execution-options/execute-results/html.json +++ b/_freeze/docs/computations/execution-options/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "8f4bc902dc5011d5940723baddeb9bc2", + "hash": "669153733b808f6c8e1af4a3a39fbde5", "result": { "engine": "jupyter", - "markdown": "---\ntitle: Execution Options\nformat: html\n---\n\n## Output Options\n\nThere are a wide variety of options available for customizing output from executed code. All of these options can be specified either globally (in the document front-matter) or per code-block. For example, here's a modification of the Python example to specify that we don't want to \"echo\" the code into the output document:\n\n``` yaml\n---\ntitle: \"My Document\"\nexecute:\n echo: false\njupyter: python3\n---\n```\n\nNote that we can override this option on a per code-block basis. For example:\n\n```{{python}}\n#| echo: true\n\nimport matplotlib.pyplot as plt\nplt.plot([1,2,3,4])\nplt.show()\n```\n\nCode block options are included in a special comment at the top of the block (lines at the top prefaced with `#|` are considered options).\n\nOptions available for customizing output include:\n\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Option | Description |\n+==============+===================================================================================================================================================================================================+\n| `eval` | Evaluate the code chunk (if `false`, just echos the code into the output). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `echo` | Include the source code in output |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `output` | Include the results of executing the code in the output (`true`, `false`, or `asis` to indicate that the output is raw markdown and should not have any of Quarto's standard enclosing markdown). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `warning` | Include warnings in the output. |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `error` | Include errors in the output (note that this implies that errors executing code will not halt processing of the document). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `include` | Catch all for preventing any output (code or results) from being included (e.g. `include: false` suppresses all output from the code block). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `renderings` | Specify rendering names for the plot or table outputs of the cell, e.g. `[light, dark]` |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\nHere's a Knitr example with some of these additional options included:\n\n```` \n---\ntitle: \"Knitr Document\"\nexecute:\n echo: false\n---\n\n```{{r}}\n#| warning: false\n\nlibrary(ggplot2)\nggplot(airquality, aes(Temp, Ozone)) + \n geom_point() + \n geom_smooth(method = \"loess\", se = FALSE)\n```\n\n```{{r}}\nsummary(airquality)\n```\n````\n\nHere is an example of using `renderings` to provide light and dark versions of a plot. Note that the number of cell outputs must match the number of renderings.\n\n````\n---\ntitle: \"Dark mode\"\nformat: \n html:\n theme:\n light: flatly\n dark: darkly\n---\n\n```{{r}}\n#| renderings: [light, dark]\npar(bg = \"#FFFFFF\", fg = \"#000000\")\nplot(1:10) # Shown in `light` mode\n\npar(bg = \"#000000\", fg = \"#FFFFFF\", col.axis = \"#FFFFFF\")\nplot(1:10) # Shown in `dark` mode\n```\n````\n\n::: {layout-ncol=2}\n\n![light rendering](images/renderings-light-mode.png)\n\n![dark rendering](images/renderings-dark-mode.png)\n\n:::\n\n`renderings` does not currently work correctly with the cell options `label` or `fig-cap`, `tbl-cap`, etc. To combine `renderings` with crossrefs and/or captions, use the fenced div syntax:\n\n\n````\n---\ntitle: \"Dark mode\"\nformat: \n html:\n theme:\n light: flatly\n dark: darkly\n---\n\n::: {#fig-caption-crossref}\n\n```{{r}}\n#| renderings: [light, dark]\npar(bg = \"#FFFFFF\", fg = \"#000000\")\nplot(1:10) # Shown in `light` mode\n\n\npar(bg = \"#000000\", fg = \"#FFFFFF\", col.axis = \"#FFFFFF\")\nplot(1:10) # Shown in `dark` mode\n```\n\nLight and dark renderings with a caption and crossref\n\n:::\n````\n\n\n::: callout-tip\nWhen using the Knitr engine, you can also use any of the available native options (e.g. `collapse`, `tidy`, `comment`, etc.). See the [Knitr options documentation](https://yihui.org/knitr/options/) for additional details. You can include these native options in option comment blocks as shown above, or on the same line as the `{r}` as shown in the Knitr documentation.\n:::\n\n::: callout-tip\nThe Knitr engine can also *conditionally* evaluate a code chunk using objects or expressions. See [Using R: Knitr Options](r.qmd#chunk-options).\n:::\n\n## Figure Options\n\nThere are a number of ways to control the default width and height of figures generated from code. First, it's important to know that Quarto sets a default width and height for figures appropriate to the target output format. Here are the defaults (expressed in inches):\n\n| Format | Default |\n|-------------------------|-----------|\n| Default | 7 x 5 |\n| HTML Slides | 9.5 x 6.5 |\n| HTML Slides (reveal.js) | 9 x 5 |\n| PDF | 5.5 x 3.5 |\n| PDF Slides (Beamer) | 10 x 7 |\n| PowerPoint | 7.5 x 5.5 |\n| MS Word, ODT, RTF | 5 x 4 |\n| EPUB | 5 x 4 |\n| Hugo | 8 x 5 |\n\nThese defaults were chosen to provide attractive well proportioned figures, but feel free to experiment to see whether you prefer another default size. You can change the default sizes using the `fig-width` and `fig-height` options. For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: \n html:\n fig-width: 8\n fig-height: 6\n pdf:\n fig-width: 7\n fig-height: 5\n---\n```\n\nHow do these sizes make their way into the engine-level defaults for generating figures? This differs by engine:\n\n- For the Knitr engine, these values become the default values for the `fig.width` and `fig.height` chunk options. You can override these default values via chunk level options.\n\n- For Python, these values are used to set the [Matplotlib](https://matplotlib.org/stable/tutorials/introductory/customizing.html) `figure.figsize` rcParam (you can of course manually override these defaults for any given plot).\n\n- For Julia, these values are used to initialize the default figure size for the [Plots.jl](https://docs.juliaplots.org/stable/) GR backend.\n\n If you are using another graphics library with Jupyter and want to utilize these values, you can read them from `QUARTO_FIG_WIDTH` and `QUARTO_FIG_HEIGHT` environment variables.\n\n::: callout-caution\nWhen using the Jupyter engine, `fig-width` and `fig-height` are only supported if specified at the document- or project-level. \nHowever, when using the Knitr engine, these options are also supported as code cell options on a per-cell basis.\n:::\n\n### Caption and Alt Text\n\nYou can specify the caption and alt text for figures generated from code using the `fig-cap` and `fig-alt` options. For example, here we add these options to a Python code cell that creates a plot:\n\n```{{python}}\n#| fig-cap: \"Polar axis plot\"\n#| fig-alt: \"A line plot on a polar axis\"\n\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nr = np.arange(0, 2, 0.01)\ntheta = 2 * np.pi * r\nfig, ax = plt.subplots(subplot_kw={'projection': 'polar'})\nax.plot(theta, r)\nax.set_rticks([0.5, 1, 1.5, 2])\nax.grid(True)\nplt.show()\n```\n\n## Inline Code\n\nJupyter, Knitr and OJS all support executing inline code within markdown (e.g. to allow narrative to automatically use the most up to date computations). See [Inline Code](inline-code.qmd) for details.\n\n## Raw Output\n\nThe `output: asis` option enables you to generate raw markdown output. When `output: asis` is specified none of Quarto's standard enclosing divs will be included. For example, here we specify `output: asis` in order to generate a pair of headings:\n\n::: panel-tabset\n## Jupyter\n\n```{{python}}\n#| echo: false\n#| output: asis\n\nprint(\"# Heading 1\\n\")\nprint(\"## Heading 2\\n\")\n```\n\n## Knitr\n\n```{{r}}\n#| echo: false\n#| output: asis\n\ncat(\"# Heading 1\\n\")\ncat(\"## Heading 2\\n\")\n```\n:::\n\nWhich generates the following output:\n\n``` default\n# Heading 1\n\n## Heading 2\n```\n\nNote that we also include the `echo: false` option to ensure that the code used to generate markdown isn't included in the final output.\n\nIf we had not specified `output: asis` the output, as seen in the intermediate markdown, would have included Quarto's `.cell-output` div:\n\n```` default\n::: {.cell-output-stdout}\n```\n# Heading 1\n\n## Heading 2\n \n```\n:::\n````\n\nFor the Jupyter engine, you can also create raw markdown output using the functions in `IPython.display`. For example:\n\n```{{python}}\n#| echo: false\nradius = 10\nfrom IPython.display import Markdown\nMarkdown(f\"The _radius_ of the circle is **{radius}**.\")\n```\n\n## Knitr Options\n\nIf you are using the Knitr cell execution engine, you can specify default document-level [Knitr chunk options](https://yihui.org/knitr/options/) in YAML. For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: html\nknitr:\n opts_chunk: \n collapse: true\n comment: \"#>\" \n R.options:\n knitr.graphics.auto_pdf: true\n---\n```\n\nYou can additionally specify global Knitr options using `opts_knit`.\n\nThe `R.options` chunk option is a convenient way to define R options that are set temporarily via [`options()`](https://rdrr.io/r/base/options.html) before the code chunk execution, and immediately restored afterwards.\n\nIn the example above, we establish default Knitr chunk options for a single document. You can also add shared `knitr` options to a project-wide `_quarto.yml` file or a project-directory scoped `_metadata.yml` file.\n\n\n## Jupyter Options\n\n### Expression Printing\n\nWhen multiple expressions are present in a code cell, by default, only the last top-level expression is captured in the rendered output. For example, consider the code cell:\n\n::: {layout-ncol=\"2\"}\n```` markdown\n```{{python}}\n\"first\"\n\"last\"\n```\n````\n:::\n\nWhen rendered to HTML the output generated is:\n\n``` markdown\n'last'\n```\n\nThis behavior corresponds to the `last_expr` setting for [Jupyter shell interactivity](https://ipython.readthedocs.io/en/stable/config/options/terminal.html#configtrait-InteractiveShell.ast_node_interactivity).\n\nYou can control this behavior with the `ipynb-shell-interactivity` option. For example, to capture all top-level expressions set it to `all`:\n\n``` yaml\n---\ntitle: All expressions\nformat: html\nipynb-shell-interactivity: all\n---\n```\n\nNow the above code cell results in the output:\n\n``` markdown\n'first'\n\n'last'\n```\n\n::: callout-note\n## All Expressions are Printed in Dashboards\n\nFor [dashboards](/docs/dashboards/index.qmd) the default setting of `ipynb-shell-interactivity` is `all.`\n:::\n\n## Intermediates\n\nOn the way from markdown input to final output, there are some intermediate files that are created and automatically deleted at the end of rendering. You can use the following options to keep these intermediate files:\n\n+--------------+------------------------------------------------------------------------------------------------+\n| Option | Description |\n+==============+================================================================================================+\n| `keep-md` | Keep the markdown file generated by executing code. |\n+--------------+------------------------------------------------------------------------------------------------+\n| `keep-ipynb` | Keep the notebook file generated from executing code (applicable only to markdown input files) |\n+--------------+------------------------------------------------------------------------------------------------+\n\nFor example, here we specify that we want to keep the jupyter intermediate file after rendering:\n\n``` yaml\n---\ntitle: \"My Document\"\nexecute:\n keep-ipynb: true\njupyter: python3\n---\n```\n\n## Fenced Echo\n\nIf you are writing a tutorial or documentation on using Quarto code blocks, you'll likely want to include the fenced code delimiter (e.g. ```` ```{python} ````) in your code output to emphasize that executable code requires that delimiter. You can do this using the `echo: fenced` option. For example, the following code block:\n\n```{{python}}\n#| echo: fenced\n1 + 1\n```\n\nWill be rendered as:\n\n::: {#0575e9ae .cell execution_count=1}\n```` { .cell-code}\n```{{python}}\n1 + 1\n```\n\n````\n\n::: {.cell-output .cell-output-display execution_count=1}\n```\n2\n```\n:::\n:::\n\n\nThis is especially useful when you want to demonstrate the use of cell options. For example, here we demonstrate the use of the `output` and `code-overflow` options:\n\n```{{python}}\n#| echo: fenced\n#| output: false\n#| code-overflow: wrap\n1 + 1\n```\n\nThis code block appears in the rendered document as:\n\n::: {#fc7f868a .cell execution_count=2}\n```` { .cell-code .code-overflow-wrap}\n```{{python}}\n#| output: false\n#| code-overflow: wrap\n1 + 1\n```\n\n````\n:::\n\n\nNote that all YAML options will be included in the fenced code output *except for* `echo: fenced` (as that might be confusing to readers).\n\nThis behavior can also be specified at the document level if you want all of your executable code blocks to include the fenced delimiter and YAML options:\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: html\nexecute:\n echo: fenced\n---\n```\n\n#### Unexecuted Blocks\n\n\n\nOften you'll want to include a fenced code block purely as documentation (not executable). You can do this by using two curly braces around the language (e.g. `python`, `r`, etc.) rather than one. For example:\n\n```{{{python}}}\n1 + 1\n```\n\nWill be output into the document as:\n\n```{{python}}\n1 + 1\n```\n\nIf you want to show an example with multiple code blocks and other markdown, just enclose the entire example in 4 backticks (e.g. ````` ```` `````) and use the two curly brace syntax for code blocks within. For example:\n\n ````\n ---\n title: \"My document\"\n ---\n\n Some markdown content.\n\n ```{{{python}}}\n 1 + 1\n ```\n\n Some additional markdown content.\n\n ````\n\n\n## Engine Binding\n\nEarlier we said that the engine used for computations was determined automatically. You may want to customize this---for example you may want to use the Jupyter [R kernel](https://github.com/IRkernel/IRkernel) rather than Knitr, or you may want to use Knitr with Python code (via [reticulate](https://rstudio.github.io/reticulate/)).\n\nHere are the basic rules for automatic binding:\n\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Extension | Engine Binding |\n+===========+========================================================================================================================================================================================================================================+\n| .qmd | Use Knitr engine if an `{r}` code block is discovered within the file |\n| | |\n| | Use Jupyter engine if *any other* executable code block (e.g. `{python}`, `{julia}`, `{bash}`, etc.) is discovered within the file. The kernel used is determined based on the language of the first executable code block discovered. |\n| | |\n| | Use no engine if no executable code blocks are discovered. |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| .ipynb | Jupyter engine |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| .Rmd | Knitr engine |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| .md | No engine (note that if an `md` document does contain executable code blocks then an error will occur) |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\n::: callout-note\n\n## Using python and r together\n\nIf your quarto document includes both `{python}` and `{r}` code blocks, then quarto will automatically use Knitr engine and [reticulate](https://rstudio.github.io/reticulate/) R package to execute the python content.\n:::\n\nFor `.qmd` files in particular, you can override the engine used via the `engine` option. For example:\n\n``` markdown\nengine: jupyter\n```\n\n``` markdown\nengine: knitr\n```\n\nYou can also specify that no execution engine should be used via `engine: markdown`.\n\nThe presence of the `knitr` or `jupyter` option will also override the default engine:\n\n``` markdown\nknitr: true\n```\n\n``` markdown\njupyter: python3\n```\n\nVariations with additional engine-specific options also work to override the default engine:\n\n``` markdown\nknitr:\n opts_knit:\n verbose: true\n```\n\n``` markdown\njupyter:\n kernelspec:\n display_name: Python 3\n language: python\n name: python3\n```\n\n## Shell Commands\n\nUsing shell commands (from Bash, Zsh, etc.) within Quarto computational documents differs by engine. If you are using the Jupyter engine you can use [Jupyter shell magics](https://jakevdp.github.io/PythonDataScienceHandbook/01.05-ipython-and-shell-commands.html). For example:\n\n```` markdown\n---\ntitle: \"Using Bash\"\nengine: jupyter\n---\n\n```{{python}}\n!echo \"foo\"\n```\n````\n\nNote that `!` preceding `echo` is what enables a Python cell to be able to execute a shell command.\n\nIf you are using the Knitr engine you can use ```` ```{bash} ```` cells, for example:\n\n```` markdown\n---\ntitle: \"Using Bash\"\nengine: knitr\n---\n\n```{{bash}}\necho \"foo\" \n```\n````\n\nNote that the Knitr engine also supports ```` ```{python} ```` cells, enabling the combination of R, Python, and Bash in the same document\n\n", + "markdown": "---\ntitle: Execution Options\nformat: html\n---\n\n## Output Options\n\nThere are a wide variety of options available for customizing output from executed code. All of these options can be specified either globally (in the document front-matter) or per code-block. For example, here's a modification of the Python example to specify that we don't want to \"echo\" the code into the output document:\n\n``` yaml\n---\ntitle: \"My Document\"\nexecute:\n echo: false\njupyter: python3\n---\n```\n\nNote that we can override this option on a per code-block basis. For example:\n\n```{{python}}\n#| echo: true\n\nimport matplotlib.pyplot as plt\nplt.plot([1,2,3,4])\nplt.show()\n```\n\nCode block options are included in a special comment at the top of the block (lines at the top prefaced with `#|` are considered options).\n\nOptions available for customizing output include:\n\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Option | Description |\n+==============+===================================================================================================================================================================================================+\n| `eval` | Evaluate the code chunk (if `false`, just echos the code into the output). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `echo` | Include the source code in output |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `output` | Include the results of executing the code in the output (`true`, `false`, or `asis` to indicate that the output is raw markdown and should not have any of Quarto's standard enclosing markdown). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `warning` | Include warnings in the output. |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `error` | Include errors in the output (note that this implies that errors executing code will not halt processing of the document). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `include` | Catch all for preventing any output (code or results) from being included (e.g. `include: false` suppresses all output from the code block). |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| `renderings` | Specify rendering names for the plot or table outputs of the cell, e.g. `[light, dark]` |\n+--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\nHere's a Knitr example with some of these additional options included:\n\n```` \n---\ntitle: \"Knitr Document\"\nexecute:\n echo: false\n---\n\n```{{r}}\n#| warning: false\n\nlibrary(ggplot2)\nggplot(airquality, aes(Temp, Ozone)) + \n geom_point() + \n geom_smooth(method = \"loess\", se = FALSE)\n```\n\n```{{r}}\nsummary(airquality)\n```\n````\n\n### Cell Renderings\n\nHere is an example of using `renderings` to provide light and dark versions of a plot. Note that the number of cell outputs must match the number of renderings.\n\n````\n---\ntitle: \"Dark mode\"\nformat: \n html:\n theme:\n light: flatly\n dark: darkly\n---\n\n```{{r}}\n#| renderings: [light, dark]\npar(bg = \"#FFFFFF\", fg = \"#000000\")\nplot(1:10) # Shown in `light` mode\n\npar(bg = \"#000000\", fg = \"#FFFFFF\", col.axis = \"#FFFFFF\")\nplot(1:10) # Shown in `dark` mode\n```\n````\n\n::: {layout-ncol=2}\n\n![light rendering](images/renderings-light-mode.png)\n\n![dark rendering](images/renderings-dark-mode.png)\n\n:::\n\nThe `renderings` cell option does not currently work correctly with cell cross-reference options (`label` starting with `fig-`, `tbl-`, etc.) or cell caption options (`fig-cap`, `tbl-cap`, etc.).\n\n\nTo combine `renderings` with crossrefs and/or captions, use the fenced div syntax:\n\n\n````\n---\ntitle: \"Dark mode\"\nformat:\n html:\n theme:\n light: flatly\n dark: darkly\n---\n\n::: {#fig-caption-crossref}\n\n```{{r}}\n#| label: caption-crossref\n#| renderings: [light, dark]\npar(bg = \"#FFFFFF\", fg = \"#000000\")\nplot(1:10) # Shown in `light` mode\n\n\npar(bg = \"#000000\", fg = \"#FFFFFF\", col.axis = \"#FFFFFF\")\nplot(1:10) # Shown in `dark` mode\n```\n\nLight and dark renderings with a caption and crossref\n\n:::\n````\n\nNote the use of a `label` that is not a cross-reference, i.e. that does not start with one of the [cross reference types](../authoring/cross-references.qmd#overview). It is a good practice to have named cells with `label`, for debuggability and stable resource names. However, cross-reference labels that start with `fig-`, `tbl-`, etc., will not work with `renderings`.\n\n\n\n::: callout-tip\nWhen using the Knitr engine, you can also use any of the available native options (e.g. `collapse`, `tidy`, `comment`, etc.). See the [Knitr options documentation](https://yihui.org/knitr/options/) for additional details. You can include these native options in option comment blocks as shown above, or on the same line as the `{r}` as shown in the Knitr documentation.\n:::\n\n::: callout-tip\nThe Knitr engine can also *conditionally* evaluate a code chunk using objects or expressions. See [Using R: Knitr Options](r.qmd#chunk-options).\n:::\n\n## Figure Options\n\nThere are a number of ways to control the default width and height of figures generated from code. First, it's important to know that Quarto sets a default width and height for figures appropriate to the target output format. Here are the defaults (expressed in inches):\n\n| Format | Default |\n|-------------------------|-----------|\n| Default | 7 x 5 |\n| HTML Slides | 9.5 x 6.5 |\n| HTML Slides (reveal.js) | 9 x 5 |\n| PDF | 5.5 x 3.5 |\n| PDF Slides (Beamer) | 10 x 7 |\n| PowerPoint | 7.5 x 5.5 |\n| MS Word, ODT, RTF | 5 x 4 |\n| EPUB | 5 x 4 |\n| Hugo | 8 x 5 |\n\nThese defaults were chosen to provide attractive well proportioned figures, but feel free to experiment to see whether you prefer another default size. You can change the default sizes using the `fig-width` and `fig-height` options. For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: \n html:\n fig-width: 8\n fig-height: 6\n pdf:\n fig-width: 7\n fig-height: 5\n---\n```\n\nHow do these sizes make their way into the engine-level defaults for generating figures? This differs by engine:\n\n- For the Knitr engine, these values become the default values for the `fig.width` and `fig.height` chunk options. You can override these default values via chunk level options.\n\n- For Python, these values are used to set the [Matplotlib](https://matplotlib.org/stable/tutorials/introductory/customizing.html) `figure.figsize` rcParam (you can of course manually override these defaults for any given plot).\n\n- For Julia, these values are used to initialize the default figure size for the [Plots.jl](https://docs.juliaplots.org/stable/) GR backend.\n\n If you are using another graphics library with Jupyter and want to utilize these values, you can read them from `QUARTO_FIG_WIDTH` and `QUARTO_FIG_HEIGHT` environment variables.\n\n::: callout-caution\nWhen using the Jupyter engine, `fig-width` and `fig-height` are only supported if specified at the document- or project-level. \nHowever, when using the Knitr engine, these options are also supported as code cell options on a per-cell basis.\n:::\n\n### Caption and Alt Text\n\nYou can specify the caption and alt text for figures generated from code using the `fig-cap` and `fig-alt` options. For example, here we add these options to a Python code cell that creates a plot:\n\n```{{python}}\n#| fig-cap: \"Polar axis plot\"\n#| fig-alt: \"A line plot on a polar axis\"\n\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nr = np.arange(0, 2, 0.01)\ntheta = 2 * np.pi * r\nfig, ax = plt.subplots(subplot_kw={'projection': 'polar'})\nax.plot(theta, r)\nax.set_rticks([0.5, 1, 1.5, 2])\nax.grid(True)\nplt.show()\n```\n\n## Inline Code\n\nJupyter, Knitr and OJS all support executing inline code within markdown (e.g. to allow narrative to automatically use the most up to date computations). See [Inline Code](inline-code.qmd) for details.\n\n## Raw Output\n\nThe `output: asis` option enables you to generate raw markdown output. When `output: asis` is specified none of Quarto's standard enclosing divs will be included. For example, here we specify `output: asis` in order to generate a pair of headings:\n\n::: panel-tabset\n## Jupyter\n\n```{{python}}\n#| echo: false\n#| output: asis\n\nprint(\"# Heading 1\\n\")\nprint(\"## Heading 2\\n\")\n```\n\n## Knitr\n\n```{{r}}\n#| echo: false\n#| output: asis\n\ncat(\"# Heading 1\\n\")\ncat(\"## Heading 2\\n\")\n```\n:::\n\nWhich generates the following output:\n\n``` default\n# Heading 1\n\n## Heading 2\n```\n\nNote that we also include the `echo: false` option to ensure that the code used to generate markdown isn't included in the final output.\n\nIf we had not specified `output: asis` the output, as seen in the intermediate markdown, would have included Quarto's `.cell-output` div:\n\n```` default\n::: {.cell-output-stdout}\n```\n# Heading 1\n\n## Heading 2\n \n```\n:::\n````\n\nFor the Jupyter engine, you can also create raw markdown output using the functions in `IPython.display`. For example:\n\n```{{python}}\n#| echo: false\nradius = 10\nfrom IPython.display import Markdown\nMarkdown(f\"The _radius_ of the circle is **{radius}**.\")\n```\n\n## Knitr Options\n\nIf you are using the Knitr cell execution engine, you can specify default document-level [Knitr chunk options](https://yihui.org/knitr/options/) in YAML. For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: html\nknitr:\n opts_chunk: \n collapse: true\n comment: \"#>\" \n R.options:\n knitr.graphics.auto_pdf: true\n---\n```\n\nYou can additionally specify global Knitr options using `opts_knit`.\n\nThe `R.options` chunk option is a convenient way to define R options that are set temporarily via [`options()`](https://rdrr.io/r/base/options.html) before the code chunk execution, and immediately restored afterwards.\n\nIn the example above, we establish default Knitr chunk options for a single document. You can also add shared `knitr` options to a project-wide `_quarto.yml` file or a project-directory scoped `_metadata.yml` file.\n\n\n## Jupyter Options\n\n### Expression Printing\n\nWhen multiple expressions are present in a code cell, by default, only the last top-level expression is captured in the rendered output. For example, consider the code cell:\n\n::: {layout-ncol=\"2\"}\n```` markdown\n```{{python}}\n\"first\"\n\"last\"\n```\n````\n:::\n\nWhen rendered to HTML the output generated is:\n\n``` markdown\n'last'\n```\n\nThis behavior corresponds to the `last_expr` setting for [Jupyter shell interactivity](https://ipython.readthedocs.io/en/stable/config/options/terminal.html#configtrait-InteractiveShell.ast_node_interactivity).\n\nYou can control this behavior with the `ipynb-shell-interactivity` option. For example, to capture all top-level expressions set it to `all`:\n\n``` yaml\n---\ntitle: All expressions\nformat: html\nipynb-shell-interactivity: all\n---\n```\n\nNow the above code cell results in the output:\n\n``` markdown\n'first'\n\n'last'\n```\n\n::: callout-note\n## All Expressions are Printed in Dashboards\n\nFor [dashboards](/docs/dashboards/index.qmd) the default setting of `ipynb-shell-interactivity` is `all.`\n:::\n\n## Intermediates\n\nOn the way from markdown input to final output, there are some intermediate files that are created and automatically deleted at the end of rendering. You can use the following options to keep these intermediate files:\n\n+--------------+------------------------------------------------------------------------------------------------+\n| Option | Description |\n+==============+================================================================================================+\n| `keep-md` | Keep the markdown file generated by executing code. |\n+--------------+------------------------------------------------------------------------------------------------+\n| `keep-ipynb` | Keep the notebook file generated from executing code (applicable only to markdown input files) |\n+--------------+------------------------------------------------------------------------------------------------+\n\nFor example, here we specify that we want to keep the jupyter intermediate file after rendering:\n\n``` yaml\n---\ntitle: \"My Document\"\nexecute:\n keep-ipynb: true\njupyter: python3\n---\n```\n\n## Fenced Echo\n\nIf you are writing a tutorial or documentation on using Quarto code blocks, you'll likely want to include the fenced code delimiter (e.g. ```` ```{python} ````) in your code output to emphasize that executable code requires that delimiter. You can do this using the `echo: fenced` option. For example, the following code block:\n\n```{{python}}\n#| echo: fenced\n1 + 1\n```\n\nWill be rendered as:\n\n::: {#a4df9156 .cell execution_count=1}\n```` { .cell-code}\n```{{python}}\n1 + 1\n```\n\n````\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\n2\n```\n:::\n:::\n\n\nThis is especially useful when you want to demonstrate the use of cell options. For example, here we demonstrate the use of the `output` and `code-overflow` options:\n\n```{{python}}\n#| echo: fenced\n#| output: false\n#| code-overflow: wrap\n1 + 1\n```\n\nThis code block appears in the rendered document as:\n\n::: {#dec0287c .cell execution_count=2}\n```` { .cell-code .code-overflow-wrap}\n```{{python}}\n#| output: false\n#| code-overflow: wrap\n1 + 1\n```\n\n````\n:::\n\n\nNote that all YAML options will be included in the fenced code output *except for* `echo: fenced` (as that might be confusing to readers).\n\nThis behavior can also be specified at the document level if you want all of your executable code blocks to include the fenced delimiter and YAML options:\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: html\nexecute:\n echo: fenced\n---\n```\n\n#### Unexecuted Blocks\n\n\n\nOften you'll want to include a fenced code block purely as documentation (not executable). You can do this by using two curly braces around the language (e.g. `python`, `r`, etc.) rather than one. For example:\n\n```{{{python}}}\n1 + 1\n```\n\nWill be output into the document as:\n\n```{{python}}\n1 + 1\n```\n\nIf you want to show an example with multiple code blocks and other markdown, just enclose the entire example in 4 backticks (e.g. ````` ```` `````) and use the two curly brace syntax for code blocks within. For example:\n\n ````\n ---\n title: \"My document\"\n ---\n\n Some markdown content.\n\n ```{{{python}}}\n 1 + 1\n ```\n\n Some additional markdown content.\n\n ````\n\n\n## Engine Binding\n\nEarlier we said that the engine used for computations was determined automatically. You may want to customize this---for example you may want to use the Jupyter [R kernel](https://github.com/IRkernel/IRkernel) rather than Knitr, or you may want to use Knitr with Python code (via [reticulate](https://rstudio.github.io/reticulate/)).\n\nHere are the basic rules for automatic binding:\n\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Extension | Engine Binding |\n+===========+========================================================================================================================================================================================================================================+\n| .qmd | Use Knitr engine if an `{r}` code block is discovered within the file |\n| | |\n| | Use Jupyter engine if *any other* executable code block (e.g. `{python}`, `{julia}`, `{bash}`, etc.) is discovered within the file. The kernel used is determined based on the language of the first executable code block discovered. |\n| | |\n| | Use no engine if no executable code blocks are discovered. |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| .ipynb | Jupyter engine |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| .Rmd | Knitr engine |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| .md | No engine (note that if an `md` document does contain executable code blocks then an error will occur) |\n+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\n::: callout-note\n\n## Using python and r together\n\nIf your quarto document includes both `{python}` and `{r}` code blocks, then quarto will automatically use Knitr engine and [reticulate](https://rstudio.github.io/reticulate/) R package to execute the python content.\n:::\n\nFor `.qmd` files in particular, you can override the engine used via the `engine` option. For example:\n\n``` markdown\nengine: jupyter\n```\n\n``` markdown\nengine: knitr\n```\n\nYou can also specify that no execution engine should be used via `engine: markdown`.\n\nThe presence of the `knitr` or `jupyter` option will also override the default engine:\n\n``` markdown\nknitr: true\n```\n\n``` markdown\njupyter: python3\n```\n\nVariations with additional engine-specific options also work to override the default engine:\n\n``` markdown\nknitr:\n opts_knit:\n verbose: true\n```\n\n``` markdown\njupyter:\n kernelspec:\n display_name: Python 3\n language: python\n name: python3\n```\n\n## Shell Commands\n\nUsing shell commands (from Bash, Zsh, etc.) within Quarto computational documents differs by engine. If you are using the Jupyter engine you can use [Jupyter shell magics](https://jakevdp.github.io/PythonDataScienceHandbook/01.05-ipython-and-shell-commands.html). For example:\n\n```` markdown\n---\ntitle: \"Using Bash\"\nengine: jupyter\n---\n\n```{{python}}\n!echo \"foo\"\n```\n````\n\nNote that `!` preceding `echo` is what enables a Python cell to be able to execute a shell command.\n\nIf you are using the Knitr engine you can use ```` ```{bash} ```` cells, for example:\n\n```` markdown\n---\ntitle: \"Using Bash\"\nengine: knitr\n---\n\n```{{bash}}\necho \"foo\" \n```\n````\n\nNote that the Knitr engine also supports ```` ```{python} ```` cells, enabling the combination of R, Python, and Bash in the same document\n\n", "supporting": [ "execution-options_files" ], diff --git a/_freeze/docs/output-formats/html-code/execute-results/html.json b/_freeze/docs/output-formats/html-code/execute-results/html.json index 76c42e7c46..d962a05963 100644 --- a/_freeze/docs/output-formats/html-code/execute-results/html.json +++ b/_freeze/docs/output-formats/html-code/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "c5608def083306a5ca15c5d5c9f90ed7", + "hash": "d2ff124445738133aee2de787962d845", "result": { "engine": "knitr", - "markdown": "---\ntitle: \"HTML Code Blocks\"\nformat: \n html:\n code-tools: true\nexecute:\n warning: false\n---\n\n\n\n## Overview\n\nThere are wide variety of options available to customize the display of source code within HTML documents, including:\n\n1. Hiding some or all code that was executed by [Knitr](https://yihui.name/knitr) or [Jupyter](https://jupyter.org).\n2. Code folding for executed code (hidden by default and expandable by readers).\n3. Handling code that overflows the available horizontal display space.\n4. View the source code of the markdown file used to generate the document.\n5. Syntax highlighting themes and other options to control the appearance of code.\n6. Copy to clipboard button for code blocks.\n7. Generating hyperlinks to online documentation for functions used within code blocks via the [downlit](https://downlit.r-lib.org/) package (note that this option currently only works when using the Knitr engine).\n\nDetails on using all of these options are provided below.\n\n## Hiding Code\n\nFor many documents you may want to hide all of the executable source code used to produce dynamic outputs. You can do this by specifying `echo: false` in the document `execute` options. For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nexecute:\n echo: false\njupyter: python3\n---\n```\n\nNote that we can override this option on a per code-block basis. For example:\n\n```{{python}}\n#| echo: true\n\nimport matplotlib.pyplot as plt\nplt.plot([1,2,3,4])\nplt.show()\n```\n\nCode block options are included in a special comment at the top of the block (lines at the top prefaced with `#|` are considered options).\n\n## Folding Code\n\nUse the `code-fold` option to include code but have it hidden by default using the HTML `
` tag. For example, click the **Code** button to see the code that produced this plot.\n\n\n\n::: {.cell}\n\n```{.r .cell-code code-fold=\"true\"}\nlibrary(ggplot2)\ndat <- data.frame(cond = rep(c(\"A\", \"B\"), each=10),\n xvar = 1:20 + rnorm(20,sd=3),\n yvar = 1:20 + rnorm(20,sd=3))\n\nggplot(dat, aes(x=xvar, y=yvar)) +\n geom_point(shape=1) + \n geom_smooth() \n```\n\n::: {.cell-output-display}\n![](html-code_files/figure-html/unnamed-chunk-1-1.png){width=672}\n:::\n:::\n\n\n\nHere we specify both `code-fold: true` as well as custom summary text (the default is just \"Code\" as shown above):\n\n``` yaml\nformat:\n html:\n code-fold: true\n code-summary: \"Show the code\"\n```\n\nValid values for `code-fold` include:\n\n| Value | Behavior |\n|---------|------------------------------|\n| `false` | No folding (default) |\n| `true` | Fold code (initially hidden) |\n| `show` | Fold code (initially shown) |\n\nUse the `code-fold` and `code-summary` chunk attributes to control this on a chunk-by-chunk basis:\n\n```{{r}}\n#| code-fold: true\n#| code-summary: \"Show the code\"\n```\n\n## Code Overflow\n\nIn some cases the width of source code will overflow the available horizontal display space. By default, this will result in a horizontal scroll bar for the code block. However if you prefer not to have scrollbars you can have the longer lines wrap instead.\n\nTo set the global default behavior use the `code-overflow` option. For example:\n\n``` yaml\nformat:\n html:\n code-overflow: wrap\n```\n\nValid values for `code-overflow` are:\n\n| Option | Description |\n|------------------|------------------------------------------------------|\n| `scroll` | Scroll code blocks that exceed available width (default, corresponds to `white-space: pre`). |\n| `wrap` | Wrap lines of code that exceed available width (corresponds to `white-space: pre-wrap`). |\n\nYou can also override the global default on a per-code-block basis. For computational cells you do this with the `code-overflow` cell option:\n\n```{{python}}\n#| code-overflow: wrap\n\n# very long line of code....\n```\n\nFor a static code block, add the `.code-overflow-scroll` or `.code-overflow-wrap` CSS class:\n\n```` python\n```{.python .code-overflow-wrap}\n# very long line of code....\n```\n````\n\nNote that irrespective of these options, code will always wrap within printed HTML output (as it would otherwise be clipped off the edge of the page).\n\n## Code Tools\n\nYou can include a **Code** menu in the header of your document that provides various tools for readers to interact with the source code. Specify `code-tools: true` to activate these tools:\n\n``` yaml\nformat:\n html:\n code-fold: true\n code-tools: true\n```\n\nIf you have a document that includes folded code blocks then the **Code** menu will present options to show and hide the folded code as well as view the full source code of the document:\n\n![](images/code-tools-01.png){.border fig-alt=\"A screen shot of the header of a rendered Quarto document showing the result of setting both the code-fold and code-tools option to true. There is a drop-down menu labeled 'Code' to the right of the page title with a triangle pointing down. The menu is open and there are three options listed vertically beneath it: 'Hide All Code,' 'Show All Code,' and 'View Source.'\"}\n\nThis document specifies `code-tools: true` in its options so you should see the **Code** menu above next to the main header.\n\nYou can control which of these options are made available as well as the \"Code\" caption text using sub-options of `code-tools`. For example, here we specify that we want only \"View Source\" (no toggling of code visibility) and no caption on the code menu:\n\n``` yaml\nformat:\n html: \n code-tools:\n source: true\n toggle: false\n caption: none\n```\n\nBy default, the source code is embedded in the document and shown in a popup window like this:\n\n![](images/code-tools-source.png){fig-alt=\"A screenshot of this webpage with a pop-up window labeled 'Source Code' over it. This 'Source Code' window contains the raw markdown and R code used to write this page. There is an 'X' on the upper right corner of the 'Source Code' pop up to close it.\"}\n\nYou can alternatively specify a URL for the value of `source`:\n\n``` yaml\nformat:\n html: \n code-tools:\n source: https://github.com/quarto-dev/quarto-web/blob/main/index.md\n```\n\nIf you are within a project and have specified a `repo-url` option then you can just use `repo` and the correct link to your source file will be generated:\n\n``` yaml\nformat:\n html: \n code-tools:\n source: repo\n```\n\nNote that the `code-tools` option is not available when you disable the standard HTML theme (e.g. if you specify the `theme: none` option).\n\n## Appearance\n\nBy default code blocks are rendered with a left border whose color is derived from the current theme. You can customize code chunk appearance with some simple options that control the background color and left border. Options can either be booleans to enable or disable the treatment or can be legal CSS color strings (or they could even be SASS variable names!).\n\nHere is the default appearance for code blocks (`code-block-background: true`):\n\n![](images/code-bg.png){fig-alt=\"A block of code with a gray background.\"}\n\nYou can instead use a left border treatment using the `code-block-border-left` option:\n\n``` yaml\ncode-block-border-left: true\n```\n\n![](images/code-default.png){fig-alt=\"A block of code with a gray vertical stripe running along its left border. This code block has no background.\"}\n\nYou can combine a background and border treatment as well as customize the left border color:\n\n``` yaml\ncode-block-bg: true\ncode-block-border-left: \"#31BAE9\"\n```\n\n![](images/code-custom.png){fig-alt=\"A block of code with a gray background and a blue vertical stripe running along its left border.\"}\n\n## Code Filename {#code-filename}\n\nUse the `filename` attribute on code blocks If you are documenting the contents of a file and want to be especially clear about the name of the file the code is associated with.\n\nFor example, the following code:\n\n```` markdown\n```{.python filename=\"matplotlib.py\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n````\n\nResults in this HTML output:\n\n![](images/code-filename.png)\n\nNon-HTML formats will still have the filename, but it will simply be shown in bold above the code block.\n\n## Highlighting\n\nPandoc will automatically highlight syntax in [fenced code blocks](https://pandoc.org/MANUAL.html#fenced-code-blocks) that are marked with a language name. For example:\n\n ```python\n 1 + 1\n ```\n\nPandoc can provide syntax highlighting for over 140 different languages (see the output of `quarto pandoc --list-highlight-languages` for a list of all of them). If you want to provide the appearance of a highlighted code block for a language not supported, just use `default` as the language name.\n\nYou can specify the code highlighting style using `highlight-style` and specifying one of the supported themes. These themes are \"adaptive\", which means they will automatically switch between a dark and light mode based upon the theme of the website. These are designed to work well with sites that include a dark and light mode.\n\n- a11y\n- arrow\n- atom-one\n- ayu\n- breeze\n- github\n- gruvbox\n\nAll of the standard Pandoc themes are also available:\n\n- pygments\n- tango\n- espresso\n- zenburn\n- kate\n- monochrome\n- breezedark\n- haddock\n\nAs well as an additional set of extended themes, including:\n\n- dracula\n- monokai\n- nord\n- oblivion\n- printing\n- radical\n- solarized\n- vim-dark\n\nThe `highlight-style` option determines which theme is used. For example:\n\n``` yaml\nhighlight-style: github\n```\n\nHighlighting themes can provide either a single highlighting definition or two definitions, one optimized for a light colored background and another optimized for a dark color background. When available, Quarto will automatically select the appropriate style based upon the code chunk background color's darkness. Users may always opt to specify the full name (e.g. `atom-one-dark`) to by pass this automatic behavior.\n\nBy default, code is highlighted using the `arrow` theme, which is optimized for accessibility. We've additionally introduced the `arrow-dark` theme which is designed to provide accessible highlighting against dark backgrounds.\n\nExamples of the light and dark themes:\n\n#### Arrow (light)\n\n![](images/arrow.png){fig.alt=\"A block of code showcasing the Arrow (light) theme.\"}\n\n#### Arrow (dark)\n\n![](images/arrow-dark.png){fig.alt=\"A block of code showcasing the Arrow (dark) theme.\"}\n\n#### Ayu (light)\n\n![](images/ayu.png){fig.alt=\"A block of code showcasing the Ayu (light) theme.\"}\n\n#### Ayu (dark)\n\n![](images/ayu-dark.png){.preview-image fig.alt=\"A block of code showcasing the Ayu (dark) theme.\"}\n\n### Custom Highlighting\n\nIn addition to the built in themes available for syntax highlighting, you can also specify your own syntax highlighting by providing the path to a valid theme file (which is based upon the KDE XML syntax highlighting descriptions). Highlighting is implemented using [skylighting](https://github.com/jgm/skylighting).\n\nFor example:\n\n``` yaml\n---\nhighlight-style: custom.theme\n---\n```\n\nIn addition, if you'd like to provide adaptive themes, you may also pass both a light and dark theme file:\n\n``` yaml\n---\nhighlight-style:\n light: custom-light.theme\n dark: custom-dark.theme\n---\n```\n\nNote that as with adaptive text higlighting themes, when you provide a dark and light `highlight-style`, background colors specified in the themes will be ignored in favor of the overall theme specified background colors.\n\n\n## Code Annotation\n\nYou can add annotations to lines of code in code blocks and executable code cells. See [Code Annotation](/docs/authoring/code-annotation.qmd) for full details.\n\n\n\n## Line Numbers {#line-numbers}\n\nIf you want to display line numbers alongside the code block, add the `code-line-numbers` option. For example:\n\n``` yaml\nformat:\n html:\n code-line-numbers: true\n```\n\nHere's how a code block with line numbers would display:\n\n``` {.python code-line-numbers=\"true\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n\nYou can also enable line numbers for an individual code block using the `code-line-numbers` attribute. For example:\n\n```` python\n``` {.python code-line-numbers=\"true\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n````\n\n## Executable Blocks\n\nThe documentation on [computations](/docs/get-started/computations/index.qmd) covers how to include executable code blocks (code which is actually executed, with its output being included in the rendered document). We won't additionally cover that here, but we will talk about how to include code blocks that demonstrate executable syntax (e.g. for writing a tutorial).\n\n\n\n\n\nOften you'll want to include a fenced code block purely as documentation (not executable). You can do this by using two curly braces around the language (e.g. `python`, `r`, etc.) rather than one. For example:\n\n```{{{python}}}\n1 + 1\n```\n\nWill be output into the document as:\n\n```{{python}}\n1 + 1\n```\n\nIf you want to show an example with multiple code blocks and other markdown, just enclose the entire example in 4 backticks (e.g. ````` ```` `````) and use the two curly brace syntax for code blocks within. For example:\n\n ````\n ---\n title: \"My document\"\n ---\n\n Some markdown content.\n\n ```{{{python}}}\n 1 + 1\n ```\n\n Some additional markdown content.\n\n ````\n\n\n\n## Copy Button\n\nHover over the code block below and you will see a copy icon in the top-right corner:\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(dygraphs)\ndygraph(nhtemp, main = \"New Haven Temperatures\") %>% \n dyRangeSelector(dateWindow = c(\"1920-01-01\", \"1960-01-01\"))\n```\n:::\n\n\n\nThis behavior is enabled by default but you configure it using the `code-copy` option:\n\n``` yaml\nformat:\n html:\n code-copy: false\n```\n\nValid values for `code-copy` include:\n\n| | |\n|---------|--------------------------------|\n| `hover` | Show button on hover (default) |\n| `true` | Always show code copy button |\n| `false` | Never show code copy button |\n\n## Code Linking\n\nThe `code-link` option enables hyper-linking of functions within code blocks to their online documentation:\n\n``` yaml\nformat:\n html:\n code-link: true\n```\n\nCode linking is currently implemented only for the knitr engine (via the [downlit](https://downlit.r-lib.org) package).\nA limitation of downlit currently prevents code linking if `code-line-numbers` and/or `code-annotations` are also `true`.\n", + "markdown": "---\ntitle: \"HTML Code Blocks\"\nformat: \n html:\n code-tools: true\nexecute:\n warning: false\n---\n\n## Overview\n\nThere are wide variety of options available to customize the display of source code within HTML documents, including:\n\n1. Hiding some or all code that was executed by [Knitr](https://yihui.name/knitr) or [Jupyter](https://jupyter.org).\n2. Code folding for executed code (hidden by default and expandable by readers).\n3. Handling code that overflows the available horizontal display space.\n4. View the source code of the markdown file used to generate the document.\n5. Syntax highlighting themes and other options to control the appearance of code.\n6. Copy to clipboard button for code blocks.\n7. Generating hyperlinks to online documentation for functions used within code blocks via the [downlit](https://downlit.r-lib.org/) package (note that this option currently only works when using the Knitr engine).\n\nDetails on using all of these options are provided below.\n\n## Hiding Code\n\nFor many documents you may want to hide all of the executable source code used to produce dynamic outputs. You can do this by specifying `echo: false` in the document `execute` options. For example:\n\n``` yaml\n---\ntitle: \"My Document\"\nexecute:\n echo: false\njupyter: python3\n---\n```\n\nNote that we can override this option on a per code-block basis. For example:\n\n```{{python}}\n#| echo: true\n\nimport matplotlib.pyplot as plt\nplt.plot([1,2,3,4])\nplt.show()\n```\n\nCode block options are included in a special comment at the top of the block (lines at the top prefaced with `#|` are considered options).\n\n## Folding Code\n\nUse the `code-fold` option to include code but have it hidden by default using the HTML `
` tag. For example, click the **Code** button to see the code that produced this plot.\n\n\n::: {.cell}\n\n```{.r .cell-code code-fold=\"true\"}\nlibrary(ggplot2)\ndat <- data.frame(cond = rep(c(\"A\", \"B\"), each=10),\n xvar = 1:20 + rnorm(20,sd=3),\n yvar = 1:20 + rnorm(20,sd=3))\n\nggplot(dat, aes(x=xvar, y=yvar)) +\n geom_point(shape=1) + \n geom_smooth() \n```\n\n::: {.cell-output-display}\n![](html-code_files/figure-html/unnamed-chunk-1-1.png){width=672}\n:::\n:::\n\n\nHere we specify both `code-fold: true` as well as custom summary text (the default is just \"Code\" as shown above):\n\n``` yaml\nformat:\n html:\n code-fold: true\n code-summary: \"Show the code\"\n```\n\nValid values for `code-fold` include:\n\n| Value | Behavior |\n|---------|------------------------------|\n| `false` | No folding (default) |\n| `true` | Fold code (initially hidden) |\n| `show` | Fold code (initially shown) |\n\nUse the `code-fold` and `code-summary` chunk attributes to control this on a chunk-by-chunk basis:\n\n```{{r}}\n#| code-fold: true\n#| code-summary: \"Show the code\"\n```\n\n## Code Overflow\n\nIn some cases the width of source code will overflow the available horizontal display space. By default, this will result in a horizontal scroll bar for the code block. However if you prefer not to have scrollbars you can have the longer lines wrap instead.\n\nTo set the global default behavior use the `code-overflow` option. For example:\n\n``` yaml\nformat:\n html:\n code-overflow: wrap\n```\n\nValid values for `code-overflow` are:\n\n| Option | Description |\n|------------------|------------------------------------------------------|\n| `scroll` | Scroll code blocks that exceed available width (default, corresponds to `white-space: pre`). |\n| `wrap` | Wrap lines of code that exceed available width (corresponds to `white-space: pre-wrap`). |\n\nYou can also override the global default on a per-code-block basis. For computational cells you do this with the `code-overflow` cell option:\n\n```{{python}}\n#| code-overflow: wrap\n\n# very long line of code....\n```\n\nFor a static code block, add the `.code-overflow-scroll` or `.code-overflow-wrap` CSS class:\n\n```` python\n```{.python .code-overflow-wrap}\n# very long line of code....\n```\n````\n\nNote that irrespective of these options, code will always wrap within printed HTML output (as it would otherwise be clipped off the edge of the page).\n\n## Code Tools\n\nYou can include a **Code** menu in the header of your document that provides various tools for readers to interact with the source code. Specify `code-tools: true` to activate these tools:\n\n``` yaml\nformat:\n html:\n code-fold: true\n code-tools: true\n```\n\nIf you have a document that includes folded code blocks then the **Code** menu will present options to show and hide the folded code as well as view the full source code of the document:\n\n![](images/code-tools-01.png){.border fig-alt=\"A screen shot of the header of a rendered Quarto document showing the result of setting both the code-fold and code-tools option to true. There is a drop-down menu labeled 'Code' to the right of the page title with a triangle pointing down. The menu is open and there are three options listed vertically beneath it: 'Hide All Code,' 'Show All Code,' and 'View Source.'\"}\n\nThis document specifies `code-tools: true` in its options so you should see the **Code** menu above next to the main header.\n\nYou can control which of these options are made available as well as the \"Code\" caption text using sub-options of `code-tools`. For example, here we specify that we want only \"View Source\" (no toggling of code visibility) and no caption on the code menu:\n\n``` yaml\nformat:\n html: \n code-tools:\n source: true\n toggle: false\n caption: none\n```\n\nBy default, the source code is embedded in the document and shown in a popup window like this:\n\n![](images/code-tools-source.png){fig-alt=\"A screenshot of this webpage with a pop-up window labeled 'Source Code' over it. This 'Source Code' window contains the raw markdown and R code used to write this page. There is an 'X' on the upper right corner of the 'Source Code' pop up to close it.\"}\n\nYou can alternatively specify a URL for the value of `source`:\n\n``` yaml\nformat:\n html: \n code-tools:\n source: https://github.com/quarto-dev/quarto-web/blob/main/index.md\n```\n\nIf you are within a project and have specified a `repo-url` option then you can just use `repo` and the correct link to your source file will be generated:\n\n``` yaml\nformat:\n html: \n code-tools:\n source: repo\n```\n\nNote that the `code-tools` option is not available when you disable the standard HTML theme (e.g. if you specify the `theme: none` option).\n\n## Appearance\n\nBy default code blocks are rendered with a left border whose color is derived from the current theme. You can customize code chunk appearance with some simple options that control the background color and left border. Options can either be booleans to enable or disable the treatment or can be legal CSS color strings (or they could even be SASS variable names!).\n\nHere is the default appearance for code blocks (`code-block-bg: true`):\n\n![](images/code-bg.png){fig-alt=\"A block of code with a gray background.\"}\n\nYou can instead use a left border treatment using the `code-block-border-left` option:\n\n``` yaml\ncode-block-border-left: true\n```\n\n![](images/code-default.png){fig-alt=\"A block of code with a gray vertical stripe running along its left border. This code block has no background.\"}\n\nYou can combine a background and border treatment as well as customize the left border color:\n\n``` yaml\ncode-block-bg: true\ncode-block-border-left: \"#31BAE9\"\n```\n\n![](images/code-custom.png){fig-alt=\"A block of code with a gray background and a blue vertical stripe running along its left border.\"}\n\n## Code Filename {#code-filename}\n\nUse the `filename` attribute on code blocks If you are documenting the contents of a file and want to be especially clear about the name of the file the code is associated with.\n\nFor example, the following code:\n\n```` markdown\n```{.python filename=\"matplotlib.py\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n````\n\nResults in this HTML output:\n\n```{.python filename=\"matplotlib.py\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n\nNon-HTML formats will still have the filename, but it will simply be shown in bold above the code block.\n\n## Highlighting\n\nPandoc will automatically highlight syntax in [fenced code blocks](https://pandoc.org/MANUAL.html#fenced-code-blocks) that are marked with a language name. For example:\n\n ```python\n 1 + 1\n ```\n\nPandoc can provide syntax highlighting for over 140 different languages (see the output of `quarto pandoc --list-highlight-languages` for a list of all of them). If you want to provide the appearance of a highlighted code block for a language not supported, just use `default` as the language name.\n\nYou can specify the code highlighting style using `highlight-style` and specifying one of the supported themes. These themes are \"adaptive\", which means they will automatically switch between a dark and light mode based upon the theme of the website. These are designed to work well with sites that include a dark and light mode.\n\n- a11y\n- arrow\n- atom-one\n- ayu\n- breeze\n- github\n- gruvbox\n\nAll of the standard Pandoc themes are also available:\n\n- pygments\n- tango\n- espresso\n- zenburn\n- kate\n- monochrome\n- breezedark\n- haddock\n\nAs well as an additional set of extended themes, including:\n\n- dracula\n- monokai\n- nord\n- oblivion\n- printing\n- radical\n- solarized\n- vim-dark\n\nThe `highlight-style` option determines which theme is used. For example:\n\n``` yaml\nhighlight-style: github\n```\n\nHighlighting themes can provide either a single highlighting definition or two definitions, one optimized for a light colored background and another optimized for a dark color background. When available, Quarto will automatically select the appropriate style based upon the code chunk background color's darkness. Users may always opt to specify the full name (e.g. `atom-one-dark`) to by pass this automatic behavior.\n\nBy default, code is highlighted using the `arrow` theme, which is optimized for accessibility. We've additionally introduced the `arrow-dark` theme which is designed to provide accessible highlighting against dark backgrounds.\n\nExamples of the light and dark themes:\n\n#### Arrow (light)\n\n![](images/arrow.png){fig.alt=\"A block of code showcasing the Arrow (light) theme.\"}\n\n#### Arrow (dark)\n\n![](images/arrow-dark.png){fig.alt=\"A block of code showcasing the Arrow (dark) theme.\"}\n\n#### Ayu (light)\n\n![](images/ayu.png){fig.alt=\"A block of code showcasing the Ayu (light) theme.\"}\n\n#### Ayu (dark)\n\n![](images/ayu-dark.png){.preview-image fig.alt=\"A block of code showcasing the Ayu (dark) theme.\"}\n\n### Custom Highlighting\n\nIn addition to the built in themes available for syntax highlighting, you can also specify your own syntax highlighting by providing the path to a valid theme file (which is based upon the KDE XML syntax highlighting descriptions). Highlighting is implemented using [skylighting](https://github.com/jgm/skylighting).\n\nFor example:\n\n``` yaml\n---\nhighlight-style: custom.theme\n---\n```\n\nIn addition, if you'd like to provide adaptive themes, you may also pass both a light and dark theme file:\n\n``` yaml\n---\nhighlight-style:\n light: custom-light.theme\n dark: custom-dark.theme\n---\n```\n\nNote that as with adaptive text higlighting themes, when you provide a dark and light `highlight-style`, background colors specified in the themes will be ignored in favor of the overall theme specified background colors.\n\n## Code Annotation\n\nYou can add annotations to lines of code in code blocks and executable code cells. See [Code Annotation](/docs/authoring/code-annotation.qmd) for full details.\n\n\n## Line Numbers {#line-numbers}\n\nIf you want to display line numbers alongside the code block, add the `code-line-numbers` option. For example:\n\n``` yaml\nformat:\n html:\n code-line-numbers: true\n```\n\nHere's how a code block with line numbers would display:\n\n``` {.python code-line-numbers=\"true\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n\nYou can also enable line numbers for an individual code block using the `code-line-numbers` attribute. For example:\n\n```` python\n``` {.python code-line-numbers=\"true\"}\nimport matplotlib.pyplot as plt\nplt.plot([1,23,2,4])\nplt.show()\n```\n````\n\n## Executable Blocks\n\nThe documentation on [computations](/docs/get-started/computations/index.qmd) covers how to include executable code blocks (code which is actually executed, with its output being included in the rendered document). We won't additionally cover that here, but we will talk about how to include code blocks that demonstrate executable syntax (e.g. for writing a tutorial).\n\n\n\n\nOften you'll want to include a fenced code block purely as documentation (not executable). You can do this by using two curly braces around the language (e.g. `python`, `r`, etc.) rather than one. For example:\n\n```{{{python}}}\n1 + 1\n```\n\nWill be output into the document as:\n\n```{{python}}\n1 + 1\n```\n\nIf you want to show an example with multiple code blocks and other markdown, just enclose the entire example in 4 backticks (e.g. ````` ```` `````) and use the two curly brace syntax for code blocks within. For example:\n\n ````\n ---\n title: \"My document\"\n ---\n\n Some markdown content.\n\n ```{{{python}}}\n 1 + 1\n ```\n\n Some additional markdown content.\n\n ````\n\n\n## Copy Button\n\nHover over the code block below and you will see a copy icon in the top-right corner:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(dygraphs)\ndygraph(nhtemp, main = \"New Haven Temperatures\") %>% \n dyRangeSelector(dateWindow = c(\"1920-01-01\", \"1960-01-01\"))\n```\n:::\n\n\nThis behavior is enabled by default but you configure it using the `code-copy` option:\n\n``` yaml\nformat:\n html:\n code-copy: false\n```\n\nValid values for `code-copy` include:\n\n| | |\n|---------|--------------------------------|\n| `hover` | Show button on hover (default) |\n| `true` | Always show code copy button |\n| `false` | Never show code copy button |\n\n## Code Linking\n\nThe `code-link` option enables hyper-linking of functions within code blocks to their online documentation:\n\n``` yaml\nformat:\n html:\n code-link: true\n```\n\nCode linking is currently implemented only for the knitr engine (via the [downlit](https://downlit.r-lib.org) package).\nA limitation of downlit currently prevents code linking if `code-line-numbers` and/or `code-annotations` are also `true`.\n", "supporting": [ "html-code_files" ], diff --git a/_freeze/docs/output-formats/html-code/figure-html/unnamed-chunk-1-1.png b/_freeze/docs/output-formats/html-code/figure-html/unnamed-chunk-1-1.png index 7429784b4f..6a0b8f8096 100644 Binary files a/_freeze/docs/output-formats/html-code/figure-html/unnamed-chunk-1-1.png and b/_freeze/docs/output-formats/html-code/figure-html/unnamed-chunk-1-1.png differ diff --git a/_freeze/site_libs/quarto-listing/quarto-listing.js b/_freeze/site_libs/quarto-listing/quarto-listing.js index 54d0e1e7f2..e9a07b2ea3 100644 --- a/_freeze/site_libs/quarto-listing/quarto-listing.js +++ b/_freeze/site_libs/quarto-listing/quarto-listing.js @@ -2,7 +2,8 @@ const kProgressiveAttr = "data-src"; let categoriesLoaded = false; window.quartoListingCategory = (category) => { - category = atob(category); + // category is URI encoded in EJS template for UTF-8 support + category = decodeURIComponent(atob(category)); if (categoriesLoaded) { activateCategory(category); setCategoryHash(category); diff --git a/_internals/updating-lua-autogen.md b/_internals/updating-lua-autogen.md new file mode 100644 index 0000000000..701d219835 --- /dev/null +++ b/_internals/updating-lua-autogen.md @@ -0,0 +1,18 @@ +# Lua API docs + +We semi-automatically generate the Lua API docs (`docs/lua/*`). + +This happens through the following steps: + +- run the Lua LSP JSON generator + - This is `https://github.com/LuaLS/lua-language-server` + - You'll need to clone the repo and build it (it will end up in `bin/lua-language-server`) + - From there, run something like + + ``` + $ ./lua-language-server --doc=../../../quarto-dev/quarto-cli/src/resources/lua-types + ``` + + there will be two files produced: doc.json and doc.md. Delete `doc.md` and move `doc.json` to `docs/lua` in this repository. + +- run `quarto run tools/build-lua-types-autogen.ts` diff --git a/_quarto-prerelease-docs.yml b/_quarto-prerelease-docs.yml index 700502c2ba..2645be20e8 100644 --- a/_quarto-prerelease-docs.yml +++ b/_quarto-prerelease-docs.yml @@ -1,5 +1,5 @@ # Pre-release version number -version: v1.7 +version: v1.8 website: title: "Quarto (Pre-release)" diff --git a/_quarto.yml b/_quarto.yml index 5fcba34acf..5c4fbf8847 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -37,7 +37,7 @@ website: page-footer: left: | Proudly supported by - [![](https://posit.co/wp-content/uploads/2024/06/Posit-Logos-2024_horiz-full-color.svg){fig-alt="Posit" width=65px}](https://posit.co) + [![](/images/Posit-Logos-2024_horiz-full-color.svg){fig-alt="Posit" width=65px .light-content}](https://posit.co) [![](/images/Posit-Logos-2024_horiz-full-color-white-text.svg){fig-alt="Posit" width=65px .dark-content}](https://posit.co) center: - text: "About" href: about.qmd @@ -194,15 +194,24 @@ website: - docs/visual-editor/content.qmd - docs/visual-editor/options.qmd - docs/visual-editor/markdown.qmd + - section: "Positron" + href: docs/tools/positron/index.qmd + contents: + - text: "Positron Basics" + href: docs/tools/positron/index.qmd + - text: "Visual Editor" + href: docs/tools/positron/visual-editor.qmd + - text: "Notebook Editor" + href: docs/tools/positron/notebook.qmd - section: "VS Code" - href: docs/tools/vscode.qmd + href: docs/tools/vscode/index.qmd contents: - text: "VS Code Basics" - href: docs/tools/vscode.qmd + href: docs/tools/vscode/index.qmd - text: "Visual Editor" - href: docs/visual-editor/vscode/index.qmd + href: docs/tools/vscode/visual-editor.qmd - text: "Notebook Editor" - href: docs/tools/vscode-notebook.qmd + href: docs/tools/vscode/notebook.qmd - docs/tools/neovim.qmd - docs/tools/text-editors.qmd - section: "Documents" @@ -440,8 +449,6 @@ website: href: docs/extensions/listing-formats.qmd - text: "Revealjs Extensions" href: docs/extensions/listing-revealjs.qmd - - text: "Metadata Extensions" - href: docs/extensions/metadata.qmd - docs/extensions/managing.qmd - "---" - section: docs/extensions/creating.qmd @@ -466,6 +473,8 @@ website: - docs/extensions/formats.qmd - docs/extensions/revealjs.qmd - docs/extensions/project-types.qmd + - text: "Metadata Extensions" + href: docs/extensions/metadata.qmd - docs/extensions/starter-templates.qmd - id: reference @@ -673,6 +682,13 @@ format: code-copy: true code-overflow: wrap css: styles.css + include-in-header: + - text: | + include-after-body: js.html grid: sidebar-width: 250px @@ -682,6 +698,8 @@ format: filters: - filters/tools-tabset.lua - filters/color-box.lua + - at: post-quarto + path: filters/include-dark.lua freeze: true diff --git a/_redirects b/_redirects index df82134bc6..49e6744045 100644 --- a/_redirects +++ b/_redirects @@ -1,24 +1,24 @@ -/download/latest/changelog.md-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/changelog.md -/download/latest/quarto-checksums.txt https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-checksums.txt -/download/latest/quarto-linux-amd64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-amd64.deb -/download/latest/quarto-linux-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-amd64.tar.gz -/download/latest/quarto-linux-arm64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-arm64.deb -/download/latest/quarto-linux-arm64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-arm64.tar.gz -/download/latest/quarto-linux-rhel7-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-rhel7-amd64.tar.gz -/download/latest/quarto-macos.pkg https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-macos.pkg -/download/latest/quarto-macos.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-macos.tar.gz -/download/latest/quarto-win.msi https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-win.msi -/download/latest/quarto-win.zip https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-win.zip -/download/latest/quarto-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29.tar.gz -/download/prerelease/changelog.md-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/changelog.md -/download/prerelease/quarto-checksums.txt https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-checksums.txt -/download/prerelease/quarto-linux-amd64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-amd64.deb -/download/prerelease/quarto-linux-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-amd64.tar.gz -/download/prerelease/quarto-linux-arm64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-arm64.deb -/download/prerelease/quarto-linux-arm64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-arm64.tar.gz -/download/prerelease/quarto-linux-rhel7-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-rhel7-amd64.tar.gz -/download/prerelease/quarto-macos.pkg https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-macos.pkg -/download/prerelease/quarto-macos.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-macos.tar.gz -/download/prerelease/quarto-win.msi https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-win.msi -/download/prerelease/quarto-win.zip https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-win.zip -/download/prerelease/quarto-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0.tar.gz \ No newline at end of file +/download/latest/changelog.md-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/changelog.md +/download/latest/quarto-checksums.txt https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-checksums.txt +/download/latest/quarto-linux-amd64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-amd64.deb +/download/latest/quarto-linux-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-amd64.tar.gz +/download/latest/quarto-linux-arm64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-arm64.deb +/download/latest/quarto-linux-arm64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-arm64.tar.gz +/download/latest/quarto-linux-rhel7-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-rhel7-amd64.tar.gz +/download/latest/quarto-macos.pkg https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-macos.pkg +/download/latest/quarto-macos.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-macos.tar.gz +/download/latest/quarto-win.msi https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-win.msi +/download/latest/quarto-win.zip https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-win.zip +/download/latest/quarto-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33.tar.gz +/download/prerelease/changelog.md-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/changelog.md +/download/prerelease/quarto-checksums.txt https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-checksums.txt +/download/prerelease/quarto-linux-amd64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-amd64.deb +/download/prerelease/quarto-linux-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-amd64.tar.gz +/download/prerelease/quarto-linux-arm64.deb https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-arm64.deb +/download/prerelease/quarto-linux-arm64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-arm64.tar.gz +/download/prerelease/quarto-linux-rhel7-amd64.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-rhel7-amd64.tar.gz +/download/prerelease/quarto-macos.pkg https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-macos.pkg +/download/prerelease/quarto-macos.tar.gz https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-macos.tar.gz +/download/prerelease/quarto-win.msi https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-win.msi +/download/prerelease/quarto-win.zip https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-win.zip +/download/prerelease/quarto-. https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20.tar.gz \ No newline at end of file diff --git a/docs/advanced/environment-vars.qmd b/docs/advanced/environment-vars.qmd index 0eafbfe4fa..d6fa25def7 100644 --- a/docs/advanced/environment-vars.qmd +++ b/docs/advanced/environment-vars.qmd @@ -38,6 +38,14 @@ You can read about other ways to set environment variables in Quarto Projects in +---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | `QUARTO_CHROMIUM_HEADLESS_MODE` | Used for adaption of the `--headless` mode used with `QUARTO_CHROMIUM` binary. Set to `"none"` for `--headless` , or to `"old"` or `"new"` to pass as argument, e.g. `--headless=` . Quarto 1.6 sets `"old"` as default, which works from Chrome 112 to 131. Starting Quarto 1.7.13, `"none"` is the default as [Chrome 132 removed old headless mode](https://developer.chrome.com/blog/removing-headless-old-from-chrome). | +---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `QUARTO_LOG` | Those variables controls the logging behavior: | +| | | +| `QUARTO_LOG_LEVEL` | - `QUARTO_LOG` is the same as using `--log` at command line. It is used to set the path to the log file | +| | | +| `QUARTO_LOG_FORMAT` | - `QUARTO_LOG_LEVEL` is the same as using `--log-level` at command line. It is used to set the max level that will be log. Possible values are `DEBUG`, `INFO`(default), `WARNING`, and `ERROR`. | +| | | +| | - `QUARTO_LOG_FORMAT` is the same as using `--log-format` at command line. It is used to set the format for the log. Possible values are `plain` (default) and `json-stream`. | ++---------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ## Variables Quarto sets @@ -71,9 +79,11 @@ ENV["QUARTO_DOCUMENT_PATH"] +--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | `QUARTO_DOCUMENT_PATH` | Directory of the document being rendered | +--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| `QUARTO_DOCUMENT_FILE` | Name of the file being rendered | ++--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | `QUARTO_PROFILE` | Profile used, e.g `QUARTO_PROFILE=advanced,production` for `quarto render --profile advanced,production` | +--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | `QUARTO_FIG_WIDTH`ย andย `QUARTO_FIG_HEIGHT` | Values for `fig-width` and `fig-height` as set in the document metadata | +--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | `QUARTO_RUN_NO_NETWORK` | When `true`, Quarto project scripts written in TypeScript won't be allowed to use the network to download sources. In this setting, those scripts will not have access to the standard library. | -+--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ++--------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ \ No newline at end of file diff --git a/docs/blog/posts/2025-xx-xx-1.7-release/_contribs.md b/docs/advanced/html/_external-sources-section.md similarity index 100% rename from docs/blog/posts/2025-xx-xx-1.7-release/_contribs.md rename to docs/advanced/html/_external-sources-section.md diff --git a/docs/advanced/html/external-sources.qmd b/docs/advanced/html/external-sources.qmd new file mode 100644 index 0000000000..64571cc1bb --- /dev/null +++ b/docs/advanced/html/external-sources.qmd @@ -0,0 +1,43 @@ +--- +title: External servers used by Quarto documents +--- + +The HTML files produced by Quarto (`html` documents, `dashboard`s, and `revealjs` presentations) are designed to minimize external dependencies. + +However, on occasion, these documents might access resources hosted in external servers. +The following is a list of such situations: + +- For jupyter widgets support: + - `cdn.jsdelivr.net` +- If Google analytics support is enabled in websites: + - `www.googletagmanager.com` + - `www.google-analytics.com` +- For math rendering method: + - If `mathjax` is chosen (used by default): + - `cdn.jsdelivr.net` + - If `webtex` is chosen: + - `latex.codecogs.com` + - If `katex` is chosen: + - `cdn.jsdelivr.net` +- If multiplex mode in `revealjs` is enabled: + - `reveal-multiplex.glitch.me` +- For a number of revealjs and bootswatch themes: + - `fonts.googleapis.com` +- For Quarto's internal debugging tools: + - `esm.sh` + - `cdn.skypack.dev` +- For giscus support: + - `giscus.app` +- For the `placeholder` shortcode: + - `svg2png.deno.dev` +- For the `video` shortcode: + - `www.youtube-nocookie.com` + - `players.brightcove.net` + - `www.youtube.com` + - `vimeo.com` + - `youtu.be` +- For documents with OJS content: + - `static.observableusercontent.com` + - `cdn.observableusercontent.com` + - `cdn.jsdelivr.net` + - `unpkg.com` diff --git a/docs/advanced/inspect/index.qmd b/docs/advanced/inspect/index.qmd index cb80235bdb..b8bb3774f0 100644 --- a/docs/advanced/inspect/index.qmd +++ b/docs/advanced/inspect/index.qmd @@ -61,6 +61,8 @@ If an additional parameter is given, the output is written to the specified path - `source`: the content of the code cell - `language`: the language of the code cell - `metadata`: the cell-level metadata for the code cell +- `extensions`: an array of objects containing information about extensions installed in the project. + The precise description of the information provided in each object is given by the [TypeScript interface `Extension` in Quarto's source code](https://github.com/quarto-dev/quarto-cli/blob/main/src/extension/types.ts#L29-L44) (We do not expect this interface to change, but we reserve the right to do so if needed). ## JSON Schemas diff --git a/docs/advanced/inspect/quarto-inspect-project-json-schema.json b/docs/advanced/inspect/quarto-inspect-project-json-schema.json index 28d8f92d90..7b7241e475 100644 --- a/docs/advanced/inspect/quarto-inspect-project-json-schema.json +++ b/docs/advanced/inspect/quarto-inspect-project-json-schema.json @@ -83,7 +83,7 @@ } } } - } - + }, + "extensions": { "type": "array", "items": { "type": "object" } } } } \ No newline at end of file diff --git a/docs/advanced/typst/typst-css.qmd b/docs/advanced/typst/typst-css.qmd index 25e04245cb..2f8650eb60 100644 --- a/docs/advanced/typst/typst-css.qmd +++ b/docs/advanced/typst/typst-css.qmd @@ -39,6 +39,8 @@ Typst CSS works for the specific combinations of HTML elements and CSS propertie | color | โœ“ | โœ“ | | โœ“ | | font-family | | โœ“ | โœ“ | | | font-size | | โœ“ | โœ“ | | +| font-style | โœ“ | โœ“ | | โœ“ | +| font-weight | โœ“ | โœ“ | | โœ“ | | opacity | โœ“ | | | โœ“ | | align[^2] | | | | โœ“ | diff --git a/docs/authoring/_kbd.qmd b/docs/authoring/_kbd.qmd index 01534b501e..7547ba38b0 100644 --- a/docs/authoring/_kbd.qmd +++ b/docs/authoring/_kbd.qmd @@ -1,6 +1,12 @@ {{< include ../_require-1.3.qmd >}} -The `kbd` [shortcode](shortcodes.qmd) can be used to describe keyboard shortcuts in documentation. On Javascript formats, it will attempt to detect the operating system of the format and show the correct shortcut. On print formats, it will print the keyboard shortcut information for all operating systems. +The `kbd` [shortcode](shortcodes.qmd) can be used to describe keyboard shortcuts in documentation: + +- single keyboard shortcuts for every operating system use a **positional parameter**: `{{{< kbd Ctrl-C >}}}` +- different shortcuts for different operating systems use **keyword parameters `win`, `mac`, and `linux`**: `{{{< kbd mac=Shift-Command-O win=Shift-Control-O linux=Shift-Ctrl-L >}}}` + +On Javascript formats, Quarto will attempt to detect the operating system of the format and show the correct shortcut. +On print formats, it will print the keyboard shortcut information for all operating systems. For example, writing the following markdown: diff --git a/docs/authoring/cross-references-divs.qmd b/docs/authoring/cross-references-divs.qmd index 504baf931a..59dc99ab15 100644 --- a/docs/authoring/cross-references-divs.qmd +++ b/docs/authoring/cross-references-divs.qmd @@ -6,9 +6,21 @@ title: Cross-Reference Div Syntax ## Overview -Cross-referenceable [figures](#figures), [tables](#tables) and [code listings](#listings) are known as *float* cross-references. Floats can appear in the rendered document at locations other than where they are defined, i.e. they float, and usually have captions. +Cross-referenceable [figures](#figures), [tables](#tables) and [code listings](#listings) are known as *float* cross-references. +Floats can appear in the rendered document at locations other than where they are defined, i.e. they float, and usually have captions. -Along with compact syntax for the most common uses of cross-references, Quarto also provides a more general div syntax for declaring floats that can be cross-referenced. To declare a cross-referenceable float, place the content inside a fenced div with the reference identifier as an attribute. The last paragraph inside the fenced div will be treated as the caption. For example: +Along with compact syntax for the most common uses of cross-references, Quarto also provides a more general div syntax for declaring floats that can be cross-referenced. +To declare a cross-referenceable float, place the content inside a fenced div with the reference identifier as an attribute. +The last paragraph inside the fenced div will be treated as the caption. + +::: callout-warning + +Quarto currently only supports this alternative syntax for **floats**, as described above. +Some cross-referenceable elements like theorems, proofs, etc naturally use this div syntax, but note that Quarto does not support the use of the div syntax for block-level equations. + +::: + +As a minimal example, consider the following QMD snippet: ````{.markdown} ::: {#fig-example} @@ -20,6 +32,18 @@ Caption ::: ```` +This produces the following (admittedly silly) figure: + +::: {#fig-example} + +CONTENT + +Caption + +::: + +Now, this figure can be cross-referenced with `@fig-example`, see @fig-example. + To be recognized as a cross-reference the identifier must begin with one of the built-in float reference types (Figures (`fig-`), Tables (`tbl-`) and Listings (`lst-`)), or be defined as a [custom float cross-reference](cross-references-custom.qmd) type. You can then refer to the element as usual with the `@` syntax, e.g. diff --git a/docs/authoring/cross-references.qmd b/docs/authoring/cross-references.qmd index 5ba7f07329..f5a48a1b6b 100644 --- a/docs/authoring/cross-references.qmd +++ b/docs/authoring/cross-references.qmd @@ -35,7 +35,7 @@ Note that cross reference identifiers must start with their type (e.g. `fig-` or Unless you are creating a cross-reference, avoid using the reserved cross-reference prefixes for code cell labels (e.g. set using the `label` code cell option) and element IDs (set using a `#` in an attribute). -The reserved prefixes are: `fig`, `tbl`, `lst`, `tip`, `nte`, `wrn`, `imp`, `cau`, `thm`, `lem`, `cor`, `prp`, `cnj`, `def`, `exm`, `exr`, `sol`, `rem`, `eq`, `sec`. +The reserved prefixes are: `fig`, `tbl`, `lst`, `tip`, `nte`, `wrn`, `imp`, `cau`, `thm`, `lem`, `cor`, `prp`, `cnj`, `def`, `exm`, `exr`, `sol`, `rem`, `alg`, `eq`, `sec`. Also avoid using underscores (`_`) in labels and IDs as this can cause problems when rendering to PDF with LaTeX. @@ -344,6 +344,7 @@ There are a number of theorem variations supported, each with their own label pr | `#exr-` | Exercise | exercise | | `#sol-` | Solution | solution | | `#rem-` | Remark | remark | +| `#alg-` | Algorithm | algorithm | The `proof` environment receives similar typesetting as theorems, however it is not numbered (and therefore cannot be cross-referenced). To create a proof add the `.proof` class to a div: diff --git a/docs/authoring/diagrams.qmd b/docs/authoring/diagrams.qmd index ebefa23503..712007803d 100644 --- a/docs/authoring/diagrams.qmd +++ b/docs/authoring/diagrams.qmd @@ -94,12 +94,10 @@ There are a variety of tools available to improve your productivity authoring di 3) [RStudio](https://www.rstudio.com/products/rstudio/download/) includes support for editing and previewing `.mmd` and `.dot` files (with help from the [DiagrammeR](https://rich-iannone.github.io/DiagrammeR/) package). -4) The Quarto [VS Code Extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) supports live preview of diagrams embedded in `.qmd` files and in `.mmd` and `.dot` files: +4) The Quarto Extension for VS Code and Positron (available on both [OpenVSX](https://open-vsx.org/extension/quarto/quarto) and [Microsoft's marketplace](https://marketplace.visualstudio.com/items?itemName=quarto.quarto)) supports live preview of diagrams embedded in `.qmd` files and in `.mmd` and `.dot` files: ![](images/vscode-graphviz.gif){.border fig-alt="A Quarto document being edited in Visual Studio Code, with a live preview of the currenly edited diagram shown in a pane to the right"} - Note that you should be sure to have installed the [very latest](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) version of the Quarto VS Code extension to try this out. - ## Cross-References Diagrams can be treated as figures the same way that images and plot output are. For example, if we added the following figure options to the diagram above: diff --git a/docs/authoring/markdown-basics.qmd b/docs/authoring/markdown-basics.qmd index 3c301a4b98..6cf47ba337 100644 --- a/docs/authoring/markdown-basics.qmd +++ b/docs/authoring/markdown-basics.qmd @@ -117,9 +117,9 @@ This document provides examples of the most commonly used markdown syntax. See t +===================================+=================================+ | ``` markdown | | | * unordered list | * unordered list | -| + sub-item 1 | + sub-item 1 | -| + sub-item 2 | + sub-item 2 | -| - sub-sub-item 1 | - sub-sub-item 1 | +| + sub-item 1 | + sub-item 1 | +| + sub-item 2 | + sub-item 2 | +| - sub-sub-item 1 | - sub-sub-item 1 | | ``` | | +-----------------------------------+---------------------------------+ | ``` markdown | | @@ -131,10 +131,21 @@ This document provides examples of the most commonly used markdown syntax. See t | ``` markdown | | | 1. ordered list | 1. ordered list | | 2. item 2 | 2. item 2 | -| i) sub-item 1 | i) sub-item 1 | -| A. sub-sub-item 1 | A. sub-sub-item 1 | +| i) sub-item 1 | i) sub-item 1 | +| A. sub-sub-item 1 | A. sub-sub-item 1 | | ``` | | +-----------------------------------+---------------------------------+ +| ```` markdown | | +| 1. ordered list | 1. ordered list | +| 2. item 2 | 2. item 2 | +| | | +| ```python | ```python | +| print("Hello, World!") | print("Hello, World!") | +| ``` | ``` | +| | | +| A. sub-sub-item 1 | A. sub-sub-item 1 | +| ```` | | ++-----------------------------------+---------------------------------+ | ``` markdown | | | - [ ] Task 1 | - [ ] Task 1 | | - [x] Task 2 | - [x] Task 2 | diff --git a/docs/blog/posts/2025-04-28-1.7-release/_contribs.md b/docs/blog/posts/2025-04-28-1.7-release/_contribs.md new file mode 100644 index 0000000000..eba98fe6e9 --- /dev/null +++ b/docs/blog/posts/2025-04-28-1.7-release/_contribs.md @@ -0,0 +1,92 @@ +[AndreasThinks](https://github.com/AndreasThinks), +[ArthurData](https://github.com/ArthurData), +[BrendonChau](https://github.com/BrendonChau), +[DanStuder](https://github.com/DanStuder), +[DavidFirth](https://github.com/DavidFirth), +[Eli-78-fas](https://github.com/Eli-78-fas), +[EllaKaye](https://github.com/EllaKaye), +[EmilHvitfeldt](https://github.com/EmilHvitfeldt), +[EvoArt](https://github.com/EvoArt), +[FMKerckhof](https://github.com/FMKerckhof), +[FrankwaP](https://github.com/FrankwaP), +[JanPalasek](https://github.com/JanPalasek), +[Jocarnail](https://github.com/Jocarnail), +[MHellmund](https://github.com/MHellmund), +[MichaelHatherly](https://github.com/MichaelHatherly), +[Noghpu](https://github.com/Noghpu), +[PeneLoopy](https://github.com/PeneLoopy), +[Rafnuss](https://github.com/Rafnuss), +[SergeCroise](https://github.com/SergeCroise), +[TonyFly3000](https://github.com/TonyFly3000), +[actuaristai](https://github.com/actuaristai), +[alex-r-bigelow](https://github.com/alex-r-bigelow), +[andrewheiss](https://github.com/andrewheiss), +[ant-durrant](https://github.com/ant-durrant), +[antoine4ucsd](https://github.com/antoine4ucsd), +[arnaudgallou](https://github.com/arnaudgallou), +[aronatkins](https://github.com/aronatkins), +[arthurgailes](https://github.com/arthurgailes), +[bkowshik](https://github.com/bkowshik), +[boshek](https://github.com/boshek), +[cbrnr](https://github.com/cbrnr), +[cl-roberts](https://github.com/cl-roberts), +[cmadland](https://github.com/cmadland), +[coatless](https://github.com/coatless), +[deepayan](https://github.com/deepayan), +[devmcp](https://github.com/devmcp), +[dhimmel](https://github.com/dhimmel), +[dkapitan](https://github.com/dkapitan), +[dmenne](https://github.com/dmenne), +[eamcvey](https://github.com/eamcvey), +[edavidaja](https://github.com/edavidaja), +[fredguth](https://github.com/fredguth), +[fuhrmanator](https://github.com/fuhrmanator), +[gadenbuie](https://github.com/gadenbuie), +[github-actions[bot]](https://github.com/apps/github-actions), +[glin](https://github.com/glin), +[gwbrck](https://github.com/gwbrck), +[hchulkim](https://github.com/hchulkim), +[hguturu](https://github.com/hguturu), +[hturner](https://github.com/hturner), +[ihrke](https://github.com/ihrke), +[jdutant](https://github.com/jdutant), +[jenslaufer](https://github.com/jenslaufer), +[jkrumbiegel](https://github.com/jkrumbiegel), +[jmgirard](https://github.com/jmgirard), +[joelostblom](https://github.com/joelostblom), +[kandolfp](https://github.com/kandolfp), +[kapsner](https://github.com/kapsner), +[kazuyanagimoto](https://github.com/kazuyanagimoto), +[kdheepak](https://github.com/kdheepak), +[kingo55](https://github.com/kingo55), +[knuesel](https://github.com/knuesel), +[kubu4](https://github.com/kubu4), +[kv9898](https://github.com/kv9898), +[kylie-foster](https://github.com/kylie-foster), +[loneguardian](https://github.com/loneguardian), +[lwjohnst86](https://github.com/lwjohnst86), +[ma2048](https://github.com/ma2048), +[markjholmes](https://github.com/markjholmes), +[maurosilber](https://github.com/maurosilber), +[mipmip](https://github.com/mipmip), +[mroavi](https://github.com/mroavi), +[mroberts1](https://github.com/mroberts1), +[msh855](https://github.com/msh855), +[mvuorre](https://github.com/mvuorre), +[nathanj3](https://github.com/nathanj3), +[odysseu](https://github.com/odysseu), +[parmsam](https://github.com/parmsam), +[peter-gy](https://github.com/peter-gy), +[pvelayudhan](https://github.com/pvelayudhan), +[raffaem](https://github.com/raffaem), +[robmcd](https://github.com/robmcd), +[ryanzomorrodi](https://github.com/ryanzomorrodi), +[stragu](https://github.com/stragu), +[sun123zxy](https://github.com/sun123zxy), +[t-kalinowski](https://github.com/t-kalinowski), +[temospena](https://github.com/temospena), +[tjni](https://github.com/tjni), +[torven-schalk](https://github.com/torven-schalk), +[turcotte](https://github.com/turcotte), +[wenyaoliu](https://github.com/wenyaoliu), +[yhkee0404](https://github.com/yhkee0404). diff --git a/docs/blog/posts/2025-04-28-1.7-release/dark.png b/docs/blog/posts/2025-04-28-1.7-release/dark.png new file mode 100644 index 0000000000..38c3dc4ecd Binary files /dev/null and b/docs/blog/posts/2025-04-28-1.7-release/dark.png differ diff --git a/docs/blog/posts/2025-xx-xx-1.7-release/get-contribs.R b/docs/blog/posts/2025-04-28-1.7-release/get-contribs.R similarity index 100% rename from docs/blog/posts/2025-xx-xx-1.7-release/get-contribs.R rename to docs/blog/posts/2025-04-28-1.7-release/get-contribs.R diff --git a/docs/blog/posts/2025-04-28-1.7-release/index.qmd b/docs/blog/posts/2025-04-28-1.7-release/index.qmd new file mode 100644 index 0000000000..b75446570a --- /dev/null +++ b/docs/blog/posts/2025-04-28-1.7-release/index.qmd @@ -0,0 +1,130 @@ +--- +title: Quarto 1.7 +description: | + Quarto 1.7 brings big improvements to dark mode along with updates to Typst, Pandoc, a new `version` shortcode, and improvements to the `julia` engine. +categories: + - Quarto 1.7 + - Releases +author: Charlotte Wickham +date: "2025-04-28" +draft: false +image: thumbnail-1.7.jpeg +image-alt: "Quarto 1.7: half the Quarto logo is light on dark, the other half dark on light" +--- + +Quarto 1.7 is out! You can get the current release from the [download page](/docs/download/index.qmd). + +We are especially enthusiastic about the improvements 1.7 brings to dark mode: you can now specify light and dark themes via brand, map computational outputs to themes, and have your website theme follow your viewer's preference. +To celebrate these changes, this site, [quarto.org](/), now has a light and dark mode. +Toggle the switch in the navigation bar (``{=html}) to see the difference. + +You can read about these improvements and some other highlights below. You can find all the changes in this version in the [Release Notes](/docs/download/changelog/1.7/). + +## Dark Mode Improvements + +### Specify light and dark themes via **brand.yml** + +You can now specify a light and dark brand. +For example, at a project-level you can provide two brand files: + +```{.yaml filename="_quarto.yml"} +brand: + light: light-brand.yml + dark: dark-brand.yml +``` + +Standalone HTML pages, websites, and dashboards will gain a light switch toggle allowing viewers to switch between the light and dark themes. + +::: {layout-ncol=2} + +![`light` brand](light.png){fig-alt="Screenshot of a webpage with a light blue body and charcoal text. A switch toggle in the navbar is 'off'."} + +![`dark` brand](dark.png){fig-alt="Screenshot of a webpage with a dark charcoal body and light blue text. A switch toggle in the navbar is 'on'."} + +::: + + +By default Typst documents will use the light brand, but you can set the `brand-mode` option to use the dark brand instead: + +```{.yaml filename="document.qmd"} +--- +format: + typst: + brand-mode: dark +--- +``` + +Read about other ways to set a light and dark brand in [Guide > Brand](/docs/authoring/brand.qmd#dark-brand). + + +### Map computational outputs to themes + +A new code cell option, `renderings`, allows you to indicate which computational outputs should be displayed in light and dark mode. +Create light and dark versions of your outputs in a single code cell, +and add the option `renderings` to specify the order of the outputs. +For example, this cell creates a `light` version of a plot, +then a `dark` version: + +```{r} +#| echo: fenced +#| renderings: [light, dark] +plot(1:10) # Shown in `light` mode + +par(bg = "#000000", fg = "#FFFFFF", col.axis = "#FFFFFF") +plot(1:10) # Shown in `dark` mode +``` + +Both outputs are produced, but you'll only see the one corresponding to the current state of the light switch. +Toggle the switch in the navigation bar to see the image change to reflect the theme. + +### Respect user color scheme + +Set the new `html` format option `respect-user-color-scheme` to `true` if you would like your site to honor the viewerโ€™s operating system or browser preference for light or dark mode: + +```{.yaml filename="_quarto.yml"} +format: + html: + respect-user-color-scheme: true +``` + +## Other Highlights + +- Typst updated to 0.13.0 +- Pandoc updated to 3.6.3 +- New [`version` shortcode](/docs/authoring/version.qmd) to insert the version of Quarto used to build your document: + + ::: {layout-ncol=2 layout-valign="center"} + + ```{.markdown shortcodes="false"} + Rendered with Quarto {{< version >}} + ``` + ::: {.border .p-1} + Rendered with Quarto {{< version >}} + ::: + + ::: + +- Updated LaTeX and Beamer template partials: + + - [LaTeX partials](/docs/journals/templates.html#latex-partials) + - [Beamer partials](/docs/journals/templates.html#beamer-partials) + + These changes reflect the updates made in Pandoc 3.5 to separate the LaTeX and Beamer document templates and introduce some additional partials for both. + If you have custom formats that provide custom templates or partials, you may need to update them to work with the new partials. + +- Improvements to the `julia` engine: + - [`juliaup` integration](/docs/computations/julia.qmd#juliaup-integration): Use specific versions of Julia in your notebooks. + + - [R and Python support](/docs/computations/julia.qmd#r-and-python-support): Include `{r}` and `{python}` executable code cells via the RCall and PythonCall packages. + + - [Caching](/docs/computations/julia.qmd#caching-julia): Save time rendering long-running notebooks by caching results. + + - [Revise.jl integration](/docs/computations/julia.qmd#revise.jl-integration): Automatically update function definitions in Julia sessions. + + + +## Acknowledgements + +We'd like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests: + +{{< include _contribs.md >}} diff --git a/docs/blog/posts/2025-04-28-1.7-release/light.png b/docs/blog/posts/2025-04-28-1.7-release/light.png new file mode 100644 index 0000000000..54407fe270 Binary files /dev/null and b/docs/blog/posts/2025-04-28-1.7-release/light.png differ diff --git a/docs/blog/posts/2025-04-28-1.7-release/thumbnail-1.7.jpeg b/docs/blog/posts/2025-04-28-1.7-release/thumbnail-1.7.jpeg new file mode 100644 index 0000000000..cb7ddf426c Binary files /dev/null and b/docs/blog/posts/2025-04-28-1.7-release/thumbnail-1.7.jpeg differ diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/featured.png b/docs/blog/posts/2025-05-19-quarto-codespaces/featured.png new file mode 100644 index 0000000000..95b0e96e03 Binary files /dev/null and b/docs/blog/posts/2025-05-19-quarto-codespaces/featured.png differ diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/index.qmd b/docs/blog/posts/2025-05-19-quarto-codespaces/index.qmd new file mode 100644 index 0000000000..6d8f0eb0ff --- /dev/null +++ b/docs/blog/posts/2025-05-19-quarto-codespaces/index.qmd @@ -0,0 +1,268 @@ +--- +author: + - name: "Mickaรซl CANOUIL, _Ph.D._" + orcid: "0000-0002-3396-4549" + url: "https://mickael.canouil.fr" +title: "How to use GitHub Codespaces to simplify your Quarto workshops" +description: | + In this post, I'll teach you the basics of GitHub Codespaces and how to use them to make it easier to teach using Quarto. +date: "2025-05-19" +categories: + - GitHub Codespaces + - Teaching + - Dev Container +image: featured.png +image-alt: | + Quarto icon and text above GitHub Codespaces. +lang: en-GB +--- + +## What Is GitHub Codespaces? + +[GitHub Codespaces](https://github.com/features/codespaces) is a cloud-powered, on-demand development environment that runs either in your browser or in Visual Studio Code via the [GitHub Codespaces extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces). +It eliminates the need for lengthy local setup by providing a fully configured development container, complete with all necessary dependencies and tools. +This means that whether you're an instructor or a developer, you can start coding immediately with a consistent environment tailored to your specific project, right on your web browser. + +More importantly, the participants of your workshops can use GitHub Codespaces just as easily as you can. +With Codespaces, you and your participants all work on identical environments, minimising the "it doesn't work on my machine" problems we are all too aware of. + +In this post, I am assuming the case of a workshop instructor and a room full of participants with different laptops and operating systems. +Codespaces are also useful for development, though, as you will notice reading on. + +## The Power of Combining Quarto CLI with Codespaces + +Imagine a world where your participants are instantly equipped with the same environment with all the tools, libraries, and sample projects ready to go in the cloud. +That's the magic of using Codespaces: + +1. **Immediate Onboarding:** Workshop participants or students can bypass the hassle of local setup. + They simply launch a Codespace (running on their web browser of choice, independently of operating system), and the pre-configured environment is available immediately. + +1. **A Consistent Environment:** Ensuring that everyone has the same tools and dependencies can be challenging. + Codespaces lets you pre-define your environment with container configurations, reducing the risk of discrepancies in software versions or settings. + +2. **Reproducible Workflows:** Whether you're teaching a data science workshop or collaborating on a research paper, reproducibility is crucial. + Because GitHub Codespaces uses the [Dev Container specification](https://containers.dev/), you can ensure that your code can be run in the same environment. + When participants are ready to run their projects locally, they can use Codespace to build an equivalent Docker container. + +GitHub provides ["deep link"](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces) to Codespaces, allowing you to create a link you can share with your students or workshop participants. + +For example, the [`quarto-codespaces` repository](https://github.com/mcanouil/quarto-codespaces) provides several Dev Container / Codespaces configurations. +The following link will create a new Codespace using the `.devcontainer/universal/devcontainer.json` configuration file instead of the default `.devcontainer/devcontainer.json` file. + +:::: {style="text-align: center;"} +[![](https://github.com/codespaces/badge.svg)](https://codespaces.new/mcanouil/quarto-codespaces?quickstart=1&devcontainer_path=.devcontainer%2Funiversal%2Fdevcontainer.json) +::: + +```markdown +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/mcanouil/quarto-codespaces?quickstart=1&devcontainer_path=.devcontainer%2Funiversal%2Fdevcontainer.json) +``` + +The link can include a specific branch, a particular file, or even a specific line in a file, allowing you to guide participants directly to the relevant content and setup. +By doing nothing more than clicking that one link, participants create or resume an existing execution environment. + +:::: {.dark-content} +:::: {layout-ncol="2"} +![](quarto-codespaces-new-001-dark.png){.lightbox group="codespaces-dark" fig-alt="GitHub Codespaces interface showing the 'Create codespace' page. The page includes a section with the repository 'mcanouil/quarto-codespaces' and a message stating 'No codespace to resume'. There are two buttons: 'Change options' and 'Create new codespace'."} + +![](quarto-codespaces-new-002-dark.png){.lightbox group="codespaces-dark" fig-alt="image_url" alt="Screenshot of Visual Studio Code interface showing a GitHub Codespace for a project named 'quarto-codespaces'. The left sidebar contains a file explorer with folders and files such as .devcontainer, .github, init-env.sh, LICENSE, and README.md. The terminal at the bottom displays logs related to configuring the codespace, including commands and their outcomes. The right sidebar has a section titled 'Edit with Copilot' explaining how to use Copilot in agent mode."} +::: +::: + +:::: {.light-content} + +:::: {layout-ncol="2"} +![](quarto-codespaces-new-001-light.png){.lightbox group="codespaces-light" fig-alt="GitHub Codespaces interface showing the 'Create codespace' page. The page includes a section with the repository 'mcanouil/quarto-codespaces' and a message stating 'No codespace to resume'. There are two buttons: 'Change options' and 'Create new codespace'."} + +![](quarto-codespaces-new-002-light.png){.lightbox group="codespaces-light" fig-alt="image_url" alt="Screenshot of Visual Studio Code interface showing a GitHub Codespace for a project named 'quarto-codespaces'. The left sidebar contains a file explorer with folders and files such as .devcontainer, .github, init-env.sh, LICENSE, and README.md. The terminal at the bottom displays logs related to configuring the codespace, including commands and their outcomes. The right sidebar has a section titled 'Edit with Copilot' explaining how to use Copilot in agent mode."} +::: +::: + +## Setting Up Your Own Quarto-Codespaces Environment + +If you're considering using Codespaces with Quarto CLI for your next workshop or teaching module, here's how to get started: + +Leverage the example provided by the [`quarto-codespaces` repository](https://github.com/mcanouil/quarto-codespaces) or [create your own Codespaces using the default](https://github.com/codespaces/new/). + +### Use an Existing Docker Image {#use-existing-docker-image} + +The easiest way to get started is to use an existing Docker image that has Quarto CLI and all the dependencies you need. +There are several pre-built images available with or without the Quarto CLI: + +- Official Docker images: + - [`ghcr.io/quarto-dev/quarto`](https://github.com/quarto-dev/quarto-cli/pkgs/container/quarto) + - [`ghcr.io/quarto-dev/quarto-full`](https://github.com/quarto-dev/quarto-cli/pkgs/container/quarto-full) +- Community Docker images: + - [`ghcr.io/mcanouil/quarto-codespaces`](https://github.com/mcanouil/quarto-codespaces/pkgs/container/quarto-codespaces) +- Default Codespaces image: + - [`mcr.microsoft.com/devcontainers/universal`](https://github.com/devcontainers/images/tree/main/src/universal) + +You can use any of these images as a base for your Codespace. +Inside the `.devcontainer/devcontainer.json` file, you can specify the image you want to use. +The `.devcontainer/devcontainer.json` file serves as the blueprint for your Codespace. + +```json +{ + "name": "My Workshop Setup", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", // <1> + "remoteUser": "vscode", + "customizations": { + "vscode": { + "extensions": [ + "quarto.quarto", // <2> + "mcanouil.quarto-wizard" // <3> + ] + }, + "codespaces": { + "openFiles": [ // <4> + "exercises/intro-to-quarto.qmd", + "exercises/computation.qmd" + ] + } + } +} +``` + +1. The Docker image is specified in the `image` field. + It's built using a Dev Container specification that you can find in [`.github/.devcontainer`](https://github.com/mcanouil/quarto-codespaces/tree/main/.github/.devcontainer). +2. The [`quarto` extension](https://github.com/quarto-dev/quarto) for Visual Studio Code / Positron to provide support for Quarto documents. +3. The [`quarto-wizard` extension](https://github.com/mcanouil/quarto-wizard) for Visual Studio Code / Positron to provide assistance in managing Quarto extensions +4. The `openFiles` field specifies the files to open when the Codespace is created. + This is useful for guiding participants to the right files or folders. + See the [Codespaces documentation](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository) for more information. + +### Configure the Development Container + +You can fork the [`quarto-codespaces` repository](https://github.com/mcanouil/quarto-codespaces) as a starting point for your own Codespaces. +This repository includes the Dev Container configuration file (*i.e.*, `.devcontainer/devcontainer.json`) that instruct Codespaces on how to set up an environment complete with Quarto CLI and other essential tools. + +The `.devcontainer/devcontainer.json` configuration file ensures that every instance of your Codespace is identical, capturing everything from the Quarto CLI version to additional libraries or extensions you might need. + +The [`quarto-codespaces` repository](https://github.com/mcanouil/quarto-codespaces) is a great starting point as it provides a prebuilt Docker image with the latest Quarto CLI, Python, R, and Julia installed (*i.e.*, [`ghcr.io/mcanouil/quarto-codespaces`](https://github.com/mcanouil/quarto-codespaces/pkgs/container/quarto-codespaces) using [`.github/.devcontainer/devcontainer.json`](https://github.com/mcanouil/quarto-codespaces/tree/main/.github/.devcontainer)). + +```json +{ + "name": "Quarto", + // "image": "buildpack-deps:jammy-curl", // <1> + "build": { + "dockerfile": "./Dockerfile", + "context": ".", + "args": { + "VARIANT": "jammy" + } + }, + "remoteUser": "vscode", + "features": { // <2> + "./quarto-computing-dependencies": { // <3> + "rDeps": "rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr", + "pythonDeps": "jupyter,papermill", + "juliaDeps": "IJulia" + }, + "./uv": { // <4> + "version": "latest" + }, + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { // <5> + "version": "release", + "installTinyTex": "true", + "installChromium": "false" + } + }, + "customizations": { // <6> + "vscode": { + "extensions": [ + "quarto.quarto", + "mcanouil.quarto-wizard", + "REditorSupport.r", + "Posit.air-vscode" + ], + "settings": { + "r.rterm.option": [ + "--no-save", + "--no-restore-data", + "--quiet" + ], + "[r]": { + "editor.defaultFormatter": "Posit.air-vscode", + "editor.formatOnSave": true + } + } + } + } +} +``` + +1. The `image` field specifies the base image for the container. + You can customise this to suit your needs. +2. The `features` section allows you to add additional tools or libraries. + See the [Dev Container Features available](https://containers.dev/features/) for a comprehensive list of available features. +3. The `quarto-computing-dependencies` feature is a "local" custom feature that installs the computing dependencies: R, Python, and Julia. + This is a great way to ensure that your Codespace has everything it needs to run Quarto documents. +4. The `uv` feature installs the [`uv` tool](https://docs.astral.sh/uv/) to manage Python packages and project dependencies. +5. The `quarto-cli` feature installs the Quarto CLI. + You can specify the version you want to install, and it will be automatically downloaded and installed in your Codespace. + You can see the code for this feature in the source repository: . +6. The `customizations` section allows you to specify settings and extensions for Visual Studio Code. + +You can also add additional features to the `devcontainer.json` to suit your needs or start directly using the image as is as shown in [Use an Existing Docker Image](#use-existing-docker-image). + +For example, you might want to add additional R packages or Python libraries. +You can do this by using the `quarto-computing-dependencies` custom feature and changing the `rDeps`, `pythonDeps`, and `juliaDeps` fields to include the packages you want to install globally, or by using the `postStartCommand` field to run a script that installs the packages you need. + +```json +{ + "name": "My Workshop Setup", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "postStartCommand": "uv venv && source .venv/bin/activate && uv pip install -r requirements.txt" +} +``` + +You can also use the `postStartCommand` field to run a script that installs the packages you need. + +```json +{ + "name": "My Workshop Setup", + "image": "ghcr.io/mcanouil/quarto-codespaces:latest", + "remoteUser": "vscode", + "postStartCommand": "bash ./init-env.sh --what all --force" // <1> +} +``` + +1. The `postStartCommand` field specifies a command to run after the Codespace is started. + In this case, it runs the [`init-env.sh` script](https://github.com/mcanouil/quarto-codespaces/blob/main/init-env.sh) from [`quarto-codespaces` repository](https://github.com/mcanouil/quarto-codespaces) with the `--what all` and `--force` options. + +## Benefits for Workshops and Teaching + +When it comes to educational sessions, consistency and ease-of-use are paramount. +Pairing Codespaces with Quarto CLI brings many direct benefits to a teaching environment: + +- **Streamlined Onboarding:** Students and workshop attendees can get right to work without spending time installing and configuring local environments. +- **Live, Interactive Sessions:** Instructors can demonstrate live edits to Quarto documents. + Changes can be rendered instantly and reflect in each participant's environment: perfect for a hands-on, interactive learning experience. +- **Collaboration and Version Control:** All changes can be recorded in Git, making it easy to track progress, handle peer reviews, and manage collaborative projects, all within a single hosted environment. +- **Elimination of "Dependency Hell":** With containerised development, all attendees work from the same baseline, ensuring that version conflicts or missing libraries don't derail a session. + +## Final Thoughts and Future Directions + +Whether you're running a workshop, teaching a class, or collaborating on research, using Codespaces can reduce setup hassles, foster reproducibility, and encourage interactive learning. + +In addition to the benefits mentioned above, other features further enhance your experience with Codespaces and Quarto CLI: + +- **Automated Pipelines:** Integrating CI/CD tools to automatically validate Quarto document renders and catch errors using the exact same environment. + See [GitHub Actions: Running jobs in a container](https://docs.github.com/en/actions/writing-workflows/choosing-where-your-workflow-runs/running-jobs-in-a-container) +- **Real-Time Co-Editing Features:** Enhancing collaborative sessions with simultaneous multi-user editing directly in Codespaces. + See [GitHub Codespaces: Real-time collaboration](https://docs.github.com/en/codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace) + +This post covered the basics of using Codespaces and Quarto together, but there's much more to Codespaces. +Learn more by [consulting their documentation](https://docs.github.com/en/codespaces). + +Happy teaching! + +## Disclaimer {.appendix .unnumbered} + +GitHub Codespaces is a product of GitHub, Inc. and comes with a quota of free usage, including CPU hours and storage. +Be sure to check the [GitHub Codespaces billing documentation](https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces) and your current GitHub plan to avoid unexpected charges. +If you are a student or an educator, you can explore the [GitHub Education program](https://education.github.com/pack) and [GitHub Classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom). + +## Acknowledgements {.appendix .unnumbered} + +Thanks to [Carlos Scheidegger](https://github.com/cscheid), [Julia Silge](https://github.com/juliasilge), and [James J. Balamuta](https://github.com/coatless) for their feedback and suggestions on this post. diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-dark.png b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-dark.png new file mode 100644 index 0000000000..28d33b9f6a Binary files /dev/null and b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-dark.png differ diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-light.png b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-light.png new file mode 100644 index 0000000000..594aea5dbc Binary files /dev/null and b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-light.png differ diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-dark.png b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-dark.png new file mode 100644 index 0000000000..4bc125abc0 Binary files /dev/null and b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-dark.png differ diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-light.png b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-light.png new file mode 100644 index 0000000000..448f243550 Binary files /dev/null and b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-light.png differ diff --git a/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces.svg b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces.svg new file mode 100644 index 0000000000..e1daa41bc8 --- /dev/null +++ b/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + +GitHub Codespaces diff --git a/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-add-tag.png b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-add-tag.png new file mode 100644 index 0000000000..2bec672ffa Binary files /dev/null and b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-add-tag.png differ diff --git a/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-ipynb.png b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-ipynb.png new file mode 100644 index 0000000000..a9bfc70932 Binary files /dev/null and b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-ipynb.png differ diff --git a/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pdf.png b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pdf.png new file mode 100644 index 0000000000..3d8884799e Binary files /dev/null and b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pdf.png differ diff --git a/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pretty-pdf.png b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pretty-pdf.png new file mode 100644 index 0000000000..952dd3bd35 Binary files /dev/null and b/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pretty-pdf.png differ diff --git a/docs/blog/posts/2025-07-24-parameterized-reports-python/index.qmd b/docs/blog/posts/2025-07-24-parameterized-reports-python/index.qmd new file mode 100644 index 0000000000..ac6113f153 --- /dev/null +++ b/docs/blog/posts/2025-07-24-parameterized-reports-python/index.qmd @@ -0,0 +1,280 @@ +--- +author: + - name: "Charlotte Wickham" +title: "From One Notebook to Many Reports: Parameterized reports with the `jupyter` engine" +description: | + Learn how to transform a single Jupyter notebook into a parameterized report generator that automatically creates customized outputs for different scenarios. +date: "2025-07-24" +categories: + - Authoring + - Teaching + - Jupyter +image: thumbnail.png +image-alt: | + A slide with a screenshot of a Jupyter notebook with a graph and text, then an arrow pointing to a stack of PDF files each with a graph and text. +lightbox: true +--- + +::: callout-tip + +## Based on a talk at SciPy 2025 + +This post is based on the talk "From One Notebook to Many Reports: Automating with Quarto" delivered at [SciPy 2025](https://www.scipy2025.scipy.org) by Charlotte Wickham. +You can find the slides at [cwickham.github.io/one-notebook-many-reports](https://cwickham.github.io/one-notebook-many-reports/) and example code at [github.com/cwickham/one-notebook-many-reports](https://github.com/cwickham/one-notebook-many-reports). + +::: + +## The Problem: Repetitive Reporting + +Would you rather read a generic "Climate summary" or a "Climate summary for _exactly where you live_"? Reports that are personalized to a specific situation increase engagement and connection. But producing many customized reports manually is tedious and error-prone. + +Quarto solves this with parameterized reports---you create a single document template, then render it multiple times with different parameter values to generate customized outputs automatically. + +A great example is the customized soil health reports from Washington Soil Health Initiative's [State of the Soils Assessment](https://washingtonsoilhealthinitiative.com/state-of-the-soils/), presented at posit::conf(2023) by [Jadey Ryan](https://jadeyryan.com) (watch on [YouTube](https://youtu.be/lbE5uOqfT70?si=C-d5U5Q2VXo1wlDs)). Jadey demonstrated this approach using R and plain text Quarto files (`.qmd`). + +This post shows you how to apply the same principles using Python: we'll walk through converting a Jupyter notebook (`.ipynb`) into a parameterized report, then automating the generation of multiple customized outputs. Then I'll give you some tips for making your reports look polished. + +## The Solution: Parameterized Reports + +### Start with a notebook + +As an example, let's start with a Jupyter notebook analyzing climate data for Corvallis, Oregon. + +![[`corvallis.ipynb`](https://github.com/cwickham/one-notebook-many-reports/blob/main/01-one-notebook/corvallis.ipynb)](corvallis-ipynb.png){#corvallis-ipynb .column-margin fig-alt="Screenshot of a Jupyter notebook with code cells and output, including a plot and text summary."} + +You can see the full notebook, [`corvallis.ipynb`, on GitHub](https://github.com/cwickham/one-notebook-many-reports/blob/main/01-one-notebook/corvallis.ipynb), but here are the key pieces: + +- The code cells import some data for all of Oregon, and filter it to just rows relevant for Corvallis, then produce a summary sentence and a plot. + +- The document options specify `echo: false` so no code appears in the final output, and `format: typst` so the output is a PDF produced via [Typst](https://typst.app), a modern alternative to LaTeX. + +This single notebook can be rendered with Quarto: + +```{.bash filename="Terminal"} +quarto render corvallis.ipynb +``` + +The result is a PDF file, `corvallis.pdf`, a simple report with the title "Corvallis" and a single sentence summary of the climate data, along with a plot highlighting the mean temperature for this year against the last 30 years. + +![`corvallis.pdf`](corvallis-pdf.png){.column-margin fig-alt="Screenshot of a PDF file with the title 'Corvallis' that contains a single sentence summary and a plot."} + +Now, imagine we want to create this report for the 50 largest cities in Oregon. +Here's the steps we'll take: + +1. Turn hardcoded values into variables +2. Declare those variables parameters +3. Render the notebook with different parameter values +4. Automate rendering with many parameter values + +### 1. Turn hardcoded values into variables + +We want a report for each city. +We'll start by creating a variable, `city`, which we'll designate a parameter in our next step. +In a new code cell at the top of our notebook, we define the variable: + +````{.python filename="code"} +city = "Corvallis" +```` + +Then anywhere we previously hardcoded `"Corvallis"` in the notebook, we replace it with this variable. + +The first occurrence is in the title of the document. +Originally, we had a markdown cell defining a level 1 heading: + +```{.markdown filename="markdown"} +# Corvallis +``` + +We replace it with a code cell that uses an f-string to produce markdown for a level 1 heading based on the `city` variable: + +```{.markdown filename="code"} +Markdown(f"# {city}") +``` + +In the filtering step the replacement is straightforward, we just change the string to the variable: + +::: {layout-ncol="2"} + +:::{} +Before: + +```{.python filename="code"} +tmean = tmean_oregon.filter( + pl.col("city") == "Corvallis", +) +``` +::: + +:::{} +After: + +```{.python filename="code"} +tmean = tmean_oregon.filter( + pl.col("city") == city, +) +``` +::: +::: + +Finally, the plot code (using [plotnine](https://plotnine.org)), sets the title of the plot to include the city name: + +```{.python filename="code"} +... ++ labs(title = "Corvallis, OR", ...) +... +``` + +We can also use an f-string here to include the `city` variable: + +```{.python filename="code"} +... ++ labs(title = f"{city}, OR", ...) +... +``` + +Now, we should be able to test our changes by explicitly setting the `city` variable to something other than "Corvallis" and re-running the cells. +Since our report is no longer specific to Corvallis, we can rename it `climate.ipynb`. + +### 2. Declare those variables parameters + +Now we have a variable that represents the parameter, we need to let Quarto know it's a parameter. +Quarto's parameterized reports are implemented using [Papermill](https://papermill.readthedocs.io/en/latest/), and inherit Papermill's approach: tag the cell defining the parameter with `parameters`. + +In Jupyter, you can add this tag through the cell toolbar: + +![](corvallis-add-tag.png){fig-alt="Screenshot of a Jupyter notebook cell with a tag 'parameters' added to it."} + +You can see the updated notebook, now a parameterized notebook, on GitHub: [`climate.ipynb`](hhttps://github.com/cwickham/one-notebook-many-reports/blob/main/02-one-parameterized-report/climate.ipynb). + +### 3. Render with different parameter values + +If we render `climate.ipynb`, it will still produce the same report for Corvallis, because we haven't changed the parameter value: + +```{.bash filename="Terminal"} +quarto render climate.ipynb +``` + +But we can now pass parameter values to Quarto with the `-P` flag: + +```{.bash filename="Terminal"} +# Generate report for Portland +quarto render climate.ipynb -P city:Portland --output-file portland.pdf + +# Generate report for Eugene +quarto render climate.ipynb -P city:Eugene --output-file eugene.pdf +``` + +We've also added `--output-file` to ensure each report gets its own filename. + +### 4. Automate rendering with many parameter values + +To generate all 50 reports, we need to run `quarto render` 50 times, each time with a different city as the parameter value. +You could automate this in many ways, but let's use a Python script. +For example, you might have a dataset of cities and their corresponding output filenames: + +```{.python filename="gen-reports.py"} +cities = pl.DataFrame({ + "city": ["Portland", "Cottage Grove", "St. Helens", "Eugene"], + "output_file": ["portland.pdf", "cottage_grove.pdf", "st_helens.pdf", "eugene.pdf"] +}) +``` + +I've generated a small example above, but in reality you would likely read `cities` in from a file. +Then you could iterate over the rows of this dataset, rendering the notebook for each city: + +```{.python filename="gen-reports.py"} +from quarto import render +for row in cities.iter_rows(named=True): + render( + "climate.ipynb", + execute_params={"city": row["city"]}, + output_file=row["output_file"], + ) +``` + +Run this script once, and you'll get all 50 custom reports! + +You can find the complete working example on GitHub: [cwickham/one-notebook-many-reports/03-many-reports](https://github.com/cwickham/one-notebook-many-reports/tree/main/03-many-reports). + +## Pretty Reports: Brand and Typst + +The steps above to produce parameterized reports apply to any output format supported by Quarto. +However, if you are targeting `typst` you can take advantage of additional features to create beautiful PDF reports. + +### Brand.yml + +Quarto supports [brand.yml](https://posit-dev.github.io/brand-yml/) a way to specify colors, fonts, and logos: + +```{.yaml filename="_brand.yml"} +color: + palette: + forest-green: "#2d5a3d" + charcoal-grey: "#555555" + foreground: charcoal-grey + primary: forest-green +typography: + fonts: + - family: Open Sans + source: google + base: + family: Open Sans +logo: + medium: logo.png +``` + +Quarto will detect the `_brand.yml` file and apply the colors, fonts and logo to your report. +Colors and fonts in your figures will need to be customized in your code, but that is made much easier with the [brand-yml](https://posit-dev.github.io/brand-yml/pkg/py/) Python package which imports your values from `_brand.yml`. + +You can see a full example of using `_brand.yml` with `climate.ipynb` at [cwickham/one-notebook-many-reports/04-branded-reports](https://github.com/cwickham/scipy-talk/tree/main/04-branded-reports), and learn more about Quarto's support for brand in the [Brand guide](/docs/authoring/brand.qmd). + + +### Typst + +Learning a little bit of Typst syntax can take your reports from basic to beautiful. +You can include [raw Typst syntax](/docs/output-formats/typst.qmd#raw-typst) in your notebooks, or wrap elements in Typst functions using the [typst-function Quarto extension](https://github.com/christopherkenny/typst-function). +As an example, you could add a header with the city name and a map of the location: + +![`corvallis.pdf`](corvallis-pretty-pdf.png){fig-alt="The `corvallis.ipynb` notebook rendered by Quarto to `pdf`. The document has dark green header with the city in white text and a map next to it with the location as an orange dot." } + +You can see the source for this example at [cwickham/one-notebook-many-reports/05-pretty-reports](https://github.com/cwickham/one-notebook-many-reports/tree/main/05-pretty-reports). + +## `jupyter` vs `knitr` + +The steps for creating a parameterized report above are specific to documents that use the `jupyter` engine. +With a Jupyter notebook (`.ipynb`), +or a plain text Quarto document (`.qmd`) with only Python code cells, +Quarto will default to the `jupyter` engine. +As described above, the `jupyter` engine uses cell tags to identify parameters. + +If you are working in a `.ipynb` file, your IDE will likely provide a way to add these tags through the cell toolbar. +If you are working in a `.qmd` file, you can add tags as a code cell option: + +````markdown +```{{python}} +#| tags: [parameters] +city = "Corvallis" +``` +```` + +With the `jupyter` engine, parameters can then be accessed directly as variables, e.g. `city`, in later code cells. + +If you are working in a Quarto document (`.qmd`) with R code cells, Quarto will default to the `knitr` engine. +With the `knitr` engine, you set parameters in the document header under `params`: + +```yaml +--- +params: + city: "Corvallis" +--- +``` + +In `knitr`, parameters are accessed as elements of `params`, e.g. `params$city`. + +You can read more about setting and using parameters in [Guide > Computations > Parameters](/docs/computations/parameters.html). + +## Wrapping Up + +Parameterized reports turn one notebook into many customized outputs. +You've seen the process of going from a notebook with a hardcoded value to a parameterized report that can be rendered with different values. +You can then automate the rendering in any way you choose to generate dozens of reports at once. + diff --git a/docs/blog/posts/2025-07-24-parameterized-reports-python/thumbnail.png b/docs/blog/posts/2025-07-24-parameterized-reports-python/thumbnail.png new file mode 100644 index 0000000000..f1d91e48d5 Binary files /dev/null and b/docs/blog/posts/2025-07-24-parameterized-reports-python/thumbnail.png differ diff --git a/docs/blog/posts/2025-07-28-R-package-release-1.5/index.qmd b/docs/blog/posts/2025-07-28-R-package-release-1.5/index.qmd new file mode 100644 index 0000000000..c613bca210 --- /dev/null +++ b/docs/blog/posts/2025-07-28-R-package-release-1.5/index.qmd @@ -0,0 +1,399 @@ +--- +title: "quarto R package v1.5.0: Streamlined Workflows for R Users" +description: | + The quarto R package 1.5.0 brings powerful new features for passing R values to Quarto metadata, inserting Markdown in HTML tables, working with R scripts, building paths from Quarto projects, and automating Quarto CLI from R. +categories: + - R package + - knitr + - Releases +author: Christophe Dervieux +date: "2025-07-28" +image: thumbnail.png +image-alt: "quarto R logo with 1.5.0 release text" +--- + +The quarto R package version 1.5.0 is here! This release focuses on making Quarto more flexible and powerful for R users with significant workflow improvements. + +## What's New {#whats-new} + +Install the latest version from CRAN: + +```r +install.packages("quarto") +``` + +Major features in this release include: + +- [**Pass R values to Quarto metadata**](#pass-r-values-to-quarto-metadata) - Set metadata programmatically based on computed values from knitr engine +- [**Insert Markdown in HTML tables for Quarto processing**](#insert-markdown-in-html-tables) - Include Markdown content (equations, links, formatting) in HTML tables +- [**Apply Light and Dark Themes to Plots and Tables**](#themes-helpers) - Change the background and foreground colors of plots and tables based on light & dark themes +- [**Work with R scripts and Quarto**](#work-with-r-scripts) - Extract R code from Quarto documents or prepare R scripts for Quarto rendering +- [**Build paths from Quarto Project**](#build-paths-from-project) - Build paths relative to Quarto project root within R cells +- [**Automate Quarto CLI from R**](#automate-quarto-cli) - New and improved wrappers around Quarto CLI features for easier automation + +## Pass R Values to Quarto Metadata {#pass-r-values-to-quarto-metadata} + +Set metadata dynamically based on R computations with `write_yaml_metadata_block()`. For example, you could check a parameter value, and conditionally include content based on it: + +```r +#| output: asis + +write_yaml_metadata_block( + is_france = params$country == "france" +) +``` + +This will write the following (e.g., when `quarto render report.qmd -P country:france`): +````yaml +--- +is_france: true +--- +```` + +Then use Quarto's conditional features: + +```markdown +::: {.content-visible when-meta="is_france"} +## Fun fact about France + +In 2025, France is the most visited country in the world, attracting over 89 million tourists annually! + +::: +``` + +### Improved YAML 1.2 Compatibility + +The function now correctly handles special edge cases in YAML quoting. Specifically, it automatically quotes octal-like strings that are not supported in YAML 1.1 (like `"0888"` or `"0999"`): + +```r +# These octal-like values are automatically quoted to prevent errors +write_yaml_metadata_block( + code1 = "0888", # Without quoting: YAML 1.2 interprets as 888 (invalid octal ignored) + code2 = "0999" # Without quoting: YAML 1.2 interprets as 999 (invalid octal ignored) +) +``` + +Without the automatic quoting, these values would be interpreted as decimal numbers (888 and 999) in YAML 1.2, losing the leading zeros. This could break code that expects string values like file permissions or ID codes that must preserve leading zeros. + +This change applies to internal functions that write YAML from R object lists, and so this improvement is particularly important when using `execute_params` with `quarto_render()`, where parameter values might include such edge cases: + +```r +# Parameters with octal-like codes are now handled correctly +quarto_render("report.qmd", + execute_params = list( + site_code = "0888", + permission = "0755" + )) +``` + +For explicit control over quoting, use `yaml_quote_string()`: + +```r +# Force specific values to be quoted in YAML output +metadata <- list( + code1 = yaml_quote_string("1.0") +) +write_yaml_metadata_block(.list = metadata) +``` + +This will mark the string to be double quoted in YAML, preserving the character representation exactly as provided. + +See more examples in the [dynamic metadata vignette](https://quarto-dev.github.io/quarto-r/articles/dynamic-metadata.html), including how to make parameters available as metadata for conditional content. + +## Insert Markdown in HTML Tables for Quarto Processing {#insert-markdown-in-html-tables} + +Quarto can [parse Markdown content in HTML tables](https://quarto.org/docs/authoring/tables.html#html-tables), enabling rich formatting like math equations, links, and text styling. The new `tbl_qmd_*()` functions make this powerful Quarto feature easier to use from R: + +```r +data.frame( + Feature = c("Formatting", "Math", "Links"), + Example = c( + tbl_qmd_span("**Bold**, *italic*"), + tbl_qmd_span("$E = mc^2$"), + tbl_qmd_span("[Quarto docs](https://quarto.org)") + ) +) |> + knitr::kable(format = "html", escape = FALSE) +``` + +These helper functions wrap content in HTML spans with `data-qmd-base64` attributes that Quarto recognizes for Markdown processing. They work with any table package that supports raw HTML (knitr, kableExtra, DT). For content that only works in Quarto, use the `display` argument for graceful fallback. See more examples in the [Markdown in HTML tables vignette](https://quarto-dev.github.io/quarto-r/articles/markdown-html-tables.html), including comparisons of Markdown support in HTML tables across different packages. + +## Apply Light and Dark Themes to Plots and Tables {#themes-helpers} + +The `theme_colors_flextable()`, `theme_colors_ggplot2()`, `theme_colors_gt()`, `theme_colors_plotly()`, `theme_colors_thematic()` helper functions change the background and foreground colors of six popular plot and table packages. These can be used to produce light and dark [`renderings`](https://quarto.org/docs/computations/execution-options.html#cell-renderings) to match the plot or table with themes in light and dark mode. + +The usage of the the results of these functions depends on the package. See the [Theme Helpers](https://quarto-dev.github.io/quarto-r/articles/theme-helpers.html) article for usage examples of `theme_colors_*`. + +The `theme_brand_flextable()`, `theme_brand_ggplot2()`, `theme_brand_gt()`, `theme_brand_plotly()`, `theme_brand_thematic()` helper functions change the background and foreground colors of these packages using corresponding [brand.yml](https://posit-dev.github.io/brand-yml/) colors. See the [Light & Dark Renderings Examples](https://examples.quarto.pub/lightdark-renderings-examples/ggplot2.html) for usage examples of `theme_brand_*`. + +## Work with R Scripts and Quarto {#work-with-r-scripts} + +### Extract R Code from Quarto Documents + +The new `qmd_to_r_script()` Experimental lifecycle function provides an alternative to `knitr::purl()` that leverages `quarto inspect` for code extraction: + +```r +# Extract R code from a Quarto document +qmd_to_r_script("analysis.qmd") # Creates "analysis.R" + +# Specify custom output +qmd_to_r_script("analysis.qmd", script = "extracted-code.R") +``` + +This function uses Quarto's static document analysis rather than R evaluation, making it faster and safer for simple code extraction. It preserves cells options, commenting cells with `eval: false`, and ignoring content having `purl: false`. For documents using advanced knitr features like `child=` chunks or `knitr::read_chunk()`, `knitr::purl()` remains the recommended approach as it handles these through actual document processing. + +### Prepare R Scripts for Quarto Rendering + +Quarto can [render R scripts directly](https://quarto.org/docs/computations/render-scripts.html#knitr), treating specially formatted comments as Markdown. The `add_spin_preamble()` function helps prepare R scripts for this feature by adding the required YAML metadata: + +```r +# Add metadata for rendering +add_spin_preamble("analysis.R", + title = "Analysis Report", + preamble = list(author = "Data Team")) + +# Now render the script with Quarto +quarto_render("analysis.R") +``` + +This function adds a minimal spin-style preamble (using `#'` comments) that Quarto recognizes: + +```r +#' --- +#' title: Analysis Report +#' author: Data Team +#' --- +#' + +# Your original R code follows... +``` + +The preamble enables Quarto's [engine binding](https://quarto.org/docs/computations/execution-options.html#engine-binding) to properly process the script, allowing you to use R scripts as source documents alongside `.qmd` files. Learn more about working with R scripts in the [R scripts vignette](https://quarto-dev.github.io/quarto-r/articles/r-scripts.html). + +## Build Paths from Quarto Project {#build-paths-from-project} + +Quarto [sets environment variables](https://quarto.org/docs/advanced/environment-vars.html#variables-quarto-sets) during rendering that identify the project root, but knitr doesn't have direct access to this information by default. The new project navigation functions bridge this gap: + +```r +# Build paths relative to the Quarto project root +data_file <- project_path("data", "analysis.csv") + +# Explicitly find the project root (searches for _quarto.yml) +root <- find_project_root() +``` +`project_path()` Experimental lifecycle intelligently handles different execution contexts: + +- During `quarto render`, it uses `QUARTO_PROJECT_ROOT` or `QUARTO_PROJECT_DIR` environment variables +- In interactive sessions, it automatically detects the project root by searching for `_quarto.yml`. +- Falls back to the current working directory with a warning if no project is found. + +This ensures your paths work consistently without hardcoding or manual adjustments. For example, you can read a CSV file relative to your project root: + +```r +# In posts/2025/analysis/report.qmd, this resolves to ../../../data/results.csv +results <- read.csv(project_path("data", "results.csv")) +``` + +For more explicit control, consider using `here::i_am()` and `here::here()` as an alternative approach. Follow [r-lib/usethis Issue #128](https://github.com/r-lib/here/issues/128) for improved support in next versions of `here`. + +## Automate Quarto CLI from R {#automate-quarto-cli} + +The quarto R package has always been designed as a comprehensive wrapper for the Quarto CLI, enabling seamless integration of Quarto into R workflows and pipelines. This release strengthens that foundation with improved wrappers and new helpers. + +### Extension Management +Programmatically manage Quarto extensions: +```r +# Add an extension +quarto_add_extension("quarto-journals/jss") + +# List installed extensions +quarto_list_extensions() + +# Remove an extension +quarto_remove_extension("jss") +``` + +### Project and Version Management +New helpers for common CLI tasks: +```r +# Create projects from templates +quarto_create("article", name = "my-analysis") + +# Check if a newer version of Quarto is available +check_newer_version() +``` + +### Document Inspection +Leverage `quarto inspect` results to answer questions about documents: +```r +# Check if a document has parameters (uses quarto inspect internally) +if (has_parameters("report.qmd")) { + quarto_render("report.qmd", execute_params = list(year = 2025)) +} +``` + +These CLI wrappers enable automation scenarios like CI/CD pipelines, batch processing, and dynamic project managementโ€”all from within R. The consistent interface means you can script complex Quarto workflows without leaving your R environment. + +## Additional Improvements + +### Familiar Workflows for Blogdown Users + +The `new_blog_post()` function provides a familiar workflow for users transitioning from blogdown: + +```r +# Create a new blog post with automatic date prefix and YAML frontmatter +new_blog_post("my-first-quarto-post", dir = "posts") +``` + +Similar to blogdown's `new_post()`, this function automatically creates a new blog post file with proper YAML frontmatter in the appropriate directory structure for Quarto blogs, making the transition from blogdown to Quarto smoother. + +### Migration Helper for Bookdown Projects + +The `detect_bookdown_crossrefs()` function helps identify bookdown cross-reference syntax that needs conversion: + +```r +# Scan your bookdown project for cross-references +detect_bookdown_crossrefs("my-bookdown-project/") +``` + +The function prints detailed guidance to the console, showing: + +- Which cross-reference patterns need manual conversion +- Which patterns can be automatically converted +- Specific examples from your files + +Example output from the [bookdown book](https://bookdown.org/yihui/bookdown/) sources: +```r +> detect_bookdown_crossrefs("~/Documents/DEV_R/bookdown/inst/examples", verbose = FALSE) +โ„น Scanning for bookdown cross-references in 12 .Rmd files... +! Found 110 bookdown cross-references that should be converted: + +โ€ข 01-introduction.Rmd: 3 references +- 3 Sec + +โ€ข 02-components.Rmd: 52 references +- 5 Eq +- 7 Fig +- 1 Lem +- 1 Lemma Div +- 7 Numbered Equation +- 17 Sec +- 5 Tab +- 5 Theorem Div +- 4 Thm + +โ€ข 03-formats.Rmd: 20 references +- 4 Fig +- 16 Sec + +โ€ข 04-customization.Rmd: 5 references +- 5 Sec + +โ€ข 05-editing.Rmd: 8 references +- 3 Fig +- 5 Sec + +โ€ข 06-publishing.Rmd: 8 references +- 3 Fig +- 5 Sec + +โ€ข 08-usage.Rmd: 3 references +- 3 Sec + +โ€ข index.Rmd: 11 references +- 11 Sec + +โ„น Summary of conversion requirements: +โ€ข 5 Eq reference +โ€ข 17 Fig reference +โ€ข 1 Lem reference +โ€ข 1 Lemma Div reference +โ€ข 7 Numbered Equation reference +โ€ข 65 Sec reference +โ€ข 5 Tab reference +โ€ข 5 Theorem Div reference +โ€ข 4 Thm reference + +โ„น Manual conversion requirements: +โ€ข Section headers: 65 references need manual attention +โ€ข Figure labels: 17 references need manual attention +โ€ข Table labels: 5 references need manual attention +โ€ข Equation structure: 7 references need manual attention +โ€ข Theorem blocks: 6 references need manual attention + +โ„น For detailed conversion guidance, run: quarto::detect_bookdown_crossrefs("~/Documents/DEV_R/bookdown/inst/examples", verbose = TRUE) +``` + +For converting chunk headers from curly brace syntax to Quarto's YAML style, remember that [`knitr::convert_chunk_header()`](https://yihui.org/knitr/reference/convert_chunk_header/) is available: + +```r +# Convert {r label, option=value} to YAML-style chunk options for a single file +knitr::convert_chunk_header("analysis.Rmd", output = NULL) + +# To process multiple files in a directory, you need to iterate: +rmd_files <- list.files("my-bookdown-project/", pattern = "\\.Rmd$", + full.names = TRUE, recursive = TRUE) +lapply(rmd_files, knitr::convert_chunk_header, output = NULL) +``` + +Together, these tools address the main syntax differences when migrating from bookdown to Quarto. + +### Enhanced Workflow +- `quarto_preview()` now returns the preview URL for automation +- Better debugging with `QUARTO_R_DEBUG=TRUE` environment variable +- Consistent R version usage in embedded processes + +## Breaking Changes + +### Output File Handling + +The `output_file` parameter in `quarto_render()` now sets the `output-file` metadata field instead of passing the `--output` CLI flag to Quarto. This change better aligns with Quarto's metadata processing and enables support for multiple output formats: + +```r +# Sets output-file metadata (like having 'output-file: report.html' in YAML) +quarto_render("doc.qmd", output_file = "report.html") +``` + +If you specifically need the old CLI flag behavior, use `quarto_args`: + +```r +# Use CLI flag directly +quarto_render("doc.qmd", quarto_args = c("--output", "report.html")) +``` + +### Template Usage + +`quarto_use_template()` now requires an empty directory and fails with a clear error message when used in non-empty directories: + +```r +# Create an empty directory first +dir.create("my-article") +quarto_use_template("quarto-journals/jss", dir = "my-article") +``` + +This change follows a Quarto CLI update that removed interactive prompting for programmatic use. If you need to use templates in existing directories, use `quarto use template` directly in the terminal for interactive installation. + +## Learn More + +Explore the new features and improvements: + +- Documentation for R package: +- Full changelog: +- Report issues: + +For detailed examples and workflows, check out the new vignettes: + +- [Dynamic metadata](https://quarto-dev.github.io/quarto-r/articles/dynamic-metadata.html) +- [Markdown in HTML tables](https://quarto-dev.github.io/quarto-r/articles/markdown-html-tables.html) +- [Working with R scripts](https://quarto-dev.github.io/quarto-r/articles/r-scripts.html) +- [All vignettes](https://quarto-dev.github.io/quarto-r/articles/index.html) + +## Acknowledgments + +Special thanks to all contributors that helped make this release: + +[@asadow](https://github.com/asadow), [@caiolivf](https://github.com/caiolivf), [@caocloud](https://github.com/caocloud), [@cderv](https://github.com/cderv), [@coatless](https://github.com/coatless), [@ColinFay](https://github.com/ColinFay), [@cwickham](https://github.com/cwickham), [@davidrsch](https://github.com/davidrsch), [@DillonHammill](https://github.com/DillonHammill), [@eitsupi](https://github.com/eitsupi), [@GeorgeBatten](https://github.com/GeorgeBatten), [@gordonwoodhull](https://github.com/gordonwoodhull), [@jennybc](https://github.com/jennybc), [@jeroen](https://github.com/jeroen), [@joanbadia](https://github.com/joanbadia), [@JosephBARBIERDARNAL](https://github.com/JosephBARBIERDARNAL), [@LiNk-NY](https://github.com/LiNk-NY), [@llrs-roche](https://github.com/llrs-roche), [@milanmlft](https://github.com/milanmlft), [@papayoun](https://github.com/papayoun), [@petermacp](https://github.com/petermacp), [@remlapmot](https://github.com/remlapmot), [@salim-b](https://github.com/salim-b), [@saudiwin](https://github.com/saudiwin), [@smzimbo-bayer](https://github.com/smzimbo-bayer), [@srvanderplas](https://github.com/srvanderplas), and [@wjschne](https://github.com/wjschne). + +--- + +*Happy Quarto-ing with R!* \ No newline at end of file diff --git a/docs/blog/posts/2025-07-28-R-package-release-1.5/thumbnail.png b/docs/blog/posts/2025-07-28-R-package-release-1.5/thumbnail.png new file mode 100644 index 0000000000..1cc12ef47a Binary files /dev/null and b/docs/blog/posts/2025-07-28-R-package-release-1.5/thumbnail.png differ diff --git a/docs/blog/posts/2025-xx-xx-1.7-release/index.qmd b/docs/blog/posts/2025-xx-xx-1.7-release/index.qmd deleted file mode 100644 index 62c575f8e9..0000000000 --- a/docs/blog/posts/2025-xx-xx-1.7-release/index.qmd +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Quarto 1.6 -description: | - Quarto 1.7 ... -categories: - - Quarto 1.7 - - Releases -author: Charlotte Wickham -date: "xx/xx/2025" -draft: true -# image: -# image-alt: ---- - -Quarto 1.7 has been officially released! You can get the current release from the [download page](/docs/download/index.qmd) - -You can read about these new features and a couple of breaking changes in the sections below. You can find all the changes in this version in the [Release Notes](/docs/download/changelog/1.7/). - - -## Acknowledgements - -We'd like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests: - -{{< include _contribs.md >}} diff --git a/docs/books/book-basics.qmd b/docs/books/book-basics.qmd index 8977642c8c..d3e90ad388 100644 --- a/docs/books/book-basics.qmd +++ b/docs/books/book-basics.qmd @@ -34,6 +34,26 @@ Follow the Quick Start for your tool of choice to get a simple book up and runni ::: {.panel-tabset group="tools-tabset"} +### Positron + +To create a new book project within Positron, execute the **Quarto: Create Project** command from the command-palette: + +![](/docs/websites/images/positron-create-project-command.png){.include-dark .border} + +Then, select **Book Project**: + +![](images/positron-create-project-book.png){.include-dark .border} + +You'll be prompted to select a parent directory to create the project within. Then, you'll be asked to name the directory for your book project: + +![](/docs/websites/images/positron-create-project-directory.png){.include-dark .border} + +The new book project will be created and opened within Positron. Click the **Preview** button (![](/docs/tools/images/vscode-preview-icon.svg){.light-content fig-alt="Preview icon"}![](/docs/tools/images/vscode-preview-icon-white.svg){.dark-content fig-alt="Preview icon"}) to preview the book: + +![](images/positron-create-project-render-book.png){.include-dark .border} + +The preview will show to the right of the source file. As you re-render `index.qmd` or render other files like `intro.qmd`, the preview is automatically updated. + ### VS Code To create a new book project within VS Code, execute the **Quarto: Create Project** command from the command-palette: @@ -48,7 +68,7 @@ You'll be prompted to select a parent directory to create the project within. Th ![](/docs/websites/images/vscode-create-project-directory.png){.border} -The new book project will be created and opened within VS Code. Click the **Preview** button (![](/docs/tools/images/vscode-preview-icon.svg){fig-alt="Preview icon"}) to preview the book: +The new book project will be created and opened within VS Code. Click the **Preview** button (![](/docs/tools/images/vscode-preview-icon.svg){.light-content fig-alt="Preview icon"}![](/docs/tools/images/vscode-preview-icon-white.svg){.dark-content fig-alt="Preview icon"}) to preview the book: ![](/docs/websites/images/vscode-create-project-render-book.png) diff --git a/docs/books/images/positron-create-project-book-dark.png b/docs/books/images/positron-create-project-book-dark.png new file mode 100644 index 0000000000..700026f7c6 Binary files /dev/null and b/docs/books/images/positron-create-project-book-dark.png differ diff --git a/docs/books/images/positron-create-project-book.png b/docs/books/images/positron-create-project-book.png new file mode 100644 index 0000000000..36b094ce40 Binary files /dev/null and b/docs/books/images/positron-create-project-book.png differ diff --git a/docs/books/images/positron-create-project-render-book-dark.png b/docs/books/images/positron-create-project-render-book-dark.png new file mode 100644 index 0000000000..f78077e296 Binary files /dev/null and b/docs/books/images/positron-create-project-render-book-dark.png differ diff --git a/docs/books/images/positron-create-project-render-book.png b/docs/books/images/positron-create-project-render-book.png new file mode 100644 index 0000000000..0ad231c5d6 Binary files /dev/null and b/docs/books/images/positron-create-project-render-book.png differ diff --git a/docs/computations/_jupyter-authoring-tools.md b/docs/computations/_jupyter-authoring-tools.md index 832d4fdab4..4f9bb7a33b 100644 --- a/docs/computations/_jupyter-authoring-tools.md +++ b/docs/computations/_jupyter-authoring-tools.md @@ -19,6 +19,10 @@ quarto preview document.ipynb In addition to including executable {{< meta jupyter-language >}} code chunks in a Quarto document, you can also embed cells from an external Jupyter Notebook (`.ipynb`). See [Embedding Jupyter Notebook Cells](/docs/authoring/notebook-embed.qmd) for more details. +## Positron + +{{< include _positron.md >}} + ## VS Code The [Quarto Extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) for VS Code provides a variety of tools for working with `.qmd` files in VS Code. The extension integrates directly with the {{< meta vscode-extension >}} to provide the following {{< meta jupyter-language >}}-specific capabilities: diff --git a/docs/computations/_jupyter-execute.md b/docs/computations/_jupyter-execute.md index cf1c11af61..a5d0ccaee4 100644 --- a/docs/computations/_jupyter-execute.md +++ b/docs/computations/_jupyter-execute.md @@ -6,7 +6,7 @@ quarto render notebook.ipynb --execute You can also specify this behavior within the notebook's YAML front matter: -``` yaml +```{.yaml filename="notebook.ipynb"} --- title: "My Notebook" execute: diff --git a/docs/computations/_positron.md b/docs/computations/_positron.md new file mode 100644 index 0000000000..a335390855 --- /dev/null +++ b/docs/computations/_positron.md @@ -0,0 +1,12 @@ +The [Quarto Extension](https://open-vsx.org/extension/quarto/quarto) is bundled with Positron, and provides a variety of tools for working with `.qmd` files. The extension integrates directly with {{< meta positron-extension>}} to provide code completion, cell execution and side-by-side preview of Quarto documents. + +![]({{< meta positron-screenshot >}}){.include-dark .border fig-alt="Screen shot of qmd file open in Positron with source markdown shown in Editor pane and a rendered document shown in the Viewer Pane."} + +The extension includes a **Quarto: Preview** command that can be accessed via the Command Palette, the keyboard shortcut {{< kbd mac=Command-Shift-K win=Control-Shift-K linux=Control-Shift-K >}}, or a **Preview** button (![](/docs/tools/images/vscode-preview-icon.svg){.light-content fig-alt="Preview icon"}![](/docs/tools/images/vscode-preview-icon-white.svg){.dark-content fig-alt="Preview icon"}) in the editor toolbar. +After rendering, a preview is displayed in the Viewer pane within Positron. + +You can read more about using Positron in [Tools: Positron](/docs/tools/positron/index.qmd). + +::: {.content-visible unless-meta="is_r"} +You can also use the Positron notebook editor to create `.ipynb` notebooks that you will render with Quarto. The [Jupyter Lab](#jupyter-lab) section discusses using notebooks with Quarto in the context of Jupyter Lab, but the same concepts apply to Positron. +::: \ No newline at end of file diff --git a/docs/computations/execution-options.qmd b/docs/computations/execution-options.qmd index 5bbc854ead..72cff721b8 100644 --- a/docs/computations/execution-options.qmd +++ b/docs/computations/execution-options.qmd @@ -71,6 +71,8 @@ summary(airquality) ``` ```` +### Cell Renderings + Here is an example of using `renderings` to provide light and dark versions of a plot. Note that the number of cell outputs must match the number of renderings. ```` @@ -101,7 +103,10 @@ plot(1:10) # Shown in `dark` mode ::: -`renderings` does not currently work correctly with the cell options `label` or `fig-cap`, `tbl-cap`, etc. To combine `renderings` with crossrefs and/or captions, use the fenced div syntax: +The `renderings` cell option does not currently work correctly with cell cross-reference options (`label` starting with `fig-`, `tbl-`, etc.) or cell caption options (`fig-cap`, `tbl-cap`, etc.). + + +To combine `renderings` with crossrefs and/or captions, use the fenced div syntax: ```` @@ -117,6 +122,7 @@ format: ::: {#fig-caption-crossref} ```{{r}} +#| label: caption-crossref #| renderings: [light, dark] par(bg = "#FFFFFF", fg = "#000000") plot(1:10) # Shown in `light` mode @@ -131,6 +137,9 @@ Light and dark renderings with a caption and crossref ::: ```` +Note the use of a `label` that is not a cross-reference, i.e. that does not start with one of the [cross reference types](../authoring/cross-references.qmd#overview). It is a good practice to have named cells with `label`, for debuggability and stable resource names. However, cross-reference labels that start with `fig-`, `tbl-`, etc., will not work with `renderings`. + + ::: callout-tip When using the Knitr engine, you can also use any of the available native options (e.g. `collapse`, `tidy`, `comment`, etc.). See the [Knitr options documentation](https://yihui.org/knitr/options/) for additional details. You can include these native options in option comment blocks as shown above, or on the same line as the `{r}` as shown in the Knitr documentation. diff --git a/docs/computations/images/positron-hello-julia-dark.png b/docs/computations/images/positron-hello-julia-dark.png new file mode 100644 index 0000000000..a80d7dd777 Binary files /dev/null and b/docs/computations/images/positron-hello-julia-dark.png differ diff --git a/docs/computations/images/positron-hello-julia.png b/docs/computations/images/positron-hello-julia.png new file mode 100644 index 0000000000..17f53a2db4 Binary files /dev/null and b/docs/computations/images/positron-hello-julia.png differ diff --git a/docs/computations/inline-code.qmd b/docs/computations/inline-code.qmd index a787988965..9ed8b7d7da 100644 --- a/docs/computations/inline-code.qmd +++ b/docs/computations/inline-code.qmd @@ -72,7 +72,7 @@ If you need to generate a dynamic caption, instead of using the `fig-cap` or `tb ## Usage in Notebooks -Inline expressions are always evaluated when rendering and previewing `.qmd` files. However, for notebooks you need to execute the notebook with Quarto to evaluate inline expressions (i.e. they won't be evaluated within the JupyterLab, VS Code, or PyCharm notebook editor). +Inline expressions are always evaluated when rendering and previewing `.qmd` files. However, for notebooks you need to execute the notebook with Quarto to evaluate inline expressions (i.e. they won't be evaluated within the JupyterLab, Positron, VS Code, or PyCharm notebook editor). You can work in your favorite notebook front-end without Quarto execution, then once you are ready to publish execute the notebook during rendering as follows: diff --git a/docs/computations/julia.qmd b/docs/computations/julia.qmd index 791150ea60..854b17a2bf 100644 --- a/docs/computations/julia.qmd +++ b/docs/computations/julia.qmd @@ -1,5 +1,7 @@ --- title: "Using Julia" +positron-extension: "the [Julia Extension](https://www.julia-vscode.org/docs)" +positron-screenshot: "images/positron-hello-julia.png" jupyter-language: "Julia" jupyter-screenshot: "![](images/julia-jupyter.png){.border fig-alt='Side-by-side preview of notebook on the left and live preview in the browser on the right.'}" vscode-extension: "[Julia Extension](https://www.julia-vscode.org/docs)" @@ -48,7 +50,7 @@ date: "5/22/2021" format: html: code-fold: true -jupyter: julia-1.8 +engine: julia --- ### Parametric Plots diff --git a/docs/computations/python.qmd b/docs/computations/python.qmd index 8d066cccdd..76b55aa6a2 100644 --- a/docs/computations/python.qmd +++ b/docs/computations/python.qmd @@ -1,5 +1,7 @@ --- title: "Using Python" +positron-extension: "Positron's native Python support" +positron-screenshot: "/docs/get-started/hello/images/positron-hello-python.png" jupyter-language: "Python" jupyter-screenshot: "![](/docs/get-started/hello/images/jupyter-basics.png){.border fig-alt='A Jupyter notebook titled Quarto Basics containing some text, a code cell, and the result of the code cell, which is a line plot on a polar axis.'}" vscode-extension: "[Python Extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python)" diff --git a/docs/computations/r.qmd b/docs/computations/r.qmd index e53b509e50..4559b946e9 100644 --- a/docs/computations/r.qmd +++ b/docs/computations/r.qmd @@ -1,5 +1,8 @@ --- title: "Using R" +positron-extension: "Positron's native R support" +positron-screenshot: "/docs/get-started/hello/images/positron-hello-r.png" +is_r: true --- ## Overview @@ -101,6 +104,9 @@ Quarto will select a version of R by looking on the system `PATH`. In addition, {{< include ../tools/_rstudio.md >}} +## Positron + +{{< include _positron.md >}} ## VS Code @@ -114,10 +120,10 @@ The [Quarto Extension](https://marketplace.visualstudio.com/items?itemName=quart You can install the VS Code extension by searching for 'quarto' in the extensions panel or from the [extension marketplace](https://marketplace.visualstudio.com/items?itemName=quarto.quarto). -The VS Code extension includes a **Quarto: Preview** command that can be accessed via the Command Palette, the keyboard shortcut {{< kbd mac=Command-Shift-K win=Control-Shift-K linux=Control-Shift-K >}}, or a **Preview** button (![](/docs/tools/images/vscode-preview-icon.svg){fig-alt="Preview icon"}) in the editor. +The VS Code extension includes a **Quarto: Preview** command that can be accessed via the Command Palette, the keyboard shortcut {{< kbd mac=Command-Shift-K win=Control-Shift-K linux=Control-Shift-K >}}, or a **Preview** button (![](/docs/tools/images/vscode-preview-icon.svg){.light-content fig-alt="Preview icon"}![](/docs/tools/images/vscode-preview-icon-white.svg){.dark-content fig-alt="Preview icon"}) in the editor. After rendering, a preview is displayed in a pane within VS Code alongside your document. -You can read more about using VS Code in [Tools: VS Code](/docs/tools/vscode.qmd). +You can read more about using VS Code in [Tools: VS Code](/docs/tools/vscode/index.qmd). ## Emacs diff --git a/docs/dashboards/index.qmd b/docs/dashboards/index.qmd index 753c26fd01..f151fd76f5 100644 --- a/docs/dashboards/index.qmd +++ b/docs/dashboards/index.qmd @@ -26,7 +26,7 @@ Quarto Dashboards make it easy to create interactive dashboards using Python, R, - Flexible and easy to specify row and column-based [Layouts](layout.qmd). Components are intelligently re-sized to fill the browser and adapted for display on mobile devices. -- Author using any notebook editor ([JupyterLab](/docs/tools/jupyter-lab.qmd), etc.) or in plain text markdown with any text editor ([VS Code](/docs/tools/vscode.qmd), [RStudio](/docs/tools/rstudio.qmd), [Neovim](/docs/tools/neovim.qmd), etc.) +- Author using any notebook editor ([JupyterLab](/docs/tools/jupyter-lab.qmd), etc.) or in plain text markdown with any text editor ([VS Code](/docs/tools/vscode/index.qmd), [Positron](/docs/tools/positron/index.qmd), [RStudio](/docs/tools/rstudio.qmd), [Neovim](/docs/tools/neovim.qmd), etc.) - Dashboards can be deployed as static web pages (no special server required) or you can optionally integrate a backend [Shiny Server](/docs/dashboards/interactivity/shiny-python/index.qmd) for enhanced interactivity. @@ -156,3 +156,5 @@ Once you've mastered the basics, check out these additional articles to learn mo [Deployment](deployment.qmd) covers how to deploy both static dashboards (which require only a web host, but not a server) and Shiny dashboards (which require a Shiny Server). [Interactivity](interactivity/index.qmd) explores the various ways to create interactive dashboards that enable more flexible data exploration. + +{{< include /docs/advanced/html/_external-sources-section.md >}} diff --git a/docs/dashboards/interactivity/shiny-python/execution.qmd b/docs/dashboards/interactivity/shiny-python/execution.qmd index 83c41f4e24..1c1568804c 100644 --- a/docs/dashboards/interactivity/shiny-python/execution.qmd +++ b/docs/dashboards/interactivity/shiny-python/execution.qmd @@ -67,6 +67,6 @@ To learn more about Shiny for Python interactive documents see the following art - [Input Layout](/docs/dashboards/inputs.qmd) describes various ways to layout inputs (sidebars, input panels, attaching inputs directly to cards, etc.). -- [Running Dashboards](running.qmd) covers how to run interactive dashboards both within VS Code and at the command line, as well as how to deploy them to end users. +- [Running Dashboards](running.qmd) covers how to run interactive dashboards both within VS Code, Positron, and at the command line, as well as how to deploy them to end users. - [Shiny for Python](https://shiny.posit.co/py/) provides in-depth documentation on all of the available UI and ouput widgets, as well as conceptual discussions on how things work. diff --git a/docs/dashboards/interactivity/shiny-python/index.qmd b/docs/dashboards/interactivity/shiny-python/index.qmd index 21e14c0169..1b8de6d097 100644 --- a/docs/dashboards/interactivity/shiny-python/index.qmd +++ b/docs/dashboards/interactivity/shiny-python/index.qmd @@ -217,7 +217,7 @@ To learn more about Shiny for Python interactive documents see the following art [Input Layout](/docs/dashboards/inputs.qmd) describes various ways to layout Shiny inputs (sidebars, input panels, attaching inputs directly to cards, etc.) -[Running Dashboards](running.qmd) covers in more depth how to run Shiny dashboards both within VS Code and at the command line, as well as how to deploy them to end users. +[Running Dashboards](running.qmd) covers in more depth how to run Shiny dashboards both within VS Code, Positron, and at the command line, as well as how to deploy them to end users. [Execution Contexts](execution.qmd) goes in depth on when different code cells run (e.g. rendering vs. serving). diff --git a/docs/dashboards/interactivity/shiny-python/running.qmd b/docs/dashboards/interactivity/shiny-python/running.qmd index 98b33f4124..bed5abc3ce 100644 --- a/docs/dashboards/interactivity/shiny-python/running.qmd +++ b/docs/dashboards/interactivity/shiny-python/running.qmd @@ -7,7 +7,7 @@ lightbox: auto There are a number of ways to run Shiny for Python interactive documents: -1. Use the **Quarto: Preview** command within VS Code. +1. Use the **Quarto: Preview** command within VS Code or Positron. 2. Use the `quarto preview` command line interface with any editor. 3. Deploy them to a server for use by a wider audience. @@ -15,14 +15,12 @@ We'll cover all of these scenarios in depth here. {{< include _shiny-requirements.qmd >}} -## VS Code +## VS Code and Positron -The [Quarto VS Code Extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) provides integrated support for previewing Shiny interactive documents (just use the **Quarto: Preview** command as you normally would with a static document): +The Quarto Extension for VS Code and Positron (available on both [OpenVSX](https://open-vsx.org/extension/quarto/quarto) and [Microsoft's marketplace](https://marketplace.visualstudio.com/items?itemName=quarto.quarto)) provides integrated support for previewing Shiny interactive documents (just use the **Quarto: Preview** command as you normally would with a static document): ![](images/preview-dashboard.png){.border fig-alt="Screenshot of VS Code with the file shiny.qmd open in the left pane. On the right is a pane labelled Quarto Preview showing the live dashboard."} -Note that you need the very latest version of the VS Code extension (v1.105.0 or greater) to preview Shiny interactive documents. - ## Command Line If you are using another notebook or text editor, you can also preview Shiny interactive documents from the command line via `quarto preview`. This works the same for notebooks (`.ipynb`) and plain text markdown (`.qmd`). For example: diff --git a/docs/download/_download.json b/docs/download/_download.json index 457cb26502..c6cd8b558c 100644 --- a/docs/download/_download.json +++ b/docs/download/_download.json @@ -1,81 +1,82 @@ { - "version": "1.7.29", - "name": "v1.7.29", - "created": "2025-04-24T16:22:07Z", - "published": "2025-04-24T16:30:00Z", + "version": "1.7.33", + "name": "v1.7.33", + "created": "2025-08-06T16:30:15Z", + "updated": "2025-08-06T16:42:41Z", + "published": "2025-08-06T16:42:31Z", "assets": [ { "name": "changelog.md", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/changelog.md", - "checksum": "b2f7a21fab5c8c9a750a5e10cd4ae4c09b4d8a912538988847e8c73e004ee5a0", - "size": 19983 + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/changelog.md", + "checksum": "7c2aca2df41e4b83ec8f6b08b530557c853b7fb436f9bf7c14a500e158bbff8f", + "size": 21677 }, { - "name": "quarto-1.7.29-checksums.txt", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-checksums.txt", - "checksum": "331781cbaf4c502c27199a1acf33f873c6e9b90461c723450cd9a89c46422f15", + "name": "quarto-1.7.33-checksums.txt", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-checksums.txt", + "checksum": "66d3093791d40167e52d74ac25bce5d856eb85532b8ecad0b6c3cac1ced550fc", "size": 941 }, { - "name": "quarto-1.7.29-linux-amd64.deb", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-amd64.deb", - "checksum": "977414594f3453b404d939b2b209be9b11147f6921ffa652b3784824378cbd2a", - "size": 130659850 + "name": "quarto-1.7.33-linux-amd64.deb", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-amd64.deb", + "checksum": "b047db27a55eb353b377bb0b205bdf2fa155f2be5f1467b5c015453718ffc6df", + "size": 130685174 }, { - "name": "quarto-1.7.29-linux-amd64.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-amd64.tar.gz", - "checksum": "5055cdca8becbd198b4c01d0dcffd7619c0be2cbbdc709ab4d0085cb755791a9", - "size": 132100418 + "name": "quarto-1.7.33-linux-amd64.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-amd64.tar.gz", + "checksum": "3833bca69f78d2966d3f9dc710cf11f493df8c02b14a156fc8006370776b95ec", + "size": 132139780 }, { - "name": "quarto-1.7.29-linux-arm64.deb", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-arm64.deb", - "checksum": "37be2c03dd6f0771b80faca34b6c583d20a38d0a8b49d73086aa785859836693", - "size": 134810026 + "name": "quarto-1.7.33-linux-arm64.deb", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-arm64.deb", + "checksum": "30fdffbd1428fa798b731bf11f6999562e4482cb3c57b5ca6bc8ebdf6ee37d8b", + "size": 134854156 }, { - "name": "quarto-1.7.29-linux-arm64.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-arm64.tar.gz", - "checksum": "6be23c5d6ece31321647ee7238030552568a335e9ef84732c3377bfd28a0feb4", - "size": 136051187 + "name": "quarto-1.7.33-linux-arm64.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-arm64.tar.gz", + "checksum": "4aa940c44b30a605ead1ca6aa5dabffb9a9874c8bcab9109e18d270e3c34514f", + "size": 136089436 }, { - "name": "quarto-1.7.29-linux-rhel7-amd64.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-linux-rhel7-amd64.tar.gz", - "checksum": "531fe6438cb1f2aba613118f775306c140d5dc662b830762e5a9b3daca10edd7", - "size": 135240918 + "name": "quarto-1.7.33-linux-rhel7-amd64.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-linux-rhel7-amd64.tar.gz", + "checksum": "d065ab1a244b5fecd8b8dbb21a3f5a2310f40d28b545e8ad37b8197493cb0471", + "size": 135277492 }, { - "name": "quarto-1.7.29-macos.pkg", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-macos.pkg", - "checksum": "4027cae5e3637577c2fa26bb99d2131fbbe406a29e9eb414861eec8bac86ea4a", - "size": 216653163 + "name": "quarto-1.7.33-macos.pkg", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-macos.pkg", + "checksum": "c2666673749f1a7e6ea7f5a2596c998e18ece22b9553a3c82a48fadf6630a434", + "size": 216677040 }, { - "name": "quarto-1.7.29-macos.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-macos.tar.gz", - "checksum": "a7363a81460a328dda841aa82239a354109e93a13e6073c88b3adf6e0f71cdf1", - "size": 216477793 + "name": "quarto-1.7.33-macos.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-macos.tar.gz", + "checksum": "444fb7c62118352b3fb282bc172570294a299ffdf374b5feee8ec701287f8bde", + "size": 216513050 }, { - "name": "quarto-1.7.29-win.msi", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-win.msi", - "checksum": "a92a99c4fcda93b557aaf2b0f929e195ba585c1b08947339fc0bf8887981d2ca", - "size": 129355776 + "name": "quarto-1.7.33-win.msi", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-win.msi", + "checksum": "993bcf6dbf0344039287ba2a0e0a1cef352d3d512f61828fb1b07fe830f4d221", + "size": 129253376 }, { - "name": "quarto-1.7.29-win.zip", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29-win.zip", - "checksum": "c309c1c4b4019adb51c295938ca911d6a9188dde9019d572fb41c12f23103224", - "size": 129562755 + "name": "quarto-1.7.33-win.zip", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33-win.zip", + "checksum": "e161619063f5b93a97683164bb803a8068e176f056b9d502b25293c3bb8bd608", + "size": 129467849 }, { - "name": "quarto-1.7.29.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.29/quarto-1.7.29.tar.gz", - "checksum": "f534211a01731bd835e9dc43ac10b3efe55e6d202b9e2a8541c5ea2d5882c8d8", - "size": 110264338 + "name": "quarto-1.7.33.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.7.33/quarto-1.7.33.tar.gz", + "checksum": "46a09dfc6e7c3da14898e4c25a21a2fa469d9690adb71471fd265e2d674282a1", + "size": 110254198 } ], - "description": "All changes included in 1.7:\n\n## Regression fixes\n\n- ([#11509](https://github.com/quarto-dev/quarto-cli/issues/11509)): Fix link-decoration regression in HTML formats.\n- ([#11532](https://github.com/quarto-dev/quarto-cli/issues/11532)): Fix regression for [#660](https://github.com/quarto-dev/quarto-cli/issues/660), which causes files to have incorrect permissions when Quarto is installed in a location not writable by the current user.\n- ([#11549](https://github.com/quarto-dev/quarto-cli/issues/11549)): Fix regression in rendering `dashboard` tabsets into cards without titles.\n- ([#11561](https://github.com/quarto-dev/quarto-cli/issues/11561)): Fix a regression with `$border-color` that impacted, callouts borders, tabset borders, and table borders of the defaults themes. `$border-color` is now correctly a mixed of `$body-color` and `$body-bg` even for the default theme.\n- ([#11580](https://github.com/quarto-dev/quarto-cli/issues/11580)): Fix regression with documents containing `categories` fields that are not strings.\n- ([#11659](https://github.com/quarto-dev/quarto-cli/pull/11659)): `julia` engine - Fix escaping bug where paths containing spaces or backslashes break server startup on Windows.\n- ([#11752](https://github.com/quarto-dev/quarto-cli/issues/11752)): Fix regression with non-alphanumeric characters in `categories` preventing correct filtering of listing.\n- ([#11943](https://github.com/quarto-dev/quarto-cli/issues/11943)): Fix callout title color on dark theme in revealjs following Revealjs update in quarto 1.6.\n- ([#11990](https://github.com/quarto-dev/quarto-cli/issues/11990)): Do not print parameter cell in parameterized Jupyter notebooks.\n- ([#12147](https://github.com/quarto-dev/quarto-cli/issues/12147)): for RevealJS format, `serif` and `simple` themes defaults back to have their heading color (`$presentation-heading-color`) to be the same as the body color (`$body-color`) as in Quarto 1.5.\n\n## Dependencies\n\n- Update `typst` to `0.13.0`.\n- Update `pandoc` to `3.6.3`.\n- Update `dart-sass` to `1.85.1`.\n- Update `esbuild` to `0.19.12`.\n\n## YAML validation\n\n- ([#10251](https://github.com/quarto-dev/quarto-cli/issues/10251)): EJS template for website now uses proper object to get alt text for logo in sidebar.\n- ([#11654](https://github.com/quarto-dev/quarto-cli/issues/11654)): Allow `page-inset` as value in `column` key for code cells.\n- ([#12151](https://github.com/quarto-dev/quarto-cli/issues/12151)): Fix YAML validation in computations cell on Windows. Validate YAML in documents in `julia` engine.\n\n## Projects\n\n### `website`\n\n- ([#8238](https://github.com/quarto-dev/quarto-cli/issues/8238)): Listing categories are now sorted case-insensitively.\n- ([#10501](https://github.com/quarto-dev/quarto-cli/issues/10501)): Improve documentation of `repo-actions` option.\n- ([#11701](https://github.com/quarto-dev/quarto-cli/issues/11701)): Wrap HTML emitted by EJS templates in `{=html}` blocks to avoid memory blowup issues with Pandoc's parser.\n- ([#12134](https://github.com/quarto-dev/quarto-cli/issues/12134)): Forward `logo.small` images in `_brand.yml` files to a website `favicon`.\n\n### `blog`\n\n- ([#11745](https://github.com/quarto-dev/quarto-cli/issues/11745)): Fix categories links under post title in post with url encoded path (e.g. with space or other special characters).\n\n### `book`\n\n- ([#11520](https://github.com/quarto-dev/quarto-cli/issues/11520)): Book's cover image now escapes lightbox treatment, which was incorrectly applied to it when `lightbox: true` was set in the book's configuration.\n- ([#12134](https://github.com/quarto-dev/quarto-cli/issues/12134)): Forward `logo.small` images in `_brand.yml` files to the `favicon` of the book's website.\n\n## Commands\n\n### `quarto check`\n\n- ([#10047](https://github.com/quarto-dev/quarto-cli/issues/10047)): `quarto check` will now check binary dependency versions strictly by default. Use `quarto check --no-strict` to revert to old behavior.\n- ([#10561](https://github.com/quarto-dev/quarto-cli/issues/10561)): `quarto check` will now report paths of binary dependencies.\n- ([#11608](https://github.com/quarto-dev/quarto-cli/pull/11608)): Do not issue error message when calling `quarto check info`.\n- ([#12433](https://github.com/quarto-dev/quarto-cli/pull/12433)): Add `--output` option to `quarto check` to produce structured JSON output.\n\n### `quarto convert`\n\n- ([#12042](https://github.com/quarto-dev/quarto-cli/issues/12042)): Preserve Markdown content that follows YAML metadata in a `raw` .ipynb cell.\n- ([#12318](https://github.com/quarto-dev/quarto-cli/issues/12318)): Ensure enough line breaks between cells that might be trimmed.\n\n### `quarto inspect`\n\n- ([#12336](https://github.com/quarto-dev/quarto-cli/issues/12336)): Clean up transient files created by `quarto inspect`.\n\n## Formats\n\n### `dashboard`\n\n- ([#11338](https://github.com/quarto-dev/quarto-cli/issues/11338)): Remove unused datatables imports when appropriate.\n\n### `html`\n\n- ([#1325](https://github.com/quarto-dev/quarto-cli/issues/1325)): Dark Mode pages should not flash light on reload. (Nor should Light Mode pages flash dark.)\n- ([#1470](https://github.com/quarto-dev/quarto-cli/issues/1470)): `respect-user-color-scheme` enables checking the media query `prefers-color-scheme` for user dark mode preference. Author preference still influences stylesheet order and NoJS experience. Defaults to `false`, leaving to author preference.\n- ([#10780](https://github.com/quarto-dev/quarto-cli/issues/10780)): improve `link-external-filter` documentation.\n- ([#11860](https://github.com/quarto-dev/quarto-cli/issues/11860)): ES6 modules that import other local JS modules in documents with `embed-resources: true` are now correctly embedded.\n- ([#11911](https://github.com/quarto-dev/quarto-cli/issues/11911)): Code highlighting colors for tokens are now the same between code blocks and inline code when using Pandoc's syntax highlighting.\n- ([#12118](https://github.com/quarto-dev/quarto-cli/issues/12118)): Don't hide `:focus` on code-copy button.\n- ([#12277](https://github.com/quarto-dev/quarto-cli/pull/12277)): Provide light and dark plot and table renderings with `renderings: [light,dark]`\n- ([#12307](https://github.com/quarto-dev/quarto-cli/issues/12307)): Tabsets using `tabby.js` in non-boostrap html (`theme: pandoc`, `theme: none` or `minimal: true`) now correctly render reactive content when `server: shiny` is used.\n- ([#12319](https://github.com/quarto-dev/quarto-cli/pull/12319)): Provide switchable light and dark brands for a page with `brand.light` and `brand.dark`.\n- ([#12356](https://github.com/quarto-dev/quarto-cli/issues/12356)): Remove duplicate id in HTML document when using `#lst-` prefix label for using Quarto crossref.\n\n### `pdf`\n\n- ([#11695](https://github.com/quarto-dev/quarto-cli/issues/11695)): Translate ANSI color codes more carefully inside `highlighting` environments.\n- ([#11835](https://github.com/quarto-dev/quarto-cli/issues/11835)): Take markdown structure into account when detecting minimum heading level.\n- ([#11878](https://github.com/quarto-dev/quarto-cli/issues/11878), [#12085](https://github.com/quarto-dev/quarto-cli/issues/12085)): Correctly fixup raw LaTeX table having an unexpected table env with options (e.g `\\begin{table}[!ht]`) to be handled as crossref table.\n- ([#11903](https://github.com/quarto-dev/quarto-cli/issues/11903)): `crossref` configuration like `fig-title` or `tbl-title` now correctly supports multi word values, e.g. `fig-title: 'Supplementary Figure'`.\n- ([#12344](https://github.com/quarto-dev/quarto-cli/issues/12344)): Ensure decorated code blocks do not float when inside layout elements.\n- Update to Pandoc's LaTeX template following Pandoc 3.6.3 support:\n - `format: beamer` now uses its own template. The main template for latex does not use `$if(beamer)$` anymore, and the new template for beamer uses the same partials as latex one.\n - Improved Babel support:\n - New `babeloptions` variable in the template to allow for more flexible Babel options.\n - `doc-class.tex` Quarto's partial has been updated as Babel options have been moved to `documentclass` definition in `doc-class.tex` Quarto's partial.\n - New partials available for `format: latex` and `format: beamer`:\n - Pandoc now uses partials for its latex templates, and they are available through `template-partials`. Pandoc's partials uses `.latex` extension: `passoptions.latex`, `common.latex`, `font-settings.latex`, `fonts.latex`, `hypersetup.latex`, `after-header-includes.latex`\n - New Quarto partials: `babel-lang.tex`, `biblio-config.tex`. Quarto's partials uses `.tex` extension.\n - BREAKING CHANGE for templates authors: `common.latex` does now uses `pandoc.tex` partial from Quarto, which include now part of the content that was in main `template.tex`. If you modify `pandoc.tex` as part of a custom format, it should be updated to new content.\n\n### `jats`\n\n- Update to Pandoc's template following Pandoc 3.6.3 support:\n - `article.jats_publishing` partials now support `author.roles`\n\n### `revealjs`\n\n- ([#12307](https://github.com/quarto-dev/quarto-cli/issues/12307)): Tabsets using `tabby.js` in Revealjs now correctly render reactive content when `server: shiny` is used.\n\n### `typst` format\n\n- ([#11578](https://github.com/quarto-dev/quarto-cli/issues/11578)): Typst column layout widths use fractional `fr` units instead of percent `%` units for unitless and default widths in order to fill the enclosing block and not spill outside it.\n- ([#11676](https://github.com/quarto-dev/quarto-cli/pull/11676)): Convert unitless image widths from pixels to inches for column layouts.\n- ([#11835](https://github.com/quarto-dev/quarto-cli/issues/11835)): Take markdown structure into account when detecting minimum heading level.\n- ([#11964](https://github.com/quarto-dev/quarto-cli/issues/11964)): Using panel layout without a crossref label now correctly do not add an empty `#block[]` that was leading to an unnecessary space in output.\n- ([#12387](https://github.com/quarto-dev/quarto-cli/pull/12387)): `brand-mode` chooses whether to use `light` (default) or `dark` brand yml.\n- ([#12825](https://github.com/quarto-dev/quarto-cli/issues/11825)): Callouts look better with dark brands, mixing the title color and using brand background color for body.\n- ([#12354](https://github.com/quarto-dev/quarto-cli/issues/12354)): CodeBlock in Listing with `#lst-` prefix are now correctly highlighted.\n\n## Engines\n\n### `julia`\n\n- ([#11803](https://github.com/quarto-dev/quarto-cli/pull/11803)): Added subcommands `status`, `kill`, `close [--force]` and `log` under the new CLI command `quarto call engine julia`.\n- ([#12121](https://github.com/quarto-dev/quarto-cli/pull/12121)): Update QuartoNotebookRunner to 0.17.0. Support for evaluating Python cells via [PythonCall.jl](https://github.com/JuliaPy/PythonCall.jl) added. Support for notebook caching via `execute.cache` added.\n- ([#12151](https://github.com/quarto-dev/quarto-cli/pull/12151)): Basic YAML validation is now active for documents using Julia engine.\n\n### `jupyter`\n\n- ([#9089](https://github.com/quarto-dev/quarto-cli/issues/9089)): Serialize compound `jupyter` metadata into a special key-value attribute to not break Pandoc's fenced div parsing.\n- ([#10113](https://github.com/quarto-dev/quarto-cli/issues/10113)): KaTeX will now load correctly in `engine: jupyter` documents using `emebed-resources: true`.\n- ([#12114](https://github.com/quarto-dev/quarto-cli/issues/12114)): `JUPYTERCACHE` environment variable from [Jupyter cache CLI](https://jupyter-cache.readthedocs.io/en/latest/using/cli.html) is now respected by Quarto when `cache: true` is used. This environment variable allows to change the path of the cache directory.\n- ([#12228](https://github.com/quarto-dev/quarto-cli/issues/12228)): `quarto render` will now fails if errors are detected at IPython display level. Setting `error: true` globally or at cell level will keep the error to show in output and not stop the rendering.\n- ([#12374](https://github.com/quarto-dev/quarto-cli/issues/12374)): Detect language properly in Jupyter notebooks that lack the `language` field in their `kernelspec`s.\n\n## Quarto PDF rendering\n\n- ([#12194](https://github.com/quarto-dev/quarto-cli/issues/12194)): More specific checks added in log parsing to automatically find missing fonts.\n\n## Shiny\n\n- ([#12059](https://github.com/quarto-dev/quarto-cli/issues/12059)): `quarto preview` now correctly run on Windows an interactive Quarto doc with Jupyter engine and py-shiny, when using a `*.py` file as resource.\n\n## Lua Filters and extensions\n\n- Add `quarto.paths.tinytex_bin_dir` to Quarto's Lua API. If TinyTeX is found by Quarto, this will be set to the path to the `bin` directory of the TinyTeX installation where command line tool are located (e.g., `pdflatex`, `tlmgr`, etc.). If TinyTeX is not found, this will be `nil`, meaning Quarto will use the system PATH to find the command line tools.\n- Fix `pandoc.mediabag` Lua typings so autocompletions work with the Lua LSP integration.\n- ([#11379](https://github.com/quarto-dev/quarto-cli/issues/11379)): Add `version` shortcode to display the current Quarto version.\n- ([#11526](https://github.com/quarto-dev/quarto-cli/pull/11526)): General improvements to the style and robustness of Quarto's Lua code. This also provides a new public function `quarto.utils.is_empty_node` that allows to check whether a node is empty, i.e., whether it's an empty list, has no child nodes, and contains no text.\n- ([#11664](https://github.com/quarto-dev/quarto-cli/issues/11664)): `lipsum` shortcode is no longer randomly generated by default, use `{{< lipsum random=true >}}` to restore randomness.\n- ([#11699](https://github.com/quarto-dev/quarto-cli/issues/11699)): Fix crash with `video` shortcode inside HTML comments.\n- ([#11896](https://github.com/quarto-dev/quarto-cli/pull/11896)): fix `\\f` (`{{< pagebreak >}}`) form feed character not valid in PowerPoint (`pptx`).\n- ([#12326](https://github.com/quarto-dev/quarto-cli/issues/12326)): Add `quarto.shortcode.*` API entry points for shortcode developers.\n- ([#12365](https://github.com/quarto-dev/quarto-cli/pull/12365)): `brand color` shortcode takes an optional `brandMode` second parameter, default `light`.\n- ([#12453](https://github.com/quarto-dev/quarto-cli/issues/12453)): Expose `_quarto.modules.brand` as `quarto.brand` and add `has_mode()` function.\n- ([#12564](https://github.com/quarto-dev/quarto-cli/issues/12564)): `brand logo` shortcode also takes an optional `brandMode` second parameter, default `light`.\n\n### Conditional Content\n\n- ([#4411](https://github.com/quarto-dev/quarto-cli/issues/12462)): Added support for new format and aliases in `when-format` and `unless-format`: `confluence`, `docusaurus` (and `docusaurus-md`), `email`, `dashboard`, `gfm`, `hugo` (and `hugo-md`).\n\n### Quarto Lua API\n\n- ([#4411](https://github.com/quarto-dev/quarto-cli/issues/12462)): `quarto.format.is_format` is now working as expected with support of more aliases: `confluence`, `docusaurus` (and `docusaurus-md`), `email`, `dashboard`, `gfm`, `hugo` (and `hugo-md`)\n- ([#12299](https://github.com/quarto-dev/quarto-cli/issues/12299)): `quarto.doc.pdf_engine()` now correctly returns the PDF engine used for the document. `quarto.doc.cite_method()` now returns `nil` if no citation method will be used (i.e. no references is the document set).\n\n## Languages\n\n- ([#12366](https://github.com/quarto-dev/quarto-cli/pull/12366)): Added Bulgarian translation for Quarto UI text (credit: @sakelariev)\n\n## `quarto publish`\n\n- ([#9929](https://github.com/quarto-dev/quarto-cli/issues/9929)): `quarto publish gh-pages` will now clean previous worktree directory leftover from previous deploys.\n\n## Other Fixes and Improvements\n\n- A new folder `quarto-session-temp` can be created in `.quarto` to store temporary files created by Quarto during a rendering. Reminder: `.quarto` is for internal use of Quarto and should not be versioned (thus added to `.gitignore`).\n- ([fb38eb5](https://github.com/quarto-dev/quarto-cli/commit/fb38eb56c11e09f44cef58fd3b697ff24bb5a3f3)) Use the `latest` parser for Acorn when analyzing JS code imported from OJS blocks.\n- ([#7260](https://github.com/quarto-dev/quarto-cli/issues/7260)): Add support for `active` class in tabsets so the `.active` tab shows up by default.\n- ([#7757](https://github.com/quarto-dev/quarto-cli/issues/7757)): Session temporary files are now cleaned up when the session ends abnormally (e.g. `Ctrl+C`) also on Windows.\n- ([#8613](https://github.com/quarto-dev/quarto-cli/issues/8613)): Fix `giscus` color on load to support dark mode (by @kv9898).\n- ([#9867](https://github.com/quarto-dev/quarto-cli/issues/9867)): Blank lines are now trimmed in Raw HTML Table blocks.\n- ([#10532](https://github.com/quarto-dev/quarto-cli/issues/10532)): Changed default of `--headless=old` to `--headless` as [Chrome 132 has removed old headless mode](https://developer.chrome.com/blog/removing-headless-old-from-chrome) and only support new mode. To use old mode, set `QUARTO_CHROMIUM` to a [new `chrome-headless-shell` binary](https://developer.chrome.com/blog/chrome-headless-shell) or to an older chrome version (between 128 and 132). Set `QUARTO_CHROMIUM_HEADLESS_MODE` to `old` to use old headless mode with that compatible version.\n- ([#10961](https://github.com/quarto-dev/quarto-cli/issues/10961)): Add more information on which Chrome Headless will be used in `quarto check install`. This is helpful to help debug mermaid issues.\n- ([#11441](https://github.com/quarto-dev/quarto-cli/issues/11441)): Don't add newlines around shortcodes during processing.\n- ([#11606](https://github.com/quarto-dev/quarto-cli/discussions/11606)): Added a new `QUARTO_DOCUMENT_FILE` env var available to computation engine to the name of the file currently being rendered.\n- ([#11643](https://github.com/quarto-dev/quarto-cli/issues/11643)): Improve highlighting of nested code block inside markdown code block, i.e. using ` ```{{python}} ` or ` ```python ` inside ` ````markdown` fenced code block.\n- ([#11788](https://github.com/quarto-dev/quarto-cli/issues/11788)): `quarto add` and `quarto remove` will return non-zero code when they fail.\n- ([#11803](https://github.com/quarto-dev/quarto-cli/pull/11803)): Added a new CLI command `quarto call`. First users of this interface are the new `quarto call engine julia ...` subcommands.\n- ([#11951](https://github.com/quarto-dev/quarto-cli/issues/11951)): Raw LaTeX table without `tbl-` prefix label for using Quarto crossref are now correctly passed through unmodified.\n- ([#11967](https://github.com/quarto-dev/quarto-cli/issues/11967)): Produce a better error message when YAML metadata with `!expr` tags are used outside of `knitr` code cells.\n- ([#12117](https://github.com/quarto-dev/quarto-cli/issues/12117)): Color output to stdout and stderr is now correctly rendered for `html` format in the Jupyter and Julia engines.\n- ([#12264](https://github.com/quarto-dev/quarto-cli/issues/12264)): Upgrade `dart-sass` to 1.85.1.\n- ([#12238](https://github.com/quarto-dev/quarto-cli/issues/12238)): Do not truncate very long console errors (e.g. in Jupyter Notebook with backtrace).\n- ([#12338](https://github.com/quarto-dev/quarto-cli/issues/12338)): Add an additional workaround for the SCSS parser used in color variable extraction.\n- ([#12369](https://github.com/quarto-dev/quarto-cli/pull/12369)): `quarto preview` correctly throws a YAML validation error when a `format` key does not conform.\n- ([#12459](https://github.com/quarto-dev/quarto-cli/pull/12459)): Add `.page-inset-*` classes to completions.\n- ([#12492](https://github.com/quarto-dev/quarto-cli/pull/12492)): Improve shortcode extension template with new parameters and a link to docs.\n- ([#12513](https://github.com/quarto-dev/quarto-cli/issues/12513)): Fix an issue with `quarto preview` when using **DiagrammeR** R package for Graphiz diagram.\n" + "description": "# v1.8 backports\n\n## In this release\n\n- ([#13051](https://github.com/quarto-dev/quarto-cli/issues/13051)): Fixed support for captioned Markdown table inside Div syntax for crossref. This is special handling, but this could be output by function like `knitr::kable()` with old option support.\n- ([#12753](https://github.com/quarto-dev/quarto-cli/issues/12753)): Support change in IPython 9+ and import `set_matplotlib_formats` from `matplotlib_inline.backend_inline` in the internal `setup.py` script used to initialize rendering with Jupyter engine.\n\n## In previous releases\n\n- ([#6607](https://github.com/quarto-dev/quarto-cli/issues/6607)): Add missing beamer template update for beamer theme options: `colorthemeoptions`, `fontthemeoptions`, `innerthemeoptions` and `outerthemeoptions`.\n- ([#12625](https://github.com/quarto-dev/quarto-cli/pull/12625)): Fire resize event on window when light/dark toggle is clicked, to tell widgets to resize.\n- ([#12657](https://github.com/quarto-dev/quarto-cli/pull/12657)): Load Giscus in generated script tag, to avoid wrong-theming in Chrome.\n- ([#12700](https://github.com/quarto-dev/quarto-cli/issues/12700)): Giscus not loading on a site without dark mode configured.\n- ([#12780](https://github.com/quarto-dev/quarto-cli/issues/12780)): `keep-ipynb: true` now works again correctly and intermediate `.quarto_ipynb` is not removed.\n- ([#12627](https://github.com/quarto-dev/quarto-cli/issues/12627)): Don't actually install extension when user responds `yes` to first prompt but `no` to second.\n- ([#12870](https://github.com/quarto-dev/quarto-cli/pull/12870/)): Update QuartoNotebookRunner to 0.17.3.\n\n# v1.7 changes\n\n## Regression fixes\n\n- ([#11509](https://github.com/quarto-dev/quarto-cli/issues/11509)): Fix link-decoration regression in HTML formats.\n- ([#11532](https://github.com/quarto-dev/quarto-cli/issues/11532)): Fix regression for [#660](https://github.com/quarto-dev/quarto-cli/issues/660), which causes files to have incorrect permissions when Quarto is installed in a location not writable by the current user.\n- ([#11549](https://github.com/quarto-dev/quarto-cli/issues/11549)): Fix regression in rendering `dashboard` tabsets into cards without titles.\n- ([#11561](https://github.com/quarto-dev/quarto-cli/issues/11561)): Fix a regression with `$border-color` that impacted, callouts borders, tabset borders, and table borders of the defaults themes. `$border-color` is now correctly a mixed of `$body-color` and `$body-bg` even for the default theme.\n- ([#11580](https://github.com/quarto-dev/quarto-cli/issues/11580)): Fix regression with documents containing `categories` fields that are not strings.\n- ([#11659](https://github.com/quarto-dev/quarto-cli/pull/11659)): `julia` engine - Fix escaping bug where paths containing spaces or backslashes break server startup on Windows.\n- ([#11752](https://github.com/quarto-dev/quarto-cli/issues/11752)): Fix regression with non-alphanumeric characters in `categories` preventing correct filtering of listing.\n- ([#11943](https://github.com/quarto-dev/quarto-cli/issues/11943)): Fix callout title color on dark theme in revealjs following Revealjs update in quarto 1.6.\n- ([#11990](https://github.com/quarto-dev/quarto-cli/issues/11990)): Do not print parameter cell in parameterized Jupyter notebooks.\n- ([#12147](https://github.com/quarto-dev/quarto-cli/issues/12147)): for RevealJS format, `serif` and `simple` themes defaults back to have their heading color (`$presentation-heading-color`) to be the same as the body color (`$body-color`) as in Quarto 1.5.\n\n## Dependencies\n\n- Update `typst` to `0.13.0`.\n- Update `pandoc` to `3.6.3`.\n- Update `dart-sass` to `1.85.1`.\n- Update `esbuild` to `0.19.12`.\n\n## YAML validation\n\n- ([#10251](https://github.com/quarto-dev/quarto-cli/issues/10251)): EJS template for website now uses proper object to get alt text for logo in sidebar.\n- ([#11654](https://github.com/quarto-dev/quarto-cli/issues/11654)): Allow `page-inset` as value in `column` key for code cells.\n- ([#12151](https://github.com/quarto-dev/quarto-cli/issues/12151)): Fix YAML validation in computations cell on Windows. Validate YAML in documents in `julia` engine.\n\n## Projects\n\n### `website`\n\n- ([#8238](https://github.com/quarto-dev/quarto-cli/issues/8238)): Listing categories are now sorted case-insensitively.\n- ([#10501](https://github.com/quarto-dev/quarto-cli/issues/10501)): Improve documentation of `repo-actions` option.\n- ([#11701](https://github.com/quarto-dev/quarto-cli/issues/11701)): Wrap HTML emitted by EJS templates in `{=html}` blocks to avoid memory blowup issues with Pandoc's parser.\n- ([#12134](https://github.com/quarto-dev/quarto-cli/issues/12134)): Forward `logo.small` images in `_brand.yml` files to a website `favicon`.\n\n### `blog`\n\n- ([#11745](https://github.com/quarto-dev/quarto-cli/issues/11745)): Fix categories links under post title in post with url encoded path (e.g. with space or other special characters).\n\n### `book`\n\n- ([#11520](https://github.com/quarto-dev/quarto-cli/issues/11520)): Book's cover image now escapes lightbox treatment, which was incorrectly applied to it when `lightbox: true` was set in the book's configuration.\n- ([#12134](https://github.com/quarto-dev/quarto-cli/issues/12134)): Forward `logo.small` images in `_brand.yml` files to the `favicon` of the book's website.\n\n## Commands\n\n### `quarto check`\n\n- ([#10047](https://github.com/quarto-dev/quarto-cli/issues/10047)): `quarto check` will now check binary dependency versions strictly by default. Use `quarto check --no-strict` to revert to old behavior.\n- ([#10561](https://github.com/quarto-dev/quarto-cli/issues/10561)): `quarto check` will now report paths of binary dependencies.\n- ([#11608](https://github.com/quarto-dev/quarto-cli/pull/11608)): Do not issue error message when calling `quarto check info`.\n- ([#12433](https://github.com/quarto-dev/quarto-cli/pull/12433)): Add `--output` option to `quarto check` to produce structured JSON output.\n\n### `quarto convert`\n\n- ([#12042](https://github.com/quarto-dev/quarto-cli/issues/12042)): Preserve Markdown content that follows YAML metadata in a `raw` .ipynb cell.\n- ([#12318](https://github.com/quarto-dev/quarto-cli/issues/12318)): Ensure enough line breaks between cells that might be trimmed.\n\n### `quarto inspect`\n\n- ([#12336](https://github.com/quarto-dev/quarto-cli/issues/12336)): Clean up transient files created by `quarto inspect`.\n\n## Formats\n\n### `dashboard`\n\n- ([#11338](https://github.com/quarto-dev/quarto-cli/issues/11338)): Remove unused datatables imports when appropriate.\n\n### `html`\n\n- ([#1325](https://github.com/quarto-dev/quarto-cli/issues/1325)): Dark Mode pages should not flash light on reload. (Nor should Light Mode pages flash dark.)\n- ([#1470](https://github.com/quarto-dev/quarto-cli/issues/1470)): `respect-user-color-scheme` enables checking the media query `prefers-color-scheme` for user dark mode preference. Author preference still influences stylesheet order and NoJS experience. Defaults to `false`, leaving to author preference.\n- ([#10780](https://github.com/quarto-dev/quarto-cli/issues/10780)): improve `link-external-filter` documentation.\n- ([#11860](https://github.com/quarto-dev/quarto-cli/issues/11860)): ES6 modules that import other local JS modules in documents with `embed-resources: true` are now correctly embedded.\n- ([#11911](https://github.com/quarto-dev/quarto-cli/issues/11911)): Code highlighting colors for tokens are now the same between code blocks and inline code when using Pandoc's syntax highlighting.\n- ([#12118](https://github.com/quarto-dev/quarto-cli/issues/12118)): Don't hide `:focus` on code-copy button.\n- ([#12277](https://github.com/quarto-dev/quarto-cli/pull/12277)): Provide light and dark plot and table renderings with `renderings: [light,dark]`\n- ([#12307](https://github.com/quarto-dev/quarto-cli/issues/12307)): Tabsets using `tabby.js` in non-boostrap html (`theme: pandoc`, `theme: none` or `minimal: true`) now correctly render reactive content when `server: shiny` is used.\n- ([#12319](https://github.com/quarto-dev/quarto-cli/pull/12319)): Provide switchable light and dark brands for a page with `brand.light` and `brand.dark`.\n- ([#12356](https://github.com/quarto-dev/quarto-cli/issues/12356)): Remove duplicate id in HTML document when using `#lst-` prefix label for using Quarto crossref.\n\n### `pdf`\n\n- ([#11695](https://github.com/quarto-dev/quarto-cli/issues/11695)): Translate ANSI color codes more carefully inside `highlighting` environments.\n- ([#11835](https://github.com/quarto-dev/quarto-cli/issues/11835)): Take markdown structure into account when detecting minimum heading level.\n- ([#11878](https://github.com/quarto-dev/quarto-cli/issues/11878), [#12085](https://github.com/quarto-dev/quarto-cli/issues/12085)): Correctly fixup raw LaTeX table having an unexpected table env with options (e.g `\\begin{table}[!ht]`) to be handled as crossref table.\n- ([#11903](https://github.com/quarto-dev/quarto-cli/issues/11903)): `crossref` configuration like `fig-title` or `tbl-title` now correctly supports multi word values, e.g. `fig-title: 'Supplementary Figure'`.\n- ([#12344](https://github.com/quarto-dev/quarto-cli/issues/12344)): Ensure decorated code blocks do not float when inside layout elements.\n- Update to Pandoc's LaTeX template following Pandoc 3.6.3 support:\n - `format: beamer` now uses its own template. The main template for latex does not use `$if(beamer)$` anymore, and the new template for beamer uses the same partials as latex one.\n - Improved Babel support:\n - New `babeloptions` variable in the template to allow for more flexible Babel options.\n - `doc-class.tex` Quarto's partial has been updated as Babel options have been moved to `documentclass` definition in `doc-class.tex` Quarto's partial.\n - New partials available for `format: latex` and `format: beamer`:\n - Pandoc now uses partials for its latex templates, and they are available through `template-partials`. Pandoc's partials uses `.latex` extension: `passoptions.latex`, `common.latex`, `font-settings.latex`, `fonts.latex`, `hypersetup.latex`, `after-header-includes.latex`\n - New Quarto partials: `babel-lang.tex`, `biblio-config.tex`. Quarto's partials uses `.tex` extension.\n - BREAKING CHANGE for templates authors: `common.latex` does now uses `pandoc.tex` partial from Quarto, which include now part of the content that was in main `template.tex`. If you modify `pandoc.tex` as part of a custom format, it should be updated to new content.\n\n### `jats`\n\n- Update to Pandoc's template following Pandoc 3.6.3 support:\n - `article.jats_publishing` partials now support `author.roles`\n\n### `revealjs`\n\n- ([#12307](https://github.com/quarto-dev/quarto-cli/issues/12307)): Tabsets using `tabby.js` in Revealjs now correctly render reactive content when `server: shiny` is used.\n\n### `typst` format\n\n- ([#11578](https://github.com/quarto-dev/quarto-cli/issues/11578)): Typst column layout widths use fractional `fr` units instead of percent `%` units for unitless and default widths in order to fill the enclosing block and not spill outside it.\n- ([#11676](https://github.com/quarto-dev/quarto-cli/pull/11676)): Convert unitless image widths from pixels to inches for column layouts.\n- ([#11835](https://github.com/quarto-dev/quarto-cli/issues/11835)): Take markdown structure into account when detecting minimum heading level.\n- ([#11964](https://github.com/quarto-dev/quarto-cli/issues/11964)): Using panel layout without a crossref label now correctly do not add an empty `#block[]` that was leading to an unnecessary space in output.\n- ([#12387](https://github.com/quarto-dev/quarto-cli/pull/12387)): `brand-mode` chooses whether to use `light` (default) or `dark` brand yml.\n- ([#12825](https://github.com/quarto-dev/quarto-cli/issues/11825)): Callouts look better with dark brands, mixing the title color and using brand background color for body.\n- ([#12354](https://github.com/quarto-dev/quarto-cli/issues/12354)): CodeBlock in Listing with `#lst-` prefix are now correctly highlighted.\n\n## Engines\n\n### `julia`\n\n- ([#11803](https://github.com/quarto-dev/quarto-cli/pull/11803)): Added subcommands `status`, `kill`, `close [--force]` and `log` under the new CLI command `quarto call engine julia`.\n- ([#12121](https://github.com/quarto-dev/quarto-cli/pull/12121)): Update QuartoNotebookRunner to 0.17.0. Support for evaluating Python cells via [PythonCall.jl](https://github.com/JuliaPy/PythonCall.jl) added. Support for notebook caching via `execute.cache` added.\n- ([#12151](https://github.com/quarto-dev/quarto-cli/pull/12151)): Basic YAML validation is now active for documents using Julia engine.\n\n### `jupyter`\n\n- ([#9089](https://github.com/quarto-dev/quarto-cli/issues/9089)): Serialize compound `jupyter` metadata into a special key-value attribute to not break Pandoc's fenced div parsing.\n- ([#10113](https://github.com/quarto-dev/quarto-cli/issues/10113)): KaTeX will now load correctly in `engine: jupyter` documents using `emebed-resources: true`.\n- ([#12114](https://github.com/quarto-dev/quarto-cli/issues/12114)): `JUPYTERCACHE` environment variable from [Jupyter cache CLI](https://jupyter-cache.readthedocs.io/en/latest/using/cli.html) is now respected by Quarto when `cache: true` is used. This environment variable allows to change the path of the cache directory.\n- ([#12228](https://github.com/quarto-dev/quarto-cli/issues/12228)): `quarto render` will now fails if errors are detected at IPython display level. Setting `error: true` globally or at cell level will keep the error to show in output and not stop the rendering.\n- ([#12374](https://github.com/quarto-dev/quarto-cli/issues/12374)): Detect language properly in Jupyter notebooks that lack the `language` field in their `kernelspec`s.\n\n## Quarto PDF rendering\n\n- ([#12194](https://github.com/quarto-dev/quarto-cli/issues/12194)): More specific checks added in log parsing to automatically find missing fonts.\n\n## Shiny\n\n- ([#12059](https://github.com/quarto-dev/quarto-cli/issues/12059)): `quarto preview` now correctly run on Windows an interactive Quarto doc with Jupyter engine and py-shiny, when using a `*.py` file as resource.\n\n## Lua Filters and extensions\n\n- Add `quarto.paths.tinytex_bin_dir` to Quarto's Lua API. If TinyTeX is found by Quarto, this will be set to the path to the `bin` directory of the TinyTeX installation where command line tool are located (e.g., `pdflatex`, `tlmgr`, etc.). If TinyTeX is not found, this will be `nil`, meaning Quarto will use the system PATH to find the command line tools.\n- Fix `pandoc.mediabag` Lua typings so autocompletions work with the Lua LSP integration.\n- ([#11379](https://github.com/quarto-dev/quarto-cli/issues/11379)): Add `version` shortcode to display the current Quarto version.\n- ([#11526](https://github.com/quarto-dev/quarto-cli/pull/11526)): General improvements to the style and robustness of Quarto's Lua code. This also provides a new public function `quarto.utils.is_empty_node` that allows to check whether a node is empty, i.e., whether it's an empty list, has no child nodes, and contains no text.\n- ([#11664](https://github.com/quarto-dev/quarto-cli/issues/11664)): `lipsum` shortcode is no longer randomly generated by default, use `{{< lipsum random=true >}}` to restore randomness.\n- ([#11699](https://github.com/quarto-dev/quarto-cli/issues/11699)): Fix crash with `video` shortcode inside HTML comments.\n- ([#11896](https://github.com/quarto-dev/quarto-cli/pull/11896)): fix `\\f` (`{{< pagebreak >}}`) form feed character not valid in PowerPoint (`pptx`).\n- ([#12326](https://github.com/quarto-dev/quarto-cli/issues/12326)): Add `quarto.shortcode.*` API entry points for shortcode developers.\n- ([#12365](https://github.com/quarto-dev/quarto-cli/pull/12365)): `brand color` shortcode takes an optional `brandMode` second parameter, default `light`.\n- ([#12453](https://github.com/quarto-dev/quarto-cli/issues/12453)): Expose `_quarto.modules.brand` as `quarto.brand` and add `has_mode()` function.\n- ([#12564](https://github.com/quarto-dev/quarto-cli/issues/12564)): `brand logo` shortcode also takes an optional `brandMode` second parameter, default `light`.\n\n### Conditional Content\n\n- ([#4411](https://github.com/quarto-dev/quarto-cli/issues/12462)): Added support for new format and aliases in `when-format` and `unless-format`: `confluence`, `docusaurus` (and `docusaurus-md`), `email`, `dashboard`, `gfm`, `hugo` (and `hugo-md`).\n\n### Quarto Lua API\n\n- ([#4411](https://github.com/quarto-dev/quarto-cli/issues/12462)): `quarto.format.is_format` is now working as expected with support of more aliases: `confluence`, `docusaurus` (and `docusaurus-md`), `email`, `dashboard`, `gfm`, `hugo` (and `hugo-md`)\n- ([#12299](https://github.com/quarto-dev/quarto-cli/issues/12299)): `quarto.doc.pdf_engine()` now correctly returns the PDF engine used for the document. `quarto.doc.cite_method()` now returns `nil` if no citation method will be used (i.e. no references is the document set).\n\n## Languages\n\n- ([#12366](https://github.com/quarto-dev/quarto-cli/pull/12366)): Added Bulgarian translation for Quarto UI text (credit: @sakelariev)\n\n## `quarto publish`\n\n- ([#9929](https://github.com/quarto-dev/quarto-cli/issues/9929)): `quarto publish gh-pages` will now clean previous worktree directory leftover from previous deploys.\n\n## Other Fixes and Improvements\n\n- A new folder `quarto-session-temp` can be created in `.quarto` to store temporary files created by Quarto during a rendering. Reminder: `.quarto` is for internal use of Quarto and should not be versioned (thus added to `.gitignore`).\n- ([fb38eb5](https://github.com/quarto-dev/quarto-cli/commit/fb38eb56c11e09f44cef58fd3b697ff24bb5a3f3)) Use the `latest` parser for Acorn when analyzing JS code imported from OJS blocks.\n- ([#7260](https://github.com/quarto-dev/quarto-cli/issues/7260)): Add support for `active` class in tabsets so the `.active` tab shows up by default.\n- ([#7757](https://github.com/quarto-dev/quarto-cli/issues/7757)): Session temporary files are now cleaned up when the session ends abnormally (e.g. `Ctrl+C`) also on Windows.\n- ([#8613](https://github.com/quarto-dev/quarto-cli/issues/8613)): Fix `giscus` color on load to support dark mode (by @kv9898).\n- ([#9867](https://github.com/quarto-dev/quarto-cli/issues/9867)): Blank lines are now trimmed in Raw HTML Table blocks.\n- ([#10532](https://github.com/quarto-dev/quarto-cli/issues/10532)): Changed default of `--headless=old` to `--headless` as [Chrome 132 has removed old headless mode](https://developer.chrome.com/blog/removing-headless-old-from-chrome) and only support new mode. To use old mode, set `QUARTO_CHROMIUM` to a [new `chrome-headless-shell` binary](https://developer.chrome.com/blog/chrome-headless-shell) or to an older chrome version (between 128 and 132). Set `QUARTO_CHROMIUM_HEADLESS_MODE` to `old` to use old headless mode with that compatible version.\n- ([#10961](https://github.com/quarto-dev/quarto-cli/issues/10961)): Add more information on which Chrome Headless will be used in `quarto check install`. This is helpful to help debug mermaid issues.\n- ([#11441](https://github.com/quarto-dev/quarto-cli/issues/11441)): Don't add newlines around shortcodes during processing.\n- ([#11606](https://github.com/quarto-dev/quarto-cli/discussions/11606)): Added a new `QUARTO_DOCUMENT_FILE` env var available to computation engine to the name of the file currently being rendered.\n- ([#11643](https://github.com/quarto-dev/quarto-cli/issues/11643)): Improve highlighting of nested code block inside markdown code block, i.e. using ` ```{{python}} ` or ` ```python ` inside ` ````markdown` fenced code block.\n- ([#11788](https://github.com/quarto-dev/quarto-cli/issues/11788)): `quarto add` and `quarto remove` will return non-zero code when they fail.\n- ([#11803](https://github.com/quarto-dev/quarto-cli/pull/11803)): Added a new CLI command `quarto call`. First users of this interface are the new `quarto call engine julia ...` subcommands.\n- ([#11951](https://github.com/quarto-dev/quarto-cli/issues/11951)): Raw LaTeX table without `tbl-` prefix label for using Quarto crossref are now correctly passed through unmodified.\n- ([#11967](https://github.com/quarto-dev/quarto-cli/issues/11967)): Produce a better error message when YAML metadata with `!expr` tags are used outside of `knitr` code cells.\n- ([#12117](https://github.com/quarto-dev/quarto-cli/issues/12117)): Color output to stdout and stderr is now correctly rendered for `html` format in the Jupyter and Julia engines. This change includes support for ANSI color codes in output.\n- ([#12264](https://github.com/quarto-dev/quarto-cli/issues/12264)): Upgrade `dart-sass` to 1.85.1.\n- ([#12238](https://github.com/quarto-dev/quarto-cli/issues/12238)): Do not truncate very long console errors (e.g. in Jupyter Notebook with backtrace).\n- ([#12338](https://github.com/quarto-dev/quarto-cli/issues/12338)): Add an additional workaround for the SCSS parser used in color variable extraction.\n- ([#12369](https://github.com/quarto-dev/quarto-cli/pull/12369)): `quarto preview` correctly throws a YAML validation error when a `format` key does not conform.\n- ([#12459](https://github.com/quarto-dev/quarto-cli/pull/12459)): Add `.page-inset-*` classes to completions.\n- ([#12492](https://github.com/quarto-dev/quarto-cli/pull/12492)): Improve shortcode extension template with new parameters and a link to docs.\n- ([#12513](https://github.com/quarto-dev/quarto-cli/issues/12513)): Fix an issue with `quarto preview` when using **DiagrammeR** R package for Graphiz diagram.\n" } \ No newline at end of file diff --git a/docs/download/_prerelease.json b/docs/download/_prerelease.json index 9a8b1133bf..2b27db28f4 100644 --- a/docs/download/_prerelease.json +++ b/docs/download/_prerelease.json @@ -1,81 +1,82 @@ { - "version": "1.8.0", - "name": "v1.8.0", - "created": "2025-04-28T13:41:42Z", - "published": "2025-04-28T13:49:34Z", + "version": "1.8.20", + "name": "v1.8.20", + "created": "2025-08-14T21:28:16Z", + "updated": "2025-08-14T21:42:14Z", + "published": "2025-08-14T21:42:06Z", "assets": [ { "name": "changelog.md", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/changelog.md", - "checksum": "aaffa9424737877a438cb967cb32411146f46d1fa6efccf7a699d3879440312a", - "size": 31 + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/changelog.md", + "checksum": "0cae71bd7cfe824700f94f16090beae9ee825ec0cdd039304e15b1b98705c416", + "size": 10350 }, { - "name": "quarto-1.8.0-checksums.txt", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-checksums.txt", - "checksum": "564ae707a5793397ff9bca2600df8f36fe17750a40c18425054cfe4b08688cac", - "size": 931 + "name": "quarto-1.8.20-checksums.txt", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-checksums.txt", + "checksum": "0a6e5deb36297cdc3f64984820818e497c968fca9d46b1338240e4df8a8c3f26", + "size": 941 }, { - "name": "quarto-1.8.0-linux-amd64.deb", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-amd64.deb", - "checksum": "d9826adfbf45b1fd7c51063089d4a5ec5910828a8c91b08a4051689146a3b7b0", - "size": 130659220 + "name": "quarto-1.8.20-linux-amd64.deb", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-amd64.deb", + "checksum": "93e6136350037625c8e79c0d80018f10c6dc4cd985180843d71d03d5f9da1bdd", + "size": 123760228 }, { - "name": "quarto-1.8.0-linux-amd64.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-amd64.tar.gz", - "checksum": "fe7a6518c25b77db8f022881ab4602e4bf26502930eecf82c07d9400d323514b", - "size": 132100540 + "name": "quarto-1.8.20-linux-amd64.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-amd64.tar.gz", + "checksum": "7e4a6ead89f85a34e342f825287ec9ac7531d01c6f35a90489976888caafb5d1", + "size": 125005511 }, { - "name": "quarto-1.8.0-linux-arm64.deb", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-arm64.deb", - "checksum": "45c5f06f83fdd26aa492e45ba62e256b893f9f0133632bee94d5131d55014733", - "size": 134807100 + "name": "quarto-1.8.20-linux-arm64.deb", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-arm64.deb", + "checksum": "2f38a7abf891fa9af405fe65337b1fa6b0bf43b19ae7055c4228d4fddf71b1dd", + "size": 123925320 }, { - "name": "quarto-1.8.0-linux-arm64.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-arm64.tar.gz", - "checksum": "c09ef11ece5633d7742b3bfac6a62f165d709848e5c79cdddc74381d06d3514e", - "size": 136051973 + "name": "quarto-1.8.20-linux-arm64.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-arm64.tar.gz", + "checksum": "8f69d5861b74c048bec551bbe70627941d037e873527470db5f2fa13b045d058", + "size": 125223764 }, { - "name": "quarto-1.8.0-linux-rhel7-amd64.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-linux-rhel7-amd64.tar.gz", - "checksum": "e5e4dee6faf0bc97a7b19330675808ce5c2c3b1322d1ca0886773727c68b0a4b", - "size": 135240318 + "name": "quarto-1.8.20-linux-rhel7-amd64.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-linux-rhel7-amd64.tar.gz", + "checksum": "2efd5d6bbe09d1e78cc8de33b8e4659789ae9c6718c0c1d58595bb8dcee866cd", + "size": 180672194 }, { - "name": "quarto-1.8.0-macos.pkg", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-macos.pkg", - "checksum": "cdf4fd923a91e940a0eeebd138a065175e26a4b9dba94617a7ffc3cd1cf47c2c", - "size": 216653623 + "name": "quarto-1.8.20-macos.pkg", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-macos.pkg", + "checksum": "43f16bd1cceca27e80bf4093f4d3682c22e5ddc8f1a8d704661f4cebce51ef8c", + "size": 208982862 }, { - "name": "quarto-1.8.0-macos.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-macos.tar.gz", - "checksum": "4d96aff4164d2586047d0c979a4969eb9755eb947197e2209831674c35c81725", - "size": 216478302 + "name": "quarto-1.8.20-macos.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-macos.tar.gz", + "checksum": "ad4111d441896019bf617e22d78a4da4006aea0898ba626a017fa7c8bb408add", + "size": 208866244 }, { - "name": "quarto-1.8.0-win.msi", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-win.msi", - "checksum": "e036dacda29b10394bb13c45f3103d609d27ebd2d343d5d5fb0964afcc0c5f4b", - "size": 129355776 + "name": "quarto-1.8.20-win.msi", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-win.msi", + "checksum": "5f9ad165e1bb3d0983deed2aea88dc8db34c27a0a450551e2a00fdb48dfaa2d7", + "size": 129220608 }, { - "name": "quarto-1.8.0-win.zip", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0-win.zip", - "checksum": "b81002c83fe2eef038319ad116556b1283202688036d2a08c107474118cff634", - "size": 129563716 + "name": "quarto-1.8.20-win.zip", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20-win.zip", + "checksum": "624adf994cef1c4c253249ebc99ceeb950d9c15bcce2db272d123706502247c0", + "size": 129428310 }, { - "name": "quarto-1.8.0.tar.gz", - "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.0/quarto-1.8.0.tar.gz", - "checksum": "626aa88651ed99f0cd0d1e7e011650b94a581d1536c2f7cbd136906bfcbb72a1", - "size": 110264269 + "name": "quarto-1.8.20.tar.gz", + "download_url": "https://github.com/quarto-dev/quarto-cli/releases/download/v1.8.20/quarto-1.8.20.tar.gz", + "checksum": "b2d354dd341bf5f2420651810f44cddc04ab89cce563ad0d9d579f7272b2797c", + "size": 110342809 } ], - "description": "All changes included in 1.8:\n\n\n" + "description": "All changes included in 1.8:\n\n## Regression fixes\n\n- ([#6607](https://github.com/quarto-dev/quarto-cli/issues/6607)): Add missing beamer template update for beamer theme options: `colorthemeoptions`, `fontthemeoptions`, `innerthemeoptions` and `outerthemeoptions`.\n- ([#12625](https://github.com/quarto-dev/quarto-cli/pull/12625)): Fire resize event on window when light/dark toggle is clicked, to tell widgets to resize.\n- ([#12657](https://github.com/quarto-dev/quarto-cli/pull/12657)): Load Giscus in generated script tag, to avoid wrong-theming in Chrome.\n- ([#12780](https://github.com/quarto-dev/quarto-cli/issues/12780)): `keep-ipynb: true` now works again correctly and intermediate `.quarto_ipynb` is not removed.\n- ([#13051](https://github.com/quarto-dev/quarto-cli/issues/13051)): Fixed support for captioned Markdown table inside Div syntax for crossref. This is special handling, but this could be output by function like `knitr::kable()` with old option support.\n\n## Dependencies\n\n- Update `bootstrap-icons` to version v1.13.1 from v1.11.1.\n\n## Formats\n\n### `html`\n\n- ([#678](https://github.com/quarto-dev/quarto-cli/issues/678)): a11y - Provide appropriate `aria-label` to search button.\n- ([#726](https://github.com/quarto-dev/quarto-cli/issues/726)): a11y - Provide `.screen-reader-only` callout type when callout text doesn't naturally include the type.\n- ([#5538](https://github.com/quarto-dev/quarto-cli/issues/5538)): Fix code-copy button style so that scrolling behaves properly.\n- ([#5879](https://github.com/quarto-dev/quarto-cli/issues/5879)): Improve font rendering of `kbd` shortcode on macOS. `kbd` will now also be stricter in converting keyboard shortcuts to macOS icons.\n- ([#10983](https://github.com/quarto-dev/quarto-cli/issues/10983)): Fix spacing inconsistency between paras and first section headings.\n- ([#12259](https://github.com/quarto-dev/quarto-cli/issues/12259)): Fix conflict between `html-math-method: katex` and crossref popups (author: @benkeks).\n- ([#12341](https://github.com/quarto-dev/quarto-cli/issues/12341)): Enable light and dark logos for html formats (sidebar, navbar, dashboard).\n- ([#12643](https://github.com/quarto-dev/quarto-cli/issues/12643)): Ensure brand.yml logos using urls are rendered correctly by passing them through when resolving brand `processedData`, and not processing them as paths.\n- ([#12734](https://github.com/quarto-dev/quarto-cli/issues/12734)): `highlight-style` now correctly supports setting a different `light` and `dark`.\n- ([#12747](https://github.com/quarto-dev/quarto-cli/issues/12747)): Ensure `th` elements are properly restored when Quarto's HTML table processing is happening.\n- ([#12766](https://github.com/quarto-dev/quarto-cli/issues/12766)): Use consistent equation numbering display for `html-math-method` and `html-math-method.method` for MathJax and KaTeX (author: @mcanouil)\n- ([#12797](https://github.com/quarto-dev/quarto-cli/issues/12797)): Allow light and dark brands to be specified in one file, by specializing colors with `light:` and `dark:`.\n- ([#12919](https://github.com/quarto-dev/quarto-cli/issues/12919)): Ensure `kbd` shortcode output has hover tooltip.\n- ([#12981](https://github.com/quarto-dev/quarto-cli/issues/12981)): Brand should be applied in dark mode when dark mode is enabled by the theme, not the brand.\n- ([#13004](https://github.com/quarto-dev/quarto-cli/issues/13004)): Brand logo shortcode automatically applies `.light-content` and `.dark-content` classes, inserts both light and dark logo if brand mode is not specified, and uses alt text from brand logo spec.\n\n### `revealjs`\n\n- ([#10933](https://github.com/quarto-dev/quarto-cli/issues/10933)): Revealjs supports alt text on logo, as well as customization of light and dark logos at the document level, consistent with other formats.\n- ([#12550](https://github.com/quarto-dev/quarto-cli/issues/12550)): Revealjs supports `brand-mode`, allowing to select either the light or the dark brand.\n- ([#12598](https://github.com/quarto-dev/quarto-cli/pull/12598)): Ensure `.fragment` on an image with caption applies to whole figure.\n- ([#12716](https://github.com/quarto-dev/quarto-cli/issues/12716)): Correctly resolve `\"brand\"` set in `theme` configuration for document in subdirectory from project root.\n- Use `cdn.jsdelivr.net` for mathjax dependencies to ensure consistent CDN usage across formats. Previously, `cdnjs.cloudflare.com` was used for `revealjs` mathjax dependencies, while `cdn.jsdelivr.net` was used for html format.\n\n### `docx`\n\n- ([#8392](https://github.com/quarto-dev/quarto-cli/issues/8392)): Fix `docx` generation issues in tables\n\n### `typst`\n\n- ([#12180](https://github.com/quarto-dev/quarto-cli/issues/12180)): Typst schema / autocomplete for `logo` option has `path` and `alt`.\n- ([#12554](https://github.com/quarto-dev/quarto-cli/pull/12554)): CSS properties `font-weight` and `font-style` are translated to Typst `text` properties.\n- ([#12695](https://github.com/quarto-dev/quarto-cli/issues/12695)): Resolve Typst `font-paths` that start with `/` relative to project root.\n- ([#12739](https://github.com/quarto-dev/quarto-cli/pull/12739)): Remove unused variable `heading-background-color` and `heading-decoration` from Typst's templates. They are leftover from previous change, and not part of Brand.yml schema for typography of headings.\n- ([#12815](https://github.com/quarto-dev/quarto-cli/issues/12815)): Do not crash when floats have no content.\n- ([#13119](https://github.com/quarto-dev/quarto-cli/pull/13119)): Expose `brand.logo` metadata as Typst dictionaries.\n- ([#13133](https://github.com/quarto-dev/quarto-cli/pull/13133)): Allow customization of light and dark logos at document level, consistent with other formats.\n\n### `beamer`\n\n- ([#12775](https://github.com/quarto-dev/quarto-cli/issues/12775)): Convert Quarto-native layouts (divs with `layout` syntax) to Beamer columns, equivalent to using the Pandoc-native syntax of div with `columns` and `column` classes.\n\n### `hugo-md`\n\n- ([#12676](https://github.com/quarto-dev/quarto-cli/issues/12676)): Add support for rendering layout panels that are not floats.\n\n## Projects\n\n### `website`\n\n- ([#12551](https://github.com/quarto-dev/quarto-cli/pull/12551)): Improve warning issued when `aliases` would overwrite an existing document.\n- ([#12616](https://github.com/quarto-dev/quarto-cli/issues/12616)): find SVG images in image discovery for listings.\n- ([#12693](https://github.com/quarto-dev/quarto-cli/issues/12693)): Prevent resource exhaustion on large websites by serializing `NotebookContext` information to file instead of the environment.\n- ([#12949](https://github.com/quarto-dev/quarto-cli/issues/12949)): Ensure redirects preserve `hash` and `search` when possible.\n\n## Crossrefs\n\n- ([#12615](https://github.com/quarto-dev/quarto-cli/pull/12615)): Adds `algorithm` to theorem environments. (author: @jeremy9959)\n\n## Lua Filters\n\n- ([#12727](https://github.com/quarto-dev/quarto-cli/issues/12727)): Do not crash in the presence of malformed tabset contents.\n- ([#12806](https://github.com/quarto-dev/quarto-cli/pull/12806)): Use pandoc APIs to handle codepage conversion on Windows.\n- ([#12811](https://github.com/quarto-dev/quarto-cli/pull/12811)): Add support for YouTube Shorts in `video` shortcode.\n- ([#13128](https://github.com/quarto-dev/quarto-cli/issues/13128)): Meta shortcode could crash on bad input.\n\n## Commands\n\n### `inspect`\n\n- ([#12733](https://github.com/quarto-dev/quarto-cli/issues/12733)): Add installed extensions to `quarto inspect` project report.\n\n### `add`\n\n- ([#12627](https://github.com/quarto-dev/quarto-cli/issues/12627)): Don't actually install extension when user responds `yes` to first prompt but `no` to second.\n\n### `create`\n\n- ([#12965](https://github.com/quarto-dev/quarto-cli/issues/12965)): Prevent automatic opening of new editor sessions when creating projects in Posit Workbench context. The `--open` flag is now ignored in this environment to avoid issues with Workbench session management.\n\n## Extensions\n\n- ([#12559](https://github.com/quarto-dev/quarto-cli/issues/12559)): New extension type: `brand` for distributing [brand.yml](https://posit-dev.github.io/brand-yml/) configurations with associated assets.\n\n## Engines\n\n- ([#13171](https://github.com/quarto-dev/quarto-cli/pull/13171/)): Provide execution information to all engines uniformly via QUARTO_EXECUTE_INFO environment variable. It points to a file on disk containing a JSON object describing the execution environment for code cells to use.\n\n### `jupyter`\n\n- ([#12753](https://github.com/quarto-dev/quarto-cli/issues/12753)): Support change in IPython 9+ and import `set_matplotlib_formats` from `matplotlib_inline.backend_inline` in the internal `setup.py` script used to initialize rendering with Jupyter engine.\n- ([#12839](https://github.com/quarto-dev/quarto-cli/issues/12839)): Support for `plotly.py` 6+ which now loads plotly.js using a cdn in script as a module.\n- ([#13026](https://github.com/quarto-dev/quarto-cli/pulls/13026), [#13151](https://github.com/quarto-dev/quarto-cli/pulls/13151)), [#13184](https://github.com/quarto-dev/quarto-cli/pull/13184): Use `jsdelivr` CDN for jupyter widgets dependencies.\n\n### `knitr`\n\n- Correctly detect R binary on Windows when `R_HOME` is set - this fixes issue with `quarto::quarto_render()` that will now correctly use the same R version as the R session it is called from.\n\n### `julia`\n\n- ([#12870](https://github.com/quarto-dev/quarto-cli/pull/12870)): Update `julia` engine from `0.17.0` to `0.17.3` to improve `juliaup` detection on Windows systems and correctly set `Base.source_path()` output to match REPL and script usage.\n\n## Other fixes and improvements\n\n- ([#11321](https://github.com/quarto-dev/quarto-cli/issues/11321)): Follow [recommendation from LaTeX project](https://latex-project.org/news/latex2e-news/ltnews40.pdf) and use `lualatex` instead of `xelatex` as the default PDF engine.\n- ([#12782](https://github.com/quarto-dev/quarto-cli/pull/12782)): fix bug on `safeRemoveDirSync`'s detection of safe directory boundaries.\n- ([#12853](https://github.com/quarto-dev/quarto-cli/issues/12853)): fix replaceAll() escaping issue with embedded notebooks containing `$` in their Markdown.\n- ([#12939](https://github.com/quarto-dev/quarto-cli/pull/12939)): Upgrade `mermaidjs` to 11.6.0.\n" } \ No newline at end of file diff --git a/docs/download/prerelease.qmd b/docs/download/prerelease.qmd index 4bca77ef64..0f359f6eeb 100644 --- a/docs/download/prerelease.qmd +++ b/docs/download/prerelease.qmd @@ -18,7 +18,7 @@ anchor-sections: false editor: source image: /images/hero_right.png aliases: - - changelog/1.7/ + - changelog/1.8/ --- ::: {.content-visible when-profile="prerelease"} diff --git a/docs/download/release.qmd b/docs/download/release.qmd index 578a4589b4..d669612dfd 100644 --- a/docs/download/release.qmd +++ b/docs/download/release.qmd @@ -17,7 +17,7 @@ anchor-sections: false editor: source image: /images/hero_right.png aliases: - - changelog/1.6/ + - changelog/1.7/ --- {{< include _download.md >}} diff --git a/docs/extensions/brand.qmd b/docs/extensions/brand.qmd new file mode 100644 index 0000000000..78f87e6c7b --- /dev/null +++ b/docs/extensions/brand.qmd @@ -0,0 +1,106 @@ +--- +title: "Brand Extensions" +--- + +Brand extensions are Quarto extensions that provide a [brand.yml](../authoring/brand.qmd) file and its assets. + +::: callout-important + +Currently, brand extensions merge project-level metadata, so they can only be used with a `_quarto.yml` [project](../projects/quarto-projects.qmd) present in the place where they are installed. This limitation may be lifted in the future. + +::: + +### Quick Start + +Here we'll describe how to create a simple brand extension. We'll use the `quarto create` command to do this. If you are using VS Code, Positron, or RStudio you should execute `quarto create` within their respective integrated Terminal panes. + +To get started, execute `quarto create extension brand` within the parent directory where you'd like the brand extension to be created: + +```{.bash filename="Terminal"} +$ quarto create extension brand + ? Extension Name โ€บ my-brand +``` + +As shown above, you'll be prompted for an extension name. Type `my-brand` and press Enter---the brand extension is then created: + +```bash +? Extension Name โ€บ my-brand +Creating extension at /{...}/my-brand: + - Created _quarto.yml + - Created README.md + - Created _extensions/my-brand/brand.yml + - Created _extensions/my-brand/_extension.yml + - Created .gitignore + - Created example.qmd +? Open With +โฏ positron + vscode + rstudio + (don't open) +``` + +If you are running within VS Code, Positron, or RStudio a new window will open with the brand project. + +## Contents of Brand Extensions + +Here's what the contents of the files in `_extensions/my-brand/` look like: + +``` {.yaml filename="_extensions/my-brand/_extension.yml"} +title: My-brand +author: Gordon Woodhull +version: 1.0.0 +quarto-required: ">=99.9.0" +contributes: + metadata: + project: + brand: brand.yml +``` + +``` {.yaml filename="_extensions/mybrand/brand.yml"} +# minimal brand.yml enabling dark mode +# replace with your brand colors, logos, and typography! +color: + background: + light: "#fff" + dark: "#000" + foreground: + light: "#000" + dark: "#fff" +``` + +This is just enough `brand.yml` to enable dark mode. If you preview the `example.qmd` provided in the root of your brand extension + +```bash +quarto preview example.qmd +``` + +you should see the dark mode toggle in the upper right corner, and if you click it you'll see white text on a black background. + +Note that this example, and brand extensions in general, require a `_quarto.yml` project to be present where they are installed. This is because the metadata will be merged via the `project` key. + +We've provided the most basic Quarto project for this example: + +``` {.yaml filename="_quarto.yml`} +project: + type: default +``` + +::: {.callout-note} + +The example brand.yml is using the unified light and dark brand feature. Documentation for this feature is on the way. + +Any color in the color or typography sections of [brand.yml](https://posit-dev.github.io/brand-yml/) can be specified with `light` and `dark` components or as a string. If a string, the value is used for both light and dark modes. + +This works for colors only. + +::: + +## How Brand Extensions Work + +The path to the brand file will be resolved relative to the `_quarto.yml` project. + +In turn, any assets such as logos or fonts will be resolved relative to the brand file. + +This way, when the extension is installed in a Quarto project, all paths will eventually be resolved relative to the project. + +The brand is resolved via the `project.brand` key, which is why brand extensions require a `_quarto.yml` project in the place they are installed. The project can be any type. This limitation may be lifted in the future. diff --git a/docs/extensions/creating.qmd b/docs/extensions/creating.qmd index 2a104ec752..50175646af 100644 --- a/docs/extensions/creating.qmd +++ b/docs/extensions/creating.qmd @@ -18,6 +18,7 @@ Quarto Extensions are a powerful way to modify or extend the behavior of Quarto, | [Project Types](project-types.qmd) | Create new project project types that bundle together standard content and options, or make it easy to create a website for a custom HTML format. | | [Starter Templates](starter-templates.qmd) | Help users get started with new projects by providing a template and example content. Starter templates aren't strictly extensions (i.e. they aren't installed in the `_extensions` directory) but they are often used with custom formats and project types. | | [Metadata](metadata.qmd) | Provide YAML configuration that can be merged into existing Quarto projects. | +| [Brand](brand.qmd) | Distribute a [brand.yml](../authoring/brand.qmd) file and its assets. | : {tbl-colwidths="\[30,70\]"} diff --git a/docs/extensions/filters.qmd b/docs/extensions/filters.qmd index de87e0d741..825d6508e3 100644 --- a/docs/extensions/filters.qmd +++ b/docs/extensions/filters.qmd @@ -52,7 +52,7 @@ You'll notice that one of the extensions (`spellcheck.lua`) has a file extension ### Quick Start -Here we'll describe how to create a simple filter extension. We'll use the `quarto create` command to do this. If you are using VS Code or RStudio you should execute `quarto create` within their respective integrated Terminal panes. +Here we'll describe how to create a simple filter extension. We'll use the `quarto create` command to do this. If you are using VS Code, Positron, or RStudio you should execute `quarto create` within their respective integrated Terminal panes. To get started, execute `quarto create extension filter` within the parent directory where you'd like the filter extension to be created: @@ -72,7 +72,7 @@ Creating extension at /Users/jjallaire/quarto/dev/fancy-header: - Created example.qmd ``` -If you are running within VS Code or RStudio a new window will open with the extension project. +If you are running within VS Code, Positron, or RStudio a new window will open with the extension project. Here's what the contents of the files in `_extensions/fancy-header/` look like: diff --git a/docs/extensions/formats.qmd b/docs/extensions/formats.qmd index 0e5eaa77c5..aa97090de7 100644 --- a/docs/extensions/formats.qmd +++ b/docs/extensions/formats.qmd @@ -46,7 +46,7 @@ quarto render document.qmd --to acm-html ## Quick Start -Here we'll describe how to create a simple HTML-based format extension. We'll use the `quarto create` command to do this. If you are using VS Code or RStudio you should execute `quarto create` within their respective integrated Terminal panes. +Here we'll describe how to create a simple HTML-based format extension. We'll use the `quarto create` command to do this. If you are using VS Code, Positron, or RStudio you should execute `quarto create` within their respective integrated Terminal panes. To get started, execute `quarto create extension format:html` within the parent directory where you'd like the format to be created: @@ -65,7 +65,7 @@ Creating extension at /Users/jjallaire/quarto/dev/lexdoc: - Created template.qmd ``` -If you are running within VS Code or RStudio a new window will open with the extension project. +If you are running within VS Code, Positron, or RStudio a new window will open with the extension project. ::: {.callout-note appearance="simple"} Note that this example creates a format that is derivative of the Quarto base `html` format. You can similarly create formats that are derivative of `pdf`, `docx`, and `revealjs` as follows: diff --git a/docs/extensions/listings/custom-formats.yml b/docs/extensions/listings/custom-formats.yml index 237169df5c..a46b93b2f3 100644 --- a/docs/extensions/listings/custom-formats.yml +++ b/docs/extensions/listings/custom-formats.yml @@ -90,7 +90,7 @@ path: https://github.com/mvuorre/quarto-preprint author: '[Matti Vuorre](https://github.com/mvuorre)' description: > - A clean but opinionated Typst format for preprint submissions. Also includes a minimal MS Word format. + A clean & opinionated Typst (PDF) format with improved support for Typst functionality beyond Quarto's standard template. - name: sketchy-html path: https://github.com/schochastics/quarto-sketchy-html diff --git a/docs/extensions/listings/journal-articles.yml b/docs/extensions/listings/journal-articles.yml index b1f6723d75..81adbbd080 100644 --- a/docs/extensions/listings/journal-articles.yml +++ b/docs/extensions/listings/journal-articles.yml @@ -105,3 +105,9 @@ path: https://github.com/mikemahoney218/quarto-tandf author: '[mikemahoney218](https://github.com/mikemahoney218)' description: Taylor and Francis style. + +- name: aaai2016 + path: https://github.com/Selbosh/aaai2026-quarto + author: '[Selbosh](https://github.com/Selbosh)' + description: > + Quarto template for submissions to the Association for Advancement of Artificial Intelligence (AAAI) diff --git a/docs/extensions/listings/revealjs-formats.yml b/docs/extensions/listings/revealjs-formats.yml index e1ee8e1573..3009cd55a1 100644 --- a/docs/extensions/listings/revealjs-formats.yml +++ b/docs/extensions/listings/revealjs-formats.yml @@ -61,3 +61,8 @@ path: https://github.com/cct-datascience/uaz-revealjs author: '[CCT Data Science Team](https://github.com/cct-datascience)' description: University of Arizona inspired theme for revealjs + +- name: unm-revealjs + path: https://github.com/Data-Wise/unm-revealjs + author: '[Data-Wise](https://github.com/Data-Wise)' + description: A custom RevealJS theme inspired by the University of New Mexico branding diff --git a/docs/extensions/listings/shortcodes-and-filters.yml b/docs/extensions/listings/shortcodes-and-filters.yml index 52ad4ae6bd..b003df2606 100644 --- a/docs/extensions/listings/shortcodes-and-filters.yml +++ b/docs/extensions/listings/shortcodes-and-filters.yml @@ -60,6 +60,12 @@ description: > Automatic dark mode for Quarto websites and slides. +- name: badge + path: https://github.com/mcanouil/quarto-badge + author: '[Mickaรซl CANOUIL](https://github.com/mcanouil)' + description: > + Badge is an extension for Quarto to provide a shortcode to display software version or anything as a badge. + - name: base64 path: https://github.com/gadenbuie/quarto-base64 author: '[Garrick Aden-Buie](https://github.com/gadenbuie)' @@ -183,6 +189,12 @@ Generate diagrams from embedded code; supports Mermaid, Dot/GraphViz, PlantUML, Asymptote, and TikZ. +- name: div-reuse + path: https://github.com/mcanouil/quarto-div-reuse + author: '[Mickaรซl CANOUIL](https://github.com/mcanouil)' + description: > + The power of โ€œcode/content reuseโ€ for seamless and efficient content creation. + - name: docx-horizontal-rule path: https://github.com/ttalVlatt/Quarto-Docx-Horizontal-Rule author: '[Matt Capaldi](https://github.com/ttalVlatt/)' @@ -214,6 +226,12 @@ description: > Easily embed PDF files within HTML documents. +- name: external + path: https://github.com/mcanouil/quarto-external + author: '[Mickaรซl CANOUIL](https://github.com/mcanouil)' + description: > + Quarto extension to include content or partial content from external file. + - name: fancy-epigraphs path: https://github.com/andrewheiss/fancy-epigraphs-quarto author: '[Andrew Heiss](https://github.com/andrewheiss/)' @@ -282,6 +300,12 @@ description: > Embed fully serverless, browser-based Gradio applications and Python coding playgrounds into your Quarto documents. +- name: group-html-cell-outputs + path: https://github.com/dixslyf/quarto-group-html-cell-outputs + author: '[Dixon Sean Low Yan Feng](https://github.com/dixslyf)' + description: > + Group cell outputs by wrapping them with a parent container when rendering to HTML. + - name: hide-comment path: https://github.com/shafayetShafee/hide-comment author: '[Shafayet Khan Shafee](https://github.com/shafayetShafee)' @@ -341,6 +365,25 @@ Render Kroki diagrams in Quarto documents (HTML and PDF) This uses the Kroki HTTP API via curl, doing a POST request. +- name: get-kroki + path: https://github.com/resepemb/quarto-kroki + author: '[Gabriel Cafรฉ](https://github.com/GabrielCoffee9)' + description: > + Render [Kroki](https://kroki.io/) diagrams in Quarto websites โ€” including HTML and PDF output. + This extension uses the Kroki API via HTTP GET requests. The Kroki service URL is customizable, and the output format (e.g. SVG, PNG, etc.) can be specified per diagram. + +- name: language-cell-decorator + path: https://github.com/mcanouil/quarto-language-cell-decorator + author: '[Mickaรซl CANOUIL](https://github.com/mcanouil)' + description: > + Quarto extension to add a decorator to the code cells to display the language name. + +- name: language-name + path: https://github.com/andrewheiss/language-name + author: '[Andrew Heiss](https://github.com/andrewheiss/)' + description: > + Filter for adding customizable language names to code block output + - name: latex-environment path: https://github.com/quarto-ext/latex-environment author: '[quarto-ext](https://github.com/quarto-ext)' @@ -367,6 +410,12 @@ documents (`format: html`) similar as how [`code-line-numbers`](https://quarto.org/docs/reference/formats/html.html#code) works for RevealJs. +- name: linkate + path: https://github.com/coatless-quarto/linkate + author: '[James Joseph Balamuta](https://github.com/coatless/)' + description: > + Automatically collect all URLs in a document and place them at the end under a "Links" section. + - name: lordicon path: https://github.com/jmgirard/lordicon author: '[Jeffrey Girard](https://github.com/jmgirard)' @@ -379,12 +428,6 @@ description: > A filter/shortcode extension for Quarto to provide access to LUA objects as metadata. -- name: open-social-comments - path: https://github.com/AndreasThinks/quarto-open-social-comments - author: '[AndreasThinks](https://github.com/AndreasThinks/)' - description: > - Enables adding Bluesky or Mastodon/Fediverse powered comments to posts and articles. - - name: material-icons path: https://github.com/shafayetShafee/material-icons author: '[Shafayet Khan Shafee](https://github.com/shafayetShafee)' @@ -392,6 +435,12 @@ Use [Material Design Icons](https://fonts.google.com/icons?icon.set=Material+Icons&icon.query=chart) in HTML documents and Revealjs presentations. +- name: modal + path: https://github.com/mcanouil/quarto-modal + author: '[Mickaรซl CANOUIL](https://github.com/mcanouil)' + description: > + A Quarto extension providing a simple way to create Bootstrap modals in your HTML documents. + - name: molstar path: https://github.com/jmbuhr/quarto-molstar author: '[jmbuhr](https://github.com/jmbuhr)' @@ -411,6 +460,12 @@ description: > Embed [Nutshell](https://ncase.me/nutshell/) expandable explanations in HTML documents. +- name: open-social-comments + path: https://github.com/AndreasThinks/quarto-open-social-comments + author: '[AndreasThinks](https://github.com/AndreasThinks/)' + description: > + Enables adding Bluesky or Mastodon/Fediverse powered comments to posts and articles. + - name: options path: https://github.com/coatless-quarto/options author: '[James Joseph Balamuta](https://github.com/coatless/)' @@ -429,6 +484,12 @@ description: A shortcode to include partial content templates using the mustache templating syntax. +- name: preview-colour + path: https://github.com/mcanouil/quarto-preview-colour + author: '[Mickaรซl CANOUIL](https://github.com/mcanouil)' + description: > + A Quarto extension to add preview colour as a coloured symbol next to colour code in HTML, PDF, Typst, Docx, Reveal.js, Beamer, and PowerPoint. + - name: pseudocode path: https://github.com/leovan/quarto-pseudocode author: '[่Œƒๅถไบฎ > Leo Van](https://github.com/leovan)' @@ -563,6 +624,11 @@ description: > A filter that renders [PGF/TikZ](https://en.wikipedia.org/wiki/PGF/TikZ) diagrams in HTML as SVG. +- name: toggle + path: https://github.com/coatless-quarto/toggle + author: '[James Joseph Balamuta](https://github.com/coatless/)' + description: Toggle Code Output in Quarto HTML Documents + - name: typst-function path: https://github.com/christopherkenny/typst-function author: '[Christopher T. Kenny](https://github.com/christopherkenny)' diff --git a/docs/extensions/lua-api.qmd b/docs/extensions/lua-api.qmd index a202e7937b..8dba8a88d2 100644 --- a/docs/extensions/lua-api.qmd +++ b/docs/extensions/lua-api.qmd @@ -99,7 +99,7 @@ For LaTeX output, you may need to additionally detect which citation utility and | Function | Description | |----------------------|--------------------------------------------------| -| `quarto.doc.cite_method()` | Returns a string (`citeproc`, `natbib`, or `biblatex)` indicating the cite method in use. | +| `quarto.doc.cite_method()` | Returns a string (`citeproc`, `natbib`, or `biblatex`) indicating the cite method in use. | | `quarto.doc.pdf_engine()` | Returns a string (`pdflatex`, `xelatex`, `lualatex`, or `tectonic`) indicating the PDF engine being used to render the document. | ### Includes diff --git a/docs/extensions/lua.qmd b/docs/extensions/lua.qmd index 3d655ca7c1..df2fde5882 100644 --- a/docs/extensions/lua.qmd +++ b/docs/extensions/lua.qmd @@ -42,11 +42,11 @@ Some additional learning resources you might find useful include: Quarto preview, `quarto preview`, is aware of Lua source files within extensions, and will automatically reload the preview whenever a Lua source file changes. -This makes it very easy to incrementally develop and debug Lua code (especially when combined with the [native](#native-format) format a described below). Live reloading for Lua files will work no matter what source code editor you are using (VS Code, RStudio, Neovim, etc.). +This makes it very easy to incrementally develop and debug Lua code (especially when combined with the [native](#native-format) format a described below). Live reloading for Lua files will work no matter what source code editor you are using (Positron, VS Code, RStudio, Neovim, etc.). -### VS Code +### VS Code / Positron -While you can use any text editor along with `quarto preview` for developing Lua extensions, we strongly recommend that you consider using VS Code, as it provides a number of additional tools including: +While you can use any text editor along with `quarto preview` for developing Lua extensions, we strongly recommend that you consider using VS Code or Positron, as they provide a number of additional tools including: 1. Code completion and type checking. @@ -64,17 +64,17 @@ Diagnostics check for many common errors including failing to check for `nil`, u #### Installation -To get started with using VS Code for Lua extension development, install the following software: +To get started with using VS Code or Positron for Lua extension development, install the following software: 1. Install the latest version (v1.2 or greater) of [Quarto](/docs/download/index.qmd) -2. Install the latest version (v1.40.0 or greater) of the [Quarto VS Code Extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto). +2. Install the latest version (v1.40.0 or greater) of the Quarto Extension (available on both [OpenVSX](https://open-vsx.org/extension/quarto/quarto) and [Microsoft's marketplace](https://marketplace.visualstudio.com/items?itemName=quarto.quarto)) . -3. For Lua code intelligence, install the [Lua LSP VS Code Extension](https://marketplace.visualstudio.com/items?itemName=sumneko.lua). +3. For Lua code intelligence, install the Lua LSP Extension (available on both [OpenVSX](https://open-vsx.org/extension/sumneko/lua) and [Microsoft's marketplace](https://marketplace.visualstudio.com/items?itemName=sumneko.lua)). Once you've installed these components you should see the features described above appear automatically in your Quarto workspaces that include Lua code. -There are many options available for configuring Lua completion and diagnostics. It's also possible to provide type information for your own functions. See the section on [Lua in VS Code](#lua-in-vs-code) below for details. +There are many options available for configuring Lua completion and diagnostics. It's also possible to provide type information for your own functions. See the section on [Lua in Positron and VS Code](#lua-in-vs-code) below for details. ## Diagnostic Logging @@ -247,7 +247,7 @@ end ::: ::: -## Lua in VS Code {#lua-in-vs-code} +## Lua in Positron and VS Code {#lua-in-vs-code} ### Type Hints @@ -268,7 +268,7 @@ You can learn more about all of the available type annotations in the [Annotatio ### Settings -The [Lua Language Server](https://marketplace.visualstudio.com/items?itemName=sumneko.lua) extension includes a wide variety of options to customize its behavior (e.g. what diagnostics to show, which completions to offer, etc.). +The [Lua Language Server](https://open-vsx.org/extension/sumneko/lua) extension includes a wide variety of options to customize its behavior (e.g. what diagnostics to show, which completions to offer, etc.). All of the available options are documented in the [Settings Reference](https://luals.github.io/wiki/settings/) for the Lua Language Server. @@ -295,4 +295,4 @@ You can change any of the settings within this file save for the `Lua.workspace. If you prefer to manage this file manually, simply remove the `Generator` key and Quarto will no longer update the `Lua.workspace.library` and `Lua.runtime.plugin` settings automatically. -You can also globally disable the automatic creation of `.luarc.json` using the **Quarto \> Lua: Provide Types** VS Code setting. +You can also globally disable the automatic creation of `.luarc.json` using the **Quarto \> Lua: Provide Types** setting. diff --git a/docs/extensions/metadata.qmd b/docs/extensions/metadata.qmd index 115e191a0b..249df0d6e6 100644 --- a/docs/extensions/metadata.qmd +++ b/docs/extensions/metadata.qmd @@ -12,7 +12,7 @@ Currently, metadata extensions only merge project-level metadata. This limitatio ### Quick Start -Here we'll describe how to create a simple metadata extension. We'll use the `quarto create` command to do this. If you are using VS Code or RStudio you should execute `quarto create` within their respective integrated Terminal panes. +Here we'll describe how to create a simple metadata extension. We'll use the `quarto create` command to do this. If you are using VS Code, Positron, or RStudio you should execute `quarto create` within their respective integrated Terminal panes. To get started, execute `quarto create extension metadata` within the parent directory where you'd like the filter extension to be created: @@ -35,7 +35,7 @@ Creating extension at /Users/cscheid/Desktop/my-prerender-scripts: (don't open) ``` -If you are running within VS Code or RStudio a new window will open with the extension project. +If you are running within VS Code, Positron, or RStudio a new window will open with the extension project. ## Contents of Metadata Extensions diff --git a/docs/extensions/project-types.qmd b/docs/extensions/project-types.qmd index 162fb6db73..3878b88029 100644 --- a/docs/extensions/project-types.qmd +++ b/docs/extensions/project-types.qmd @@ -33,7 +33,7 @@ Note that it is possible to bundle and distribute project type extensions as sim ## Development Tools -If you are using custom project types within VS Code or RStudio, only the very latest versions of these tools handle custom project types correctly: +If you are using custom project types within VS Code, Positron, or RStudio, only the very latest versions of these tools handle custom project types correctly: - For the Quarto VS Code Extension, use [version 1.45](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) or greater. @@ -127,7 +127,7 @@ format: toc: true ``` -Users of the template will naturally change the default `title`, and can add whatever other project, website, or format level options they require (these options will be merged with the defaults provided by the extension). +Users of the template will naturally change the default `title`, and can add whatever other project-, website-, or format-level options they require (these options will be merged with the defaults provided by the extension). ## Markdown Publishing @@ -221,4 +221,4 @@ formats: - docusaurus.lua ``` -A project type for any given markdown publishing system will have its own variant, and will often also require a filters to deal with non-standard constructs and other vagaries of the target system. +A project type for any given markdown publishing system will have its own variant, and will often also require filters to deal with non-standard constructs and other vagaries of the target system. diff --git a/docs/extensions/revealjs.qmd b/docs/extensions/revealjs.qmd index 9361d4d653..58cc97b6d4 100644 --- a/docs/extensions/revealjs.qmd +++ b/docs/extensions/revealjs.qmd @@ -19,7 +19,7 @@ Here are some examples of Revealjs plugins packaged as Quarto extensions: ## Quick Start -Here we'll describe how to create a simple Revealjs plugin extension. We'll use the `quarto create` command to do this. If you are using VS Code or RStudio you should execute `quarto create` within their respective integrated Terminal panes. +Here we'll describe how to create a simple Revealjs plugin extension. We'll use the `quarto create` command to do this. If you are using VS Code, Positron, or RStudio you should execute `quarto create` within their respective integrated Terminal panes. To get started, execute `quarto create extension revealjs-plugin` within the parent directory where you'd like the plugin extension to be created: @@ -40,7 +40,7 @@ Creating extension at /Users/jjallaire/quarto/dev/shuffler: - Created example.qmd ``` -If you are running within VS Code or RStudio a new window will open with the extension project. +If you are running within VS Code, Positron, or RStudio a new window will open with the extension project. Here's what the contents of the files in `_extensions/shuffler/` look like: diff --git a/docs/extensions/shortcodes.qmd b/docs/extensions/shortcodes.qmd index b84213e5a0..a3b51f51d9 100644 --- a/docs/extensions/shortcodes.qmd +++ b/docs/extensions/shortcodes.qmd @@ -10,7 +10,7 @@ This article describes how to create your own shortcodes. ## Quick Start -Here we'll describe how to create a simple shortcode extension. We'll use the `quarto create` command to do this. If you are using VS Code or RStudio, you should execute `quarto create` within their respective integrated terminal panes. +Here we'll describe how to create a simple shortcode extension. We'll use the `quarto create` command to do this. If you are using VS Code, Positron, or RStudio, you should execute `quarto create` within their respective integrated terminal panes. To get started, execute `quarto create extension shortcode` within the parent directory where you'd like the shortcode extension to be created: @@ -30,7 +30,7 @@ Creating extension at /Users/jjallaire/extensions/shorty/shorty: - Created example.qmd ``` -If you are running within VS Code or RStudio, a new window will open with the extension project. +If you are running within VS Code, Positron, or RStudio, a new window will open with the extension project. Here's what the contents of the files in `_extensions/shorty/` look like: diff --git a/docs/faq/rmarkdown.qmd b/docs/faq/rmarkdown.qmd index 054566cfcf..4b2da089b5 100644 --- a/docs/faq/rmarkdown.qmd +++ b/docs/faq/rmarkdown.qmd @@ -99,3 +99,14 @@ You can download the latest release of RStudio from

Choose your tool

+