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>Yingying Zhang: Research</title> 93 94 95 96 97 <!-- https://developers.facebook.com/docs/sharing/webmasters#markup --> 98 <meta property="og:title" content="Yingying Zhang: Research"/> 99 <meta property="og:type" content="article"/> 100 <meta property="og:locale" content="en_US"/> 101 <meta property="og:site_name" content="Yingying Zhang"/> 102 103 <!-- https://dev.twitter.com/cards/types/summary --> 104 <meta property="twitter:card" content="summary"/> 105 <meta property="twitter:title" content="Yingying Zhang: Research"/> 106 107 <!--/radix_placeholder_meta_tags--> 108 <!--radix_placeholder_rmarkdown_metadata--> 109 110
110<script type="text/json" id="radix-rmarkdown-metadata"> 111 {"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","output"]}},"value":[{"type":"character","attributes":{},"value":["Research"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained","css"]}},"value":[{"type":"logical","attributes":{},"value":[true]},{"type":"character","attributes":{},"value":["styles.css"]}]}]}]} 112 </script>
112 113 <!--/radix_placeholder_rmarkdown_metadata--> 114 <!--radix_placeholder_navigation_in_header--> 115 <meta name="distill:offset" content=""/> 116 117
117<script type="application/javascript"> 118 119 window.headroom_prevent_pin = false; 120 121 window.document.addEventListener("DOMContentLoaded", function (event) { 122 123 // initialize headroom for banner 124 var header = $('header').get(0); 125 var headerHeight = header.offsetHeight; 126 var headroom = new Headroom(header, { 127 tolerance: 5, 128 onPin : function() { 129 if (window.headroom_prevent_pin) { 130 window.headroom_prevent_pin = false; 131 headroom.unpin(); 132 } 133 } 134 }); 135 headroom.init(); 136 if(window.location.hash) 137 headroom.unpin(); 138 $(header).addClass('headroom--transition'); 139 140 // offset scroll location for banner on hash change 141 // (see: https://github.com/WickyNilliams/headroom.js/issues/38) 142 window.addEventListener("hashchange", function(event) { 143 window.scrollTo(0, window.pageYOffset - (headerHeight + 25)); 144 }); 145 146 // responsive menu 147 $('.distill-site-header').each(function(i, val) { 148 var topnav = $(this); 149 var toggle = topnav.find('.nav-toggle'); 150 toggle.on('click', function() { 151 topnav.toggleClass('responsive'); 152 }); 153 }); 154 155 // nav dropdowns 156 $('.nav-dropbtn').click(function(e) { 157 $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active'); 158 $(this).parent().siblings('.nav-dropdown') 159 .children('.nav-dropdown-content').removeClass('nav-dropdown-active'); 160 }); 161 $("body").click(function(e){ 162 $('.nav-dropdown-content').removeClass('nav-dropdown-active'); 163 }); 164 $(".nav-dropdown").click(function(e){ 165 e.stopPropagation(); 166 }); 167 }); 168 </script>
168 169 170 <style type="text/css"> 171 172 /* Theme (user-documented overrideables for nav appearance) */ 173 174 .distill-site-nav { 175 color: rgba(255, 255, 255, 0.8); 176 background-color: #0F2E3D; 177 font-size: 15px; 178 font-weight: 300; 179 } 180 181 .distill-site-nav a { 182 color: inherit; 183 text-decoration: none; 184 } 185 186 .distill-site-nav a:hover { 187 color: white; 188 } 189 190 @media print { 191 .distill-site-nav { 192 display: none; 193 } 194 } 195 196 .distill-site-header { 197 198 } 199 200 .distill-site-footer { 201 202 } 203 204 205 /* Site Header */ 206 207 .distill-site-header { 208 width: 100%; 209 box-sizing: border-box; 210 z-index: 3; 211 } 212 213 .distill-site-header .nav-left { 214 display: inline-block; 215 margin-left: 8px; 216 } 217 218 @media screen and (max-width: 768px) { 219 .distill-site-header .nav-left { 220 margin-left: 0; 221 } 222 } 223 224 225 .distill-site-header .nav-right { 226 float: right; 227 margin-right: 8px; 228 } 229 230 .distill-site-header a, 231 .distill-site-header .title { 232 display: inline-block; 233 text-align: center; 234 padding: 14px 10px 14px 10px; 235 } 236 237 .distill-site-header .title { 238 font-size: 18px; 239 min-width: 150px; 240 } 241 242 .distill-site-header .logo { 243 padding: 0; 244 } 245 246 .distill-site-header .logo img { 247 display: none; 248 max-height: 20px; 249 width: auto; 250 margin-bottom: -4px; 251 } 252 253 .distill-site-header .nav-image img { 254 max-height: 18px; 255 width: auto; 256 display: inline-block; 257 margin-bottom: -3px; 258 } 259 260 261 262 @media screen and (min-width: 1000px) { 263 .distill-site-header .logo img { 264 display: inline-block; 265 } 266 .distill-site-header .nav-left { 267 margin-left: 20px; 268 } 269 .distill-site-header .nav-right { 270 margin-right: 20px; 271 } 272 .distill-site-header .title { 273 padding-left: 12px; 274 } 275 } 276 277 278 .distill-site-header .nav-toggle { 279 display: none; 280 } 281 282 .nav-dropdown { 283 display: inline-block; 284 position: relative; 285 } 286 287 .nav-dropdown .nav-dropbtn { 288 border: none; 289 outline: none; 290 color: rgba(255, 255, 255, 0.8); 291 padding: 16px 10px; 292 background-color: transparent; 293 font-family: inherit; 294 font-size: inherit; 295 font-weight: inherit; 296 margin: 0;
297 margin-top: 1px; 298 z-index: 2; 299 } 300 301 .nav-dropdown-content { 302 display: none; 303 position: absolute; 304 background-color: white; 305 min-width: 200px; 306 border: 1px solid rgba(0,0,0,0.15); 307 border-radius: 4px; 308 box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1); 309 z-index: 1; 310 margin-top: 2px; 311 white-space: nowrap; 312 padding-top: 4px; 313 padding-bottom: 4px; 314 } 315 316 .nav-dropdown-content hr { 317 margin-top: 4px; 318 margin-bottom: 4px; 319 border: none; 320 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 321 } 322 323 .nav-dropdown-active { 324 display: block; 325 } 326 327 .nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header { 328 color: black; 329 padding: 6px 24px; 330 text-decoration: none; 331 display: block; 332 text-align: left; 333 } 334 335 .nav-dropdown-content .nav-dropdown-header { 336 display: block; 337 padding: 5px 24px; 338 padding-bottom: 0; 339 text-transform: uppercase; 340 font-size: 14px; 341 color: #999999; 342 white-space: nowrap; 343 } 344 345 .nav-dropdown:hover .nav-dropbtn { 346 color: white; 347 } 348 349 .nav-dropdown-content a:hover { 350 background-color: #ddd; 351 color: black; 352 } 353 354 .nav-right .nav-dropdown-content { 355 margin-left: -45%; 356 right: 0; 357 } 358 359 @media screen and (max-width: 768px) { 360 .distill-site-header a, .distill-site-header .nav-dropdown {display: none;} 361 .distill-site-header a.nav-toggle { 362 float: right; 363 display: block; 364 } 365 .distill-site-header .title { 366 margin-left: 0; 367 } 368 .distill-site-header .nav-right { 369 margin-right: 0; 370 } 371 .distill-site-header { 372 overflow: hidden; 373 } 374 .nav-right .nav-dropdown-content { 375 margin-left: 0; 376 } 377 } 378 379 380 @media screen and (max-width: 768px) { 381 .distill-site-header.responsive {position: relative; min-height: 500px; } 382 .distill-site-header.responsive a.nav-toggle { 383 position: absolute; 384 right: 0; 385 top: 0; 386 } 387 .distill-site-header.responsive a, 388 .distill-site-header.responsive .nav-dropdown { 389 display: block; 390 text-align: left; 391 } 392 .distill-site-header.responsive .nav-left, 393 .distill-site-header.responsive .nav-right { 394 width: 100%; 395 } 396 .distill-site-header.responsive .nav-dropdown {float: none;} 397 .distill-site-header.responsive .nav-dropdown-content {position: relative;} 398 .distill-site-header.responsive .nav-dropdown .nav-dropbtn { 399 display: block; 400 width: 100%; 401 text-align: left; 402 } 403 } 404 405 /* Site Footer */ 406 407 .distill-site-footer { 408 width: 100%; 409 overflow: hidden; 410 box-sizing: border-box; 411 z-index: 3; 412 margin-top: 30px; 413 padding-top: 30px; 414 padding-bottom: 30px; 415 text-align: center; 416 } 417 418 /* Headroom */ 419 420 d-title { 421 padding-top: 6rem; 422 } 423 424 @media print { 425 d-title { 426 padding-top: 4rem; 427 } 428 } 429 430 .headroom { 431 z-index: 1000; 432 position: fixed; 433 top: 0; 434 left: 0; 435 right: 0; 436 } 437 438 .headroom--transition { 439 transition: all .4s ease-in-out; 440 } 441 442 .headroom--unpinned { 443 top: -100px; 444 } 445 446 .headroom--pinned { 447 top: 0; 448 } 449 450 /* adjust viewport for navbar height */ 451 /* helps vertically center bootstrap (non-distill) content */ 452 .min-vh-100 { 453 min-height: calc(100vh - 100px) !important; 454 } 455 456 </style> 457 458
458<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
458 459 <link href="site_libs/font-awesome-6.5.2/css/all.min.css" rel="stylesheet"/> 460 <link href="site_libs/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet"/> 461
461<script src="site_libs/headroom-0.9.4/headroom.min.js"></script>
461 462
462<script src="site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
462 463
463<script src="site_libs/fuse-6.4.1/fuse.min.js"></script>
463 464 465
465<script type="application/javascript"> 466 467 function getMeta(metaName) { 468 var metas = document.getElementsByTagName('meta'); 469 for (let i = 0; i < metas.length; i++) { 470 if (metas[i].getAttribute('name') === metaName) { 471 return metas[i].getAttribute('content'); 472 } 473 } 474 return ''; 475 } 476 477 function offsetURL(url) { 478 var offset = getMeta('distill:offset'); 479 return offset ? offset + '/' + url : url; 480 } 481 482 function createFuseIndex() { 483 484 // create fuse index 485 var options = { 486 keys: [ 487 { name: 'title', weight: 20 }, 488 { name: 'categories', weight: 15 }, 489 { name: 'description', weight: 10 }, 490 { name: 'contents', weight: 5 }, 491 ], 492 ignoreLocation: true, 493 threshold: 0 494 }; 495 var fuse = new window.Fuse([], options); 496 497 // fetch the main search.json 498 return fetch(offsetURL('search.json')) 499 .then(function(response) { 500 if (response.status == 200) { 501 return response.json().then(function(json) { 502 // index main articles 503 json.articles.forEach(function(article) { 504 fuse.add(article); 505 }); 506 // download collections and index their articles 507 return Promise.all(json.collections.map(function(collection) { 508 return fetch(offsetURL(collection)).then(function(response) { 509 if (response.status === 200) { 510 return response.json().then(function(articles) { 511 articles.forEach(function(article) { 512 fuse.add(article); 513 }); 514 }) 515 } else { 516 return Promise.reject( 517 new Error('Unexpected status from search index request: ' + 518 response.status) 519 ); 520 } 521 }); 522 })).then(function() { 523 return fuse; 524 }); 525 }); 526 527 } else { 528 return Promise.reject( 529 new Error('Unexpected status from search index request: ' + 530 response.status) 531 ); 532 } 533 }); 534 } 535 536 window.document.addEventListener("DOMContentLoaded", function (event) { 537 538 // get search element (bail if we don't have one) 539 var searchEl = window.document.getElementById('distill-search'); 540 if (!searchEl) 541 return; 542 543 createFuseIndex() 544 .then(function(fuse) { 545 546 // make search box visible 547 searchEl.classList.remove('hidden'); 548 549 // initialize autocomplete 550 var options = { 551 autoselect: true, 552 hint: false, 553 minLength: 2, 554 }; 555 window.autocomplete(searchEl, options, [{ 556 source: function(query, callback) { 557 const searchOptions = { 558 isCaseSensitive: false, 559 shouldSort: true, 560 minMatchCharLength: 2, 561 limit: 10, 562 }; 563 var results = fuse.search(query, searchOptions); 564 callback(results 565 .map(function(result) { return result.item; }) 566 ); 567 }, 568 templates: { 569 suggestion: function(suggestion) { 570 var img = suggestion.preview && Object.keys(suggestion.preview).length > 0 571 ? `<img src="${offsetURL(suggestion.preview)}"</img>` 572 : ''; 573 var html = ` 574 <div class="search-item"> 575 <h3>${suggestion.title}</h3> 576 <div class="search-item-description"> 577 ${suggestion.description || ''} 578 </div> 579 <div class="search-item-preview"> 580 ${img} 581 </div> 582 </div> 583 `; 584 return html; 585 } 586 } 587 }]).on('autocomplete:selected', function(event, suggestion) { 588 window.location.href = offsetURL(suggestion.path); 589 }); 590 // remove inline display style on autocompleter (we want to 591 // manage responsive display via css) 592 $('.algolia-autocomplete').css("display", ""); 593 }) 594 .catch(function(error) { 595 console.log(error); 596 }); 597 598 }); 599 600 </script>
600 601 602 <style type="text/css"> 603 604 .nav-search { 605 font-size: x-small; 606 } 607 608 /* Algolioa Autocomplete */ 609 610 .algolia-autocomplete { 611 display: inline-block; 612 margin-left: 10px; 613 vertical-align: sub; 614 background-color: white; 615 color: black; 616 padding: 6px; 617 padding-top: 8px; 618 padding-bottom: 0; 619 border-radius: 6px; 620 border: 1px #0F2E3D solid; 621 width: 180px; 622 } 623 624 625 @media screen and (max-width: 768px) { 626 .distill-site-nav .algolia-autocomplete { 627 display: none; 628 visibility: hidden; 629 } 630 .distill-site-nav.responsive .algolia-autocomplete { 631 display: inline-block; 632 visibility: visible; 633 } 634 .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu { 635 margin-left: 0; 636 width: 400px; 637 max-height: 400px; 638 } 639 } 640 641 .algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint { 642 width: 90%; 643 outline: none; 644 border: none; 645 } 646 647 .algolia-autocomplete .aa-hint { 648 color: #999; 649 } 650 .algolia-autocomplete .aa-dropdown-menu { 651 width: 550px; 652 max-height: 70vh; 653 overflow-x: visible; 654 overflow-y: scroll; 655 padding: 5px; 656 margin-top: 3px; 657 margin-left: -150px; 658 background-color: #fff; 659 border-radius: 5px; 660 border: 1px solid #999; 661 border-top: none; 662 } 663 664 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion { 665 cursor: pointer; 666 padding: 5px 4px; 667 border-bottom: 1px solid #eee; 668 } 669 670 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type { 671 border-bottom: none; 672 margin-bottom: 2px; 673 } 674 675 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item { 676 overflow: hidden; 677 font-size: 0.8em; 678 line-height: 1.4em; 679 } 680 681 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 { 682 font-size: 1rem; 683 margin-block-start: 0; 684 margin-block-end: 5px; 685 } 686 687 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description { 688 display: inline-block; 689 overflow: hidden; 690 height: 2.8em; 691 width: 80%; 692 margin-right: 4%; 693 } 694 695 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview { 696 display: inline-block; 697 width: 15%; 698 } 699 700 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img { 701 height: 3em; 702 width: auto; 703 display: none; 704 } 705 706 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] { 707 display: initial; 708 } 709 710 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor { 711 background-color: #eee; 712 } 713 .algolia-autocomplete .aa-dropdown-menu .aa-suggestion em { 714 font-weight: bold; 715 font-style: normal; 716 } 717 718 </style> 719 720 721 <!--/radix_placeholder_navigation_in_header--> 722 <!--radix_placeholder_distill--> 723 724 <style type="text/css"> 725 726 body { 727 background-color: white; 728 } 729 730 .pandoc-table { 731 width: 100%; 732 } 733 734 .pandoc-table>caption { 735 margin-bottom: 10px; 736 } 737 738 .pandoc-table th:not([align]) { 739 text-align: left; 740 } 741 742 .pagedtable-footer { 743 font-size: 15px; 744 } 745 746 d-byline .byline { 747 grid-template-columns: 2fr 2fr; 748 } 749 750 d-byline .byline h3 { 751 margin-block-start: 1.5em; 752 } 753 754 d-byline .byline .authors-affiliations h3 { 755 margin-block-start: 0.5em; 756 } 757 758 .authors-affiliations .orcid-id { 759 width: 16px; 760 height:16px; 761 margin-left: 4px; 762 margin-right: 4px; 763 vertical-align: middle; 764 padding-bottom: 2px; 765 } 766 767 d-title .dt-tags { 768 margin-top: 1em; 769 grid-column: text; 770 } 771 772 .dt-tags .dt-tag { 773 text-decoration: none; 774 display: inline-block; 775 color: rgba(0,0,0,0.6); 776 padding: 0em 0.4em; 777 margin-right: 0.5em; 778 margin-bottom: 0.4em; 779 font-size: 70%; 780 border: 1px solid rgba(0,0,0,0.2); 781 border-radius: 3px; 782 text-transform: uppercase; 783 font-weight: 500; 784 } 785 786 d-article table.gt_table td, 787 d-article table.gt_table th { 788 border-bottom: none; 789 font-size: 100%; 790 } 791 792 .html-widget { 793 margin-bottom: 2.0em; 794 } 795 796 .l-screen-inset { 797 padding-right: 16px; 798 } 799 800 .l-screen .caption { 801 margin-left: 10px; 802 } 803 804 .shaded { 805 background: rgb(247, 247, 247); 806 padding-top: 20px; 807 padding-bottom: 20px; 808 border-top: 1px solid rgba(0, 0, 0, 0.1); 809 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 810 } 811 812 .shaded .html-widget { 813 margin-bottom: 0; 814 border: 1px solid rgba(0, 0, 0, 0.1); 815 } 816 817 .shaded .shaded-content { 818 background: white; 819 } 820 821 .text-output { 822 margin-top: 0; 823 line-height: 1.5em; 824 } 825 826 .hidden { 827 display: none !important; 828 } 829 830 hr.section-separator { 831 border: none; 832 border-top: 1px solid rgba(0, 0, 0, 0.1); 833 margin: 0px; 834 } 835 836 837 d-byline { 838 border-top: none; 839 } 840 841 d-article { 842 padding-top: 2.5rem; 843 padding-bottom: 30px; 844 border-top: none; 845 } 846 847 d-appendix { 848 padding-top: 30px; 849 } 850 851 d-article>p>img { 852 width: 100%; 853 } 854 855 d-article h2 { 856 margin: 1rem 0 1.5rem 0; 857 } 858 859 d-article h3 { 860 margin-top: 1.5rem; 861 } 862 863 d-article iframe { 864 border: 1px solid rgba(0, 0, 0, 0.1); 865 margin-bottom: 2.0em; 866 width: 100%; 867 } 868 869 /* Tweak code blocks */ 870 871 d-article div.sourceCode code, 872 d-article pre code {
873 font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 874 } 875 876 d-article pre, 877 d-article div.sourceCode, 878 d-article div.sourceCode pre { 879 overflow: auto; 880 } 881 882 d-article div.sourceCode { 883 background-color: white; 884 } 885 886 d-article div.sourceCode pre { 887 padding-left: 10px; 888 font-size: 12px; 889 border-left: 2px solid rgba(0,0,0,0.1); 890 } 891 892 d-article pre { 893 font-size: 12px; 894 color: black; 895 background: none; 896 margin-top: 0; 897 text-align: left; 898 white-space: pre; 899 word-spacing: normal; 900 word-break: normal; 901 word-wrap: normal; 902 line-height: 1.5; 903 904 -moz-tab-size: 4; 905 -o-tab-size: 4; 906 tab-size: 4; 907 908 -webkit-hyphens: none; 909 -moz-hyphens: none; 910 -ms-hyphens: none; 911 hyphens: none; 912 } 913 914 d-article pre a { 915 border-bottom: none; 916 } 917 918 d-article pre a:hover { 919 border-bottom: none; 920 text-decoration: underline; 921 } 922 923 d-article details { 924 grid-column: text; 925 margin-bottom: 0.8em; 926 } 927 928 @media(min-width: 768px) { 929 930 d-article pre, 931 d-article div.sourceCode, 932 d-article div.sourceCode pre { 933 overflow: visible !important; 934 } 935 936 d-article div.sourceCode pre { 937 padding-left: 18px; 938 font-size: 14px; 939 } 940 941 /* tweak for Pandoc numbered line within distill */ 942 d-article pre.numberSource code > span { 943 left: -2em; 944 } 945 946 d-article pre { 947 font-size: 14px; 948 } 949 950 } 951 952 figure img.external { 953 background: white; 954 border: 1px solid rgba(0, 0, 0, 0.1); 955 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); 956 padding: 18px; 957 box-sizing: border-box; 958 } 959 960 /* CSS for d-contents */ 961 962 .d-contents { 963 grid-column: text; 964 color: rgba(0,0,0,0.8); 965 font-size: 0.9em; 966 padding-bottom: 1em; 967 margin-bottom: 1em; 968 padding-bottom: 0.5em; 969 margin-bottom: 1em; 970 padding-left: 0.25em; 971 justify-self: start; 972 } 973 974 @media(min-width: 1000px) { 975 .d-contents.d-contents-float { 976 height: 0; 977 grid-column-start: 1; 978 grid-column-end: 4; 979 justify-self: center; 980 padding-right: 3em; 981 padding-left: 2em; 982 } 983 } 984 985 .d-contents nav h3 { 986 font-size: 18px; 987 margin-top: 0; 988 margin-bottom: 1em; 989 } 990 991 .d-contents li { 992 list-style-type: none 993 } 994 995 .d-contents nav > ul { 996 padding-left: 0; 997 } 998 999 .d-contents ul { 1000 padding-left: 1em 1001 } 1002 1003 .d-contents nav ul li { 1004 margin-top: 0.6em; 1005 margin-bottom: 0.2em; 1006 } 1007 1008 .d-contents nav a { 1009 font-size: 13px; 1010 border-bottom: none; 1011 text-decoration: none 1012 color: rgba(0, 0, 0, 0.8); 1013 } 1014 1015 .d-contents nav a:hover { 1016 text-decoration: underline solid rgba(0, 0, 0, 0.6) 1017 } 1018 1019 .d-contents nav > ul > li > a { 1020 font-weight: 600; 1021 } 1022 1023 .d-contents nav > ul > li > ul { 1024 font-weight: inherit; 1025 } 1026 1027 .d-contents nav > ul > li > ul > li { 1028 margin-top: 0.2em; 1029 } 1030 1031 1032 .d-contents nav ul { 1033 margin-top: 0; 1034 margin-bottom: 0.25em; 1035 } 1036 1037 .d-article-with-toc h2:nth-child(2) { 1038 margin-top: 0; 1039 } 1040 1041 1042 /* Figure */ 1043 1044 .figure { 1045 position: relative; 1046 margin-bottom: 2.5em; 1047 margin-top: 1.5em; 1048 } 1049 1050 .figure .caption { 1051 color: rgba(0, 0, 0, 0.6); 1052 font-size: 12px; 1053 line-height: 1.5em; 1054 } 1055 1056 .figure img.external { 1057 background: white; 1058 border: 1px solid rgba(0, 0, 0, 0.1); 1059 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); 1060 padding: 18px; 1061 box-sizing: border-box; 1062 } 1063 1064 .figure .caption a { 1065 color: rgba(0, 0, 0, 0.6); 1066 } 1067 1068 .figure .caption b, 1069 .figure .caption strong, { 1070 font-weight: 600; 1071 color: rgba(0, 0, 0, 1.0); 1072 } 1073 1074 /* Citations */ 1075 1076 d-article .citation { 1077 color: inherit; 1078 cursor: inherit; 1079 } 1080 1081 div.hanging-indent{ 1082 margin-left: 1em; text-indent: -1em; 1083 } 1084 1085 /* Citation hover box */ 1086 1087 .tippy-box[data-theme~=light-border] { 1088 background-color: rgba(250, 250, 250, 0.95); 1089 } 1090 1091 .tippy-content > p { 1092 margin-bottom: 0; 1093 padding: 2px; 1094 } 1095 1096 1097 /* Tweak 1000px media break to show more text */ 1098 1099 @media(min-width: 1000px) { 1100 .base-grid, 1101 distill-header, 1102 d-title, 1103 d-abstract, 1104 d-article, 1105 d-appendix, 1106 distill-appendix, 1107 d-byline, 1108 d-footnote-list, 1109 d-citation-list, 1110 distill-footer { 1111 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]; 1112 grid-column-gap: 16px; 1113 } 1114 1115 .grid { 1116 grid-column-gap: 16px; 1117 } 1118 1119 d-article { 1120 font-size: 1.06rem; 1121 line-height: 1.7em; 1122 } 1123 figure .caption, .figure .caption, figure figcaption { 1124 font-size: 13px; 1125 } 1126 } 1127 1128 @media(min-width: 1180px) { 1129 .base-grid, 1130 distill-header, 1131 d-title, 1132 d-abstract, 1133 d-article, 1134 d-appendix, 1135 distill-appendix, 1136 d-byline, 1137 d-footnote-list, 1138 d-citation-list, 1139 distill-footer { 1140 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]; 1141 grid-column-gap: 32px; 1142 } 1143 1144 .grid { 1145 grid-column-gap: 32px; 1146 } 1147 } 1148 1149 1150 /* Get the citation styles for the appendix (not auto-injected on render since 1151 we do our own rendering of the citation appendix) */ 1152 1153 d-appendix .citation-appendix, 1154 .d-appendix .citation-appendix { 1155 font-size: 11px; 1156 line-height: 15px; 1157 border-left: 1px solid rgba(0, 0, 0, 0.1); 1158 padding-left: 18px; 1159 border: 1px solid rgba(0,0,0,0.1); 1160 background: rgba(0, 0, 0, 0.02); 1161 padding: 10px 18px; 1162 border-radius: 3px; 1163 color: rgba(150, 150, 150, 1); 1164 overflow: hidden; 1165 margin-top: -12px; 1166 white-space: pre-wrap; 1167 word-wrap: break-word; 1168 } 1169 1170 /* Include appendix styles here so they can be overridden */ 1171 1172 d-appendix { 1173 contain: layout style; 1174 font-size: 0.8em; 1175 line-height: 1.7em; 1176 margin-top: 60px; 1177 margin-bottom: 0; 1178 border-top: 1px solid rgba(0, 0, 0, 0.1); 1179 color: rgba(0,0,0,0.5); 1180 padding-top: 60px; 1181 padding-bottom: 48px; 1182 } 1183 1184 d-appendix h3 { 1185 grid-column: page-start / text-start; 1186 font-size: 15px; 1187 font-weight: 500; 1188 margin-top: 1em; 1189 margin-bottom: 0; 1190 color: rgba(0,0,0,0.65); 1191 } 1192 1193 d-appendix h3 + * { 1194 margin-top: 1em; 1195 } 1196 1197 d-appendix ol { 1198 padding: 0 0 0 15px; 1199 } 1200 1201 @media (min-width: 768px) { 1202 d-appendix ol { 1203 padding: 0 0 0 30px; 1204 margin-left: -30px; 1205 } 1206 } 1207 1208 d-appendix li { 1209 margin-bottom: 1em; 1210 } 1211 1212 d-appendix a { 1213 color: rgba(0, 0, 0, 0.6); 1214 } 1215 1216 d-appendix > * { 1217 grid-column: text; 1218 } 1219 1220 d-appendix > d-footnote-list, 1221 d-appendix > d-citation-list, 1222 d-appendix > distill-appendix { 1223 grid-column: screen; 1224 } 1225 1226 /* Include footnote styles here so they can be overridden */ 1227 1228 d-footnote-list { 1229 contain: layout style; 1230 } 1231 1232 d-footnote-list > * { 1233 grid-column: text; 1234 } 1235
1236 d-footnote-list a.footnote-backlink { 1237 color: rgba(0,0,0,0.3); 1238 padding-left: 0.5em; 1239 } 1240 1241 1242 1243 /* Anchor.js */ 1244 1245 .anchorjs-link { 1246 /*transition: all .25s linear; */ 1247 text-decoration: none; 1248 border-bottom: none; 1249 } 1250 *:hover > .anchorjs-link { 1251 margin-left: -1.125em !important; 1252 text-decoration: none; 1253 border-bottom: none; 1254 } 1255 1256 /* Social footer */ 1257 1258 .social_footer { 1259 margin-top: 30px; 1260 margin-bottom: 0; 1261 color: rgba(0,0,0,0.67); 1262 } 1263 1264 .disqus-comments { 1265 margin-right: 30px; 1266 } 1267 1268 .disqus-comment-count { 1269 border-bottom: 1px solid rgba(0, 0, 0, 0.4); 1270 cursor: pointer; 1271 } 1272 1273 #disqus_thread { 1274 margin-top: 30px; 1275 } 1276 1277 .article-sharing a { 1278 border-bottom: none; 1279 margin-right: 8px; 1280 } 1281 1282 .article-sharing a:hover { 1283 border-bottom: none; 1284 } 1285 1286 .sidebar-section.subscribe { 1287 font-size: 12px; 1288 line-height: 1.6em; 1289 } 1290 1291 .subscribe p { 1292 margin-bottom: 0.5em; 1293 } 1294 1295 1296 .article-footer .subscribe { 1297 font-size: 15px; 1298 margin-top: 45px; 1299 } 1300 1301 1302 .sidebar-section.custom { 1303 font-size: 12px; 1304 line-height: 1.6em; 1305 } 1306 1307 .custom p { 1308 margin-bottom: 0.5em; 1309 } 1310 1311 /* Styles for listing layout (hide title) */ 1312 .layout-listing d-title, .layout-listing .d-title { 1313 display: none; 1314 } 1315 1316 /* Styles for posts lists (not auto-injected) */ 1317 1318 1319 .posts-with-sidebar { 1320 padding-left: 45px; 1321 padding-right: 45px; 1322 } 1323 1324 .posts-list .description h2, 1325 .posts-list .description p { 1326 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 1327 } 1328 1329 .posts-list .description h2 { 1330 font-weight: 700; 1331 border-bottom: none; 1332 padding-bottom: 0; 1333 } 1334 1335 .posts-list h2.post-tag { 1336 border-bottom: 1px solid rgba(0, 0, 0, 0.2); 1337 padding-bottom: 12px; 1338 } 1339 .posts-list { 1340 margin-top: 60px; 1341 margin-bottom: 24px; 1342 } 1343 1344 .posts-list .post-preview { 1345 text-decoration: none; 1346 overflow: hidden; 1347 display: block; 1348 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 1349 padding: 24px 0; 1350 } 1351 1352 .post-preview-last { 1353 border-bottom: none !important; 1354 } 1355 1356 .posts-list .posts-list-caption { 1357 grid-column: screen; 1358 font-weight: 400; 1359 } 1360 1361 .posts-list .post-preview h2 { 1362 margin: 0 0 6px 0; 1363 line-height: 1.2em; 1364 font-style: normal; 1365 font-size: 24px; 1366 } 1367 1368 .posts-list .post-preview p { 1369 margin: 0 0 12px 0; 1370 line-height: 1.4em; 1371 font-size: 16px; 1372 } 1373 1374 .posts-list .post-preview .thumbnail { 1375 box-sizing: border-box; 1376 margin-bottom: 24px; 1377 position: relative; 1378 max-width: 500px; 1379 } 1380 .posts-list .post-preview img { 1381 width: 100%; 1382 display: block; 1383 } 1384 1385 .posts-list .metadata { 1386 font-size: 12px; 1387 line-height: 1.4em; 1388 margin-bottom: 18px; 1389 } 1390 1391 .posts-list .metadata > * { 1392 display: inline-block; 1393 } 1394 1395 .posts-list .metadata .publishedDate { 1396 margin-right: 2em; 1397 } 1398 1399 .posts-list .metadata .dt-authors { 1400 display: block; 1401 margin-top: 0.3em; 1402 margin-right: 2em; 1403 } 1404 1405 .posts-list .dt-tags { 1406 display: block; 1407 line-height: 1em; 1408 } 1409 1410 .posts-list .dt-tags .dt-tag { 1411 display: inline-block; 1412 color: rgba(0,0,0,0.6); 1413 padding: 0.3em 0.4em; 1414 margin-right: 0.2em; 1415 margin-bottom: 0.4em; 1416 font-size: 60%; 1417 border: 1px solid rgba(0,0,0,0.2); 1418 border-radius: 3px; 1419 text-transform: uppercase; 1420 font-weight: 500; 1421 } 1422 1423 .posts-list img { 1424 opacity: 1; 1425 } 1426 1427 .posts-list img[data-src] { 1428 opacity: 0; 1429 } 1430 1431 .posts-more { 1432 clear: both; 1433 } 1434 1435 1436 .posts-sidebar { 1437 font-size: 16px; 1438 } 1439 1440 .posts-sidebar h3 { 1441 font-size: 16px; 1442 margin-top: 0; 1443 margin-bottom: 0.5em; 1444 font-weight: 400; 1445 text-transform: uppercase; 1446 } 1447 1448 .sidebar-section { 1449 margin-bottom: 30px; 1450 } 1451 1452 .categories ul { 1453 list-style-type: none; 1454 margin: 0; 1455 padding: 0; 1456 } 1457 1458 .categories li { 1459 color: rgba(0, 0, 0, 0.8); 1460 margin-bottom: 0; 1461 } 1462 1463 .categories li>a { 1464 border-bottom: none; 1465 } 1466 1467 .categories li>a:hover { 1468 border-bottom: 1px solid rgba(0, 0, 0, 0.4); 1469 } 1470 1471 .categories .active { 1472 font-weight: 600; 1473 } 1474 1475 .categories .category-count { 1476 color: rgba(0, 0, 0, 0.4); 1477 } 1478 1479 1480 @media(min-width: 768px) { 1481 .posts-list .post-preview h2 { 1482 font-size: 26px; 1483 } 1484 .posts-list .post-preview .thumbnail { 1485 float: right; 1486 width: 30%; 1487 margin-bottom: 0; 1488 } 1489 .posts-list .post-preview .description { 1490 float: left; 1491 width: 45%; 1492 } 1493 .posts-list .post-preview .metadata { 1494 float: left; 1495 width: 20%; 1496 margin-top: 8px; 1497 } 1498 .posts-list .post-preview p { 1499 margin: 0 0 12px 0; 1500 line-height: 1.5em; 1501 font-size: 16px; 1502 } 1503 .posts-with-sidebar .posts-list { 1504 float: left; 1505 width: 75%; 1506 } 1507 .posts-with-sidebar .posts-sidebar { 1508 float: right; 1509 width: 20%; 1510 margin-top: 60px; 1511 padding-top: 24px; 1512 padding-bottom: 24px; 1513 } 1514 } 1515 1516 1517 /* Improve display for browsers without grid (IE/Edge <= 15) */ 1518 1519 .downlevel { 1520 line-height: 1.6em; 1521 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; 1522 margin: 0; 1523 } 1524 1525 .downlevel .d-title { 1526 padding-top: 6rem; 1527 padding-bottom: 1.5rem; 1528 } 1529 1530 .downlevel .d-title h1 { 1531 font-size: 50px; 1532 font-weight: 700; 1533 line-height: 1.1em; 1534 margin: 0 0 0.5rem; 1535 } 1536 1537 .downlevel .d-title p { 1538 font-weight: 300; 1539 font-size: 1.2rem; 1540 line-height: 1.55em; 1541 margin-top: 0; 1542 } 1543 1544 .downlevel .d-byline { 1545 padding-top: 0.8em; 1546 padding-bottom: 0.8em; 1547 font-size: 0.8rem; 1548 line-height: 1.8em; 1549 } 1550 1551 .downlevel .section-separator { 1552 border: none; 1553 border-top: 1px solid rgba(0, 0, 0, 0.1); 1554 } 1555 1556 .downlevel .d-article { 1557 font-size: 1.06rem; 1558 line-height: 1.7em; 1559 padding-top: 1rem; 1560 padding-bottom: 2rem; 1561 } 1562 1563 1564 .downlevel .d-appendix { 1565 padding-left: 0; 1566 padding-right: 0; 1567 max-width: none; 1568 font-size: 0.8em; 1569 line-height: 1.7em; 1570 margin-bottom: 0; 1571 color: rgba(0,0,0,0.5); 1572 padding-top: 40px; 1573 padding-bottom: 48px; 1574 } 1575 1576 .downlevel .footnotes ol { 1577 padding-left: 13px; 1578 } 1579 1580 .downlevel .base-grid, 1581 .downlevel .distill-header, 1582 .downlevel .d-title, 1583 .downlevel .d-abstract, 1584 .downlevel .d-article, 1585 .downlevel .d-appendix, 1586 .downlevel .distill-appendix, 1587 .downlevel .d-byline, 1588 .downlevel .d-footnote-list, 1589 .downlevel .d-citation-list, 1590 .downlevel .distill-footer, 1591 .downlevel .appendix-bottom, 1592 .downlevel .posts-container { 1593 padding-left: 40px; 1594 padding-right: 40px; 1595 } 1596 1597 @media(min-width: 768px) { 1598 .downlevel .base-grid, 1599 .downlevel .distill-header, 1600 .downlevel .d-title, 1601 .downlevel .d-abstract, 1602 .downlevel .d-article, 1603 .downlevel .d-appendix, 1604 .downlevel .distill-appendix, 1605 .downlevel .d-byline, 1606 .downlevel .d-footnote-list, 1607 .downlevel .d-citation-list, 1608 .downlevel .distill-footer, 1609 .downlevel .appendix-bottom, 1610 .downlevel .posts-container { 1611 padding-left: 150px; 1612 padding-right: 150px; 1613 max-width: 900px; 1614 } 1615 } 1616 1617 .downlevel pre code { 1618 display: block; 1619 border-left: 2px solid rgba(0, 0, 0, .1); 1620 padding: 0 0 0 20px; 1621 font-size: 14px; 1622 } 1623 1624 .downlevel code, .downlevel pre { 1625 color: black; 1626 background: none;
1627 font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 1628 text-align: left; 1629 white-space: pre; 1630 word-spacing: normal; 1631 word-break: normal; 1632 word-wrap: normal; 1633 line-height: 1.5; 1634 1635 -moz-tab-size: 4; 1636 -o-tab-size: 4; 1637 tab-size: 4; 1638 1639 -webkit-hyphens: none; 1640 -moz-hyphens: none; 1641 -ms-hyphens: none; 1642 hyphens: none; 1643 } 1644 1645 .downlevel .posts-list .post-preview { 1646 color: inherit; 1647 } 1648 1649 1650 1651 </style> 1652 1653
1653<script type="application/javascript"> 1654 1655 function is_downlevel_browser() { 1656 if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"}, 1657 window.navigator.userAgent)) { 1658 return true; 1659 } else { 1660 return window.load_distill_framework === undefined; 1661 } 1662 } 1663 1664 // show body when load is complete 1665 function on_load_complete() { 1666 1667 // add anchors 1668 if (window.anchors) { 1669 window.anchors.options.placement = 'left'; 1670 window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5'); 1671 } 1672 1673 1674 // set body to visible 1675 document.body.style.visibility = 'visible'; 1676 1677 // force redraw for leaflet widgets 1678 if (window.HTMLWidgets) { 1679 var maps = window.HTMLWidgets.findAll(".leaflet"); 1680 $.each(maps, function(i, el) { 1681 var map = this.getMap(); 1682 map.invalidateSize(); 1683 map.eachLayer(function(layer) { 1684 if (layer instanceof L.TileLayer) 1685 layer.redraw(); 1686 }); 1687 }); 1688 } 1689 1690 // trigger 'shown' so htmlwidgets resize 1691 $('d-article').trigger('shown'); 1692 } 1693 1694 function init_distill() { 1695 1696 init_common(); 1697 1698 // create front matter 1699 var front_matter = $('<d-front-matter></d-front-matter>'); 1700 $('#distill-front-matter').wrap(front_matter); 1701 1702 // create d-title 1703 $('.d-title').changeElementType('d-title'); 1704 1705 // separator 1706 var separator = '<hr class="section-separator" style="clear: both"/>'; 1707 // prepend separator above appendix 1708 $('.d-byline').before(separator); 1709 $('.d-article').before(separator); 1710 1711 // create d-byline 1712 var byline = $('<d-byline></d-byline>'); 1713 $('.d-byline').replaceWith(byline); 1714 1715 // create d-article 1716 var article = $('<d-article></d-article>'); 1717 $('.d-article').wrap(article).children().unwrap(); 1718 1719 // move posts container into article 1720 $('.posts-container').appendTo($('d-article')); 1721 1722 // create d-appendix 1723 $('.d-appendix').changeElementType('d-appendix'); 1724 1725 // flag indicating that we have appendix items 1726 var appendix = $('.appendix-bottom').children('h3').length > 0; 1727 1728 // replace footnotes with <d-footnote> 1729 $('.footnote-ref').each(function(i, val) { 1730 appendix = true; 1731 var href = $(this).attr('href'); 1732 var id = href.replace('#', ''); 1733 var fn = $('#' + id); 1734 var fn_p = $('#' + id + '>p'); 1735 fn_p.find('.footnote-back').remove(); 1736 var text = fn_p.html(); 1737 var dtfn = $('<d-footnote></d-footnote>'); 1738 dtfn.html(text); 1739 $(this).replaceWith(dtfn); 1740 }); 1741 // remove footnotes 1742 $('.footnotes').remove(); 1743 1744 // move refs into #references-listing 1745 $('#references-listing').replaceWith($('#refs')); 1746 1747 $('h1.appendix, h2.appendix').each(function(i, val) { 1748 $(this).changeElementType('h3'); 1749 }); 1750 $('h3.appendix').each(function(i, val) { 1751 var id = $(this).attr('id'); 1752 $('.d-contents a[href="#' + id + '"]').parent().remove(); 1753 appendix = true; 1754 $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix')); 1755 }); 1756 1757 // show d-appendix if we have appendix content 1758 $("d-appendix").css('display', appendix ? 'grid' : 'none'); 1759 1760 // localize layout chunks to just output 1761 $('.layout-chunk').each(function(i, val) { 1762 1763 // capture layout 1764 var layout = $(this).attr('data-layout'); 1765 1766 // apply layout to markdown level block elements 1767 var elements = $(this).children().not('details, div.sourceCode, pre, script'); 1768 elements.each(function(i, el) { 1769 var layout_div = $('<div class="' + layout + '"></div>'); 1770 if (layout_div.hasClass('shaded')) { 1771 var shaded_content = $('<div class="shaded-content"></div>'); 1772 $(this).wrap(shaded_content); 1773 $(this).parent().wrap(layout_div); 1774 } else { 1775 $(this).wrap(layout_div); 1776 } 1777 }); 1778 1779 1780 // unwrap the layout-chunk div 1781 $(this).children().unwrap(); 1782 }); 1783 1784 // remove code block used to force highlighting css 1785 $('.distill-force-highlighting-css').parent().remove(); 1786 1787 // remove empty line numbers inserted by pandoc when using a 1788 // custom syntax highlighting theme, except when numbering line 1789 // in code chunk 1790 $('pre:not(.numberLines) code.sourceCode a:empty').remove(); 1791 1792 // load distill framework 1793 load_distill_framework(); 1794 1795 // wait for window.distillRunlevel == 4 to do post processing 1796 function distill_post_process() { 1797 1798 if (!window.distillRunlevel || window.distillRunlevel < 4) 1799 return; 1800 1801 // hide author/affiliations entirely if we have no authors 1802 var front_matter = JSON.parse($("#distill-front-matter").html()); 1803 var have_authors = front_matter.authors && front_matter.authors.length > 0; 1804 if (!have_authors) 1805 $('d-byline').addClass('hidden'); 1806 1807 // article with toc class 1808 $('.d-contents').parent().addClass('d-article-with-toc'); 1809 1810 // strip links that point to # 1811 $('.authors-affiliations').find('a[href="#"]').removeAttr('href'); 1812 1813 // add orcid ids 1814 $('.authors-affiliations').find('.author').each(function(i, el) {
1815 var orcid_id = front_matter.authors[i].orcidID; 1816 var author_name = front_matter.authors[i].author 1817 if (orcid_id) { 1818 var a = $('<a></a>'); 1819 a.attr('href', 'https://orcid.org/' + orcid_id); 1820 var img = $('<img></img>'); 1821 img.addClass('orcid-id'); 1822 img.attr('alt', author_name ? 'ORCID ID for ' + author_name : 'ORCID ID'); 1823 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=='); 1824 a.append(img); 1825 $(this).append(a); 1826 } 1827 }); 1828 1829 // hide elements of author/affiliations grid that have no value 1830 function hide_byline_column(caption) { 1831 $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden'); 1832 } 1833 1834 // affiliations 1835 var have_affiliations = false; 1836 for (var i = 0; i<front_matter.authors.length; ++i) { 1837 var author = front_matter.authors[i]; 1838 if (author.affiliation !== " ") { 1839 have_affiliations = true; 1840 break; 1841 } 1842 } 1843 if (!have_affiliations) 1844 $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden'); 1845 1846 // published date 1847 if (!front_matter.publishedDate) 1848 hide_byline_column("Published"); 1849 1850 // document object identifier 1851 var doi = $('d-byline').find('h3:contains("DOI")'); 1852 var doi_p = doi.next().empty(); 1853 if (!front_matter.doi) { 1854 // if we have a citation and valid citationText then link to that 1855 if ($('#citation').length > 0 && front_matter.citationText) { 1856 doi.html('Citation'); 1857 $('<a href="#citation"></a>') 1858 .text(front_matter.citationText) 1859 .appendTo(doi_p); 1860 } else { 1861 hide_byline_column("DOI"); 1862 } 1863 } else { 1864 $('<a></a>') 1865 .attr('href', "https://doi.org/" + front_matter.doi) 1866 .html(front_matter.doi) 1867 .appendTo(doi_p); 1868 } 1869 1870 // change plural form of authors/affiliations 1871 if (front_matter.authors.length === 1) { 1872 var grid = $('.authors-affiliations'); 1873 grid.children('h3:contains("Authors")').text('Author'); 1874 grid.children('h3:contains("Affiliations")').text('Affiliation'); 1875 } 1876 1877 // remove d-appendix and d-footnote-list local styles 1878 $('d-appendix > style:first-child').remove(); 1879 $('d-footnote-list > style:first-child').remove(); 1880 1881 // move appendix-bottom entries to the bottom 1882 $('.appendix-bottom').appendTo('d-appendix').children().unwrap(); 1883 $('.appendix-bottom').remove(); 1884 1885 // hoverable references 1886 $('span.citation[data-cites]').each(function() { 1887 const citeChild = $(this).children()[0]
1888 // Do not process if @xyz has been used without escaping and without bibliography activated 1889 // https://github.com/rstudio/distill/issues/466 1890 if (citeChild === undefined) return true 1891 1892 if (citeChild.nodeName == "D-FOOTNOTE") { 1893 var fn = citeChild 1894 $(this).html(fn.shadowRoot.querySelector("sup")) 1895 $(this).id = fn.id 1896 fn.remove() 1897 } 1898 var refs = $(this).attr('data-cites').split(" "); 1899 var refHtml = refs.map(function(ref) { 1900 // Could use CSS.escape too here, we insure backward compatibility in navigator 1901 return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>"; 1902 }).join("\n"); 1903 window.tippy(this, { 1904 allowHTML: true, 1905 content: refHtml, 1906 maxWidth: 500, 1907 interactive: true, 1908 interactiveBorder: 10, 1909 theme: 'light-border', 1910 placement: 'bottom-start' 1911 }); 1912 }); 1913 1914 // fix footnotes in tables (#411) 1915 // replacing broken distill.pub feature 1916 $('table d-footnote').each(function() { 1917 // we replace internal showAtNode methode which is triggered when hovering a footnote 1918 this.hoverBox.showAtNode = function(node) { 1919 // ported from https://github.com/distillpub/template/pull/105/files 1920 calcOffset = function(elem) { 1921 let x = elem.offsetLeft; 1922 let y = elem.offsetTop; 1923 // Traverse upwards until an `absolute` element is found or `elem` 1924 // becomes null. 1925 while (elem = elem.offsetParent && elem.style.position != 'absolute') { 1926 x += elem.offsetLeft; 1927 y += elem.offsetTop; 1928 } 1929 1930 return { left: x, top: y }; 1931 } 1932 // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop 1933 const bbox = node.getBoundingClientRect(); 1934 const offset = calcOffset(node); 1935 this.show([offset.left + bbox.width, offset.top + bbox.height]); 1936 } 1937 }) 1938 1939 // clear polling timer 1940 clearInterval(tid); 1941 1942 // show body now that everything is ready 1943 on_load_complete(); 1944 } 1945 1946 var tid = setInterval(distill_post_process, 50); 1947 distill_post_process(); 1948 1949 } 1950 1951 function init_downlevel() { 1952 1953 init_common(); 1954 1955 // insert hr after d-title 1956 $('.d-title').after($('<hr class="section-separator"/>')); 1957 1958 // check if we have authors 1959 var front_matter = JSON.parse($("#distill-front-matter").html()); 1960 var have_authors = front_matter.authors && front_matter.authors.length > 0; 1961
1962 // manage byline/border 1963 if (!have_authors) 1964 $('.d-byline').remove(); 1965 $('.d-byline').after($('<hr class="section-separator"/>')); 1966 $('.d-byline a').remove(); 1967 1968 // remove toc 1969 $('.d-contents').remove(); 1970 1971 // move appendix elements 1972 $('h1.appendix, h2.appendix').each(function(i, val) { 1973 $(this).changeElementType('h3'); 1974 }); 1975 $('h3.appendix').each(function(i, val) { 1976 $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix')); 1977 }); 1978 1979 1980 // inject headers into references and footnotes 1981 var refs_header = $('<h3></h3>'); 1982 refs_header.text('References'); 1983 $('#refs').prepend(refs_header); 1984 1985 var footnotes_header = $('<h3></h3'); 1986 footnotes_header.text('Footnotes'); 1987 $('.footnotes').children('hr').first().replaceWith(footnotes_header); 1988 1989 // move appendix-bottom entries to the bottom 1990 $('.appendix-bottom').appendTo('.d-appendix').children().unwrap(); 1991 $('.appendix-bottom').remove(); 1992 1993 // remove appendix if it's empty 1994 if ($('.d-appendix').children().length === 0) 1995 $('.d-appendix').remove(); 1996 1997 // prepend separator above appendix 1998 $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>')); 1999 2000 // trim code 2001 $('pre>code').each(function(i, val) { 2002 $(this).html($.trim($(this).html())); 2003 }); 2004 2005 // move posts-container right before article 2006 $('.posts-container').insertBefore($('.d-article')); 2007 2008 $('body').addClass('downlevel'); 2009 2010 on_load_complete(); 2011 } 2012 2013 2014 function init_common() { 2015 2016 // jquery plugin to change element types 2017 (function($) { 2018 $.fn.changeElementType = function(newType) { 2019 var attrs = {}; 2020 2021 $.each(this[0].attributes, function(idx, attr) { 2022 attrs[attr.nodeName] = attr.nodeValue; 2023 }); 2024 2025 this.replaceWith(function() { 2026 return $("<" + newType + "/>", attrs).append($(this).contents()); 2027 }); 2028 }; 2029 })(jQuery); 2030 2031 // prevent underline for linked images 2032 $('a > img').parent().css({'border-bottom' : 'none'}); 2033 2034 // mark non-body figures created by knitr chunks as 100% width 2035 $('.layout-chunk').each(function(i, val) { 2036 var figures = $(this).find('img, .html-widget'); 2037 // ignore leaflet img layers (#106) 2038 figures = figures.filter(':not(img[class*="leaflet"])') 2039 if ($(this).attr('data-layout') !== "l-body") { 2040 figures.css('width', '100%'); 2041 } else { 2042 figures.css('max-width', '100%'); 2043 figures.filter("[width]").each(function(i, val) { 2044 var fig = $(this); 2045 fig.css('width', fig.attr('width') + 'px'); 2046 }); 2047 2048 } 2049 }); 2050 2051 // auto-append index.html to post-preview links in file: protocol 2052 // and in rstudio ide preview 2053 $('.post-preview').each(function(i, val) { 2054 if (window.location.protocol === "file:") 2055 $(this).attr('href', $(this).attr('href') + "index.html"); 2056 }); 2057 2058 // get rid of index.html references in header 2059 if (window.location.protocol !== "file:") { 2060 $('.distill-site-header a[href]').each(function(i,val) { 2061 $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./")); 2062 }); 2063 } 2064 2065 // add class to pandoc style tables 2066 $('tr.header').parent('thead').parent('table').addClass('pandoc-table'); 2067 $('.kable-table').children('table').addClass('pandoc-table'); 2068 2069 // add figcaption style to table captions 2070 $('caption').parent('table').addClass("figcaption"); 2071 2072 // initialize posts list 2073 if (window.init_posts_list) 2074 window.init_posts_list(); 2075 2076 // implmement disqus comment link 2077 $('.disqus-comment-count').click(function() { 2078 window.headroom_prevent_pin = true; 2079 $('#disqus_thread').toggleClass('hidden'); 2080 if (!$('#disqus_thread').hasClass('hidden')) { 2081 var offset = $(this).offset(); 2082 $(window).resize(); 2083 $('html, body').animate({ 2084 scrollTop: offset.top - 35 2085 }); 2086 } 2087 }); 2088 } 2089 2090 document.addEventListener('DOMContentLoaded', function() { 2091 if (is_downlevel_browser()) 2092 init_downlevel(); 2093 else 2094 window.addEventListener('WebComponentsReady', init_distill); 2095 }); 2096 2097 </script>
2097 2098 2099 <!--/radix_placeholder_distill--> 2100
2100<script src="site_libs/header-attrs-2.30/header-attrs.js"></script>
2100 2101
2101<script src="site_libs/popper-2.6.0/popper.min.js"></script>
2101 2102 <link href="site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" /> 2103 <link href="site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" /> 2104
2104<script src="site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2104 2105
2105<script src="site_libs/anchor-4.2.2/anchor.min.js"></script>
2105 2106
2106<script src="site_libs/bowser-1.9.3/bowser.min.js"></script>
2106 2107
2107<script src="site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2107 2108
2108<script src="site_libs/distill-2.2.21/template.v2.js"></script>
2108 2109 <!--radix_placeholder_site_in_header--> 2110 <!--/radix_placeholder_site_in_header--> 2111 2112 <link rel="stylesheet" href="styles.css" type="text/css"/> 2113 2114</head> 2115 2116<body> 2117 2118<!--radix_placeholder_front_matter--> 2119
2120<script id="distill-front-matter" type="text/json"> 2121{"title":"Research","authors":[]} 2122</script>
2122 2123 2124<!--/radix_placeholder_front_matter--> 2125<!--radix_placeholder_navigation_before_body--> 2126<header class="header header--fixed" role="banner"> 2127<nav class="distill-site-nav distill-site-header"> 2128<div class="nav-left"> 2129<a href="index.html" class="title">Yingying Zhang</a> 2130<a href="index.html">Home</a> 2131<a href="Research.html">Research</a> 2132<a href="Teaching.html">Teaching</a> 2133</div> 2134<div class="nav-right"> 2135<a href="javascript:void(0);" class="nav-toggle">☰</a> 2136</div> 2137</nav> 2138</header> 2139<!--/radix_placeholder_navigation_before_body--> 2140<!--radix_placeholder_site_before_body--> 2141<!--/radix_placeholder_site_before_body--> 2142 2143<div class="d-title"> 2144<h1>Research</h1> 2145 2146<!--radix_placeholder_categories--> 2147<!--/radix_placeholder_categories--> 2148 2149</div> 2150 2151 2152<div class="d-article"> 2153<h2 id="research-interests">Research Interests</h2> 2154<ul> 2155<li>computational statistics</li> 2156<li>finite mixture modeling</li> 2157<li>model-based clustering</li> 2158<li>data visualization</li> 2159</ul> 2160<h2 id="publicationacceptance">Publication/Acceptance</h2> 2161<ul> 2162<li><p><strong>Zhang,Y.,</strong>,Zhu,X.,Tong,H., Melnykov,V.(2026)<br /> 2163Model-based clustering of music pieces.<br /> 2164<em>Pattern Recognition</em></p></li> 2165<li><p><strong>Zhang,Y.,</strong>, Melnykov,V. (2025)<br /> 2166<a href="https://www.sciencedirect.com/science/article/pii/S003132032500809X">Modeling and clustering of heterogeneous multivariate categorical sequences</a>.<br /> 2167<em>Pattern Recognition</em></p></li> 2168<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Zhu,X. (2025)<br /> 2169<a href="https://link.springer.com/article/10.1007/s13171-025-00406-9">Study on the overlap in matrix-variate data with applications in discriminant analysis</a>.<br /> 2170<em>Sankhya A</em></p></li> 2171<li><p><strong>Zhang,Y.,</strong>, Sarkar,S., Chen,Y., Zhu,X. (2024)<br /> 2172<a href="https://link.springer.com/article/10.1007/s10618-024-01051-w">On regime changes in text data using hidden Markov model of contaminated vMF distribution</a>.<br /> 2173<em>Data Mining and Knowledge Discovery</em></p></li> 2174<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Melnykov,I. (2023)<br /> 2175<a href="https://link.springer.com/article/10.1007/s00357-023-09445-z">On model-based clustering of directional data with heavy tails</a>.<br /> 2176<em>Journal of Classification</em></p></li> 2177<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Melnykov,I. (2022)<br /> 2178<a href="https://journals.sagepub.com/doi/10.1177/1471082X21989170">Semi-supervised clustering of time-dependent categorical sequences with application to discovering education-based life pattern</a>.<br /> 2179<em>Statistical Modelling</em></p></li> 2180<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Zhu,X. (2021)<br /> 2181<a href="https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.11502">Model-based clustering of time-dependent categorical sequences with application to the analysis of major life event patterns</a>.<br /> 2182<em>Statistical Analysis and Data Mining</em></p></li> 2183<li><p>Chen,H., Zhu,C., <strong>Zhang,Y.,</strong> (2014)<br /> 2184<a href="https://www.sciencedirect.com/science/article/pii/S0096300313011156">A note on exponential stability for impulsive neutral stochastic partial functional differential equations</a>.<br /> 2185<em>Applied Mathematics and Computation</em></p></li> 2186</ul> 2187<h2 id="under-reviewrevision">Under Review/Revision</h2> 2188<ul> 2189<li><strong>Zhang,Y.,</strong>, Zhu,X.,<br /> 2190Study on the overlap of finite mixture modeling of categorical sequences.<br /> 2191Under revision at <em>Advances in Data Analysis and Classification</em></li> 2192</ul> 2193<h2 id="in-progress">In-progress</h2> 2194<ul> 2195<li><p>Melnykov,Y., <strong>Zhang,Y.,</strong>, Zheng, R.,<br /> 2196Clustering analysis on the spatial-temporal and intensity patterns of tornado data in USA.</p></li> 2197<li><p>Chen, Y., <strong>Zhang, Y.,</strong>, Zhu, X., Tian, A.,<br /> 2198The effect of AI actions between leading and following corporations.</p></li> 2199<li><p>Joint work with Sarkar,S., Zhu,X.<br /> 2200On model-based clustering of multivariate categorical sequences with missing values.</p></li> 2201<li><p>Joint work with Su,H.<br /> 2202Analysis of Reddit depression community support through text-based methods.</p></li> 2203<li><p>Joint work with Shields,B.<br /> 2204On model-based clustering of dynamic multivariate categorical sequences.</p></li> 2205<li><p><strong>Zhang, Y.,</strong> 2206Study on the overlap of high-dimensional finite mixture modeling of Gaussian distributions.</p></li> 2207</ul> 2208<div class="sourceCode" id="cb1"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div> 2209<!--radix_placeholder_article_footer--> 2210<!--/radix_placeholder_article_footer--> 2211</div> 2212 2213<div class="d-appendix"> 2214</div> 2215 2216 2217<!--radix_placeholder_site_after_body--> 2218<!--/radix_placeholder_site_after_body--> 2219<!--radix_placeholder_appendices--> 2220<div class="appendix-bottom"></div> 2221<!--/radix_placeholder_appendices--> 2222<!--radix_placeholder_navigation_after_body--> 2223<!--/radix_placeholder_navigation_after_body--> 2224 2225</body> 2226 2227</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.