update template
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
\relax
|
||||||
|
\providecommand\babel@aux[2]{}
|
||||||
|
\@nameuse{bbl@beforestart}
|
||||||
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
|
\providecommand*\HyPL@Entry[1]{}
|
||||||
|
\bibstyle{elsarticle-harv}
|
||||||
|
\emailauthor{mingsu@rcees.ac.cn}{Ming Su}
|
||||||
|
\emailauthor{yangmin@rcees.ac.cn}{Min Yang\corref {cor1}}
|
||||||
|
\Newlabel{cor1}{1}
|
||||||
|
\bibdata{../BB/Ref.bib,../BB/localRef.bib}
|
||||||
|
\HyPL@Entry{0<</S/D>>}
|
||||||
|
\babel@aux{english}{}
|
||||||
|
\Newlabel{1}{a}
|
||||||
|
\Newlabel{2}{b}
|
||||||
|
\newlabel{credit-authorship-contribution-statement}{{b}{1}{CRediT authorship contribution statement}{section*.1}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{CRediT authorship contribution statement}{1}{section*.1}\protected@file@percent }
|
||||||
|
\gdef \@abspage@last{1}
|
||||||
@@ -28,6 +28,6 @@ closing_greeting: "Yours Sincerely,"
|
|||||||
|
|
||||||
Thank you for your consideration our manuscript (`{{< meta submitid >}}`) in publishing in {{< meta submitjournal >}}, and we also thank the reviewers for their kind and valuable comments.
|
Thank you for your consideration our manuscript (`{{< meta submitid >}}`) in publishing in {{< meta submitjournal >}}, and we also thank the reviewers for their kind and valuable comments.
|
||||||
|
|
||||||
We have carefully revised the manuscripte according to each comment from the reviewers. As requested, revision note with point to point responses and actions, change tracking manuscript and revised manuscript have been prepared and included in the revision submission.
|
We have carefully revised the manuscript according to each comment from the reviewers. As requested, revision note with point to point responses and actions, change tracking manuscript and revised manuscript have been prepared and included in the revision submission.
|
||||||
|
|
||||||
We believe that the paper has been greatly improved. Looking forward to your further instruction regarding its publication.
|
We believe that the paper has been greatly improved. Looking forward to your further instruction regarding its publication.
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
\relax
|
||||||
|
\providecommand\zref@newlabel[2]{}
|
||||||
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
|
\providecommand*\HyPL@Entry[1]{}
|
||||||
|
\providecommand\babel@aux[2]{}
|
||||||
|
\@nameuse{bbl@beforestart}
|
||||||
|
\bibstyle{elsarticle-harv}
|
||||||
|
\emailauthor{mingsu@rcees.ac.cn}{Ming Su}
|
||||||
|
\emailauthor{yangmin@rcees.ac.cn}{Min Yang\corref {cor1}}
|
||||||
|
\Newlabel{cor1}{1}
|
||||||
|
\bibdata{../BB/Ref.bib,../BB/localRef.bib}
|
||||||
|
\HyPL@Entry{0<</S/D>>}
|
||||||
|
\babel@aux{english}{}
|
||||||
|
\Newlabel{1}{a}
|
||||||
|
\Newlabel{2}{b}
|
||||||
|
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent }
|
||||||
|
\newlabel{introduction}{{1}{1}{Introduction}{section.1}{}}
|
||||||
|
\newlabel{r:r1q0101}{{Bla blaBla blaBla blaBla blaBla bla Bla bla.}{}}
|
||||||
|
\newlabel{r1q0101}{{1}{1}{Introduction}{section.1}{}}
|
||||||
|
\newlabel{r1q0101end}{{1}{1}{Introduction}{section.1}{}}
|
||||||
|
\newlabel{line:r1q0101}{{6}{1}{}{}{}}
|
||||||
|
\newlabel{line:r1q0101end}{{6}{1}{}{}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{\numberline {2}Materials and methods}{1}{section.2}\protected@file@percent }
|
||||||
|
\newlabel{materials-and-methods}{{2}{1}{Materials and methods}{section.2}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{\numberline {3}Results}{1}{section.3}\protected@file@percent }
|
||||||
|
\newlabel{results}{{3}{1}{Results}{section.3}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{\numberline {4}Discussion}{1}{section.4}\protected@file@percent }
|
||||||
|
\newlabel{discussion}{{4}{1}{Discussion}{section.4}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions}{1}{section.5}\protected@file@percent }
|
||||||
|
\newlabel{conclusions}{{5}{1}{Conclusions}{section.5}{}}
|
||||||
|
\newlabel{acknowledgements}{{5}{1}{Acknowledgements}{section*.1}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{Acknowledgements}{1}{section*.1}\protected@file@percent }
|
||||||
|
\gdef \@abspage@last{1}
|
||||||
+38
-30
@@ -14,41 +14,41 @@ format:
|
|||||||
elsevier-html:
|
elsevier-html:
|
||||||
css: _extensions/inst/css/style.css
|
css: _extensions/inst/css/style.css
|
||||||
keep-md: true
|
keep-md: true
|
||||||
filters:
|
dplyr::filters:
|
||||||
- author-info-blocks
|
- author-info-blocks
|
||||||
epub: default
|
epub: default
|
||||||
docx:
|
docx:
|
||||||
reference-doc: _extensions/inst/word/MS.docx
|
reference-doc: _extensions/inst/word/MS.docx
|
||||||
filters:
|
dplyr::filters:
|
||||||
- author-info-blocks
|
- author-info-blocks
|
||||||
elsevier-pdf:
|
# elsevier-pdf:
|
||||||
keep-tex: true
|
# keep-tex: false
|
||||||
keep-md: true
|
# keep-md: false
|
||||||
include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex"
|
# include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex"
|
||||||
latex-clean: false
|
# latex-clean: false
|
||||||
header-includes:
|
# header-includes:
|
||||||
# - \usepackage{threeparttable}
|
# # - \usepackage{threeparttable}
|
||||||
# - \usepackage{fontspec}
|
# # - \usepackage{fontspec}
|
||||||
# - \usepackage{endfloat}
|
# # - \usepackage{endfloat}
|
||||||
- \setmainfont{Calibri}
|
# - \setmainfont{Calibri}
|
||||||
# - \usepackage[UTF8, scheme=plain]{ctex}
|
# - \usepackage[UTF8, scheme=plain]{ctex}
|
||||||
# - \usepackage{float}
|
# - \usepackage{float}
|
||||||
- \usepackage[normalem]{ulem}
|
# - \usepackage[normalem]{ulem}
|
||||||
- \usepackage[doublespacing]{setspace}
|
# - \usepackage[doublespacing]{setspace}
|
||||||
- \usepackage{lineno}
|
# - \usepackage{lineno}
|
||||||
- \linenumbers
|
# - \linenumbers
|
||||||
journal:
|
# journal:
|
||||||
formatting: preprint # preprint | review | doublebind
|
# formatting: preprint # preprint | review | doublebind
|
||||||
model: 1p
|
# model: 1p
|
||||||
cite-style: authoryear
|
# cite-style: authoryear
|
||||||
# graphical-abstract: ""
|
# # graphical-abstract: ""
|
||||||
# highlights:
|
# # highlights:
|
||||||
# - A comprehensive model was contructed to evaluate the risk of odor occurrences
|
# # - A comprehensive model was contructed to evaluate the risk of odor occurrences
|
||||||
# - Turbidity distribution determine underwater light and MIB-producing *Planktothrix*
|
# # - Turbidity distribution determine underwater light and MIB-producing *Planktothrix*
|
||||||
# - Increasing flowrate increases turbidity that can control *Planktothrix* and MIB
|
# # - Increasing flowrate increases turbidity that can control *Planktothrix* and MIB
|
||||||
# - Odor control based on flow regulation in source water is "green" and fundamental
|
# # - Odor control based on flow regulation in source water is "green" and fundamental
|
||||||
filters:
|
# filters:
|
||||||
- latex-environment
|
# - latex-environment
|
||||||
commands: [clab]
|
commands: [clab]
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -57,6 +57,10 @@ commands: [clab]
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
::: {.content-visible when-format="html"}
|
::: {.content-visible when-format="html"}
|
||||||
# Color tip {.unnumbered}
|
# Color tip {.unnumbered}
|
||||||
|
|
||||||
@@ -81,6 +85,10 @@ commands: [clab]
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
Blabla. [Bla blaBla blaBla blaBla blaBla bla Bla bla.]{.clab options=r1q0101}
|
Blabla. [Bla blaBla blaBla blaBla blaBla bla Bla bla.]{.clab options=r1q0101}
|
||||||
|
|||||||
@@ -14,44 +14,45 @@ format:
|
|||||||
elsevier-html:
|
elsevier-html:
|
||||||
css: _extensions/inst/css/style.css
|
css: _extensions/inst/css/style.css
|
||||||
keep-md: true
|
keep-md: true
|
||||||
filters:
|
dplyr::filters:
|
||||||
- author-info-blocks
|
- author-info-blocks
|
||||||
epub: default
|
epub: default
|
||||||
docx:
|
docx:
|
||||||
reference-doc: _extensions/inst/word/MS.docx
|
reference-doc: _extensions/inst/word/MS.docx
|
||||||
filters:
|
dplyr::filters:
|
||||||
- author-info-blocks
|
- author-info-blocks
|
||||||
elsevier-pdf:
|
# elsevier-pdf:
|
||||||
keep-tex: true
|
# keep-tex: false
|
||||||
keep-md: true
|
# keep-md: false
|
||||||
include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex"
|
# include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex"
|
||||||
latex-clean: false
|
# latex-clean: false
|
||||||
header-includes:
|
# header-includes:
|
||||||
# - \usepackage{threeparttable}
|
# # - \usepackage{threeparttable}
|
||||||
# - \usepackage{fontspec}
|
# # - \usepackage{fontspec}
|
||||||
# - \usepackage{endfloat}
|
# # - \usepackage{endfloat}
|
||||||
- \setmainfont{Calibri}
|
# - \setmainfont{Calibri}
|
||||||
# - \usepackage[UTF8, scheme=plain]{ctex}
|
# - \usepackage[UTF8, scheme=plain]{ctex}
|
||||||
# - \usepackage{float}
|
# - \usepackage{float}
|
||||||
- \usepackage[normalem]{ulem}
|
# - \usepackage[normalem]{ulem}
|
||||||
- \usepackage[doublespacing]{setspace}
|
# - \usepackage[doublespacing]{setspace}
|
||||||
- \usepackage{lineno}
|
# - \usepackage{lineno}
|
||||||
- \linenumbers
|
# - \linenumbers
|
||||||
journal:
|
# journal:
|
||||||
formatting: preprint # preprint | review | doublebind
|
# formatting: preprint # preprint | review | doublebind
|
||||||
model: 1p
|
# model: 1p
|
||||||
cite-style: authoryear
|
# cite-style: authoryear
|
||||||
# graphical-abstract: ""
|
# # graphical-abstract: ""
|
||||||
# highlights:
|
# # highlights:
|
||||||
# - A comprehensive model was contructed to evaluate the risk of odor occurrences
|
# # - A comprehensive model was contructed to evaluate the risk of odor occurrences
|
||||||
# - Turbidity distribution determine underwater light and MIB-producing *Planktothrix*
|
# # - Turbidity distribution determine underwater light and MIB-producing *Planktothrix*
|
||||||
# - Increasing flowrate increases turbidity that can control *Planktothrix* and MIB
|
# # - Increasing flowrate increases turbidity that can control *Planktothrix* and MIB
|
||||||
# - Odor control based on flow regulation in source water is "green" and fundamental
|
# # - Odor control based on flow regulation in source water is "green" and fundamental
|
||||||
filters:
|
# filters:
|
||||||
- latex-environment
|
# - latex-environment
|
||||||
commands: [clab]
|
commands: [clab]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
::: {.content-visible when-format="html"}
|
::: {.content-visible when-format="html"}
|
||||||
# Color tip {.unnumbered}
|
# Color tip {.unnumbered}
|
||||||
|
|
||||||
@@ -72,20 +73,14 @@ lang <- "en"
|
|||||||
RM <- "F" # global rendermode, L: load pdata; F: fast load pdf # nolint
|
RM <- "F" # global rendermode, L: load pdata; F: fast load pdf # nolint
|
||||||
isRendering <- isTRUE(getOption("knitr.in.progress"))
|
isRendering <- isTRUE(getOption("knitr.in.progress"))
|
||||||
require(tidyverse)
|
require(tidyverse)
|
||||||
require(drwateR)
|
|
||||||
require(rmdify)
|
|
||||||
rmdify::rmd_init()
|
|
||||||
require(dateR)
|
|
||||||
require(uniteR)
|
|
||||||
require(langeR)
|
|
||||||
require(patchwork)
|
|
||||||
require(lubridate)
|
require(lubridate)
|
||||||
|
require(patchwork)
|
||||||
|
require(drwateR)
|
||||||
|
rmdify::rmd_init()
|
||||||
biburl <- "http://drwater.rcees.ac.cn/cloud/s/ref_ming/download/Ref.bib"
|
biburl <- "http://drwater.rcees.ac.cn/cloud/s/ref_ming/download/Ref.bib"
|
||||||
if (!isRendering) { download.file(biburl, destfile = "Ref.bib") }
|
if (!isRendering) { download.file(biburl, destfile = "Ref.bib") }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
Blabla. [Bla blaBla blaBla blaBla blaBla bla Bla bla.]{.clab options=r1q0101}
|
Blabla. [Bla blaBla blaBla blaBla blaBla bla Bla bla.]{.clab options=r1q0101}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
\relax
|
||||||
|
\providecommand\zref@newlabel[2]{}
|
||||||
|
\providecommand\hyper@newdestlabel[2]{}
|
||||||
|
\providecommand*\HyPL@Entry[1]{}
|
||||||
|
\providecommand\babel@aux[2]{}
|
||||||
|
\@nameuse{bbl@beforestart}
|
||||||
|
\bibstyle{elsarticle-num}
|
||||||
|
\emailauthor{mingsu@rcees.ac.cn}{Ming Su}
|
||||||
|
\emailauthor{yangmin@rcees.ac.cn}{Min Yang\corref {cor1}}
|
||||||
|
\Newlabel{cor1}{1}
|
||||||
|
\HyPL@Entry{0<</S/D>>}
|
||||||
|
\babel@aux{english}{}
|
||||||
|
\Newlabel{1}{a}
|
||||||
|
\Newlabel{2}{b}
|
||||||
|
\newlabel{supplementary-material}{{b}{1}{Supplementary Material}{section*.1}{}}
|
||||||
|
\@writefile{toc}{\contentsline {section}{Supplementary Material}{1}{section*.1}\protected@file@percent }
|
||||||
|
\bibdata{../BB/Ref.bib,../BB/localRef.bib}
|
||||||
|
\gdef \@abspage@last{2}
|
||||||
@@ -38,25 +38,20 @@ filters:
|
|||||||
commands: [clab]
|
commands: [clab]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
```{r}
|
```{r}
|
||||||
#| label: setup
|
#| label: setup
|
||||||
#| include: false
|
#| include: false
|
||||||
#| cache: false
|
#| cache: false
|
||||||
options(tinytex.clean = FALSE)
|
|
||||||
lang <- "en"
|
lang <- "en"
|
||||||
RM <- "F" # global rendermode, L: load pdata; F: fast load pdf
|
RM <- "F" # global rendermode, L: load pdata; F: fast load pdf # nolint
|
||||||
isRendering <- isTRUE(getOption('knitr.in.progress'))
|
isRendering <- isTRUE(getOption("knitr.in.progress"))
|
||||||
require(lubridate)
|
|
||||||
require(tidyverse)
|
require(tidyverse)
|
||||||
|
require(lubridate)
|
||||||
require(patchwork)
|
require(patchwork)
|
||||||
require(drwateR)
|
require(drwateR)
|
||||||
require(dwfun)
|
|
||||||
require(rmdify)
|
|
||||||
rmdify::rmd_init()
|
rmdify::rmd_init()
|
||||||
require(langeR)
|
biburl <- "http://drwater.rcees.ac.cn/cloud/s/ref_ming/download/Ref.bib"
|
||||||
require(dateR)
|
if (!isRendering) { download.file(biburl, destfile = "Ref.bib") }
|
||||||
require(uniteR)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# Supplementary Material {-}
|
# Supplementary Material {-}
|
||||||
|
|||||||
@@ -42,14 +42,28 @@
|
|||||||
\setlength{\emergencystretch}{3em} % prevent overfull lines
|
\setlength{\emergencystretch}{3em} % prevent overfull lines
|
||||||
\setcounter{secnumdepth}{5}
|
\setcounter{secnumdepth}{5}
|
||||||
% Make \paragraph and \subparagraph free-standing
|
% Make \paragraph and \subparagraph free-standing
|
||||||
|
\makeatletter
|
||||||
\ifx\paragraph\undefined\else
|
\ifx\paragraph\undefined\else
|
||||||
\let\oldparagraph\paragraph
|
\let\oldparagraph\paragraph
|
||||||
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
|
\renewcommand{\paragraph}{
|
||||||
|
\@ifstar
|
||||||
|
\xxxParagraphStar
|
||||||
|
\xxxParagraphNoStar
|
||||||
|
}
|
||||||
|
\newcommand{\xxxParagraphStar}[1]{\oldparagraph*{#1}\mbox{}}
|
||||||
|
\newcommand{\xxxParagraphNoStar}[1]{\oldparagraph{#1}\mbox{}}
|
||||||
\fi
|
\fi
|
||||||
\ifx\subparagraph\undefined\else
|
\ifx\subparagraph\undefined\else
|
||||||
\let\oldsubparagraph\subparagraph
|
\let\oldsubparagraph\subparagraph
|
||||||
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
|
\renewcommand{\subparagraph}{
|
||||||
|
\@ifstar
|
||||||
|
\xxxSubParagraphStar
|
||||||
|
\xxxSubParagraphNoStar
|
||||||
|
}
|
||||||
|
\newcommand{\xxxSubParagraphStar}[1]{\oldsubparagraph*{#1}\mbox{}}
|
||||||
|
\newcommand{\xxxSubParagraphNoStar}[1]{\oldsubparagraph{#1}\mbox{}}
|
||||||
\fi
|
\fi
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
|
||||||
\providecommand{\tightlist}{%
|
\providecommand{\tightlist}{%
|
||||||
@@ -152,6 +166,72 @@
|
|||||||
\usepackage{lineno}
|
\usepackage{lineno}
|
||||||
\linenumbers
|
\linenumbers
|
||||||
\makeatletter
|
\makeatletter
|
||||||
|
\@ifpackageloaded{float}{}{\usepackage{float}}
|
||||||
|
\floatstyle{plain}
|
||||||
|
\@ifundefined{c@chapter}{\newfloat{sfg}{h}{lost}}{\newfloat{sfg}{h}{lost}[chapter]}
|
||||||
|
\floatname{sfg}{Fig. S}
|
||||||
|
\newcommand*\quartosfgref[1]{Fig. \hyperref[#1]{S\ref{#1}}}
|
||||||
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
|
\DeclareCaptionLabelFormat{quartosfgreflabelformat}{#1#2}
|
||||||
|
\captionsetup[sfg]{labelformat=quartosfgreflabelformat}
|
||||||
|
\newcommand*\listofsfgs{\listof{sfg}{List of Supplementary Figures}}
|
||||||
|
\makeatother
|
||||||
|
\makeatletter
|
||||||
|
\@ifpackageloaded{float}{}{\usepackage{float}}
|
||||||
|
\floatstyle{plain}
|
||||||
|
\@ifundefined{c@chapter}{\newfloat{stb}{h}{lost}}{\newfloat{stb}{h}{lost}[chapter]}
|
||||||
|
\floatname{stb}{Table S}
|
||||||
|
\newcommand*\quartostbref[1]{Table \hyperref[#1]{S\ref{#1}}}
|
||||||
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
|
\DeclareCaptionLabelFormat{quartostbreflabelformat}{#1#2}
|
||||||
|
\captionsetup[stb]{labelformat=quartostbreflabelformat}
|
||||||
|
\newcommand*\listofstbs{\listof{stb}{List of Supplementary Tables}}
|
||||||
|
\makeatother
|
||||||
|
\makeatletter
|
||||||
|
\@ifpackageloaded{float}{}{\usepackage{float}}
|
||||||
|
\floatstyle{plain}
|
||||||
|
\@ifundefined{c@chapter}{\newfloat{seq}{h}{lost}}{\newfloat{seq}{h}{lost}[chapter]}
|
||||||
|
\floatname{seq}{Eq S}
|
||||||
|
\newcommand*\quartoseqref[1]{Eq \hyperref[#1]{S\ref{#1}}}
|
||||||
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
|
\DeclareCaptionLabelFormat{quartoseqreflabelformat}{#1#2}
|
||||||
|
\captionsetup[seq]{labelformat=quartoseqreflabelformat}
|
||||||
|
\newcommand*\listofseqs{\listof{seq}{List of Supplementary Equations}}
|
||||||
|
\makeatother
|
||||||
|
\makeatletter
|
||||||
|
\@ifpackageloaded{float}{}{\usepackage{float}}
|
||||||
|
\floatstyle{plain}
|
||||||
|
\@ifundefined{c@chapter}{\newfloat{rfg}{h}{lost}}{\newfloat{rfg}{h}{lost}[chapter]}
|
||||||
|
\floatname{rfg}{Fig. R}
|
||||||
|
\newcommand*\quartorfgref[1]{Fig. \hyperref[#1]{R\ref{#1}}}
|
||||||
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
|
\DeclareCaptionLabelFormat{quartorfgreflabelformat}{#1#2}
|
||||||
|
\captionsetup[rfg]{labelformat=quartorfgreflabelformat}
|
||||||
|
\newcommand*\listofrfgs{\listof{rfg}{List of Revision Figures}}
|
||||||
|
\makeatother
|
||||||
|
\makeatletter
|
||||||
|
\@ifpackageloaded{float}{}{\usepackage{float}}
|
||||||
|
\floatstyle{plain}
|
||||||
|
\@ifundefined{c@chapter}{\newfloat{rtb}{h}{lost}}{\newfloat{rtb}{h}{lost}[chapter]}
|
||||||
|
\floatname{rtb}{Table R}
|
||||||
|
\newcommand*\quartortbref[1]{Table \hyperref[#1]{R\ref{#1}}}
|
||||||
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
|
\DeclareCaptionLabelFormat{quartortbreflabelformat}{#1#2}
|
||||||
|
\captionsetup[rtb]{labelformat=quartortbreflabelformat}
|
||||||
|
\newcommand*\listofrtbs{\listof{rtb}{List of Revision Tables}}
|
||||||
|
\makeatother
|
||||||
|
\makeatletter
|
||||||
|
\@ifpackageloaded{float}{}{\usepackage{float}}
|
||||||
|
\floatstyle{plain}
|
||||||
|
\@ifundefined{c@chapter}{\newfloat{req}{h}{lost}}{\newfloat{req}{h}{lost}[chapter]}
|
||||||
|
\floatname{req}{Eq R}
|
||||||
|
\newcommand*\quartoreqref[1]{Eq \hyperref[#1]{R\ref{#1}}}
|
||||||
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
|
\DeclareCaptionLabelFormat{quartoreqreflabelformat}{#1#2}
|
||||||
|
\captionsetup[req]{labelformat=quartoreqreflabelformat}
|
||||||
|
\newcommand*\listofreqs{\listof{req}{List of Revision Equations}}
|
||||||
|
\makeatother
|
||||||
|
\makeatletter
|
||||||
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
\AtBeginDocument{%
|
\AtBeginDocument{%
|
||||||
\ifdefined\contentsname
|
\ifdefined\contentsname
|
||||||
@@ -185,6 +265,7 @@
|
|||||||
\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]}
|
\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]}
|
||||||
\floatname{codelisting}{Listing}
|
\floatname{codelisting}{Listing}
|
||||||
\newcommand*\listoflistings{\listof{codelisting}{List of Listings}}
|
\newcommand*\listoflistings{\listof{codelisting}{List of Listings}}
|
||||||
|
\captionsetup{labelsep=none}
|
||||||
\makeatother
|
\makeatother
|
||||||
\makeatletter
|
\makeatletter
|
||||||
\makeatother
|
\makeatother
|
||||||
@@ -192,6 +273,7 @@
|
|||||||
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
\@ifpackageloaded{caption}{}{\usepackage{caption}}
|
||||||
\@ifpackageloaded{subcaption}{}{\usepackage{subcaption}}
|
\@ifpackageloaded{subcaption}{}{\usepackage{subcaption}}
|
||||||
\makeatother
|
\makeatother
|
||||||
|
|
||||||
\ifLuaTeX
|
\ifLuaTeX
|
||||||
\usepackage[bidi=basic]{babel}
|
\usepackage[bidi=basic]{babel}
|
||||||
\else
|
\else
|
||||||
@@ -206,7 +288,8 @@
|
|||||||
\fi
|
\fi
|
||||||
\usepackage[]{natbib}
|
\usepackage[]{natbib}
|
||||||
\bibliographystyle{elsarticle-num}
|
\bibliographystyle{elsarticle-num}
|
||||||
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
|
\usepackage{bookmark}
|
||||||
|
|
||||||
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
|
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
|
||||||
\urlstyle{same} % disable monospaced font for URLs
|
\urlstyle{same} % disable monospaced font for URLs
|
||||||
\hypersetup{
|
\hypersetup{
|
||||||
@@ -220,6 +303,7 @@
|
|||||||
urlcolor={Blue},
|
urlcolor={Blue},
|
||||||
pdfcreator={LaTeX via pandoc}}
|
pdfcreator={LaTeX via pandoc}}
|
||||||
|
|
||||||
|
|
||||||
\setlength{\parindent}{6pt}
|
\setlength{\parindent}{6pt}
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\begin{frontmatter}
|
\begin{frontmatter}
|
||||||
@@ -251,6 +335,8 @@ Sciences},city={Beijing},postcode={100049}}
|
|||||||
|
|
||||||
|
|
||||||
\end{frontmatter}
|
\end{frontmatter}
|
||||||
|
|
||||||
|
|
||||||
\section*{Supplementary Material}\label{supplementary-material}
|
\section*{Supplementary Material}\label{supplementary-material}
|
||||||
\addcontentsline{toc}{section}{Supplementary Material}
|
\addcontentsline{toc}{section}{Supplementary Material}
|
||||||
|
|
||||||
@@ -263,4 +349,5 @@ to the main text.
|
|||||||
\bibliography{../BB/Ref.bib,../BB/localRef.bib}
|
\bibliography{../BB/Ref.bib,../BB/localRef.bib}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
+74
-22
@@ -40,23 +40,77 @@ crossref:
|
|||||||
tbl-prefix: Table # (default is "Table")
|
tbl-prefix: Table # (default is "Table")
|
||||||
eq-prefix: Eq.
|
eq-prefix: Eq.
|
||||||
ref-hyperlink: true # (default is true)
|
ref-hyperlink: true # (default is true)
|
||||||
|
custom:
|
||||||
|
- kind: float
|
||||||
|
key: sfg
|
||||||
|
reference-prefix: "Fig. S"
|
||||||
|
space-before-numbering: false
|
||||||
|
caption-prefix: "Fig. S"
|
||||||
|
latex-env: sfg
|
||||||
|
latex-list-of-file-extension: lost
|
||||||
|
latex-list-of-description: Supplementary Figure
|
||||||
|
- kind: float
|
||||||
|
key: stb
|
||||||
|
reference-prefix: "Table S"
|
||||||
|
space-before-numbering: false
|
||||||
|
caption-prefix: "Table S"
|
||||||
|
latex-env: stb
|
||||||
|
latex-list-of-file-extension: lost
|
||||||
|
latex-list-of-description: Supplementary Table
|
||||||
|
- kind: float
|
||||||
|
key: seq
|
||||||
|
reference-prefix: "Eq S"
|
||||||
|
space-before-numbering: false
|
||||||
|
caption-prefix: "Eq S"
|
||||||
|
latex-env: seq
|
||||||
|
latex-list-of-file-extension: lost
|
||||||
|
latex-list-of-description: Supplementary Equation
|
||||||
|
- kind: float
|
||||||
|
key: rfg
|
||||||
|
reference-prefix: "Fig. R"
|
||||||
|
space-before-numbering: false
|
||||||
|
caption-prefix: "Fig. R"
|
||||||
|
latex-env: rfg
|
||||||
|
latex-list-of-file-extension: lost
|
||||||
|
latex-list-of-description: Revision Figure
|
||||||
|
- kind: float
|
||||||
|
key: rtb
|
||||||
|
reference-prefix: "Table R"
|
||||||
|
space-before-numbering: false
|
||||||
|
caption-prefix: "Table R"
|
||||||
|
latex-env: rtb
|
||||||
|
latex-list-of-file-extension: lost
|
||||||
|
latex-list-of-description: Revision Table
|
||||||
|
- kind: float
|
||||||
|
key: req
|
||||||
|
reference-prefix: "Eq R"
|
||||||
|
space-before-numbering: false
|
||||||
|
caption-prefix: "Eq R"
|
||||||
|
latex-env: req
|
||||||
|
latex-list-of-file-extension: lost
|
||||||
|
latex-list-of-description: Revision Equation
|
||||||
|
prefer-html: true
|
||||||
|
|
||||||
|
# execute:
|
||||||
|
# freeze: auto # re-render only when source changes
|
||||||
|
# cache: true
|
||||||
|
|
||||||
project:
|
project:
|
||||||
type: website
|
type: website
|
||||||
output-dir: www/
|
output-dir: www/
|
||||||
# render:
|
render:
|
||||||
# - index.qmd
|
- index.qmd
|
||||||
# - MS/SM.qmd
|
- MS/SM.qmd
|
||||||
# - MS/MS.qmd
|
- MS/MS.qmd
|
||||||
# - MS/CL.qmd
|
- MS/CL.qmd
|
||||||
# - MS/HL.qmd
|
- MS/HL.qmd
|
||||||
# - MS/RN.qmd
|
# - MS/RN.qmd
|
||||||
# - MS/AC.qmd
|
# - MS/AC.qmd
|
||||||
website:
|
website:
|
||||||
title: "Version: {{< var branch >}}"
|
title: "Version: {{< var branch >}}"
|
||||||
reader-mode: true
|
reader-mode: true
|
||||||
site-url: https://drwater.rcees.ac.cn/{{< var projtype >}}/{{< var reponame >}}/@{{< var branch >}}
|
site-url: https://drwater.rcees.ac.cn/{{< var pubtype >}}/{{< var projtype >}}/{{< var reponame >}}/@{{< var branch >}}
|
||||||
repo-url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/src/branch/{{< var branch >}}
|
repo-url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}
|
||||||
repo-actions: [edit, source, issue]
|
repo-actions: [edit, source, issue]
|
||||||
page-navigation: true
|
page-navigation: true
|
||||||
page-footer: "Copyright 2023, [Ming Su](https://drwater.rcees.ac.cn)"
|
page-footer: "Copyright 2023, [Ming Su](https://drwater.rcees.ac.cn)"
|
||||||
@@ -73,28 +127,26 @@ website:
|
|||||||
file: MS/SM.qmd
|
file: MS/SM.qmd
|
||||||
- text: "Revision Notes"
|
- text: "Revision Notes"
|
||||||
file: MS/RN.qmd
|
file: MS/RN.qmd
|
||||||
- text: "Trackchanges"
|
|
||||||
file: TC/index.qmd
|
|
||||||
- text: "Slides"
|
- text: "Slides"
|
||||||
file: SD/index.qmd
|
file: SD/index.qmd
|
||||||
- text: "Other"
|
- text: "Other"
|
||||||
menu:
|
menu:
|
||||||
- text: "Highlights"
|
- text: "Highlights"
|
||||||
file: MS/HL.qmd
|
file: MS/HL.qmd
|
||||||
- text: "Cover Letter"
|
- text: "Cover Letter"
|
||||||
file: MS/CL.qmd
|
file: MS/CL.qmd
|
||||||
- text: "Author Credits"
|
# - text: "Author Credits"
|
||||||
file: MS/AC.qmd
|
# file: MS/AC.qmd
|
||||||
- text: "Report"
|
- text: "Trackchanges"
|
||||||
file: RP/index.qmd
|
file: TC/index.qmd
|
||||||
- text: "Acomplishment"
|
- text: "Accomplishment"
|
||||||
file: AC/index.qmd
|
file: AC/index.qmd
|
||||||
- icon: git
|
- icon: git
|
||||||
menu:
|
menu:
|
||||||
- text: Edit
|
- text: Edit
|
||||||
url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/_edit/
|
url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/src/branch/{{< var branch >}}
|
||||||
- text: Issue
|
- text: Issue
|
||||||
url: https://drwater.rcees.ac.cn/git/{{< var projtype >}}/{{< var reponame >}}/issues
|
url: https://drwater.rcees.ac.cn/git/manuscript/{{< var reponame >}}/issues
|
||||||
comments:
|
comments:
|
||||||
hypothesis:
|
hypothesis:
|
||||||
theme: clean
|
theme: clean
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
---
|
---
|
||||||
subtitle: "Abstract"
|
subtitle: "Abstract"
|
||||||
author: ""
|
author: ""
|
||||||
|
engine: knitr
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
```{bash}
|
||||||
|
#| echo: false
|
||||||
|
#| output: asis
|
||||||
|
grep "^abstract: " ./MS/MS.qmd | sed -e 's/^abstract: \"*\(.*\).$/\1/g'
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
+5
-2
File diff suppressed because one or more lines are too long
@@ -81,6 +81,7 @@ code span.st {
|
|||||||
|
|
||||||
code span.cf {
|
code span.cf {
|
||||||
color: #003B4F;
|
color: #003B4F;
|
||||||
|
font-weight: bold;
|
||||||
font-style: inherit;
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,6 +190,7 @@ code span.dv {
|
|||||||
|
|
||||||
code span.kw {
|
code span.kw {
|
||||||
color: #003B4F;
|
color: #003B4F;
|
||||||
|
font-weight: bold;
|
||||||
font-style: inherit;
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const layoutMarginEls = () => {
|
|||||||
// Find any conflicting margin elements and add margins to the
|
// Find any conflicting margin elements and add margins to the
|
||||||
// top to prevent overlap
|
// top to prevent overlap
|
||||||
const marginChildren = window.document.querySelectorAll(
|
const marginChildren = window.document.querySelectorAll(
|
||||||
".column-margin.column-container > * "
|
".column-margin.column-container > *, .margin-caption, .aside"
|
||||||
);
|
);
|
||||||
|
|
||||||
let lastBottom = 0;
|
let lastBottom = 0;
|
||||||
@@ -19,7 +19,9 @@ const layoutMarginEls = () => {
|
|||||||
marginChild.style.marginTop = null;
|
marginChild.style.marginTop = null;
|
||||||
const top = marginChild.getBoundingClientRect().top + window.scrollY;
|
const top = marginChild.getBoundingClientRect().top + window.scrollY;
|
||||||
if (top < lastBottom) {
|
if (top < lastBottom) {
|
||||||
const margin = lastBottom - top;
|
const marginChildStyle = window.getComputedStyle(marginChild);
|
||||||
|
const marginBottom = parseFloat(marginChildStyle["marginBottom"]);
|
||||||
|
const margin = lastBottom - top + marginBottom;
|
||||||
marginChild.style.marginTop = `${margin}px`;
|
marginChild.style.marginTop = `${margin}px`;
|
||||||
}
|
}
|
||||||
const styles = window.getComputedStyle(marginChild);
|
const styles = window.getComputedStyle(marginChild);
|
||||||
@@ -33,7 +35,15 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
// Recompute the position of margin elements anytime the body size changes
|
// Recompute the position of margin elements anytime the body size changes
|
||||||
if (window.ResizeObserver) {
|
if (window.ResizeObserver) {
|
||||||
const resizeObserver = new window.ResizeObserver(
|
const resizeObserver = new window.ResizeObserver(
|
||||||
throttle(layoutMarginEls, 50)
|
throttle(() => {
|
||||||
|
layoutMarginEls();
|
||||||
|
if (
|
||||||
|
window.document.body.getBoundingClientRect().width < 990 &&
|
||||||
|
isReaderMode()
|
||||||
|
) {
|
||||||
|
quartoToggleReader();
|
||||||
|
}
|
||||||
|
}, 50)
|
||||||
);
|
);
|
||||||
resizeObserver.observe(window.document.body);
|
resizeObserver.observe(window.document.body);
|
||||||
}
|
}
|
||||||
@@ -84,7 +94,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
if (link.href.indexOf("#") !== -1) {
|
if (link.href.indexOf("#") !== -1) {
|
||||||
const anchor = link.href.split("#")[1];
|
const anchor = link.href.split("#")[1];
|
||||||
const heading = window.document.querySelector(
|
const heading = window.document.querySelector(
|
||||||
`[data-anchor-id=${anchor}]`
|
`[data-anchor-id="${anchor}"]`
|
||||||
);
|
);
|
||||||
if (heading) {
|
if (heading) {
|
||||||
// Add the class
|
// Add the class
|
||||||
@@ -124,8 +134,10 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
window.innerHeight + window.pageYOffset >=
|
window.innerHeight + window.pageYOffset >=
|
||||||
window.document.body.offsetHeight
|
window.document.body.offsetHeight
|
||||||
) {
|
) {
|
||||||
|
// This is the no-scroll case where last section should be the active one
|
||||||
sectionIndex = 0;
|
sectionIndex = 0;
|
||||||
} else {
|
} else {
|
||||||
|
// This finds the last section visible on screen that should be made active
|
||||||
sectionIndex = [...sections].reverse().findIndex((section) => {
|
sectionIndex = [...sections].reverse().findIndex((section) => {
|
||||||
if (section) {
|
if (section) {
|
||||||
return window.pageYOffset >= section.offsetTop - sectionMargin;
|
return window.pageYOffset >= section.offsetTop - sectionMargin;
|
||||||
@@ -307,6 +319,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
for (const child of el.children) {
|
for (const child of el.children) {
|
||||||
child.style.opacity = 0;
|
child.style.opacity = 0;
|
||||||
child.style.overflow = "hidden";
|
child.style.overflow = "hidden";
|
||||||
|
child.style.pointerEvents = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
nexttick(() => {
|
nexttick(() => {
|
||||||
@@ -348,6 +361,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
|
|
||||||
const clone = child.cloneNode(true);
|
const clone = child.cloneNode(true);
|
||||||
clone.style.opacity = 1;
|
clone.style.opacity = 1;
|
||||||
|
clone.style.pointerEvents = null;
|
||||||
clone.style.display = null;
|
clone.style.display = null;
|
||||||
toggleContents.append(clone);
|
toggleContents.append(clone);
|
||||||
}
|
}
|
||||||
@@ -422,6 +436,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
for (const child of el.children) {
|
for (const child of el.children) {
|
||||||
child.style.opacity = 1;
|
child.style.opacity = 1;
|
||||||
child.style.overflow = null;
|
child.style.overflow = null;
|
||||||
|
child.style.pointerEvents = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const placeholderEl = window.document.getElementById(
|
const placeholderEl = window.document.getElementById(
|
||||||
@@ -729,6 +744,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
// Process the collapse state if this is an UL
|
// Process the collapse state if this is an UL
|
||||||
if (el.tagName === "UL") {
|
if (el.tagName === "UL") {
|
||||||
if (tocOpenDepth === -1 && depth > 1) {
|
if (tocOpenDepth === -1 && depth > 1) {
|
||||||
|
// toc-expand: false
|
||||||
el.classList.add("collapse");
|
el.classList.add("collapse");
|
||||||
} else if (
|
} else if (
|
||||||
depth <= tocOpenDepth ||
|
depth <= tocOpenDepth ||
|
||||||
@@ -747,10 +763,9 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// walk the TOC and expand / collapse any items that should be shown
|
// walk the TOC and expand / collapse any items that should be shown
|
||||||
|
|
||||||
if (tocEl) {
|
if (tocEl) {
|
||||||
walk(tocEl, 0);
|
|
||||||
updateActiveLink();
|
updateActiveLink();
|
||||||
|
walk(tocEl, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Throttle the scroll event and walk peridiocally
|
// Throttle the scroll event and walk peridiocally
|
||||||
@@ -769,6 +784,10 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
window.addEventListener(
|
window.addEventListener(
|
||||||
"resize",
|
"resize",
|
||||||
throttle(() => {
|
throttle(() => {
|
||||||
|
if (tocEl) {
|
||||||
|
updateActiveLink();
|
||||||
|
walk(tocEl, 0);
|
||||||
|
}
|
||||||
if (!isReaderMode()) {
|
if (!isReaderMode()) {
|
||||||
hideOverlappedSidebars();
|
hideOverlappedSidebars();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,45 @@ const headroomChanged = new CustomEvent("quarto-hrChanged", {
|
|||||||
composed: false,
|
composed: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const announceDismiss = () => {
|
||||||
|
const annEl = window.document.getElementById("quarto-announcement");
|
||||||
|
if (annEl) {
|
||||||
|
annEl.remove();
|
||||||
|
|
||||||
|
const annId = annEl.getAttribute("data-announcement-id");
|
||||||
|
window.localStorage.setItem(`quarto-announce-${annId}`, "true");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const announceRegister = () => {
|
||||||
|
const annEl = window.document.getElementById("quarto-announcement");
|
||||||
|
if (annEl) {
|
||||||
|
const annId = annEl.getAttribute("data-announcement-id");
|
||||||
|
const isDismissed =
|
||||||
|
window.localStorage.getItem(`quarto-announce-${annId}`) || false;
|
||||||
|
if (isDismissed) {
|
||||||
|
announceDismiss();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
annEl.classList.remove("hidden");
|
||||||
|
}
|
||||||
|
|
||||||
|
const actionEl = annEl.querySelector(".quarto-announcement-action");
|
||||||
|
if (actionEl) {
|
||||||
|
actionEl.addEventListener("click", function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
// Hide the bar immediately
|
||||||
|
announceDismiss();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
window.document.addEventListener("DOMContentLoaded", function () {
|
window.document.addEventListener("DOMContentLoaded", function () {
|
||||||
let init = false;
|
let init = false;
|
||||||
|
|
||||||
|
announceRegister();
|
||||||
|
|
||||||
// Manage the back to top button, if one is present.
|
// Manage the back to top button, if one is present.
|
||||||
let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
||||||
const scrollDownBuffer = 5;
|
const scrollDownBuffer = 5;
|
||||||
@@ -85,6 +121,17 @@ window.document.addEventListener("DOMContentLoaded", function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function dashboardOffset() {
|
||||||
|
const dashboardNavEl = window.document.getElementById(
|
||||||
|
"quarto-dashboard-header"
|
||||||
|
);
|
||||||
|
if (dashboardNavEl !== null) {
|
||||||
|
return dashboardNavEl.clientHeight;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function updateDocumentOffsetWithoutAnimation() {
|
function updateDocumentOffsetWithoutAnimation() {
|
||||||
updateDocumentOffset(false);
|
updateDocumentOffset(false);
|
||||||
}
|
}
|
||||||
@@ -92,7 +139,7 @@ window.document.addEventListener("DOMContentLoaded", function () {
|
|||||||
function updateDocumentOffset(animated) {
|
function updateDocumentOffset(animated) {
|
||||||
// set body offset
|
// set body offset
|
||||||
const topOffset = headerOffset();
|
const topOffset = headerOffset();
|
||||||
const bodyOffset = topOffset + footerOffset();
|
const bodyOffset = topOffset + footerOffset() + dashboardOffset();
|
||||||
const bodyEl = window.document.body;
|
const bodyEl = window.document.body;
|
||||||
bodyEl.setAttribute("data-bs-offset", topOffset);
|
bodyEl.setAttribute("data-bs-offset", topOffset);
|
||||||
bodyEl.style.paddingTop = topOffset + "px";
|
bodyEl.style.paddingTop = topOffset + "px";
|
||||||
@@ -226,6 +273,7 @@ window.document.addEventListener("DOMContentLoaded", function () {
|
|||||||
const links = window.document.querySelectorAll("a");
|
const links = window.document.querySelectorAll("a");
|
||||||
for (let i = 0; i < links.length; i++) {
|
for (let i = 0; i < links.length; i++) {
|
||||||
if (links[i].href) {
|
if (links[i].href) {
|
||||||
|
links[i].dataset.originalHref = links[i].href;
|
||||||
links[i].href = links[i].href.replace(/\/index\.html/, "/");
|
links[i].href = links[i].href.replace(/\/index\.html/, "/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
classNames: {
|
classNames: {
|
||||||
form: "d-flex",
|
form: "d-flex",
|
||||||
},
|
},
|
||||||
|
placeholder: language["search-text-placeholder"],
|
||||||
translations: {
|
translations: {
|
||||||
clearButtonTitle: language["search-clear-button-title"],
|
clearButtonTitle: language["search-clear-button-title"],
|
||||||
detachedCancelButtonText: language["search-detached-cancel-button-title"],
|
detachedCancelButtonText: language["search-detached-cancel-button-title"],
|
||||||
@@ -392,7 +393,12 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
return focusedEl.tagName.toLowerCase() === tag;
|
return focusedEl.tagName.toLowerCase() === tag;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (kbds && kbds.includes(key) && !isFormElFocused) {
|
if (
|
||||||
|
kbds &&
|
||||||
|
kbds.includes(key) &&
|
||||||
|
!isFormElFocused &&
|
||||||
|
!document.activeElement.isContentEditable
|
||||||
|
) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
window.quartoOpenSearch();
|
window.quartoOpenSearch();
|
||||||
}
|
}
|
||||||
@@ -669,6 +675,18 @@ function showCopyLink(query, options) {
|
|||||||
// create the index
|
// create the index
|
||||||
var fuseIndex = undefined;
|
var fuseIndex = undefined;
|
||||||
var shownWarning = false;
|
var shownWarning = false;
|
||||||
|
|
||||||
|
// fuse index options
|
||||||
|
const kFuseIndexOptions = {
|
||||||
|
keys: [
|
||||||
|
{ name: "title", weight: 20 },
|
||||||
|
{ name: "section", weight: 20 },
|
||||||
|
{ name: "text", weight: 10 },
|
||||||
|
],
|
||||||
|
ignoreLocation: true,
|
||||||
|
threshold: 0.1,
|
||||||
|
};
|
||||||
|
|
||||||
async function readSearchData() {
|
async function readSearchData() {
|
||||||
// Initialize the search index on demand
|
// Initialize the search index on demand
|
||||||
if (fuseIndex === undefined) {
|
if (fuseIndex === undefined) {
|
||||||
@@ -679,17 +697,7 @@ async function readSearchData() {
|
|||||||
shownWarning = true;
|
shownWarning = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// create fuse index
|
const fuse = new window.Fuse([], kFuseIndexOptions);
|
||||||
const options = {
|
|
||||||
keys: [
|
|
||||||
{ name: "title", weight: 20 },
|
|
||||||
{ name: "section", weight: 20 },
|
|
||||||
{ name: "text", weight: 10 },
|
|
||||||
],
|
|
||||||
ignoreLocation: true,
|
|
||||||
threshold: 0.1,
|
|
||||||
};
|
|
||||||
const fuse = new window.Fuse([], options);
|
|
||||||
|
|
||||||
// fetch the main search.json
|
// fetch the main search.json
|
||||||
const response = await fetch(offsetURL("search.json"));
|
const response = await fetch(offsetURL("search.json"));
|
||||||
@@ -1220,8 +1228,34 @@ function algoliaSearch(query, limit, algoliaOptions) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function fuseSearch(query, fuse, fuseOptions) {
|
let subSearchTerm = undefined;
|
||||||
return fuse.search(query, fuseOptions).map((result) => {
|
let subSearchFuse = undefined;
|
||||||
|
const kFuseMaxWait = 125;
|
||||||
|
|
||||||
|
async function fuseSearch(query, fuse, fuseOptions) {
|
||||||
|
let index = fuse;
|
||||||
|
// Fuse.js using the Bitap algorithm for text matching which runs in
|
||||||
|
// O(nm) time (no matter the structure of the text). In our case this
|
||||||
|
// means that long search terms mixed with large index gets very slow
|
||||||
|
//
|
||||||
|
// This injects a subIndex that will be used once the terms get long enough
|
||||||
|
// Usually making this subindex is cheap since there will typically be
|
||||||
|
// a subset of results matching the existing query
|
||||||
|
if (subSearchFuse !== undefined && query.startsWith(subSearchTerm)) {
|
||||||
|
// Use the existing subSearchFuse
|
||||||
|
index = subSearchFuse;
|
||||||
|
} else if (subSearchFuse !== undefined) {
|
||||||
|
// The term changed, discard the existing fuse
|
||||||
|
subSearchFuse = undefined;
|
||||||
|
subSearchTerm = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search using the active fuse
|
||||||
|
const then = performance.now();
|
||||||
|
const resultsRaw = await index.search(query, fuseOptions);
|
||||||
|
const now = performance.now();
|
||||||
|
|
||||||
|
const results = resultsRaw.map((result) => {
|
||||||
const addParam = (url, name, value) => {
|
const addParam = (url, name, value) => {
|
||||||
const anchorParts = url.split("#");
|
const anchorParts = url.split("#");
|
||||||
const baseUrl = anchorParts[0];
|
const baseUrl = anchorParts[0];
|
||||||
@@ -1238,4 +1272,19 @@ function fuseSearch(query, fuse, fuseOptions) {
|
|||||||
crumbs: result.item.crumbs,
|
crumbs: result.item.crumbs,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// If we don't have a subfuse and the query is long enough, go ahead
|
||||||
|
// and create a subfuse to use for subsequent queries
|
||||||
|
if (
|
||||||
|
now - then > kFuseMaxWait &&
|
||||||
|
subSearchFuse === undefined &&
|
||||||
|
resultsRaw.length < fuseOptions.limit
|
||||||
|
) {
|
||||||
|
subSearchTerm = query;
|
||||||
|
subSearchFuse = new window.Fuse([], kFuseIndexOptions);
|
||||||
|
resultsRaw.forEach((rr) => {
|
||||||
|
subSearchFuse.add(rr.item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user