PageSourceSearch

https://shikokuchuo.net/

html shikokuchuo.net collected 2026-10-03 23:47:09 UTC 65,832 bytes, 2,541 lines download raw bytes

1<!DOCTYPE html>
2
3<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
4
5<head>
6  <meta charset="utf-8"/>
7  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
9  <meta name="generator" content="distill" />
10
11  <style type="text/css">
12  /* Hide doc at startup (prevent jankiness while JS renders/transforms) */
13  body {
14    visibility: hidden;
15  }
16  </style>
17
18 <!--radix_placeholder_import_source-->
19 <!--/radix_placeholder_import_source-->
20
21<style type="text/css">code{white-space: pre;}</style>
22<style type="text/css" data-origin="pandoc">
23html { -webkit-text-size-adjust: 100%; }
24pre > code.sourceCode { white-space: pre; position: relative; }
25pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
26pre > code.sourceCode > span:empty { height: 1.2em; }
27.sourceCode { overflow: visible; }
28code.sourceCode > span { color: inherit; text-decoration: inherit; }
29div.sourceCode { margin: 1em 0; }
30pre.sourceCode { margin: 0; }
31@media screen {
32div.sourceCode { overflow: auto; }
33}
34@media print {
35pre > code.sourceCode { white-space: pre-wrap; }
36pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
37}
38pre.numberSource code
39  { counter-reset: source-line 0; }
40pre.numberSource code > span
41  { position: relative; left: -4em; counter-increment: source-line; }
42pre.numberSource code > span > a:first-child::before
43  { content: counter(source-line);
44    position: relative; left: -1em; text-align: right; vertical-align: baseline;
45    border: none; display: inline-block;
46    -webkit-touch-callout: none; -webkit-user-select: none;
47    -khtml-user-select: none; -moz-user-select: none;
48    -ms-user-select: none; user-select: none;
49    padding: 0 4px; width: 4em;
50    color: #aaaaaa;
51  }
52pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
53div.sourceCode
54  { color: #00769e; background-color: #f1f3f5; }
55@media screen {
56pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
57}
58code span { color: #00769e; } /* Normal */
59code span.al { color: #ad0000; } /* Alert */
60code span.an { color: #5e5e5e; } /* Annotation */
61code span.at { color: #657422; } /* Attribute */
62code span.bn { color: #ad0000; } /* BaseN */
63code span.bu { } /* BuiltIn */
64code span.cf { color: #00769e; } /* ControlFlow */
65code span.ch { color: #20794d; } /* Char */
66code span.cn { color: #8f5902; } /* Constant */
67code span.co { color: #5e5e5e; } /* Comment */
68code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
69code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
70code span.dt { color: #ad0000; } /* DataType */
71code span.dv { color: #ad0000; } /* DecVal */
72code span.er { color: #ad0000; } /* Error */
73code span.ex { } /* Extension */
74code span.fl { color: #ad0000; } /* Float */
75code span.fu { color: #4758ab; } /* Function */
76code span.im { } /* Import */
77code span.in { color: #5e5e5e; } /* Information */
78code span.kw { color: #00769e; } /* Keyword */
79code span.op { color: #5e5e5e; } /* Operator */
80code span.ot { color: #00769e; } /* Other */
81code span.pp { color: #ad0000; } /* Preprocessor */
82code span.sc { color: #5e5e5e; } /* SpecialChar */
83code span.ss { color: #20794d; } /* SpecialString */
84code span.st { color: #20794d; } /* String */
85code span.va { color: #111111; } /* Variable */
86code span.vs { color: #20794d; } /* VerbatimString */
87code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
88</style>
89
90
91  <!--radix_placeholder_meta_tags-->
92  <title>shikokuchuo{net}: Open source R tools</title>
93
94
95  <link rel="icon" type="image/png" href="favicon.png"/>
96
97
98  <!--  https://developers.facebook.com/docs/sharing/webmasters#markup -->
99  <meta property="og:title" content="shikokuchuo{net}: Open source R tools"/>
100  <meta property="og:type" content="article"/>
101  <meta property="og:locale" content="en_US"/>
102  <meta property="og:site_name" content="shikokuchuo{net}"/>
103
104  <!--  https://dev.twitter.com/cards/types/summary -->
105  <meta property="twitter:card" content="summary"/>
106  <meta property="twitter:title" content="shikokuchuo{net}: Open source R tools"/>
107
108  <!--/radix_placeholder_meta_tags-->
109  <!--radix_placeholder_rmarkdown_metadata-->
110
111  
111<script type="text/json" id="radix-rmarkdown-metadata">
112  {"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","site","css"]}},"value":[{"type":"character","attributes":{},"value":["Open source R tools"]},{"type":"character","attributes":{},"value":["distill::distill_website"]},{"type":"character","attributes":{},"value":["index.css"]}]}
113  </script>
113
114  <!--/radix_placeholder_rmarkdown_metadata-->
115  <!--radix_placeholder_navigation_in_header-->
116  <meta name="distill:offset" content=""/>
117
118  
118<script type="application/javascript">
119
120    window.headroom_prevent_pin = false;
121
122    window.document.addEventListener("DOMContentLoaded", function (event) {
123
124      // initialize headroom for banner
125      var header = $('header').get(0);
126      var headerHeight = header.offsetHeight;
127      var headroom = new Headroom(header, {
128        tolerance: 5,
129        onPin : function() {
130          if (window.headroom_prevent_pin) {
131            window.headroom_prevent_pin = false;
132            headroom.unpin();
133          }
134        }
135      });
136      headroom.init();
137      if(window.location.hash)
138        headroom.unpin();
139      $(header).addClass('headroom--transition');
140
141      // offset scroll location for banner on hash change
142      // (see: https://github.com/WickyNilliams/headroom.js/issues/38)
143      window.addEventListener("hashchange", function(event) {
144        window.scrollTo(0, window.pageYOffset - (headerHeight + 25));
145      });
146
147      // responsive menu
148      $('.distill-site-header').each(function(i, val) {
149        var topnav = $(this);
150        var toggle = topnav.find('.nav-toggle');
151        toggle.on('click', function() {
152          topnav.toggleClass('responsive');
153        });
154      });
155
156      // nav dropdowns
157      $('.nav-dropbtn').click(function(e) {
158        $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active');
159        $(this).parent().siblings('.nav-dropdown')
160           .children('.nav-dropdown-content').removeClass('nav-dropdown-active');
161      });
162      $("body").click(function(e){
163        $('.nav-dropdown-content').removeClass('nav-dropdown-active');
164      });
165      $(".nav-dropdown").click(function(e){
166        e.stopPropagation();
167      });
168    });
169  </script>
169
170
171  <style type="text/css">
172
173  /* Theme (user-documented overrideables for nav appearance) */
174
175  .distill-site-nav {
176    color: rgba(255, 255, 255, 0.8);
177    background-color: #0F2E3D;
178    font-size: 15px;
179    font-weight: 300;
180  }
181
182  .distill-site-nav a {
183    color: inherit;
184    text-decoration: none;
185  }
186
187  .distill-site-nav a:hover {
188    color: white;
189  }
190
191  @media print {
192    .distill-site-nav {
193      display: none;
194    }
195  }
196
197  .distill-site-header {
198
199  }
200
201  .distill-site-footer {
202
203  }
204
205
206  /* Site Header */
207
208  .distill-site-header {
209    width: 100%;
210    box-sizing: border-box;
211    z-index: 3;
212  }
213
214  .distill-site-header .nav-left {
215    display: inline-block;
216    margin-left: 8px;
217  }
218
219  @media screen and (max-width: 768px) {
220    .distill-site-header .nav-left {
221      margin-left: 0;
222    }
223  }
224
225
226  .distill-site-header .nav-right {
227    float: right;
228    margin-right: 8px;
229  }
230
231  .distill-site-header a,
232  .distill-site-header .title {
233    display: inline-block;
234    text-align: center;
235    padding: 14px 10px 14px 10px;
236  }
237
238  .distill-site-header .title {
239    font-size: 18px;
240    min-width: 150px;
241  }
242
243  .distill-site-header .logo {
244    padding: 0;
245  }
246
247  .distill-site-header .logo img {
248    display: none;
249    max-height: 20px;
250    width: auto;
251    margin-bottom: -4px;
252  }
253
254  .distill-site-header .nav-image img {
255    max-height: 18px;
256    width: auto;
257    display: inline-block;
258    margin-bottom: -3px;
259  }
260
261
262
263  @media screen and (min-width: 1000px) {
264    .distill-site-header .logo img {
265      display: inline-block;
266    }
267    .distill-site-header .nav-left {
268      margin-left: 20px;
269    }
270    .distill-site-header .nav-right {
271      margin-right: 20px;
272    }
273    .distill-site-header .title {
274      padding-left: 12px;
275    }
276  }
277
278
279  .distill-site-header .nav-toggle {
280    display: none;
281  }
282
283  .nav-dropdown {
284    display: inline-block;
285    position: relative;
286  }
287
288  .nav-dropdown .nav-dropbtn {
289    border: none;
290    outline: none;
291    color: rgba(255, 255, 255, 0.8);
292    padding: 16px 10px;
293    background-color: transparent;
294    font-family: inherit;
295    font-size: inherit;
296    font-weight: inherit;
297    margin: 0;
298    margin-top: 1px;
299    z-index: 2;
300  }
301
302  .nav-dropdown-content {
303    display: none;
304    position: absolute;
305    background-color: white;
306    min-width: 200px;
307    border: 1px solid rgba(0,0,0,0.15);
308    border-radius: 4px;
309    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1);
310    z-index: 1;
311    margin-top: 2px;
312    white-space: nowrap;
313    padding-top: 4px;
314    padding-bottom: 4px;
315  }
316
317  .nav-dropdown-content hr {
318    margin-top: 4px;
319    margin-bottom: 4px;
320    border: none;
321    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
322  }
323
324  .nav-dropdown-active {
325    display: block;
326  }
327
328  .nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header {
329    color: black;
330    padding: 6px 24px;
331    text-decoration: none;
332    display: block;
333    text-align: left;
334  }
335
336  .nav-dropdown-content .nav-dropdown-header {
337    display: block;
338    padding: 5px 24px;
339    padding-bottom: 0;
340    text-transform: uppercase;
341    font-size: 14px;
342    color: #999999;
343    white-space: nowrap;
344  }
345
346  .nav-dropdown:hover .nav-dropbtn {
347    color: white;
348  }
349
350  .nav-dropdown-content a:hover {
351    background-color: #ddd;
352    color: black;
353  }
354
355  .nav-right .nav-dropdown-content {
356    margin-left: -45%;
357    right: 0;
358  }
359
360  @media screen and (max-width: 768px) {
361    .distill-site-header a, .distill-site-header .nav-dropdown  {display: none;}
362    .distill-site-header a.nav-toggle {
363      float: right;
364      display: block;
365    }
366    .distill-site-header .title {
367      margin-left: 0;
368    }
369    .distill-site-header .nav-right {
370      margin-right: 0;
371    }
372    .distill-site-header {
373      overflow: hidden;
374    }
375    .nav-right .nav-dropdown-content {
376      margin-left: 0;
377    }
378  }
379
380
381  @media screen and (max-width: 768px) {
382    .distill-site-header.responsive {position: relative; min-height: 500px; }
383    .distill-site-header.responsive a.nav-toggle {
384      position: absolute;
385      right: 0;
386      top: 0;
387    }
388    .distill-site-header.responsive a,
389    .distill-site-header.responsive .nav-dropdown {
390      display: block;
391      text-align: left;
392    }
393    .distill-site-header.responsive .nav-left,
394    .distill-site-header.responsive .nav-right {
395      width: 100%;
396    }
397    .distill-site-header.responsive .nav-dropdown {float: none;}
398    .distill-site-header.responsive .nav-dropdown-content {position: relative;}
399    .distill-site-header.responsive .nav-dropdown .nav-dropbtn {
400      display: block;
401      width: 100%;
402      text-align: left;
403    }
404  }
405
406  /* Site Footer */
407
408  .distill-site-footer {
409    width: 100%;
410    overflow: hidden;
411    box-sizing: border-box;
412    z-index: 3;
413    margin-top: 30px;
414    padding-top: 30px;
415    padding-bottom: 30px;
416    text-align: center;
417  }
418
419  /* Headroom */
420
421  d-title {
422    padding-top: 6rem;
423  }
424
425  @media print {
426    d-title {
427      padding-top: 4rem;
428    }
429  }
430
431  .headroom {
432    z-index: 1000;
433    position: fixed;
434    top: 0;
435    left: 0;
436    right: 0;
437  }
438
439  .headroom--transition {
440    transition: all .4s ease-in-out;
441  }
442
443  .headroom--unpinned {
444    top: -100px;
445  }
446
447  .headroom--pinned {
448    top: 0;
449  }
450
451  /* adjust viewport for navbar height */
452  /* helps vertically center bootstrap (non-distill) content */
453  .min-vh-100 {
454    min-height: calc(100vh - 100px) !important;
455  }
456
457  </style>
458
459  
459<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
459
460  <link href="site_libs/font-awesome-6.5.2/css/all.min.css" rel="stylesheet"/>
461  <link href="site_libs/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet"/>
462  
462<script src="site_libs/headroom-0.9.4/headroom.min.js"></script>
462
463  
463<script src="site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
463
464  
464<script src="site_libs/fuse-6.4.1/fuse.min.js"></script>
464
465
466  
466<script type="application/javascript">
467
468  function getMeta(metaName) {
469    var metas = document.getElementsByTagName('meta');
470    for (let i = 0; i < metas.length; i++) {
471      if (metas[i].getAttribute('name') === metaName) {
472        return metas[i].getAttribute('content');
473      }
474    }
475    return '';
476  }
477
478  function offsetURL(url) {
479    var offset = getMeta('distill:offset');
480    return offset ? offset + '/' + url : url;
481  }
482
483  function createFuseIndex() {
484
485    // create fuse index
486    var options = {
487      keys: [
488        { name: 'title', weight: 20 },
489        { name: 'categories', weight: 15 },
490        { name: 'description', weight: 10 },
491        { name: 'contents', weight: 5 },
492      ],
493      ignoreLocation: true,
494      threshold: 0
495    };
496    var fuse = new window.Fuse([], options);
497
498    // fetch the main search.json
499    return fetch(offsetURL('search.json'))
500      .then(function(response) {
501        if (response.status == 200) {
502          return response.json().then(function(json) {
503            // index main articles
504            json.articles.forEach(function(article) {
505              fuse.add(article);
506            });
507            // download collections and index their articles
508            return Promise.all(json.collections.map(function(collection) {
509              return fetch(offsetURL(collection)).then(function(response) {
510                if (response.status === 200) {
511                  return response.json().then(function(articles) {
512                    articles.forEach(function(article) {
513                      fuse.add(article);
514                    });
515                  })
516                } else {
517                  return Promise.reject(
518                    new Error('Unexpected status from search index request: ' +
519                              response.status)
520                  );
521                }
522              });
523            })).then(function() {
524              return fuse;
525            });
526          });
527
528        } else {
529          return Promise.reject(
530            new Error('Unexpected status from search index request: ' +
531                        response.status)
532          );
533        }
534      });
535  }
536
537  window.document.addEventListener("DOMContentLoaded", function (event) {
538
539    // get search element (bail if we don't have one)
540    var searchEl = window.document.getElementById('distill-search');
541    if (!searchEl)
542      return;
543
544    createFuseIndex()
545      .then(function(fuse) {
546
547        // make search box visible
548        searchEl.classList.remove('hidden');
549
550        // initialize autocomplete
551        var options = {
552          autoselect: true,
553          hint: false,
554          minLength: 2,
555        };
556        window.autocomplete(searchEl, options, [{
557          source: function(query, callback) {
558            const searchOptions = {
559              isCaseSensitive: false,
560              shouldSort: true,
561              minMatchCharLength: 2,
562              limit: 10,
563            };
564            var results = fuse.search(query, searchOptions);
565            callback(results
566              .map(function(result) { return result.item; })
567            );
568          },
569          templates: {
570            suggestion: function(suggestion) {
571              var img = suggestion.preview && Object.keys(suggestion.preview).length > 0
572                ? `<img src="${offsetURL(suggestion.preview)}"</img>`
573                : '';
574              var html = `
575                <div class="search-item">
576                  <h3>${suggestion.title}</h3>
577                  <div class="search-item-description">
578                    ${suggestion.description || ''}
579                  </div>
580                  <div class="search-item-preview">
581                    ${img}
582                  </div>
583                </div>
584              `;
585              return html;
586            }
587          }
588        }]).on('autocomplete:selected', function(event, suggestion) {
589          window.location.href = offsetURL(suggestion.path);
590        });
591        // remove inline display style on autocompleter (we want to
592        // manage responsive display via css)
593        $('.algolia-autocomplete').css("display", "");
594      })
595      .catch(function(error) {
596        console.log(error);
597      });
598
599  });
600
601  </script>
601
602
603  <style type="text/css">
604
605  .nav-search {
606    font-size: x-small;
607  }
608
609  /* Algolioa Autocomplete */
610
611  .algolia-autocomplete {
612    display: inline-block;
613    margin-left: 10px;
614    vertical-align: sub;
615    background-color: white;
616    color: black;
617    padding: 6px;
618    padding-top: 8px;
619    padding-bottom: 0;
620    border-radius: 6px;
621    border: 1px #0F2E3D solid;
622    width: 180px;
623  }
624
625
626  @media screen and (max-width: 768px) {
627    .distill-site-nav .algolia-autocomplete {
628      display: none;
629      visibility: hidden;
630    }
631    .distill-site-nav.responsive .algolia-autocomplete {
632      display: inline-block;
633      visibility: visible;
634    }
635    .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu {
636      margin-left: 0;
637      width: 400px;
638      max-height: 400px;
639    }
640  }
641
642  .algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
643    width: 90%;
644    outline: none;
645    border: none;
646  }
647
648  .algolia-autocomplete .aa-hint {
649    color: #999;
650  }
651  .algolia-autocomplete .aa-dropdown-menu {
652    width: 550px;
653    max-height: 70vh;
654    overflow-x: visible;
655    overflow-y: scroll;
656    padding: 5px;
657    margin-top: 3px;
658    margin-left: -150px;
659    background-color: #fff;
660    border-radius: 5px;
661    border: 1px solid #999;
662    border-top: none;
663  }
664
665  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
666    cursor: pointer;
667    padding: 5px 4px;
668    border-bottom: 1px solid #eee;
669  }
670
671  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type {
672    border-bottom: none;
673    margin-bottom: 2px;
674  }
675
676  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item {
677    overflow: hidden;
678    font-size: 0.8em;
679    line-height: 1.4em;
680  }
681
682  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 {
683    font-size: 1rem;
684    margin-block-start: 0;
685    margin-block-end: 5px;
686  }
687
688  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description {
689    display: inline-block;
690    overflow: hidden;
691    height: 2.8em;
692    width: 80%;
693    margin-right: 4%;
694  }
695
696  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview {
697    display: inline-block;
698    width: 15%;
699  }
700
701  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img {
702    height: 3em;
703    width: auto;
704    display: none;
705  }
706
707  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] {
708    display: initial;
709  }
710
711  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
712    background-color: #eee;
713  }
714  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
715    font-weight: bold;
716    font-style: normal;
717  }
718
719  </style>
720
721
722  <!--/radix_placeholder_navigation_in_header-->
723  <!--radix_placeholder_distill-->
724
725  <style type="text/css">
726
727  body {
728    background-color: white;
729  }
730
731  .pandoc-table {
732    width: 100%;
733  }
734
735  .pandoc-table>caption {
736    margin-bottom: 10px;
737  }
738
739  .pandoc-table th:not([align]) {
740    text-align: left;
741  }
742
743  .pagedtable-footer {
744    font-size: 15px;
745  }
746
747  d-byline .byline {
748    grid-template-columns: 2fr 2fr;
749  }
750
751  d-byline .byline h3 {
752    margin-block-start: 1.5em;
753  }
754
755  d-byline .byline .authors-affiliations h3 {
756    margin-block-start: 0.5em;
757  }
758
759  .authors-affiliations .orcid-id {
760    width: 16px;
761    height:16px;
762    margin-left: 4px;
763    margin-right: 4px;
764    vertical-align: middle;
765    padding-bottom: 2px;
766  }
767
768  d-title .dt-tags {
769    margin-top: 1em;
770    grid-column: text;
771  }
772
773  .dt-tags .dt-tag {
774    text-decoration: none;
775    display: inline-block;
776    color: rgba(0,0,0,0.6);
777    padding: 0em 0.4em;
778    margin-right: 0.5em;
779    margin-bottom: 0.4em;
780    font-size: 70%;
781    border: 1px solid rgba(0,0,0,0.2);
782    border-radius: 3px;
783    text-transform: uppercase;
784    font-weight: 500;
785  }
786
787  d-article table.gt_table td,
788  d-article table.gt_table th {
789    border-bottom: none;
790    font-size: 100%;
791  }
792
793  .html-widget {
794    margin-bottom: 2.0em;
795  }
796
797  .l-screen-inset {
798    padding-right: 16px;
799  }
800
801  .l-screen .caption {
802    margin-left: 10px;
803  }
804
805  .shaded {
806    background: rgb(247, 247, 247);
807    padding-top: 20px;
808    padding-bottom: 20px;
809    border-top: 1px solid rgba(0, 0, 0, 0.1);
810    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
811  }
812
813  .shaded .html-widget {
814    margin-bottom: 0;
815    border: 1px solid rgba(0, 0, 0, 0.1);
816  }
817
818  .shaded .shaded-content {
819    background: white;
820  }
821
822  .text-output {
823    margin-top: 0;
824    line-height: 1.5em;
825  }
826
827  .hidden {
828    display: none !important;
829  }
830
831  hr.section-separator {
832    border: none;
833    border-top: 1px solid rgba(0, 0, 0, 0.1);
834    margin: 0px;
835  }
836
837
838  d-byline {
839    border-top: none;
840  }
841
842  d-article {
843    padding-top: 2.5rem;
844    padding-bottom: 30px;
845    border-top: none;
846  }
847
848  d-appendix {
849    padding-top: 30px;
850  }
851
852  d-article>p>img {
853    width: 100%;
854  }
855
856  d-article h2 {
857    margin: 1rem 0 1.5rem 0;
858  }
859
860  d-article h3 {
861    margin-top: 1.5rem;
862  }
863
864  d-article iframe {
865    border: 1px solid rgba(0, 0, 0, 0.1);
866    margin-bottom: 2.0em;
867    width: 100%;
868  }
869
870  /* Tweak code blocks */
871
872  d-article div.sourceCode code,
873  d-article pre code {
874    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
875  }
876
877  d-article pre,
878  d-article div.sourceCode,
879  d-article div.sourceCode pre {
880    overflow: auto;
881  }
882
883  d-article div.sourceCode {
884    background-color: white;
885  }
886
887  d-article div.sourceCode pre {
888    padding-left: 10px;
889    font-size: 12px;
890    border-left: 2px solid rgba(0,0,0,0.1);
891  }
892
893  d-article pre {
894    font-size: 12px;
895    color: black;
896    background: none;
897    margin-top: 0;
898    text-align: left;
899    white-space: pre;
900    word-spacing: normal;
901    word-break: normal;
902    word-wrap: normal;
903    line-height: 1.5;
904
905    -moz-tab-size: 4;
906    -o-tab-size: 4;
907    tab-size: 4;
908
909    -webkit-hyphens: none;
910    -moz-hyphens: none;
911    -ms-hyphens: none;
912    hyphens: none;
913  }
914
915  d-article pre a {
916    border-bottom: none;
917  }
918
919  d-article pre a:hover {
920    border-bottom: none;
921    text-decoration: underline;
922  }
923
924  d-article details {
925    grid-column: text;
926    margin-bottom: 0.8em;
927  }
928
929  @media(min-width: 768px) {
930
931  d-article pre,
932  d-article div.sourceCode,
933  d-article div.sourceCode pre {
934    overflow: visible !important;
935  }
936
937  d-article div.sourceCode pre {
938    padding-left: 18px;
939    font-size: 14px;
940  }
941
942  /* tweak for Pandoc numbered line within distill */
943  d-article pre.numberSource code > span {
944      left: -2em;
945  }
946
947  d-article pre {
948    font-size: 14px;
949  }
950
951  }
952
953  figure img.external {
954    background: white;
955    border: 1px solid rgba(0, 0, 0, 0.1);
956    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
957    padding: 18px;
958    box-sizing: border-box;
959  }
960
961  /* CSS for d-contents */
962
963  .d-contents {
964    grid-column: text;
965    color: rgba(0,0,0,0.8);
966    font-size: 0.9em;
967    padding-bottom: 1em;
968    margin-bottom: 1em;
969    padding-bottom: 0.5em;
970    margin-bottom: 1em;
971    padding-left: 0.25em;
972    justify-self: start;
973  }
974
975  @media(min-width: 1000px) {
976    .d-contents.d-contents-float {
977      height: 0;
978      grid-column-start: 1;
979      grid-column-end: 4;
980      justify-self: center;
981      padding-right: 3em;
982      padding-left: 2em;
983    }
984  }
985
986  .d-contents nav h3 {
987    font-size: 18px;
988    margin-top: 0;
989    margin-bottom: 1em;
990  }
991
992  .d-contents li {
993    list-style-type: none
994  }
995
996  .d-contents nav > ul {
997    padding-left: 0;
998  }
999
1000  .d-contents ul {
1001    padding-left: 1em
1002  }
1003
1004  .d-contents nav ul li {
1005    margin-top: 0.6em;
1006    margin-bottom: 0.2em;
1007  }
1008
1009  .d-contents nav a {
1010    font-size: 13px;
1011    border-bottom: none;
1012    text-decoration: none
1013    color: rgba(0, 0, 0, 0.8);
1014  }
1015
1016  .d-contents nav a:hover {
1017    text-decoration: underline solid rgba(0, 0, 0, 0.6)
1018  }
1019
1020  .d-contents nav > ul > li > a {
1021    font-weight: 600;
1022  }
1023
1024  .d-contents nav > ul > li > ul {
1025    font-weight: inherit;
1026  }
1027
1028  .d-contents nav > ul > li > ul > li {
1029    margin-top: 0.2em;
1030  }
1031
1032
1033  .d-contents nav ul {
1034    margin-top: 0;
1035    margin-bottom: 0.25em;
1036  }
1037
1038  .d-article-with-toc h2:nth-child(2) {
1039    margin-top: 0;
1040  }
1041
1042
1043  /* Figure */
1044
1045  .figure {
1046    position: relative;
1047    margin-bottom: 2.5em;
1048    margin-top: 1.5em;
1049  }
1050
1051  .figure .caption {
1052    color: rgba(0, 0, 0, 0.6);
1053    font-size: 12px;
1054    line-height: 1.5em;
1055  }
1056
1057  .figure img.external {
1058    background: white;
1059    border: 1px solid rgba(0, 0, 0, 0.1);
1060    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
1061    padding: 18px;
1062    box-sizing: border-box;
1063  }
1064
1065  .figure .caption a {
1066    color: rgba(0, 0, 0, 0.6);
1067  }
1068
1069  .figure .caption b,
1070  .figure .caption strong, {
1071    font-weight: 600;
1072    color: rgba(0, 0, 0, 1.0);
1073  }
1074
1075  /* Citations */
1076
1077  d-article .citation {
1078    color: inherit;
1079    cursor: inherit;
1080  }
1081
1082  div.hanging-indent{
1083    margin-left: 1em; text-indent: -1em;
1084  }
1085
1086  /* Citation hover box */
1087
1088  .tippy-box[data-theme~=light-border] {
1089    background-color: rgba(250, 250, 250, 0.95);
1090  }
1091
1092  .tippy-content > p {
1093    margin-bottom: 0;
1094    padding: 2px;
1095  }
1096
1097
1098  /* Tweak 1000px media break to show more text */
1099
1100  @media(min-width: 1000px) {
1101    .base-grid,
1102    distill-header,
1103    d-title,
1104    d-abstract,
1105    d-article,
1106    d-appendix,
1107    distill-appendix,
1108    d-byline,
1109    d-footnote-list,
1110    d-citation-list,
1111    distill-footer {
1112      grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end];
1113      grid-column-gap: 16px;
1114    }
1115
1116    .grid {
1117      grid-column-gap: 16px;
1118    }
1119
1120    d-article {
1121      font-size: 1.06rem;
1122      line-height: 1.7em;
1123    }
1124    figure .caption, .figure .caption, figure figcaption {
1125      font-size: 13px;
1126    }
1127  }
1128
1129  @media(min-width: 1180px) {
1130    .base-grid,
1131    distill-header,
1132    d-title,
1133    d-abstract,
1134    d-article,
1135    d-appendix,
1136    distill-appendix,
1137    d-byline,
1138    d-footnote-list,
1139    d-citation-list,
1140    distill-footer {
1141      grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];
1142      grid-column-gap: 32px;
1143    }
1144
1145    .grid {
1146      grid-column-gap: 32px;
1147    }
1148  }
1149
1150
1151  /* Get the citation styles for the appendix (not auto-injected on render since
1152     we do our own rendering of the citation appendix) */
1153
1154  d-appendix .citation-appendix,
1155  .d-appendix .citation-appendix {
1156    font-size: 11px;
1157    line-height: 15px;
1158    border-left: 1px solid rgba(0, 0, 0, 0.1);
1159    padding-left: 18px;
1160    border: 1px solid rgba(0,0,0,0.1);
1161    background: rgba(0, 0, 0, 0.02);
1162    padding: 10px 18px;
1163    border-radius: 3px;
1164    color: rgba(150, 150, 150, 1);
1165    overflow: hidden;
1166    margin-top: -12px;
1167    white-space: pre-wrap;
1168    word-wrap: break-word;
1169  }
1170
1171  /* Include appendix styles here so they can be overridden */
1172
1173  d-appendix {
1174    contain: layout style;
1175    font-size: 0.8em;
1176    line-height: 1.7em;
1177    margin-top: 60px;
1178    margin-bottom: 0;
1179    border-top: 1px solid rgba(0, 0, 0, 0.1);
1180    color: rgba(0,0,0,0.5);
1181    padding-top: 60px;
1182    padding-bottom: 48px;
1183  }
1184
1185  d-appendix h3 {
1186    grid-column: page-start / text-start;
1187    font-size: 15px;
1188    font-weight: 500;
1189    margin-top: 1em;
1190    margin-bottom: 0;
1191    color: rgba(0,0,0,0.65);
1192  }
1193
1194  d-appendix h3 + * {
1195    margin-top: 1em;
1196  }
1197
1198  d-appendix ol {
1199    padding: 0 0 0 15px;
1200  }
1201
1202  @media (min-width: 768px) {
1203    d-appendix ol {
1204      padding: 0 0 0 30px;
1205      margin-left: -30px;
1206    }
1207  }
1208
1209  d-appendix li {
1210    margin-bottom: 1em;
1211  }
1212
1213  d-appendix a {
1214    color: rgba(0, 0, 0, 0.6);
1215  }
1216
1217  d-appendix > * {
1218    grid-column: text;
1219  }
1220
1221  d-appendix > d-footnote-list,
1222  d-appendix > d-citation-list,
1223  d-appendix > distill-appendix {
1224    grid-column: screen;
1225  }
1226
1227  /* Include footnote styles here so they can be overridden */
1228
1229  d-footnote-list {
1230    contain: layout style;
1231  }
1232
1233  d-footnote-list > * {
1234    grid-column: text;
1235  }
1236
1237  d-footnote-list a.footnote-backlink {
1238    color: rgba(0,0,0,0.3);
1239    padding-left: 0.5em;
1240  }
1241
1242
1243
1244  /* Anchor.js */
1245
1246  .anchorjs-link {
1247    /*transition: all .25s linear; */
1248    text-decoration: none;
1249    border-bottom: none;
1250  }
1251  *:hover > .anchorjs-link {
1252    margin-left: -1.125em !important;
1253    text-decoration: none;
1254    border-bottom: none;
1255  }
1256
1257  /* Social footer */
1258
1259  .social_footer {
1260    margin-top: 30px;
1261    margin-bottom: 0;
1262    color: rgba(0,0,0,0.67);
1263  }
1264
1265  .disqus-comments {
1266    margin-right: 30px;
1267  }
1268
1269  .disqus-comment-count {
1270    border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1271    cursor: pointer;
1272  }
1273
1274  #disqus_thread {
1275    margin-top: 30px;
1276  }
1277
1278  .article-sharing a {
1279    border-bottom: none;
1280    margin-right: 8px;
1281  }
1282
1283  .article-sharing a:hover {
1284    border-bottom: none;
1285  }
1286
1287  .sidebar-section.subscribe {
1288    font-size: 12px;
1289    line-height: 1.6em;
1290  }
1291
1292  .subscribe p {
1293    margin-bottom: 0.5em;
1294  }
1295
1296
1297  .article-footer .subscribe {
1298    font-size: 15px;
1299    margin-top: 45px;
1300  }
1301
1302
1303  .sidebar-section.custom {
1304    font-size: 12px;
1305    line-height: 1.6em;
1306  }
1307
1308  .custom p {
1309    margin-bottom: 0.5em;
1310  }
1311
1312  /* Styles for listing layout (hide title) */
1313  .layout-listing d-title, .layout-listing .d-title {
1314    display: none;
1315  }
1316
1317  /* Styles for posts lists (not auto-injected) */
1318
1319
1320  .posts-with-sidebar {
1321    padding-left: 45px;
1322    padding-right: 45px;
1323  }
1324
1325  .posts-list .description h2,
1326  .posts-list .description p {
1327    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1328  }
1329
1330  .posts-list .description h2 {
1331    font-weight: 700;
1332    border-bottom: none;
1333    padding-bottom: 0;
1334  }
1335
1336  .posts-list h2.post-tag {
1337    border-bottom: 1px solid rgba(0, 0, 0, 0.2);
1338    padding-bottom: 12px;
1339  }
1340  .posts-list {
1341    margin-top: 60px;
1342    margin-bottom: 24px;
1343  }
1344
1345  .posts-list .post-preview {
1346    text-decoration: none;
1347    overflow: hidden;
1348    display: block;
1349    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
1350    padding: 24px 0;
1351  }
1352
1353  .post-preview-last {
1354    border-bottom: none !important;
1355  }
1356
1357  .posts-list .posts-list-caption {
1358    grid-column: screen;
1359    font-weight: 400;
1360  }
1361
1362  .posts-list .post-preview h2 {
1363    margin: 0 0 6px 0;
1364    line-height: 1.2em;
1365    font-style: normal;
1366    font-size: 24px;
1367  }
1368
1369  .posts-list .post-preview p {
1370    margin: 0 0 12px 0;
1371    line-height: 1.4em;
1372    font-size: 16px;
1373  }
1374
1375  .posts-list .post-preview .thumbnail {
1376    box-sizing: border-box;
1377    margin-bottom: 24px;
1378    position: relative;
1379    max-width: 500px;
1380  }
1381  .posts-list .post-preview img {
1382    width: 100%;
1383    display: block;
1384  }
1385
1386  .posts-list .metadata {
1387    font-size: 12px;
1388    line-height: 1.4em;
1389    margin-bottom: 18px;
1390  }
1391
1392  .posts-list .metadata > * {
1393    display: inline-block;
1394  }
1395
1396  .posts-list .metadata .publishedDate {
1397    margin-right: 2em;
1398  }
1399
1400  .posts-list .metadata .dt-authors {
1401    display: block;
1402    margin-top: 0.3em;
1403    margin-right: 2em;
1404  }
1405
1406  .posts-list .dt-tags {
1407    display: block;
1408    line-height: 1em;
1409  }
1410
1411  .posts-list .dt-tags .dt-tag {
1412    display: inline-block;
1413    color: rgba(0,0,0,0.6);
1414    padding: 0.3em 0.4em;
1415    margin-right: 0.2em;
1416    margin-bottom: 0.4em;
1417    font-size: 60%;
1418    border: 1px solid rgba(0,0,0,0.2);
1419    border-radius: 3px;
1420    text-transform: uppercase;
1421    font-weight: 500;
1422  }
1423
1424  .posts-list img {
1425    opacity: 1;
1426  }
1427
1428  .posts-list img[data-src] {
1429    opacity: 0;
1430  }
1431
1432  .posts-more {
1433    clear: both;
1434  }
1435
1436
1437  .posts-sidebar {
1438    font-size: 16px;
1439  }
1440
1441  .posts-sidebar h3 {
1442    font-size: 16px;
1443    margin-top: 0;
1444    margin-bottom: 0.5em;
1445    font-weight: 400;
1446    text-transform: uppercase;
1447  }
1448
1449  .sidebar-section {
1450    margin-bottom: 30px;
1451  }
1452
1453  .categories ul {
1454    list-style-type: none;
1455    margin: 0;
1456    padding: 0;
1457  }
1458
1459  .categories li {
1460    color: rgba(0, 0, 0, 0.8);
1461    margin-bottom: 0;
1462  }
1463
1464  .categories li>a {
1465    border-bottom: none;
1466  }
1467
1468  .categories li>a:hover {
1469    border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1470  }
1471
1472  .categories .active {
1473    font-weight: 600;
1474  }
1475
1476  .categories .category-count {
1477    color: rgba(0, 0, 0, 0.4);
1478  }
1479
1480
1481  @media(min-width: 768px) {
1482    .posts-list .post-preview h2 {
1483      font-size: 26px;
1484    }
1485    .posts-list .post-preview .thumbnail {
1486      float: right;
1487      width: 30%;
1488      margin-bottom: 0;
1489    }
1490    .posts-list .post-preview .description {
1491      float: left;
1492      width: 45%;
1493    }
1494    .posts-list .post-preview .metadata {
1495      float: left;
1496      width: 20%;
1497      margin-top: 8px;
1498    }
1499    .posts-list .post-preview p {
1500      margin: 0 0 12px 0;
1501      line-height: 1.5em;
1502      font-size: 16px;
1503    }
1504    .posts-with-sidebar .posts-list {
1505      float: left;
1506      width: 75%;
1507    }
1508    .posts-with-sidebar .posts-sidebar {
1509      float: right;
1510      width: 20%;
1511      margin-top: 60px;
1512      padding-top: 24px;
1513      padding-bottom: 24px;
1514    }
1515  }
1516
1517
1518  /* Improve display for browsers without grid (IE/Edge <= 15) */
1519
1520  .downlevel {
1521    line-height: 1.6em;
1522    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1523    margin: 0;
1524  }
1525
1526  .downlevel .d-title {
1527    padding-top: 6rem;
1528    padding-bottom: 1.5rem;
1529  }
1530
1531  .downlevel .d-title h1 {
1532    font-size: 50px;
1533    font-weight: 700;
1534    line-height: 1.1em;
1535    margin: 0 0 0.5rem;
1536  }
1537
1538  .downlevel .d-title p {
1539    font-weight: 300;
1540    font-size: 1.2rem;
1541    line-height: 1.55em;
1542    margin-top: 0;
1543  }
1544
1545  .downlevel .d-byline {
1546    padding-top: 0.8em;
1547    padding-bottom: 0.8em;
1548    font-size: 0.8rem;
1549    line-height: 1.8em;
1550  }
1551
1552  .downlevel .section-separator {
1553    border: none;
1554    border-top: 1px solid rgba(0, 0, 0, 0.1);
1555  }
1556
1557  .downlevel .d-article {
1558    font-size: 1.06rem;
1559    line-height: 1.7em;
1560    padding-top: 1rem;
1561    padding-bottom: 2rem;
1562  }
1563
1564
1565  .downlevel .d-appendix {
1566    padding-left: 0;
1567    padding-right: 0;
1568    max-width: none;
1569    font-size: 0.8em;
1570    line-height: 1.7em;
1571    margin-bottom: 0;
1572    color: rgba(0,0,0,0.5);
1573    padding-top: 40px;
1574    padding-bottom: 48px;
1575  }
1576
1577  .downlevel .footnotes ol {
1578    padding-left: 13px;
1579  }
1580
1581  .downlevel .base-grid,
1582  .downlevel .distill-header,
1583  .downlevel .d-title,
1584  .downlevel .d-abstract,
1585  .downlevel .d-article,
1586  .downlevel .d-appendix,
1587  .downlevel .distill-appendix,
1588  .downlevel .d-byline,
1589  .downlevel .d-footnote-list,
1590  .downlevel .d-citation-list,
1591  .downlevel .distill-footer,
1592  .downlevel .appendix-bottom,
1593  .downlevel .posts-container {
1594    padding-left: 40px;
1595    padding-right: 40px;
1596  }
1597
1598  @media(min-width: 768px) {
1599    .downlevel .base-grid,
1600    .downlevel .distill-header,
1601    .downlevel .d-title,
1602    .downlevel .d-abstract,
1603    .downlevel .d-article,
1604    .downlevel .d-appendix,
1605    .downlevel .distill-appendix,
1606    .downlevel .d-byline,
1607    .downlevel .d-footnote-list,
1608    .downlevel .d-citation-list,
1609    .downlevel .distill-footer,
1610    .downlevel .appendix-bottom,
1611    .downlevel .posts-container {
1612    padding-left: 150px;
1613    padding-right: 150px;
1614    max-width: 900px;
1615  }
1616  }
1617
1618  .downlevel pre code {
1619    display: block;
1620    border-left: 2px solid rgba(0, 0, 0, .1);
1621    padding: 0 0 0 20px;
1622    font-size: 14px;
1623  }
1624
1625  .downlevel code, .downlevel pre {
1626    color: black;
1627    background: none;
1628    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
1629    text-align: left;
1630    white-space: pre;
1631    word-spacing: normal;
1632    word-break: normal;
1633    word-wrap: normal;
1634    line-height: 1.5;
1635
1636    -moz-tab-size: 4;
1637    -o-tab-size: 4;
1638    tab-size: 4;
1639
1640    -webkit-hyphens: none;
1641    -moz-hyphens: none;
1642    -ms-hyphens: none;
1643    hyphens: none;
1644  }
1645
1646  .downlevel .posts-list .post-preview {
1647    color: inherit;
1648  }
1649
1650
1651
1652  </style>
1653
1654  
1654<script type="application/javascript">
1655
1656  function is_downlevel_browser() {
1657    if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"},
1658                                   window.navigator.userAgent)) {
1659      return true;
1660    } else {
1661      return window.load_distill_framework === undefined;
1662    }
1663  }
1664
1665  // show body when load is complete
1666  function on_load_complete() {
1667
1668    // add anchors
1669    if (window.anchors) {
1670      window.anchors.options.placement = 'left';
1671      window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5');
1672    }
1673
1674
1675    // set body to visible
1676    document.body.style.visibility = 'visible';
1677
1678    // force redraw for leaflet widgets
1679    if (window.HTMLWidgets) {
1680      var maps = window.HTMLWidgets.findAll(".leaflet");
1681      $.each(maps, function(i, el) {
1682        var map = this.getMap();
1683        map.invalidateSize();
1684        map.eachLayer(function(layer) {
1685          if (layer instanceof L.TileLayer)
1686            layer.redraw();
1687        });
1688      });
1689    }
1690
1691    // trigger 'shown' so htmlwidgets resize
1692    $('d-article').trigger('shown');
1693  }
1694
1695  function init_distill() {
1696
1697    init_common();
1698
1699    // create front matter
1700    var front_matter = $('<d-front-matter></d-front-matter>');
1701    $('#distill-front-matter').wrap(front_matter);
1702
1703    // create d-title
1704    $('.d-title').changeElementType('d-title');
1705
1706    // separator
1707    var separator = '<hr class="section-separator" style="clear: both"/>';
1708    // prepend separator above appendix
1709    $('.d-byline').before(separator);
1710    $('.d-article').before(separator);
1711
1712    // create d-byline
1713    var byline = $('<d-byline></d-byline>');
1714    $('.d-byline').replaceWith(byline);
1715
1716    // create d-article
1717    var article = $('<d-article></d-article>');
1718    $('.d-article').wrap(article).children().unwrap();
1719
1720    // move posts container into article
1721    $('.posts-container').appendTo($('d-article'));
1722
1723    // create d-appendix
1724    $('.d-appendix').changeElementType('d-appendix');
1725
1726    // flag indicating that we have appendix items
1727    var appendix = $('.appendix-bottom').children('h3').length > 0;
1728
1729    // replace footnotes with <d-footnote>
1730    $('.footnote-ref').each(function(i, val) {
1731      appendix = true;
1732      var href = $(this).attr('href');
1733      var id = href.replace('#', '');
1734      var fn = $('#' + id);
1735      var fn_p = $('#' + id + '>p');
1736      fn_p.find('.footnote-back').remove();
1737      var text = fn_p.html();
1738      var dtfn = $('<d-footnote></d-footnote>');
1739      dtfn.html(text);
1740      $(this).replaceWith(dtfn);
1741    });
1742    // remove footnotes
1743    $('.footnotes').remove();
1744
1745    // move refs into #references-listing
1746    $('#references-listing').replaceWith($('#refs'));
1747
1748    $('h1.appendix, h2.appendix').each(function(i, val) {
1749      $(this).changeElementType('h3');
1750    });
1751    $('h3.appendix').each(function(i, val) {
1752      var id = $(this).attr('id');
1753      $('.d-contents a[href="#' + id + '"]').parent().remove();
1754      appendix = true;
1755      $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix'));
1756    });
1757
1758    // show d-appendix if we have appendix content
1759    $("d-appendix").css('display', appendix ? 'grid' : 'none');
1760
1761    // localize layout chunks to just output
1762    $('.layout-chunk').each(function(i, val) {
1763
1764      // capture layout
1765      var layout = $(this).attr('data-layout');
1766
1767      // apply layout to markdown level block elements
1768      var elements = $(this).children().not('details, div.sourceCode, pre, script');
1769      elements.each(function(i, el) {
1770        var layout_div = $('<div class="' + layout + '"></div>');
1771        if (layout_div.hasClass('shaded')) {
1772          var shaded_content = $('<div class="shaded-content"></div>');
1773          $(this).wrap(shaded_content);
1774          $(this).parent().wrap(layout_div);
1775        } else {
1776          $(this).wrap(layout_div);
1777        }
1778      });
1779
1780
1781      // unwrap the layout-chunk div
1782      $(this).children().unwrap();
1783    });
1784
1785    // remove code block used to force  highlighting css
1786    $('.distill-force-highlighting-css').parent().remove();
1787
1788    // remove empty line numbers inserted by pandoc when using a
1789    // custom syntax highlighting theme, except when numbering line
1790    // in code chunk
1791    $('pre:not(.numberLines) code.sourceCode a:empty').remove();
1792
1793    // load distill framework
1794    load_distill_framework();
1795
1796    // wait for window.distillRunlevel == 4 to do post processing
1797    function distill_post_process() {
1798
1799      if (!window.distillRunlevel || window.distillRunlevel < 4)
1800        return;
1801
1802      // hide author/affiliations entirely if we have no authors
1803      var front_matter = JSON.parse($("#distill-front-matter").html());
1804      var have_authors = front_matter.authors && front_matter.authors.length > 0;
1805      if (!have_authors)
1806        $('d-byline').addClass('hidden');
1807
1808      // article with toc class
1809      $('.d-contents').parent().addClass('d-article-with-toc');
1810
1811      // strip links that point to #
1812      $('.authors-affiliations').find('a[href="#"]').removeAttr('href');
1813
1814      // add orcid ids
1815      $('.authors-affiliations').find('.author').each(function(i, el) {
1816        var orcid_id = front_matter.authors[i].orcidID;
1817        var author_name = front_matter.authors[i].author
1818        if (orcid_id) {
1819          var a = $('<a></a>');
1820          a.attr('href', 'https://orcid.org/' + orcid_id);
1821          var img = $('<img></img>');
1822          img.addClass('orcid-id');
1823          img.attr('alt', author_name ? 'ORCID ID for ' + author_name : 'ORCID ID');
1824          img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==');
1825          a.append(img);
1826          $(this).append(a);
1827        }
1828      });
1829
1830      // hide elements of author/affiliations grid that have no value
1831      function hide_byline_column(caption) {
1832        $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden');
1833      }
1834
1835      // affiliations
1836      var have_affiliations = false;
1837      for (var i = 0; i<front_matter.authors.length; ++i) {
1838        var author = front_matter.authors[i];
1839        if (author.affiliation !== "&nbsp;") {
1840          have_affiliations = true;
1841          break;
1842        }
1843      }
1844      if (!have_affiliations)
1845        $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden');
1846
1847      // published date
1848      if (!front_matter.publishedDate)
1849        hide_byline_column("Published");
1850
1851      // document object identifier
1852      var doi = $('d-byline').find('h3:contains("DOI")');
1853      var doi_p = doi.next().empty();
1854      if (!front_matter.doi) {
1855        // if we have a citation and valid citationText then link to that
1856        if ($('#citation').length > 0 && front_matter.citationText) {
1857          doi.html('Citation');
1858          $('<a href="#citation"></a>')
1859            .text(front_matter.citationText)
1860            .appendTo(doi_p);
1861        } else {
1862          hide_byline_column("DOI");
1863        }
1864      } else {
1865        $('<a></a>')
1866           .attr('href', "https://doi.org/" + front_matter.doi)
1867           .html(front_matter.doi)
1868           .appendTo(doi_p);
1869      }
1870
1871       // change plural form of authors/affiliations
1872      if (front_matter.authors.length === 1) {
1873        var grid = $('.authors-affiliations');
1874        grid.children('h3:contains("Authors")').text('Author');
1875        grid.children('h3:contains("Affiliations")').text('Affiliation');
1876      }
1877
1878      // remove d-appendix and d-footnote-list local styles
1879      $('d-appendix > style:first-child').remove();
1880      $('d-footnote-list > style:first-child').remove();
1881
1882      // move appendix-bottom entries to the bottom
1883      $('.appendix-bottom').appendTo('d-appendix').children().unwrap();
1884      $('.appendix-bottom').remove();
1885
1886      // hoverable references
1887      $('span.citation[data-cites]').each(function() {
1888        const citeChild = $(this).children()[0]
1889        // Do not process if @xyz has been used without escaping and without bibliography activated
1890        // https://github.com/rstudio/distill/issues/466
1891        if (citeChild === undefined) return true
1892
1893        if (citeChild.nodeName == "D-FOOTNOTE") {
1894          var fn = citeChild
1895          $(this).html(fn.shadowRoot.querySelector("sup"))
1896          $(this).id = fn.id
1897          fn.remove()
1898        }
1899        var refs = $(this).attr('data-cites').split(" ");
1900        var refHtml = refs.map(function(ref) {
1901          // Could use CSS.escape too here, we insure backward compatibility in navigator
1902          return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>";
1903        }).join("\n");
1904        window.tippy(this, {
1905          allowHTML: true,
1906          content: refHtml,
1907          maxWidth: 500,
1908          interactive: true,
1909          interactiveBorder: 10,
1910          theme: 'light-border',
1911          placement: 'bottom-start'
1912        });
1913      });
1914
1915      // fix footnotes in tables (#411)
1916      // replacing broken distill.pub feature
1917      $('table d-footnote').each(function() {
1918        // we replace internal showAtNode methode which is triggered when hovering a footnote
1919        this.hoverBox.showAtNode = function(node) {
1920          // ported from https://github.com/distillpub/template/pull/105/files
1921          calcOffset = function(elem) {
1922              let x = elem.offsetLeft;
1923              let y = elem.offsetTop;
1924              // Traverse upwards until an `absolute` element is found or `elem`
1925              // becomes null.
1926              while (elem = elem.offsetParent && elem.style.position != 'absolute') {
1927                  x += elem.offsetLeft;
1928                  y += elem.offsetTop;
1929              }
1930
1931              return { left: x, top: y };
1932          }
1933          // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
1934          const bbox = node.getBoundingClientRect();
1935          const offset = calcOffset(node);
1936          this.show([offset.left + bbox.width, offset.top + bbox.height]);
1937        }
1938      })
1939
1940      // clear polling timer
1941      clearInterval(tid);
1942
1943      // show body now that everything is ready
1944      on_load_complete();
1945    }
1946
1947    var tid = setInterval(distill_post_process, 50);
1948    distill_post_process();
1949
1950  }
1951
1952  function init_downlevel() {
1953
1954    init_common();
1955
1956     // insert hr after d-title
1957    $('.d-title').after($('<hr class="section-separator"/>'));
1958
1959    // check if we have authors
1960    var front_matter = JSON.parse($("#distill-front-matter").html());
1961    var have_authors = front_matter.authors && front_matter.authors.length > 0;
1962
1963    // manage byline/border
1964    if (!have_authors)
1965      $('.d-byline').remove();
1966    $('.d-byline').after($('<hr class="section-separator"/>'));
1967    $('.d-byline a').remove();
1968
1969    // remove toc
1970    $('.d-contents').remove();
1971
1972    // move appendix elements
1973    $('h1.appendix, h2.appendix').each(function(i, val) {
1974      $(this).changeElementType('h3');
1975    });
1976    $('h3.appendix').each(function(i, val) {
1977      $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix'));
1978    });
1979
1980
1981    // inject headers into references and footnotes
1982    var refs_header = $('<h3></h3>');
1983    refs_header.text('References');
1984    $('#refs').prepend(refs_header);
1985
1986    var footnotes_header = $('<h3></h3');
1987    footnotes_header.text('Footnotes');
1988    $('.footnotes').children('hr').first().replaceWith(footnotes_header);
1989
1990    // move appendix-bottom entries to the bottom
1991    $('.appendix-bottom').appendTo('.d-appendix').children().unwrap();
1992    $('.appendix-bottom').remove();
1993
1994    // remove appendix if it's empty
1995    if ($('.d-appendix').children().length === 0)
1996      $('.d-appendix').remove();
1997
1998    // prepend separator above appendix
1999    $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>'));
2000
2001    // trim code
2002    $('pre>code').each(function(i, val) {
2003      $(this).html($.trim($(this).html()));
2004    });
2005
2006    // move posts-container right before article
2007    $('.posts-container').insertBefore($('.d-article'));
2008
2009    $('body').addClass('downlevel');
2010
2011    on_load_complete();
2012  }
2013
2014
2015  function init_common() {
2016
2017    // jquery plugin to change element types
2018    (function($) {
2019      $.fn.changeElementType = function(newType) {
2020        var attrs = {};
2021
2022        $.each(this[0].attributes, function(idx, attr) {
2023          attrs[attr.nodeName] = attr.nodeValue;
2024        });
2025
2026        this.replaceWith(function() {
2027          return $("<" + newType + "/>", attrs).append($(this).contents());
2028        });
2029      };
2030    })(jQuery);
2031
2032    // prevent underline for linked images
2033    $('a > img').parent().css({'border-bottom' : 'none'});
2034
2035    // mark non-body figures created by knitr chunks as 100% width
2036    $('.layout-chunk').each(function(i, val) {
2037      var figures = $(this).find('img, .html-widget');
2038      // ignore leaflet img layers (#106)
2039      figures = figures.filter(':not(img[class*="leaflet"])')
2040      if ($(this).attr('data-layout') !== "l-body") {
2041        figures.css('width', '100%');
2042      } else {
2043        figures.css('max-width', '100%');
2044        figures.filter("[width]").each(function(i, val) {
2045          var fig = $(this);
2046          fig.css('width', fig.attr('width') + 'px');
2047        });
2048
2049      }
2050    });
2051
2052    // auto-append index.html to post-preview links in file: protocol
2053    // and in rstudio ide preview
2054    $('.post-preview').each(function(i, val) {
2055      if (window.location.protocol === "file:")
2056        $(this).attr('href', $(this).attr('href') + "index.html");
2057    });
2058
2059    // get rid of index.html references in header
2060    if (window.location.protocol !== "file:") {
2061      $('.distill-site-header a[href]').each(function(i,val) {
2062        $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./"));
2063      });
2064    }
2065
2066    // add class to pandoc style tables
2067    $('tr.header').parent('thead').parent('table').addClass('pandoc-table');
2068    $('.kable-table').children('table').addClass('pandoc-table');
2069
2070    // add figcaption style to table captions
2071    $('caption').parent('table').addClass("figcaption");
2072
2073    // initialize posts list
2074    if (window.init_posts_list)
2075      window.init_posts_list();
2076
2077    // implmement disqus comment link
2078    $('.disqus-comment-count').click(function() {
2079      window.headroom_prevent_pin = true;
2080      $('#disqus_thread').toggleClass('hidden');
2081      if (!$('#disqus_thread').hasClass('hidden')) {
2082        var offset = $(this).offset();
2083        $(window).resize();
2084        $('html, body').animate({
2085          scrollTop: offset.top - 35
2086        });
2087      }
2088    });
2089  }
2090
2091  document.addEventListener('DOMContentLoaded', function() {
2092    if (is_downlevel_browser())
2093      init_downlevel();
2094    else
2095      window.addEventListener('WebComponentsReady', init_distill);
2096  });
2097
2098  </script>
2098
2099
2100  <style type="text/css">
2101  /* base variables */
2102
2103  /* Edit the CSS properties in this file to create a custom
2104     Distill theme. Only edit values in the right column
2105     for each row; values shown are the CSS defaults.
2106     To return any property to the default,
2107     you may set its value to: unset
2108     All rows must end with a semi-colon.                      */
2109
2110  /* Optional: embed custom fonts here with `@import`          */
2111  /* This must remain at the top of this file.                 */
2112
2113
2114
2115  html {
2116    /*-- Main font sizes --*/
2117    --title-size:      50px;
2118    --body-size:       1.06rem;
2119    --code-size:       14px;
2120    --aside-size:      12px;
2121    --fig-cap-size:    13px;
2122    /*-- Main font colors --*/
2123    --title-color:     #000000;
2124    --header-color:    rgba(0, 0, 0, 0.8);
2125    --body-color:      rgba(0, 0, 0, 0.8);
2126    --aside-color:     rgba(0, 0, 0, 0.6);
2127    --fig-cap-color:   rgba(0, 0, 0, 0.6);
2128    /*-- Specify custom fonts ~~~ must be imported above   --*/
2129    --heading-font:    sans-serif;
2130    --mono-font:       monospace;
2131    --body-font:       sans-serif;
2132    --navbar-font:     sans-serif;  /* websites + blogs only */
2133  }
2134
2135  /*-- ARTICLE METADATA --*/
2136  d-byline {
2137    --heading-size:    0.6rem;
2138    --heading-color:   rgba(0, 0, 0, 0.5);
2139    --body-size:       0.8rem;
2140    --body-color:      rgba(0, 0, 0, 0.8);
2141  }
2142
2143  /*-- ARTICLE TABLE OF CONTENTS --*/
2144  .d-contents {
2145    --heading-size:    18px;
2146    --contents-size:   13px;
2147  }
2148
2149  /*-- ARTICLE APPENDIX --*/
2150  d-appendix {
2151    --heading-size:    15px;
2152    --heading-color:   rgba(0, 0, 0, 0.65);
2153    --text-size:       0.8em;
2154    --text-color:      rgba(0, 0, 0, 0.5);
2155  }
2156
2157  /*-- WEBSITE HEADER + FOOTER --*/
2158  /* These properties only apply to Distill sites and blogs  */
2159
2160  .distill-site-header {
2161    --title-size:       18px;
2162    --text-color:       rgba(255, 255, 255, 0.8);
2163    --text-size:        15px;
2164    --hover-color:      white;
2165    --bkgd-color:       #0F2E3D;
2166  }
2167
2168  .distill-site-footer {
2169    --text-color:       rgba(255, 255, 255, 0.8);
2170    --text-size:        15px;
2171    --hover-color:      white;
2172    --bkgd-color:       #0F2E3D;
2173  }
2174
2175  /*-- Additional custom styles --*/
2176  /* Add any additional CSS rules below                      */
2177  </style>
2178  <style type="text/css">
2179  /* base variables */
2180
2181  @import url('https://fonts.googleapis.com/css2?family=Inconsolata&family=Open+Sans&family=M+PLUS+1p&display=swap');
2182
2183  html {
2184    /*-- Main font sizes --*/
2185    --title-size:      18px;
2186    --body-size:       0.85rem;
2187    --code-size:       14px;
2188    --aside-size:      12px;
2189    --fig-cap-size:    12px;
2190    /*-- Main font colors --*/
2191    --title-color:     #02141c;
2192    --header-color:    #02141c;
2193    --body-color:      #02141c;
2194    --aside-color:     #02141c;
2195    --fig-cap-color:   #02141c;
2196    /*-- Specify custom fonts ~~~ must be imported above   --*/
2197    --heading-font:    'Open Sans', 'M PLUS 1p', sans-serif;
2198    --mono-font:       Inconsolata, monospace;
2199    --body-font:       'Open Sans', 'M PLUS 1p', sans-serif;
2200    --navbar-font:     'Open Sans', 'M PLUS 1p', sans-serif;  /* websites + blogs only */
2201  }
2202
2203  /*-- ARTICLE METADATA --*/
2204  d-byline {
2205    --heading-size:    0.6rem;
2206    --heading-color:   #02141c;
2207    --body-size:       0.8rem;
2208    --body-color:      #02141c;
2209  }
2210
2211  /*-- ARTICLE TABLE OF CONTENTS --*/
2212  .d-contents {
2213    --heading-size:    14px;
2214    --contents-size:   12px;
2215  }
2216
2217  /*-- ARTICLE APPENDIX --*/
2218  d-appendix {
2219    --heading-size:    14px;
2220    --heading-color:   #02141c;
2221    --text-size:       0.8em;
2222    --text-color:      #02141c;
2223  }
2224
2225  /*-- WEBSITE HEADER + FOOTER --*/
2226  /* These properties only apply to Distill sites and blogs  */
2227
2228  .distill-site-header {
2229    --title-size:       16px;
2230    --text-color:       #02141c;
2231    --text-size:        13px;
2232    --hover-color:      #dd424c;
2233    --bkgd-color:       rgba(250, 250, 251, 0.8);
2234  }
2235
2236  .distill-site-footer {
2237    --text-color:       #02141c;
2238    --text-size:        11px;
2239    --hover-color:      #dd424c;
2240    --bkgd-color:       #ffffff;
2241  }
2242
2243  /*-- Additional custom styles --*/
2244  /* Add any additional CSS rules below                      */
2245  code {
2246    font-family: Inconsolata, monospace;
2247  }</style>
2248  <style type="text/css">
2249  /* base style */
2250
2251  /* FONT FAMILIES */
2252
2253  :root {
2254    --heading-default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
2255    --mono-default: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
2256    --body-default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
2257  }
2258
2259  body,
2260  .posts-list .post-preview p,
2261  .posts-list .description p {
2262    font-family: var(--body-font), var(--body-default);
2263  }
2264
2265  h1, h2, h3, h4, h5, h6,
2266  .posts-list .post-preview h2,
2267  .posts-list .description h2 {
2268    font-family: var(--heading-font), var(--heading-default);
2269  }
2270
2271  d-article div.sourceCode code,
2272  d-article pre code {
2273    font-family: var(--mono-font), var(--mono-default);
2274  }
2275
2276
2277  /*-- TITLE --*/
2278  d-title h1,
2279  .posts-list > h1 {
2280    color: var(--title-color, black);
2281  }
2282
2283  d-title h1 {
2284    font-size: var(--title-size, 50px);
2285  }
2286
2287  /*-- HEADERS --*/
2288  d-article h1,
2289  d-article h2,
2290  d-article h3,
2291  d-article h4,
2292  d-article h5,
2293  d-article h6 {
2294    color: var(--header-color, rgba(0, 0, 0, 0.8));
2295  }
2296
2297  /*-- BODY --*/
2298  d-article > p,  /* only text inside of <p> tags */
2299  d-article > ul, /* lists */
2300  d-article > ol {
2301    color: var(--body-color, rgba(0, 0, 0, 0.8));
2302    font-size: var(--body-size, 1.06rem);
2303  }
2304
2305
2306  /*-- CODE --*/
2307  d-article div.sourceCode code,
2308  d-article pre code {
2309    font-size: var(--code-size, 14px);
2310  }
2311
2312  /*-- ASIDE --*/
2313  d-article aside {
2314    font-size: var(--aside-size, 12px);
2315    color: var(--aside-color, rgba(0, 0, 0, 0.6));
2316  }
2317
2318  /*-- FIGURE CAPTIONS --*/
2319  figure .caption,
2320  figure figcaption,
2321  .figure .caption {
2322    font-size: var(--fig-cap-size, 13px);
2323    color: var(--fig-cap-color, rgba(0, 0, 0, 0.6));
2324  }
2325
2326  /*-- METADATA --*/
2327  d-byline h3 {
2328    font-size: var(--heading-size, 0.6rem);
2329    color: var(--heading-color, rgba(0, 0, 0, 0.5));
2330  }
2331
2332  d-byline {
2333    font-size: var(--body-size, 0.8rem);
2334    color: var(--body-color, rgba(0, 0, 0, 0.8));
2335  }
2336
2337  d-byline a,
2338  d-article d-byline a {
2339    color: var(--body-color, rgba(0, 0, 0, 0.8));
2340  }
2341
2342  /*-- TABLE OF CONTENTS --*/
2343  .d-contents nav h3 {
2344    font-size: var(--heading-size, 18px);
2345  }
2346
2347  .d-contents nav a {
2348    font-size: var(--contents-size, 13px);
2349  }
2350
2351  /*-- APPENDIX --*/
2352  d-appendix h3 {
2353    font-size: var(--heading-size, 15px);
2354    color: var(--heading-color, rgba(0, 0, 0, 0.65));
2355  }
2356
2357  d-appendix {
2358    font-size: var(--text-size, 0.8em);
2359    color: var(--text-color, rgba(0, 0, 0, 0.5));
2360  }
2361
2362  d-appendix d-footnote-list a.footnote-backlink {
2363    color: var(--text-color, rgba(0, 0, 0, 0.5));
2364  }
2365
2366  /*-- WEBSITE HEADER + FOOTER --*/
2367  .distill-site-header .title {
2368    font-size: var(--title-size, 18px);
2369    font-family: var(--navbar-font), var(--heading-default);
2370  }
2371
2372  .distill-site-header a,
2373  .nav-dropdown .nav-dropbtn {
2374    font-family: var(--navbar-font), var(--heading-default);
2375  }
2376
2377  .nav-dropdown .nav-dropbtn {
2378    color: var(--text-color, rgba(255, 255, 255, 0.8));
2379    font-size: var(--text-size, 15px);
2380  }
2381
2382  .distill-site-header a:hover,
2383  .nav-dropdown:hover .nav-dropbtn {
2384    color: var(--hover-color, white);
2385  }
2386
2387  .distill-site-header {
2388    font-size: var(--text-size, 15px);
2389    color: var(--text-color, rgba(255, 255, 255, 0.8));
2390    background-color: var(--bkgd-color, #0F2E3D);
2391  }
2392
2393  .distill-site-footer {
2394    font-size: var(--text-size, 15px);
2395    color: var(--text-color, rgba(255, 255, 255, 0.8));
2396    background-color: var(--bkgd-color, #0F2E3D);
2397  }
2398
2399  .distill-site-footer a:hover {
2400    color: var(--hover-color, white);
2401  }</style>
2402  <!--/radix_placeholder_distill-->
2403  
2403<script src="site_libs/header-attrs-2.31/header-attrs.js"></script>
2403
2404  
2404<script src="site_libs/popper-2.6.0/popper.min.js"></script>
2404
2405  <link href="site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" />
2406  <link href="site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" />
2407  
2407<script src="site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2407
2408  
2408<script src="site_libs/anchor-4.2.2/anchor.min.js"></script>
2408
2409  
2409<script src="site_libs/bowser-1.9.3/bowser.min.js"></script>
2409
2410  
2410<script src="site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2410
2411  
2411<script src="site_libs/distill-2.2.21/template.v2.js"></script>
2411
2412  <!--radix_placeholder_site_in_header-->
2413  <!--/radix_placeholder_site_in_header-->
2414
2415  <link rel="stylesheet" href="index.css" type="text/css"/>
2416
2417</head>
2418
2419<body>
2420
2421<!--radix_placeholder_front_matter-->
2422
2423<script id="distill-front-matter" type="text/json">
2424{"title":"Open source R tools","authors":[]}
2425</script>
2425
2426
2427<!--/radix_placeholder_front_matter-->
2428<!--radix_placeholder_navigation_before_body-->
2429<header class="header header--fixed" role="banner">
2430<nav class="distill-site-nav distill-site-header">
2431<div class="nav-left">
2432<a class="logo" href="https://www.shikokuchuo.net/">
2433<img src="favicon.png" alt="Logo"/>
2434</a>
2435<a href="index.html" class="title">shikokuchuo{net}</a>
2436<input id="distill-search" class="nav-search hidden" type="text" placeholder="Search..."/>
2437</div>
2438<div class="nav-right">
2439<a href="https://shikokuchuo.net/ichimoku/" aria-label="r-ichimoku">
2440<i class="fa fa-mountain" aria-hidden="true"></i>
2441</a>
2442<a href="https://nanonext.r-lib.org/" aria-label="r-nanonext">
2443<i class="fas fa-chevron-right" aria-hidden="true"></i>
2444</a>
2445<a href="https://mirai.r-lib.org/" aria-label="r-mirai">
2446<i class="fa fa-fan" aria-hidden="true"></i>
2447</a>
2448<a href="https://shikokuchuo.net/secretbase/" aria-label="r-secretbase">
2449<i class="fa fa-key" aria-hidden="true"></i>
2450</a>
2451<a href="https://r-lib.github.io/later/" aria-label="r-later">
2452<i class="fa fa-clock" aria-hidden="true"></i>
2453</a>
2454<a href="https://watcher.r-lib.org/" aria-label="r-watcher">
2455<i class="fa fa-eye" aria-hidden="true"></i>
2456</a>
2457<a href="https://posit-dev.github.io/mcptools/" aria-label="r-mcptools">
2458<i class="fas fa-network-wired" aria-hidden="true"></i>
2459</a>
2460<a href="https://posit-dev.github.io/automerge-r/" aria-label="r-automerge">
2461<i class="fa fa-code-merge" aria-hidden="true"></i>
2462</a>
2463<a href="https://github.com/quarto-dev/q2" aria-label="quarto2">
2464<i class="fa fa-book-open" aria-hidden="true"></i>
2465</a>
2466<a href="https://shikokuchuo.net/mori/" aria-label="mori">
2467<i class="fa fa-tree" aria-hidden="true"></i>
2468</a>
2469<div class="nav-dropdown">
2470<button class="nav-dropbtn">
2471talks
2472 
2473<span class="down-arrow">&#x25BE;</span>
2474</button>
2475<div class="nav-dropdown-content">
2476<a href="https://shikokuchuo.net/user2026/">useR! 2026</a>
2477<a href="https://japanr.connpass.com/event/374714/">Japan R 2025 (Keynote)</a>
2478<a href="https://shikokuchuo.net/sip2025/">Shiny in Production 2025</a>
2479<a href="https://shikokuchuo-posit2025.share.connect.posit.cloud/">posit::conf(2025)</a>
2480<a href="https://shikokuchuo.net/user2025/">useR! 2025</a>
2481<a href="https://shikokuchuo.net/shinyconf2025/">ShinyConf 2025</a>
2482<a href="https://shikokuchuo.net/posit2024/">posit::conf(2024)</a>
2483<a href="https://shikokuchuo.net/user2024-conference/">useR! 2024</a>
2484<a href="https://shikokuchuo.net/satRdays-London-2024/">SatRdays London 2024</a>
2485<a href="https://shikokuchuo.net/user2022-conference/">useR! 2022</a>
2486</div>
2487</div>
2488<a href="https://shikokuchuo.net/" aria-label="shikokuchuo{net}">
2489<i class="fas fa-cube" aria-hidden="true"></i>
2490</a>
2491<a href="javascript:void(0);" class="nav-toggle">&#9776;</a>
2492</div>
2493</nav>
2494</header>
2495<!--/radix_placeholder_navigation_before_body-->
2496<!--radix_placeholder_site_before_body-->
2497<!--/radix_placeholder_site_before_body-->
2498
2499<div class="d-title">
2500<h1>Open source R tools</h1>
2501
2502<!--radix_placeholder_categories-->
2503<!--/radix_placeholder_categories-->
2504
2505</div>
2506
2507
2508<div class="d-article">
2509<div class="l-screen">
2510<p><img alt="Dawn over Shikokuchuo, from Mishima Park" src="img/SKC.jpg" /></p>
2511</div>
2512<div class="layout-chunk" data-layout="l-body">
2513<pre><code>Welcome to Shikokuchuo. Use the navbar for projects, search box for articles.</code></pre>
2514<div></div>
2515</div>
2516<div class="sourceCode" id="cb2"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
2517<!--radix_placeholder_article_footer-->
2518<!--/radix_placeholder_article_footer-->
2519</div>
2520
2521<div class="d-appendix">
2522</div>
2523
2524
2525<!--radix_placeholder_site_after_body-->
2526<!--/radix_placeholder_site_after_body-->
2527<!--radix_placeholder_appendices-->
2528<div class="appendix-bottom"></div>
2529<!--/radix_placeholder_appendices-->
2530<!--radix_placeholder_navigation_after_body-->
2531<div class="distill-site-nav distill-site-footer">
2532<p>Copyright (C) 2021-2026 The creators of shikokuchuo.net. All rights
2533reserved.<br /> 注意:shikokuchuo.net
2534は四国中央市役所と関係がありません。</p>
2535</div>
2536<!--/radix_placeholder_navigation_after_body-->
2537
2538
2539</body>
2540
2541</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.