feat: migration vers template academic-homepage original
Build and Deploy Jekyll / deploy (push) Successful in 42s

This commit is contained in:
2026-05-25 20:23:42 +02:00
parent 8500659207
commit b3c00734c2
78 changed files with 3458 additions and 188 deletions
+4 -1
View File
@@ -2,6 +2,9 @@ _site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata
vendor/
# Ignore folders generated by Bundler
.bundle/
vendor/
Gemfile.lock
.DS_Store
+5 -8
View File
@@ -1,10 +1,7 @@
---
layout: default
title: "404 Page introuvable"
layout: prompt
title: 404 - Page Not Found
---
<div style="text-align:center;padding:4rem 0">
<div style="font-size:4rem;margin-bottom:1rem">🔭</div>
<h1 style="font-size:1.5rem;margin-bottom:1rem">Page introuvable</h1>
<p style="color:var(--text-muted);margin-bottom:2rem">Cette page n'existe pas ou a été déplacée.</p>
<a href="/" style="background:var(--accent);color:white;padding:8px 20px;border-radius:8px;text-decoration:none">Retour à l'accueil</a>
</div>
<h1 class="mt-5">404</h1>
<p class="lead">The requested page could not be found.</p>
<p><a href="{{ '/' | relative_url }}">Go home</a></p>
+32 -3
View File
@@ -1,4 +1,33 @@
source "https://rubygems.org"
gem "jekyll", "~> 4.3"
gem "jekyll-seo-tag"
gem "webrick"
# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
# bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "jekyll", "~> 3.9"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
# gem "minima", "~> 2.0"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins
# If you have any plugins, put them here!
group :jekyll_plugins do
gem "jekyll-email-protect"
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
# Performance-booster for watching directories on Windows
# Version updated to 0.2: https://github.com/luost26/academic-homepage/issues/23
gem "wdm", "~> 0.2" if Gem.win_platform?
gem "webrick", "~> 1.7"
gem "kramdown-parser-gfm"
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Shitong Luo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+86
View File
@@ -0,0 +1,86 @@
# academic-homepage
[![Preview](assets/images/etc/preview.png)](https://luost26.github.io/academic-homepage/)
[![pages-build-deployment](https://github.com/luost26/academic-homepage/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/luost26/academic-homepage/actions/workflows/pages/pages-build-deployment)
[![Hits](https://hits.sh/github.com/luost26/academic-homepage.svg?view=today-total)](https://hits.sh/github.com/luost26/academic-homepage/)
[![GitHub stars](https://img.shields.io/github/stars/luost26/academic-homepage)](https://github.com/luost26/academic-homepage)
[![GitHub forks](https://img.shields.io/github/forks/luost26/academic-homepage)](https://github.com/luost26/academic-homepage/forks)
<!--[![W3C Validation](https://img.shields.io/w3c-validation/html?targetUrl=https%3A%2F%2Fluost26.github.io%2Facademic-homepage)](https://validator.nu/?doc=https%3A%2F%2Fluost26.github.io%2Facademic-homepage)-->
A GitHub Pages (Jekyll) template for personal academic website. Click [here](https://luost26.github.io/academic-homepage/) to see the demo.
## User Community
[🏡](https://luost.me/)
[:star:](https://cch1999.github.io/)
[:star:](https://kyrrego.github.io/)
[:star:](https://ced3-han.github.io/)
[:star:](https://lihengchen.com/)
[:star:](https://hpwang-whu.github.io/)
[:star:](https://zhang-yingyi.github.io/)
[:star:](https://wby24.github.io/)
[:star:](https://pengfeixu.com/)
[:star:](https://boqiuphd.github.io/)
[:star:](https://www.huabing.li/)
[:star:](https://xiecuiying.github.io/)
[:star:](https://hannyang.github.io/)
[:star:](https://king-play.github.io/)
[🤖](https://andrewcwlee.github.io)
[:star:](https://laiyao1.github.io)
[🌜](https://tmsultan.github.io)
[🚀](https://zaxguo.github.io)
[:gemini:](https://hongyang-du.github.io)
[:star:](https://thuanz123.github.io)
[🧬](https://gdalba.github.io/)
[:star:](https://yhhan.com/)
[🌔](https://chen-huaneng.github.io/academic)
[:star:](https://jwklee.github.io/)
[😼](https://onethousandwu.com/)
[🔬](https://kwen-chen.github.io/)
[🧑‍🔬](https://shengxiang-lin.github.io/)
:hugs: Feel free to tell us if you are using this template for your website by creating an issue [here](https://github.com/luost26/academic-homepage/issues/new?assignees=&labels=&projects=&template=user-report.md&title=I+am+using+this+template%21).
### Acknowledgements
The improvements of this template have been inspired by the customizations and feedbacks from the following users:
- 😼 [onethousandwu.com](https://onethousandwu.com/): increased corner radius [[Repo]](https://github.com/oneThousand1000/oneThousand1000.github.io)
- :star: [shiwonkim.github.io](https://shiwonkim.github.io/): two-column main page layout [[Repo]](https://github.com/shiwonkim/shiwonkim.github.io)
- :star: [yqxie99.github.io](https://yqxie99.github.io/): blog feature [[Repo]](https://github.com/YQXie99/YQXie99.github.io/tree/feat/add_blog_page)
- :star: [kwen-chen.github.io](https://kwen-chen.github.io/): blog feature [[Repo]](https://github.com/Kwen-Chen/Kwen-Chen.github.io)
## Need Help?
If you run into **any** issues while using this template, or have suggestions for improvements, please don't hesitate to create an issue [here](https://github.com/luost26/academic-homepage/issues/new).
### FAQs
- [Need blogging feature?](https://github.com/luost26/academic-homepage/issues/13#issuecomment-2646371324)
- [How to show citation count for papers?](https://github.com/luost26/academic-homepage/issues/29#issuecomment-3222496187)
## Getting Started
1. First, click the "Use this template" button to create a new repository. The name of the repository should be `<your-github-username>.github.io` (click [here](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites) to learn more about naming a GitHub Pages repository).
### Running Locally (Debug & Preview)
2. Follow the **step 1** and **step 2** of the instruction [here](https://jekyllrb.com/docs/) to install prerequisites and jekyll.
3. Clone your forked repository to your local machine.
4. Run the following command in the root directory of the repository:
```bash
bundle exec jekyll serve
```
5. Browse to the displayed URL to see the website.
### Deploying to GitHub Pages
2. Go to the repository settings and enable GitHub Pages. Detailed instructions can be found [here](https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-github-pages-site#creating-your-site).
3. Navigate to your created website, and follow the instructions displayed on the homepage (if any) to finalize the setup.
+39 -24
View File
@@ -1,26 +1,41 @@
title: "Aloïs Coquillard"
name: "Aloïs Coquillard"
position: "PhD Student / Researcher"
affiliation: "University Name"
affiliation_link: "https://university.edu"
email: "alois.coquillard@ens-lyon.fr"
description: "Physicist passionate about electronics and computing"
baseurl: ""
url: "https://alocoq.fr"
#github: "johndoe"
linkedin: "aloïs-coquillard-690506267"
#google_scholar: ""
#orcid: ""
#twitter: ""
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
baseurl: "/academic-homepage" # the subpath of your site, e.g. /blog
# Build settings
markdown: kramdown
highlighter: rouge
permalink: /:title/
collections:
news:
output: false
publications:
output: false
showcase:
output: false
plugins:
- jekyll-seo-tag
- jekyll-email-protect
# Exclude from processing.
# The following items will not be processed, by default. Create a custom list
# to override the default setting.
# exclude:
# - Gemfile
# - Gemfile.lock
# - node_modules
# - vendor/bundle/
# - vendor/cache/
# - vendor/gems/
# - vendor/ruby/
# timezone: Asia/Shanghai
collections:
- publications
- news
- showcase
- posts
+22
View File
@@ -0,0 +1,22 @@
"Your Name":
bold: true
"Robert White":
url: https://www.google.com/?q=Robert+White
"Charles Green (MIT)":
name: Charles Green
url: https://www.google.com/?q=Charles+Green+MIT
"Charles Green (Stanford)":
name: Charles Green
url: https://www.google.com/?q=Charles+Green+Stanford
"Garrett Harris":
url: https://www.google.com/?q=Garrett+Harris
"James Wang":
url: https://www.google.com/?q=James+Wang
"John Doe":
url: https://www.google.com/?q=John+Doe
+10
View File
@@ -0,0 +1,10 @@
homepage:
show_experience: true
show_news: true
show_selected_publications: true
num_news: 10
# Feel free to replace the footer text if you would like to, but I will greatly appreciate it
# if you keep the link to the template so that more people can benefit from it. Thanks!
footer_text: >-
<a href="https://github.com/luost26/academic-homepage" target="_blank"><i class="fas fa-pencil-ruler"></i> academic-homepage</a>
+13 -9
View File
@@ -1,9 +1,13 @@
- title: "Accueil"
url: "/"
- title: "Publications"
url: "/publications"
- title: "Projets"
url: "/showcase"
- title: "Blog"
url: "https://blog.alocoq.fr"
external: true
pages:
# NOTE: `name` field must match the `navbar_title` field in the page's front matter to ensure the correct page is highlighted in the navbar.
# For example, the `navbar_title` field in `showcase.html` is "Showcase" and the `name` field here should also be "Showcase"
- name: Home
url: /
- name: Home (Layout 2)
url: /index_layout2
- name: Publications
url: /publications
- name: Blog
url: /blog
- name: Showcase
url: /showcase
+58 -13
View File
@@ -1,16 +1,61 @@
bio: >
Je suis physicien passionné par l'électronique et l'informatique.
Mes travaux portent sur [ton domaine de recherche].
primary_name: "Your Name"
secondary_name: ""
navbar_name: "Your Name"
interests:
- Physique expérimentale
- Électronique
- Informatique embarquée
positions:
- name: Title or Position
- name: Affiliation Name
logo: /assets/images/badges/MIT_Social_circle.png # Logo is optional
email: "your@email.com"
# cv_link: link-to-your-cv-file
gscholar: xFmQpf4AAAAJ # This is an example, replace it with your own Google Scholar ID
github: your_github_id
twitter: your_twitter_id # Do not include the '@' symbol
# wechat_qrcode: /assets/images/etc/wechat.jpg
# wechat_prompt: >-
# Please tell me your <strong>name</strong> and <strong>affiliation</strong> (current or past) when adding my wechat. Thanks!
# linkedin: your-linked-in-id
# orcid: 0000-0000-0000-0000
short_bio_text_justify: false
short_bio: >-
<p>
A <a href="https://en.wikipedia.org/wiki/Bicolor_cat" target="_blank">bicolor cat</a> is a cat with white fur combined with fur of some other colour, for example solid black, tabby, or colourpointed.
</p>
<p>
There are various patterns of a bicolour cat. These range from the Van-patterned (colour on the crown of the head
and the tail only) to a solid colour with a throat locket or medallion. Bicolour coats are found in many cat breeds,
as well as being common in domestic longhair and domestic shorthair cats.
</p>
portrait_url: /assets/images/photos/portrait.jpg
portrait_caption: >-
Photo by Manja Vitolic on Unsplash (this caption is optional, comment it out to disable).
education:
- degree: "PhD en Physique"
institution: "Université de ..."
year: "2020 présent"
- degree: "Master de Physique"
institution: "Université de ..."
year: "2018 2020"
- name: Massachusetts Institute of Technology
logo: /assets/images/badges/MIT_Social_circle.png
position: >-
Department of Electrical Engineering and Computer Science <br/>
Ph.D. Student
date: Sep. 2024 - present
- name: Peking University
logo: /assets/images/badges/PKU_red.png
position: B.S. in Computer Science
date: Sep. 2019 - Jul. 2021
# experience:
# - name: Peking University
# logo: /assets/images/badges/PKU_red.png
# position: Research Intern
# date: Sep. 2019 - Jul. 2021
awards:
- name: Award Name 2
date: 2024
- name: Award Name 1
date: 2021
- name: A quick brown fox jumps over the lazy dog and runs away award
date: 2021
+16
View File
@@ -0,0 +1,16 @@
<footer class="footer border-top py-2 mt-5 bg-white small">
<div class="{% if page.container_class %}{{ page.container_class }}{% else %}container-lg{% endif %}">
<div class="row my-3">
<div class="col-6">
<div class="text-muted">
<i>Last updated: {{ "now" | date: "%b %Y" }}</i>
</div>
</div>
<div class="col-6">
<div class="text-right text-muted">
{{ site.data.display.footer_text }}
</div>
</div>
</div>
</div>
</footer>
+18
View File
@@ -0,0 +1,18 @@
<nav class="navbar navbar-expand-sm navbar-light fixed-top mb-5 shadow-sm">
<div class="{% if page.container_class %}{{ page.container_class }}{% else %}container-lg{% endif %}">
<a class="navbar-brand"><strong>{{site.data.profile.navbar_name}}</strong></a>
<button class="navbar-toggler" style="font-size: 1em; padding: 0.5em;" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<i class="fas fa-map"></i> Menu
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
{% for item in site.data.navigation.pages %}
<li class="nav-item {% if item.name == page.navbar_title or include.active_page == item.name %}active{% endif %}">
<a class="nav-link" href="{{ item.url | relative_url }}">{{ item.name }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</nav>
+60
View File
@@ -0,0 +1,60 @@
{%- assign authors = include.authors -%}
{%- assign has_eq_contrib = false -%}
{%- assign has_corresponding = false -%}
{%- for _key in authors -%}
{%- assign last_char = _key | slice: -1, 1%}
{%- assign last_2chars = _key | slice: -2, 2%}
{%- if last_2chars == "*#" or last_2chars == "#*" -%}
{%- assign key = _key | replace: "#*", "" | replace: "*#", "" -%}
{%- assign mark = "*<sup>#</sup>" -%}
{%- assign has_eq_contrib = true -%}
{%- assign has_corresponding = true -%}
{%- elsif last_char == "*" -%}
{%- assign key = _key | split: "*" | first -%}
{%- assign mark = "*" -%}
{%- assign has_eq_contrib = true -%}
{%- elsif last_char == "#" -%}
{%- assign key = _key | split: "#" | first -%}
{%- assign mark = '<sup>#</sup>' -%}
{%- assign has_corresponding = true -%}
{%- else -%}
{%- assign key = _key -%}
{%- assign mark = "" -%}
{%- endif -%}
{%- assign info = site.data.authors[key] -%}
{%- if info['name'] -%}
{%- assign name = info['name'] -%}
{%- else -%}
{%- assign name = key -%}
{%- endif -%}
{%- if info['bold'] == true -%}
{%- assign display_name = name | append: mark | prepend: "<strong>" | append: "</strong>" -%}
{%- else -%}
{%- assign display_name = name | append: mark -%}
{%- endif -%}
{%- if info['url'] -%}
<a class="text-body" target="_blank" href="{{ info['url'] }}">{{ display_name }}</a>{%- if forloop.index < authors.size -%}, {% endif -%}
{%- else -%}
<span class="text-body">
{{ display_name }}{%- if forloop.index < authors.size -%}, {% endif -%}
</span>
{%- endif -%}
{%- endfor -%}
{%- if has_eq_contrib or has_corresponding %}
<mark>(
{%- if has_eq_contrib -%}
* <i> equal contribution</i>
{%- endif -%}
{%- if has_corresponding -%}
{%- if has_eq_contrib -%}, {% endif -%}
<sup>#</sup> <i> corresponding author</i>
{%- endif -%}
)</mark>
{%- endif -%}
+39
View File
@@ -0,0 +1,39 @@
{% assign item = include.item %}
{% assign hide_bottom_border = include.hide_bottom_border %}
{% assign first = include.first %}
{% assign last = include.last %}
<div class="border-bottom border-gray p-3 {% if hide_bottom_border %}border-0{% endif %}">
<div class="row">
<div class="col-12">
<h5 class="mb-2">
<a href="{{ item.url | relative_url }}" class="text-dark text-decoration-none">
{{ item.title }}
</a>
</h5>
<div class="text-muted small mb-2">
<i class="fas fa-calendar-alt"></i> {{ item.date | date: "%B %d, %Y" }}
{% if item.tags %}
<span class="ml-3">
<i class="fas fa-tags"></i>
{% for tag in item.tags %}
<span class="badge badge-light">{{ tag }}</span>
{% endfor %}
</span>
{% endif %}
</div>
<div class="text-muted small">
{% if item.excerpt %}
{{ item.excerpt | strip_html | truncate: 500 }}
{% else %}
{{ item.content | strip_html | truncate: 500 }}
{% endif %}
</div>
<div class="mt-2">
<a href="{{ item.url | relative_url }}">
Read more <i class="fas fa-angle-double-right"></i>
</a>
</div>
</div>
</div>
</div>
+31
View File
@@ -0,0 +1,31 @@
<div>
<div id="{{ include.id | slugify }}" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
{% for item in include.images %}
<li data-target="#{{ include.id | slugify }}" data-slide-to="{{ forloop.index0 }}" {% if forloop.index == 1 %}class="active"{% endif %}></li>
{% endfor %}
</ol>
<div class="carousel-inner" style="height: {{ include.height }};">
{% for item in include.images %}
<div class="carousel-item {% if forloop.index == 1 %}active{% endif %}">
{% if item.link %}<a href="{{ item.link }}" target="_blank">{% endif %}
<div class="lazy always-load d-block rounded-xl" data-src="{{ item.src | relative_url }}" style="height: {{ include.height }};">
</div>
<div class="carousel-caption d-none d-md-block">
<h5>{{ item.title }}</h5>
<p>{{ item.desc }}</p>
</div>
{% if item.link %}</a>{% endif %}
</div>
{% endfor %}
</div>
<div class="carousel-control-prev" type="button" data-target="#{{ include.id | slugify }}" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</div>
<div class="carousel-control-next" type="button" data-target="#{{ include.id | slugify }}" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</div>
</div>
</div>
+26
View File
@@ -0,0 +1,26 @@
<div id="ghpages-domain-debug-message" class="row mt-3 d-none">
<div class="col">
<div class="alert alert-warning my-0" role="alert">
<h5><i class="fas fa-exclamation-triangle"></i> Warning</h5>
<strong>Problem:</strong>
The current name of your GitHub Pages repository ("<code class="repo-name-text"></code>") does not match the recommended repository name for your site ("<code class="domain-name-text"></code>").
<br>
<strong>Solution:</strong> Please consider renaming the repository to "<code class="domain-name-text"></code>", so that your site can be accessed directly at "<code>http://<span class="domain-name-text"></span></code>".
However, if the current repository name is intended, you can ignore this message by removing {% raw %}"<code>{% include widgets/debug_repo_name.html %}</code>"{% endraw %} in <code>index.html</code>.
</div>
</div>
</div>
<script>
striped_pathname = location.pathname.replace(/\/+$/, "");
document.querySelectorAll(".repo-name-text").forEach(function(element){
element.textContent = striped_pathname.replace("/", "");
});
document.querySelectorAll(".domain-name-text").forEach(function(element){
element.textContent = location.hostname;
});
if (location.hostname.search("github.io") != -1 && striped_pathname != ""){
document.getElementById("ghpages-domain-debug-message").classList.remove('d-none');
}
</script>
+24
View File
@@ -0,0 +1,24 @@
<div id="url-debug-message" class="row mt-3 d-none">
<div class="col">
<div class="alert alert-warning my-0" role="alert">
<h5><i class="fas fa-exclamation-triangle"></i> Action required</h5>
<strong>Problem:</strong>
The current root path of this site is "<code class="root-path-text"></code>",
which does not match the <code>baseurl</code> ("<code>{{ site.baseurl }}</code>") configured in <code>_config.yml</code>.
<br>
<strong>Solution:</strong>
Please set the <code>baseurl</code> in <code>_config.yml</code> to "<code class="root-path-text"></code>".
</div>
</div>
</div>
<script>
striped_pathname = location.pathname.replace(/\/+$/, "");
if(striped_pathname != "{{ site.baseurl }}"){
document.getElementById("url-debug-message").classList.remove('d-none');
}
document.querySelectorAll(".root-path-text").forEach(function(element){
element.textContent = striped_pathname;
});
</script>
+75
View File
@@ -0,0 +1,75 @@
<div class="row mt-3">
<div class="col">
<div class="card border-0 shadow-sm bg-white">
<div class="card-body p-4">
<div class="row" data-masonry='{"percentPosition": true }'>
{% if site.data.profile.education %}
<div class="col-lg-6">
<div class="mx-2 my-1">
<h6>Education</h6>
<ul class="list-unstyled mb-1">
{% for item in site.data.profile.education %}
<li class="media mb-1">
<img src="{{ item.logo | relative_url }}" alt="{{ item.name }}" style="width: 18px;" class="mr-1 mt-1">
<div class="media-body">
<div>{{ item.name }}</div>
<div class="small">{{ item.dept }}</div>
<div class="small d-flex">
<div>{{ item.position }}</div>
<div class="mt-auto ml-auto no-break"><em>{{ item.date }}</em></div>
</div>
</div>
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
{% if site.data.profile.experience %}
<div class="col-lg-6">
<div class="mx-2 my-1">
<h6>Experience</h6>
<ul class="list-unstyled mb-1">
{% for item in site.data.profile.experience %}
<li class="media mb-1">
<img src="{{ item.logo | relative_url }}" alt="{{ item.name }}" style="width: 18px;" class="mr-1 mt-1">
<div class="media-body">
<div>{{ item.name }}</div>
<div class="small">{{ item.dept }}</div>
<div class="small d-flex">
<div>{{ item.position }}</div>
<div class="mt-auto ml-auto no-break"><em>{{ item.date }}</em></div>
</div>
</div>
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
{% if site.data.profile.awards %}
<div class="col-lg-6">
<div class="mx-2 my-1">
<h6>Honors & Awards</h6>
<ul class="list small pl-3 mb-1">
{% for item in site.data.profile.awards %}
<li>
<div class="d-flex">
<div>{{ item.name }}</div>
<div class="ml-auto mt-auto no-break"><em>{{ item.date }}</em></div>
</div>
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
+21
View File
@@ -0,0 +1,21 @@
{% assign news_by_year = site.news | sort: "date" | reverse | slice: 0, include.limit | group_by_exp: "item", "item.date | date: '%Y'" -%}
<div class="my-3 bg-white shadow-sm rounded-xl">
<h6 class="p-3 mb-0 border-bottom border-gray"><i class="fas fa-rss"></i> News</h6>
<div class="px-3 pb-1 small">
{% for year in news_by_year %}
<div class="media py-1 {% if not_first -%}border-top border-gray{%- endif %}">
{% assign not_first = true %}
<div class="mr-3 text-muted my-1">{{ year.name }}</div>
<div class="media-body">
{% for item in year.items %}
<div class="my-1 d-flex">
<div>{{ item.title }}</div>
<div class="ml-auto mt-auto text-muted no-break"><i>{{ item.date | date: "%b %d" }}</i></div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
+121
View File
@@ -0,0 +1,121 @@
<div class="row">
<div class="col">
<div class="card border-0 shadow-sm bg-white">
<div class="card-body p-5">
<div class="row">
<div class="col">
{% if site.data.profile.portrait_url %}
<!-- When the screen is wider than md, float the portrait on the right -->
<div class="figure float-right ml-4 mb-4 d-none d-md-block">
<img
src="{{ site.data.profile.portrait_url | relative_url }}"
class="figure-img img-fluid img-thumbnail"
style="height: 200px;"
data-toggle="tooltip"
data-placement="top"
title="{{ site.data.profile.portrait_caption }}">
</div>
{% endif %}
<div class="d-flex">
<div class="h1 font-weight-normal">
{{ site.data.profile.primary_name }} <small>{{ site.data.profile.secondary_name }}</small>
</div>
{% if site.data.profile.portrait_url %}
<div class="ml-auto d-md-none">
<a target="_blank" href="{{ site.data.profile.portrait_url | relative_url }}">
<img src="{{ site.data.profile.portrait_url | relative_url }}" class="rounded-circle" style="height: 48px;" alt="Portrait">
</a>
</div>
{% endif %}
</div>
<div class="text-profile-position">
{% for position in site.data.profile.positions %}
{% if position.logo -%}
<img src="{{ position.logo | relative_url }}" alt="Logo" class="inline-badge"/>
{%- endif %}
{{ position.name }}<br/>
{% endfor %}
</div>
<div class="text-profile-bio mt-3" {% if site.data.profile.short_bio_text_justify %}style="text-align: justify;"{% endif %}>
{{ site.data.profile.short_bio }}
</div>
{% if site.data.profile.cv_link %}
<a target="_blank" href="{{ site.data.profile.cv_link | relative_url }}"><i class="fas fa-file-alt"></i> Curriculum Vitae</a> <br/>
{% endif %}
</div>
</div>
<hr />
<div class="row">
<div class="col">
<a class="pr-3" href="mailto:{{ site.data.profile.email | encode_email }}">
<i class="fas fa-at"></i> <span class="email-text">{{ site.data.profile.email | replace: "@", "(at)" }}</span>
</a>
{% if site.data.profile.gscholar %}
{%- if site.data.profile.gscholar contains 'scholar.google' -%}
{%- assign gscholar_url = site.data.profile.gscholar -%}
{%- else -%}
{%- assign gscholar_url = 'https://scholar.google.com/citations?user=' | append: site.data.profile.gscholar -%}
{%- endif -%}
<a class="pr-3 no-break" target="_blank" href="{{ gscholar_url }}">
<i class="fab fa-google-scholar"></i> Google Scholar
</a>
{% endif %}
{% if site.data.profile.github %}
<a class="pr-3 no-break" target="_blank" href="https://github.com/{{ site.data.profile.github }}">
<i class="fab fa-github"></i> GitHub
</a>
{% endif %}
{% if site.data.profile.wechat_qrcode %}
<a class="pr-3 no-break" data-toggle="modal" data-target="#modal-wechat">
<i class="fab fa-weixin"></i> WeChat
</a>
{% endif %}
{% if site.data.profile.twitter %}
<a class="pr-3 no-break" target="_blank" href="https://twitter.com/{{ site.data.profile.twitter }}">
<i class="fab fa-twitter"></i> Twitter
</a>
{% endif %}
{% if site.data.profile.linkedin %}
<a class="pr-3 no-break" target="_blank" href="https://www.linkedin.com/in/{{ site.data.profile.linkedin }}">
<i class="fab fa-linkedin"></i> LinkedIn
</a>
{% endif %}
{% if site.data.profile.orcid %}
<a class="pr-3 no-break" target="_blank" href="https://orcid.org/{{ site.data.profile.orcid }}">
<i class="fab fa-orcid"></i> ORCID
</a>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
{% if site.data.profile.wechat_qrcode %}
<div class="modal fade" id="modal-wechat" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-body p-0">
<img src="{{ site.data.profile.wechat_qrcode | relative_url }}" class="img-fluid">
</div>
{% if site.data.profile.wechat_prompt %}
<div class="modal-body p-1">
{{ site.data.profile.wechat_prompt }}
</div>
{% endif %}
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
{% endif %}
@@ -0,0 +1,25 @@
<div class="mt-3 d-md-none"></div>
<div class="row">
<div class="col">
<div class="card border-0 shadow-sm bg-white">
<div class="card-body p-4">
<div class="row px-3 pt-3">
<div class="col h3">
About Me
</div>
</div>
<div class="row p-3">
<div class="col">
<div class="text-profile-bio mt-0" {% if site.data.profile.short_bio_text_justify %}style="text-align: justify;"{% endif %}>
{{ site.data.profile.short_bio }}
</div>
{% if site.data.profile.cv_link %}
<a target="_blank" href="{{ site.data.profile.cv_link | relative_url }}"><i class="fas fa-file-alt"></i> Curriculum Vitae</a> <br/>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
+113
View File
@@ -0,0 +1,113 @@
<div class="row sticky-top" style="top: 80px">
<div class="col">
<div class="card border-0 shadow-sm bg-white">
<div class="card-body px-4 pt-4 pb-3">
<div class="row">
<div class="col">
{% if site.data.profile.portrait_url %}
<!-- When the screen is wider than md, float the portrait on the right -->
<div class="figure d-none d-md-block">
<img
src="{{ site.data.profile.portrait_url | relative_url }}"
class="figure-img img-fluid"
data-toggle="tooltip"
data-placement="top"
title="{{ site.data.profile.portrait_caption }}">
</div>
<div class="mb-3 d-md-none text-center">
<img src="{{ site.data.profile.portrait_url | relative_url }}" class="rounded-circle" style="max-width: 50%;" alt="Portrait">
</div>
{% endif %}
</div>
</div>
<div class="row">
<div class="col text-center h4">
{{ site.data.profile.primary_name }}
</div>
</div>
<div class="row small">
<div class="col text-center">
{% for position in site.data.profile.positions %}
{{ position.name }}<br/>
{% endfor %}
</div>
</div>
<div class="row small">
<div class="col text-center">
<a class="email-text" href="mailto:{{ site.data.profile.email | encode_email }}">
{{ site.data.profile.email | replace: "@", "(at)" }}
</a>
</div>
</div>
<div class="row pt-2">
<div class="col text-center h4">
{% if site.data.profile.gscholar %}
{%- if site.data.profile.gscholar contains 'scholar.google' -%}
{%- assign gscholar_url = site.data.profile.gscholar -%}
{%- else -%}
{%- assign gscholar_url = 'https://scholar.google.com/citations?user=' | append: site.data.profile.gscholar -%}
{%- endif -%}
<a class="px-1 no-break" target="_blank" href="{{ gscholar_url }}">
<i class="fab fa-google-scholar"></i>
</a>
{% endif %}
{% if site.data.profile.github %}
<a class="px-1 no-break" target="_blank" href="https://github.com/{{ site.data.profile.github }}">
<i class="fab fa-github"></i>
</a>
{% endif %}
{% if site.data.profile.wechat_qrcode %}
<a class="px-1 no-break" data-toggle="modal" data-target="#modal-wechat">
<i class="fab fa-weixin"></i>
</a>
{% endif %}
{% if site.data.profile.twitter %}
<a class="px-1 no-break" target="_blank" href="https://twitter.com/{{ site.data.profile.twitter }}">
<i class="fab fa-twitter"></i>
</a>
{% endif %}
{% if site.data.profile.linkedin %}
<a class="px-1 no-break" target="_blank" href="https://www.linkedin.com/in/{{ site.data.profile.linkedin }}">
<i class="fab fa-linkedin"></i>
</a>
{% endif %}
{% if site.data.profile.orcid %}
<a class="px-1 no-break" target="_blank" href="https://orcid.org/{{ site.data.profile.orcid }}">
<i class="fab fa-orcid"></i>
</a>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
{% if site.data.profile.wechat_qrcode %}
<div class="modal fade" id="modal-wechat" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-body p-0">
<img src="{{ site.data.profile.wechat_qrcode | relative_url }}" class="img-fluid">
</div>
{% if site.data.profile.wechat_prompt %}
<div class="modal-body p-1">
{{ site.data.profile.wechat_prompt }}
</div>
{% endif %}
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
{% endif %}
+14
View File
@@ -0,0 +1,14 @@
{% assign publications = include.publications %}
<div class="my-3 p-0 bg-white shadow-sm rounded-xl">
<h6 class="border-bottom border-gray p-3 mb-0">
{% if include.title %}{{ include.title }}{% else %}<i class="fas fa-star"></i> Selected Recent Publications{% endif %}
<a href="{{ 'publications' | relative_url }}">(view all <i class="fas fa-angle-double-right"></i>)</a>
</h6>
{% for item in publications limit:include.limit %}
{% include widgets/publication_item.html item=item first=false last=false %}
{% endfor %}
<h6 class="d-block p-3 mt-0 text-right">
<a href="{{ 'publications' | relative_url }}">All publications <i class="fas fa-angle-double-right"></i></a>
</h6>
</div>
+54
View File
@@ -0,0 +1,54 @@
{% assign item = include.item %}
<div class="d-none d-md-block">
<div class="row no-gutters {% unless include.hide_bottom_border %}border-bottom{% endunless %} border-gray">
<div class="col-md-3 col-xl-2 mb-md-0 p-md-3">
{%- if item.cover -%}
<img data-src="{{ item.cover | relative_url }}" alt="{{ item.title }}" class="lazy w-100 rounded-sm" src="{{ '/assets/images/empty_300x200.png' | relative_url }}">
{%- else -%}
<svg class="bubble-visual-hash lazy w-100 rounded-sm" data-bubble-visual-hash="{{ item.id }}" viewBox="0 0 300 200"></svg>
{%- endif -%}
</div>
<div class="col-md-9 col-xl-10 p-3 pl-md-0">
<h5 class="mt-0 mb-1 font-weight-normal">{{ item.title }}</h5>
<p class="mt-0 mb-0 small">{% include widgets/author_list.html authors=item.authors %}</p>
<p class="mt-0 mb-0 small">{{item.pub_pre}}<i>{{ item.pub }}</i>{{ item.pub_post }} {{ item.pub_date }} {{ item.pub_last }} <span data-semantic-scholar-id="{{ item.semantic_scholar_id }}"></span></p>
<p class="mt-0 mb-0 small text-muted">{{ item.abstract }}</p>
<p class="small pb-0 mb-0 lh-125 text-muted abstract-links">
{% for link in item.links %}
{% if link[1].url %}
<a target="{{ link[1]['target'] }}" href="{{ link[1]['url'] }}">[{{ link[0] }}]</a>
{% else %}
<a target="_blank" href="{{ link[1] }}">[{{ link[0] }}]</a>
{% endif %}
{% endfor %}
</p>
</div>
</div>
</div>
<div class="row no-gutters d-md-none {% unless include.hide_bottom_border %}border-bottom{% endunless %} border-gray {% if include.first %}rounded-xl-top{% endif %} {% if include.last %}rounded-xl-bottom{% endif %} {% if item.cover %}lazy{% endif %}" data-src="{{ item.cover | relative_url }}">
<div class="w-100 {% if include.first %}rounded-xl-top{% endif %} {% if include.last %}rounded-xl-bottom{% endif %}" style="background-color: rgba(255,255,255,0.9);">
<div class="d-flex align-items-start flex-column py-3 px-4">
<div class="mb-auto"></div>
<div>
<h5 class="mt-0 mb-1 font-weight-normal">{{ item.title }}</h5>
<p class="mt-0 mb-0 small">{% include widgets/author_list.html authors=item.authors %}</p>
<p class="mt-0 mb-0 small">{{item.pub_pre}}<i>{{ item.pub }}</i>{{ item.pub_post }} {{ item.pub_date }} {{ item.pub_last }} <span data-semantic-scholar-id="{{ item.semantic_scholar_id }}"></span></p>
<p class="mt-0 mb-0 small text-muted">{{ item.abstract }}</p>
<p class="small pb-0 mb-0 lh-125 text-muted abstract-links">
{% for link in item.links %}
{% if link[1].url %}
<a target="{{ link[1]['target'] }}" href="{{ link[1]['url'] }}">[{{ link[0] }}]</a>
{% else %}
<a target="_blank" href="{{ link[1] }}">[{{ link[0] }}]</a>
{% endif %}
{% endfor %}
</p>
</div>
</div>
</div>
</div>
+90
View File
@@ -0,0 +1,90 @@
<!DOCTYPE html>
<html lang="en">
<!-- Template: https://github.com/luost26/academic-homepage -->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{{ page.title }} - {{ site.data.profile.navbar_name }}</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css" integrity="sha512-P5MgMn1jBN01asBgU0z60Qk4QxiXo86+wlFahKrsQf37c9cro517WzVSPPV1tDKzhku2iJ2FVgL67wG03SGnNA==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&display=swap" rel="stylesheet">
<!-- Math and Code -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" integrity="sha384-nB0miv6/jRmo5UMMR1wu3Gz6NLsoTkbqJghGIsx//Rlm+ZU03BU6SQNC66uf4l5+" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css" crossorigin="anonymous">
<link rel="stylesheet" href="{{ '/assets/css/global.css' | relative_url }}">
<link rel="stylesheet" href="{{ '/assets/css/blog.css' | relative_url }}">
</head>
<body class="bg-light d-flex flex-column min-vh-100" {{ page.body_attr }}>
{% include navbar.html active_page="Blog" %}
<main class="flex-grow-1">
<div class="blog-layout-wrapper">
<div class="blog-main">
<article class="bg-white rounded-xl p-4 mb-4" style="border: 1px solid #f0f0f0;">
<header class="mb-4">
<h1 class="display-4 mb-3">{{ page.title }}</h1>
<div class="text-muted mb-3">
<i class="fas fa-calendar-alt"></i> {{ page.date | date: "%B %d, %Y" }}
{% if page.tags %}
<span class="ml-3">
<i class="fas fa-tags"></i>
{% for tag in page.tags %}
<span class="badge badge-light">{{ tag }}</span>
{% endfor %}
</span>
{% endif %}
</div>
</header>
<div class="blog-content">
{{ content }}
</div>
</article>
</div>
<div class="blog-toc-sidebar">
<nav id="blog-toc" class="blog-toc-nav">
<div class="blog-toc-title">Table of Contents</div>
<ul class="blog-toc-list"></ul>
</nav>
</div>
</div>
</main>
{% include footer.html %}
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js" integrity="sha512-XKa9Hemdy1Ui3KSGgJdgMyYlUg1gM+QhL6cnlyTe2qzMCYm4nAZ1PsVerQzTTXzonUR+dmswHqgJPuwCq1MaAg==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/github-buttons/2.14.2/buttons.min.js" integrity="sha512-OYwZx04hKFeFNYrWxIyo3atgGpb+cxU0ENWBZs72X7T9U+NoHPM1ftUn/Mfw7dRDXrqWA6M1wBg6z6fGE32aeA==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
<script src="https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" integrity="sha384-7zkQWkzuo3B5mTepMUcHkMB5jZaolc2xDwL6VFqjFALcbeS9Ggm/Yr2r3Dy4lfFg" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js" integrity="sha384-43gviWU0YVjaDtb/GhzOouOXtZMP/7XUzwPTstBeZFe/+rCMvRwr4yROQP43s0Xk" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js" crossorigin="anonymous"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false}
],
throwOnError : false
});
Prism.highlightAll();
});
</script>
<script src="{{ '/assets/js/blog.js' | relative_url }}"></script>
<script src="{{ '/assets/js/common.js' | relative_url }}"></script>
<script src="{{ '/assets/js/bubble_visual_hash.js' | relative_url }}"></script>
<script src="{{ '/assets/js/semantic_scholar_citation_count.js' | relative_url }}"></script>
</body>
</html>
+45 -25
View File
@@ -1,31 +1,51 @@
<!DOCTYPE html>
<html lang="fr">
<html lang="en">
<!-- Template: https://github.com/luost26/academic-homepage -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ page.title | default: site.title }}</title>
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔬</text></svg>">
{% seo %}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{{ page.title }} - {{ site.data.profile.navbar_name }}</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css" integrity="sha512-P5MgMn1jBN01asBgU0z60Qk4QxiXo86+wlFahKrsQf37c9cro517WzVSPPV1tDKzhku2iJ2FVgL67wG03SGnNA==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/academicons/1.9.1/css/academicons.min.css" integrity="sha512-b1ASx0WHgVFL5ZQhTgiPWX+68KjS38Jk87jg7pe+qC7q9YkEtFq0z7xCglv7qGIs/68d3mAp+StfC8WKC5SSAg==" crossorigin="anonymous" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" integrity="sha384-nB0miv6/jRmo5UMMR1wu3Gz6NLsoTkbqJghGIsx//Rlm+ZU03BU6SQNC66uf4l5+" crossorigin="anonymous">
<link rel="stylesheet" href="{{ '/assets/css/global.css' | relative_url }}">
</head>
<body>
<nav class="navbar">
<div class="nav-inner">
<a class="nav-brand" href="/">{{ site.name }}</a>
<div class="nav-links">
{% for item in site.data.navigation %}
{% if item.external %}
<a href="{{ item.url }}" target="_blank" rel="noopener">{{ item.title }}</a>
{% else %}
<a href="{{ item.url }}" {% if page.url == item.url %}class="active"{% endif %}>{{ item.title }}</a>
{% endif %}
{% endfor %}
</div>
<body class="bg-light" {{ page.body_attr }}>
{% include navbar.html %}
<div class="{% if page.container_class %}{{ page.container_class }}{% else %}container-lg{% endif %}">
{{content}}
</div>
</nav>
<main>{{ content }}</main>
<footer>
<p>&copy; {{ 'now' | date: "%Y" }} {{ site.name }} &mdash; <a href="mailto:{{ site.email }}">{{ site.email }}</a></p>
</footer>
{% include footer.html %}
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js" integrity="sha512-XKa9Hemdy1Ui3KSGgJdgMyYlUg1gM+QhL6cnlyTe2qzMCYm4nAZ1PsVerQzTTXzonUR+dmswHqgJPuwCq1MaAg==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/github-buttons/2.14.2/buttons.min.js" integrity="sha512-OYwZx04hKFeFNYrWxIyo3atgGpb+cxU0ENWBZs72X7T9U+NoHPM1ftUn/Mfw7dRDXrqWA6M1wBg6z6fGE32aeA==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
<script src="https://unpkg.com/imagesloaded@5/imagesloaded.pkgd.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" integrity="sha384-7zkQWkzuo3B5mTepMUcHkMB5jZaolc2xDwL6VFqjFALcbeS9Ggm/Yr2r3Dy4lfFg" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js" integrity="sha384-43gviWU0YVjaDtb/GhzOouOXtZMP/7XUzwPTstBeZFe/+rCMvRwr4yROQP43s0Xk" crossorigin="anonymous"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false}
],
throwOnError : false
});
});
</script>
<script src="{{ '/assets/js/common.js' | relative_url }}"></script>
<script src="{{ '/assets/js/bubble_visual_hash.js' | relative_url }}"></script>
<script src="{{ '/assets/js/semantic_scholar_citation_count.js' | relative_url }}"></script>
</body>
</html>
+29
View File
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<html class="h-100">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{{ page.title }}</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css" integrity="sha512-P5MgMn1jBN01asBgU0z60Qk4QxiXo86+wlFahKrsQf37c9cro517WzVSPPV1tDKzhku2iJ2FVgL67wG03SGnNA==" crossorigin="anonymous" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Raleway:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ '/assets/css/global.css' | relative_url }}">
</head>
<style type="text/css">
.container {
width: auto;
max-width: 680px;
padding: 0 15px;
}
</style>
<body class="d-flex flex-column h-100">
<main role="main" class="flex-shrink-0">
<div class="container">
{{ content }}
</div>
</main>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
---
title: Lorem ipsum sit amet, consectetur adipiscing elit, sed do eiusmod tempor
date: 2022-01-12 00:01:00 +0800
---
+4
View File
@@ -0,0 +1,4 @@
---
title: "Scientists Discover New Species of Bioluminescent Fish in Mariana Trench"
date: 2023-11-28 08:15:00 -0500
---
+6
View File
@@ -0,0 +1,6 @@
---
title: >-
AI-Powered Robot Chef Wins International Culinary Competition
<span class="badge badge-pill badge-info badge-publication">Featured</span>
date: 2023-09-05 18:30:00 +0200
---
+6
View File
@@ -0,0 +1,6 @@
---
title: >-
First Human Settlement Established on Mars, Marking New Era of Space Exploration.
<a href="https://google.com" target="_blank">Read more <i class="fas fa-angle-double-right"></i></a>
date: 2024-01-30 10:00:00 -0800
---
+4
View File
@@ -0,0 +1,4 @@
---
title: "Virtual Reality Theme Park Opens, Redefining Entertainment Industry"
date: 2024-03-22 17:30:00 UTC
---
+4
View File
@@ -0,0 +1,4 @@
---
title: "AI Transforms Music Industry: <strong>First AI-Composed Symphony</strong> Debuts in New York"
date: 2024-10-18 20:45:00 -0400
---
+624
View File
@@ -0,0 +1,624 @@
---
layout: blog_post
title: 'This is the title of the blog post'
date: 2024-01-01
tags:
- Blog
- Post
- Tag
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem.
# Headers
```
# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
Alternatively, for H1 and H2, an underline-ish style:
Alt-H1
======
Alt-H2
------
```
# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
Alternatively, for H1 and H2, an underline-ish style:
Alt-H1
======
Alt-H2
------
------
# Emphasis
```
Emphasis, aka italics, with *asterisks* or _underscores_.
Strong emphasis, aka bold, with **asterisks** or __underscores__.
Combined emphasis with **asterisks and _underscores_**.
Strikethrough uses two tildes. ~~Scratch this.~~
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
```
Emphasis, aka italics, with *asterisks* or _underscores_.
Strong emphasis, aka bold, with **asterisks** or __underscores__.
Combined emphasis with **asterisks and _underscores_**.
Strikethrough uses two tildes. ~~Scratch this.~~
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
------
# Lists
```
1. First ordered list item
2. Another item
⋅⋅* Unordered sub-list.
1. Actual numbers don't matter, just that it's a number
⋅⋅1. Ordered sub-list
4. And another item.
⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅
⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅
⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
* Unordered list can use asterisks
- Or minuses
+ Or pluses
1. Make my changes
1. Fix bug
2. Improve formatting
- Make the headings bigger
2. Push my commits to GitHub
3. Open a pull request
* Describe my changes
* Mention all the members of my team
* Ask for feedback
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
```
1. First ordered list item
2. Another item
⋅⋅* Unordered sub-list.
1. Actual numbers don't matter, just that it's a number
⋅⋅1. Ordered sub-list
4. And another item.
⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅
⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅
⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
* Unordered list can use asterisks
- Or minuses
+ Or pluses
1. Make my changes
1. Fix bug
2. Improve formatting
- Make the headings bigger
2. Push my commits to GitHub
3. Open a pull request
* Describe my changes
* Mention all the members of my team
* Ask for feedback
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
------
# Task lists
```
- [x] Finish my changes
- [ ] Push my commits to GitHub
- [ ] Open a pull request
- [x] @mentions, #refs, [links](), **formatting**, and <del>tags</del> supported
- [x] list syntax required (any unordered or ordered list supported)
- [x] this is a complete item
- [ ] this is an incomplete item
```
- [x] Finish my changes
- [ ] Push my commits to GitHub
- [ ] Open a pull request
- [x] @mentions, #refs, [links](), **formatting**, and <del>tags</del> supported
- [x] list syntax required (any unordered or ordered list supported)
- [ ] this is a complete item
- [ ] this is an incomplete item
------
# Ignoring Markdown formatting
You can tell GitHub to ignore (or escape) Markdown formatting by using \ before the Markdown character.
```
Let's rename \*our-new-project\* to \*our-old-project\*.
```
Let's rename \*our-new-project\* to \*our-old-project\*.
------
# Links
```
[I'm an inline-style link](https://www.google.com)
[I'm an inline-style link with title](https://www.google.com "Google's Homepage")
[I'm a reference-style link][Arbitrary case-insensitive reference text]
[I'm a relative reference to a repository file](../blob/master/LICENSE)
[You can use numbers for reference-style link definitions][1]
Or leave it empty and use the [link text itself].
URLs and URLs in angle brackets will automatically get turned into links.
http://www.example.com or <http://www.example.com> and sometimes
example.com (but not on Github, for example).
Some text to show that the reference links can follow later.
[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com
```
[I'm an inline-style link](https://www.google.com)
[I'm an inline-style link with title](https://www.google.com "Google's Homepage")
[I'm a reference-style link][Arbitrary case-insensitive reference text]
[I'm a relative reference to a repository file](../blob/master/LICENSE)
[You can use numbers for reference-style link definitions][1]
Or leave it empty and use the [link text itself].
URLs and URLs in angle brackets will automatically get turned into links.
http://www.example.com or <http://www.example.com> and sometimes
example.com (but not on Github, for example).
Some text to show that the reference links can follow later.
[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com
------
# Images
```
Here's our logo (hover to see the title text):
Inline-style:
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Reference-style:
![alt text][logo]
[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 2"
![Minion](https://octodex.github.com/images/minion.png)
![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")
Like links, Images also have a footnote style syntax
![Alt text][id]
With a reference later in the document defining the URL location:
[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat"
```
Here's our logo (hover to see the title text):
Inline-style:
![alt text]({{ '/assets/images/etc/tim_the_beaver.png' | relative_url }} "Logo Title Text 1")
Reference-style:
![alt text][logo]
[logo]: {{ '/assets/images/etc/tim_the_beaver.png' | relative_url }} "Logo Title Text 2"
![Cat 1]({{ '/assets/images/etc/cat1.jpg' | relative_url }})
Like links, Images also have a footnote style syntax
![Alt text][id]
With a reference later in the document defining the URL location:
[id]: {{ '/assets/images/etc/cat2.jpg' | relative_url }} "Cat 2"
------
# [Footnotes](https://github.com/markdown-it/markdown-it-footnote)
```
Footnote 1 link[^first].
Footnote 2 link[^second].
Inline footnote^[Text of inline footnote] definition.
Duplicated footnote reference[^second].
[^first]: Footnote **can have markup**
and multiple paragraphs.
[^second]: Footnote text.
```
Footnote 1 link[^first].
Footnote 2 link[^second].
Inline footnote^[Text of inline footnote] definition.
Duplicated footnote reference[^second].
[^first]: Footnote **can have markup**
and multiple paragraphs.
[^second]: Footnote text.
------
# Code and Syntax Highlighting
```
Inline `code` has `back-ticks around` it.
```
Inline `code` has `back-ticks around` it.
```c#
using System.IO.Compression;
#pragma warning disable 414, 3021
namespace MyApplication
{
[Obsolete("...")]
class Program : IInterface
{
public static List<int> JustDoIt(int count)
{
Console.WriteLine($"Hello {Name}!");
return new List<int>(new int[] { 1, 2, 3 })
}
}
}
```
```css
@font-face {
font-family: Chunkfive; src: url('Chunkfive.otf');
}
body, .usertext {
color: #F0F0F0; background: #600;
font-family: Chunkfive, sans;
}
@import url(print.css);
@media print {
a[href^=http]::after {
content: attr(href)
}
}
```
```javascript
function $initHighlight(block, cls) {
try {
if (cls.search(/\bno\-highlight\b/) != -1)
return process(block, true, 0x0F) +
` class="${cls}"`;
} catch (e) {
/* handle exception */
}
for (var i = 0 / 2; i < classes.length; i++) {
if (checkCondition(classes[i]) === undefined)
console.log('undefined');
}
}
export $initHighlight;
```
```php
require_once 'Zend/Uri/Http.php';
namespace Location\Web;
interface Factory
{
static function _factory();
}
abstract class URI extends BaseURI implements Factory
{
abstract function test();
public static $st1 = 1;
const ME = "Yo";
var $list = NULL;
private $var;
/**
* Returns a URI
*
* @return URI
*/
static public function _factory($stats = array(), $uri = 'http')
{
echo __METHOD__;
$uri = explode(':', $uri, 0b10);
$schemeSpecific = isset($uri[1]) ? $uri[1] : '';
$desc = 'Multi
line description';
// Security check
if (!ctype_alnum($scheme)) {
throw new Zend_Uri_Exception('Illegal scheme');
}
$this->var = 0 - self::$st;
$this->list = list(Array("1"=> 2, 2=>self::ME, 3 => \Location\Web\URI::class));
return [
'uri' => $uri,
'value' => null,
];
}
}
echo URI::ME . URI::$st1;
__halt_compiler () ; datahere
datahere
datahere */
datahere
```
------
# Tables
```
Colons can be used to align columns.
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the
raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
| Command | Description |
| --- | --- |
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |
| Left-aligned | Center-aligned | Right-aligned |
| :--- | :---: | ---: |
| git status | git status | git status |
| git diff | git diff | git diff |
| Name | Character |
| --- | --- |
| Backtick | ` |
| Pipe | \| |
```
Colons can be used to align columns.
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the
raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
| Command | Description |
| --- | --- |
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |
| Left-aligned | Center-aligned | Right-aligned |
| :--- | :---: | ---: |
| git status | git status | git status |
| git diff | git diff | git diff |
| Name | Character |
| --- | --- |
| Backtick | ` |
| Pipe | \| |
------
# Blockquotes
```
> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.
Quote break.
> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
```
> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.
Quote break.
> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
------
# Inline HTML
```
<dl>
<dt>Definition list</dt>
<dd>Is something people use sometimes.</dd>
<dt>Markdown in HTML</dt>
<dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
</dl>
```
<dl>
<dt>Definition list</dt>
<dd>Is something people use sometimes.</dd>
<dt>Markdown in HTML</dt>
<dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
</dl>
------
# Horizontal Rules
```
Three or more...
---
Hyphens
***
Asterisks
___
Underscores
```
Three or more...
---
Hyphens
***
Asterisks
___
Underscores
------
+624
View File
@@ -0,0 +1,624 @@
---
layout: blog_post
title: 'This is the title of the blog post'
date: 2025-01-01
tags:
- Blog
- Post
- Tag
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem.
# Headers
```
# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
Alternatively, for H1 and H2, an underline-ish style:
Alt-H1
======
Alt-H2
------
```
# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
Alternatively, for H1 and H2, an underline-ish style:
Alt-H1
======
Alt-H2
------
------
# Emphasis
```
Emphasis, aka italics, with *asterisks* or _underscores_.
Strong emphasis, aka bold, with **asterisks** or __underscores__.
Combined emphasis with **asterisks and _underscores_**.
Strikethrough uses two tildes. ~~Scratch this.~~
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
```
Emphasis, aka italics, with *asterisks* or _underscores_.
Strong emphasis, aka bold, with **asterisks** or __underscores__.
Combined emphasis with **asterisks and _underscores_**.
Strikethrough uses two tildes. ~~Scratch this.~~
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
------
# Lists
```
1. First ordered list item
2. Another item
⋅⋅* Unordered sub-list.
1. Actual numbers don't matter, just that it's a number
⋅⋅1. Ordered sub-list
4. And another item.
⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅
⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅
⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
* Unordered list can use asterisks
- Or minuses
+ Or pluses
1. Make my changes
1. Fix bug
2. Improve formatting
- Make the headings bigger
2. Push my commits to GitHub
3. Open a pull request
* Describe my changes
* Mention all the members of my team
* Ask for feedback
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
```
1. First ordered list item
2. Another item
⋅⋅* Unordered sub-list.
1. Actual numbers don't matter, just that it's a number
⋅⋅1. Ordered sub-list
4. And another item.
⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅
⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅
⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
* Unordered list can use asterisks
- Or minuses
+ Or pluses
1. Make my changes
1. Fix bug
2. Improve formatting
- Make the headings bigger
2. Push my commits to GitHub
3. Open a pull request
* Describe my changes
* Mention all the members of my team
* Ask for feedback
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
------
# Task lists
```
- [x] Finish my changes
- [ ] Push my commits to GitHub
- [ ] Open a pull request
- [x] @mentions, #refs, [links](), **formatting**, and <del>tags</del> supported
- [x] list syntax required (any unordered or ordered list supported)
- [x] this is a complete item
- [ ] this is an incomplete item
```
- [x] Finish my changes
- [ ] Push my commits to GitHub
- [ ] Open a pull request
- [x] @mentions, #refs, [links](), **formatting**, and <del>tags</del> supported
- [x] list syntax required (any unordered or ordered list supported)
- [ ] this is a complete item
- [ ] this is an incomplete item
------
# Ignoring Markdown formatting
You can tell GitHub to ignore (or escape) Markdown formatting by using \ before the Markdown character.
```
Let's rename \*our-new-project\* to \*our-old-project\*.
```
Let's rename \*our-new-project\* to \*our-old-project\*.
------
# Links
```
[I'm an inline-style link](https://www.google.com)
[I'm an inline-style link with title](https://www.google.com "Google's Homepage")
[I'm a reference-style link][Arbitrary case-insensitive reference text]
[I'm a relative reference to a repository file](../blob/master/LICENSE)
[You can use numbers for reference-style link definitions][1]
Or leave it empty and use the [link text itself].
URLs and URLs in angle brackets will automatically get turned into links.
http://www.example.com or <http://www.example.com> and sometimes
example.com (but not on Github, for example).
Some text to show that the reference links can follow later.
[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com
```
[I'm an inline-style link](https://www.google.com)
[I'm an inline-style link with title](https://www.google.com "Google's Homepage")
[I'm a reference-style link][Arbitrary case-insensitive reference text]
[I'm a relative reference to a repository file](../blob/master/LICENSE)
[You can use numbers for reference-style link definitions][1]
Or leave it empty and use the [link text itself].
URLs and URLs in angle brackets will automatically get turned into links.
http://www.example.com or <http://www.example.com> and sometimes
example.com (but not on Github, for example).
Some text to show that the reference links can follow later.
[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com
------
# Images
```
Here's our logo (hover to see the title text):
Inline-style:
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Reference-style:
![alt text][logo]
[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 2"
![Minion](https://octodex.github.com/images/minion.png)
![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")
Like links, Images also have a footnote style syntax
![Alt text][id]
With a reference later in the document defining the URL location:
[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat"
```
Here's our logo (hover to see the title text):
Inline-style:
![alt text]({{ '/assets/images/etc/tim_the_beaver.png' | relative_url }} "Logo Title Text 1")
Reference-style:
![alt text][logo]
[logo]: {{ '/assets/images/etc/tim_the_beaver.png' | relative_url }} "Logo Title Text 2"
![Cat 1]({{ '/assets/images/etc/cat1.jpg' | relative_url }})
Like links, Images also have a footnote style syntax
![Alt text][id]
With a reference later in the document defining the URL location:
[id]: {{ '/assets/images/etc/cat2.jpg' | relative_url }} "Cat 2"
------
# [Footnotes](https://github.com/markdown-it/markdown-it-footnote)
```
Footnote 1 link[^first].
Footnote 2 link[^second].
Inline footnote^[Text of inline footnote] definition.
Duplicated footnote reference[^second].
[^first]: Footnote **can have markup**
and multiple paragraphs.
[^second]: Footnote text.
```
Footnote 1 link[^first].
Footnote 2 link[^second].
Inline footnote^[Text of inline footnote] definition.
Duplicated footnote reference[^second].
[^first]: Footnote **can have markup**
and multiple paragraphs.
[^second]: Footnote text.
------
# Code and Syntax Highlighting
```
Inline `code` has `back-ticks around` it.
```
Inline `code` has `back-ticks around` it.
```c#
using System.IO.Compression;
#pragma warning disable 414, 3021
namespace MyApplication
{
[Obsolete("...")]
class Program : IInterface
{
public static List<int> JustDoIt(int count)
{
Console.WriteLine($"Hello {Name}!");
return new List<int>(new int[] { 1, 2, 3 })
}
}
}
```
```css
@font-face {
font-family: Chunkfive; src: url('Chunkfive.otf');
}
body, .usertext {
color: #F0F0F0; background: #600;
font-family: Chunkfive, sans;
}
@import url(print.css);
@media print {
a[href^=http]::after {
content: attr(href)
}
}
```
```javascript
function $initHighlight(block, cls) {
try {
if (cls.search(/\bno\-highlight\b/) != -1)
return process(block, true, 0x0F) +
` class="${cls}"`;
} catch (e) {
/* handle exception */
}
for (var i = 0 / 2; i < classes.length; i++) {
if (checkCondition(classes[i]) === undefined)
console.log('undefined');
}
}
export $initHighlight;
```
```php
require_once 'Zend/Uri/Http.php';
namespace Location\Web;
interface Factory
{
static function _factory();
}
abstract class URI extends BaseURI implements Factory
{
abstract function test();
public static $st1 = 1;
const ME = "Yo";
var $list = NULL;
private $var;
/**
* Returns a URI
*
* @return URI
*/
static public function _factory($stats = array(), $uri = 'http')
{
echo __METHOD__;
$uri = explode(':', $uri, 0b10);
$schemeSpecific = isset($uri[1]) ? $uri[1] : '';
$desc = 'Multi
line description';
// Security check
if (!ctype_alnum($scheme)) {
throw new Zend_Uri_Exception('Illegal scheme');
}
$this->var = 0 - self::$st;
$this->list = list(Array("1"=> 2, 2=>self::ME, 3 => \Location\Web\URI::class));
return [
'uri' => $uri,
'value' => null,
];
}
}
echo URI::ME . URI::$st1;
__halt_compiler () ; datahere
datahere
datahere */
datahere
```
------
# Tables
```
Colons can be used to align columns.
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the
raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
| Command | Description |
| --- | --- |
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |
| Left-aligned | Center-aligned | Right-aligned |
| :--- | :---: | ---: |
| git status | git status | git status |
| git diff | git diff | git diff |
| Name | Character |
| --- | --- |
| Backtick | ` |
| Pipe | \| |
```
Colons can be used to align columns.
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the
raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
| Command | Description |
| --- | --- |
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |
| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |
| Left-aligned | Center-aligned | Right-aligned |
| :--- | :---: | ---: |
| git status | git status | git status |
| git diff | git diff | git diff |
| Name | Character |
| --- | --- |
| Backtick | ` |
| Pipe | \| |
------
# Blockquotes
```
> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.
Quote break.
> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
```
> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.
Quote break.
> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
------
# Inline HTML
```
<dl>
<dt>Definition list</dt>
<dd>Is something people use sometimes.</dd>
<dt>Markdown in HTML</dt>
<dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
</dl>
```
<dl>
<dt>Definition list</dt>
<dd>Is something people use sometimes.</dd>
<dt>Markdown in HTML</dt>
<dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
</dl>
------
# Horizontal Rules
```
Three or more...
---
Hyphens
***
Asterisks
___
Underscores
```
Three or more...
---
Hyphens
***
Asterisks
___
Underscores
------
+16
View File
@@ -0,0 +1,16 @@
---
layout: blog_post
title: 'Acknowledgement'
date: 2026-03-17
tags:
- Blog
- Post
- Tag
---
Thanks to [Yuqing Xie](https://yqxie99.github.io/) and [Kun Chen](https://kwen-chen.github.io/) for the contributions of the blog feature!
## Section 1
+17
View File
@@ -0,0 +1,17 @@
---
title: "Lorem ipsum: Dolor sit amet, consectetur adipiscing elit"
date: 2023-01-05 00:01:00 +0800
selected: true
pub: "Nature Communications"
pub_date: "2023"
abstract: >-
Cover image is a photo by Thomas Renaud on Unsplash. The abstract of the publication is meant to be a TLDR (very brief summary with 1~2 sentences) of your paper.
cover: /assets/images/covers/cover1.jpg
authors:
- Your Name*
- Robert White*
- John Doe
- Charles Green (Stanford)
links:
Paper: https://www.cell.com
---
+24
View File
@@ -0,0 +1,24 @@
---
title: "Pharetra Massa Massa Ultricies Mi Nisl Tincidunt"
date: 2023-01-21 00:01:00 +0800
selected: false
pub: "International Conference on Learning Representations (ICLR)"
pub_date: "2023"
semantic_scholar_id: 11ac0b5634a282f1a0da204b98e7473d8b480dfb # use this to retrieve citation count
abstract: >-
Photo by Dessy Dimcheva on Unsplash. Please keep the description of your publication as brief as possible. 1~2 sentences is ideal. Otherwise, it will look too noisy. This is a <strong>counterexample</strong> to show how the publication will look like when the abstract is too long.
The tangerine is a type of citrus fruit that is orange in color, that is considered either a variety of Citrus reticulata, the mandarin orange, or a closely related species, under the name Citrus tangerina, or yet as a hybrid (Citrus × tangerina) of mandarin orange varieties, with some pomelo contribution.
According to the Oxford English Dictionary (OED), the word "tangerine" was originally an adjective meaning "Of or pertaining to, or native of Tangier, a seaport in Morocco, on the Strait of Gibraltar" and "a native of Tangier." The name was first used for fruit coming from Tangier, Morocco, described as a mandarin variety. The OED cites this usage from Addison's The Tatler in 1710 with similar uses from the 1800s. The adjective was applied to the fruit, once known scientifically as "Citrus nobilis var. tangeriana" which grew in the region of Tangiers. This usage appears in the 1800s.
cover: /assets/images/covers/cover2.jpg
authors:
- Charles Green (MIT)*
- John Doe*
- Robert White
- James Wang
- Your Name#
links:
Paper: https://www.biorxiv.org
Code: https://github.com
Unsplash: https://unsplash.com/photos/orange-fruit-on-white-table-cloth-ISX_imp8t1o
---
@@ -0,0 +1,22 @@
---
title: "Publication without cover image"
date: 2023-01-1 00:01:00 +0800
selected: false
pub: "International Conference on Learning Representations (ICLR)"
# pub_pre: "Submitted to "
# pub_post: 'Under review.'
# pub_last: ' <span class="badge badge-pill badge-publication badge-success">Spotlight</span>'
pub_date: "2023"
abstract: >-
When the cover image is not provided, it will generate a random colorful bubble images as the cover image using the <code>bubble_visual_hash.js</code> script.
# cover: /assets/images/covers/cover3.jpg
authors:
- Your Name*#
- James Wang*
- Some Other Name
- John Doe
links:
Code: https://github.com/luost26/bubble-visual-hash
Demo: https://luost26.github.io/bubble-visual-hash
---
+22
View File
@@ -0,0 +1,22 @@
---
title: "Convallis a cras semper auctor neque vitae rutrum quisque non tellus orci ac"
date: 2024-05-12 00:01:00 +0800
selected: true
pub: "International Conference on Machine Learning (ICML)"
# pub_pre: "Submitted to "
# pub_post: 'Under review.'
pub_last: ' <span class="badge badge-pill badge-publication badge-success">Spotlight</span>'
pub_date: "2024"
semantic_scholar_id: 204e3073870fae3d05bcbc2f6a8e263d9b72e776 # use this to retrieve citation count
abstract: >-
Photo by Pineapple Supply Co. on Unsplash. Please put a tldr (too-long-didnt-read, 1~2 sentences) of your publication here. It is not recommended to put the actual abstract here because it is usually too long to fit in. $\LaTeX$ is supported. $a=b+c$.
cover: /assets/images/covers/cover3.jpg
authors:
- Your Name
- James Wang
- Some Other Name
- John Doe
links:
Code: https://github.com/luost26/academic-homepage
Unsplash: https://unsplash.com/photos/sliced-in-half-pineapple--_PLJZmHZzk
---
+9
View File
@@ -0,0 +1,9 @@
---
show: true
width: 3
date: 2020-01-12 00:01:00 +0800
group: Cats
---
<div>
<img src="{{ 'assets/images/etc/cat1.jpg' | relative_url }}" class="img-fluid rounded-xl" >
</div>
+9
View File
@@ -0,0 +1,9 @@
---
show: true
width: 3
date: 2020-01-12 00:01:00 +0800
group: Cats
---
<div>
<img data-src="{{ 'assets/images/etc/cat2.jpg' | relative_url }}" class="lazy w-100 rounded-xl" src="{{ '/assets/images/empty_300x200.png' | relative_url }}" data-toggle="tooltip" data-placement="top" title="Caption of this image">
</div>
+11
View File
@@ -0,0 +1,11 @@
---
show: true
width: 3
date: 2020-01-12 00:01:00 +0800
group: Cats
---
<div>
<a href="https://unsplash.com/photos/russian-blue-cat-standing-near-ceramic-vase-with-artificial-flowers-Vv45XEMJWZk" target="_blank">
<img data-src="https://images.unsplash.com/photo-1497473376897-16fbb7552478?q=80&w=2970&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" class="lazy w-100 rounded-xl" src="{{ '/assets/images/empty_300x200.png' | relative_url }}">
</a>
</div>
+14
View File
@@ -0,0 +1,14 @@
---
show: true
width: 3
date: 2020-01-10 00:01:00 +0800
group: Cats
---
<div>
<img data-src="https://images.unsplash.com/photo-1536070800722-f1a29a336bc7?q=80&w=2970&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" class="lazy w-100 rounded-xl-top" src="{{ '/assets/images/empty_300x200.png' | relative_url }}">
<div class="card-body">
<p class="card-text">
Meow! I am a cat. <a href="https://unsplash.com/photos/russian-blue-cat-in-close-up-photography-1pjqSWDcgwo" target="_blank">Unsplash</a>
</p>
</div>
</div>
+10
View File
@@ -0,0 +1,10 @@
---
show: true
width: 3
date: 2019-01-12 00:01:00 +0800
group: Cats
---
<div>
<img data-src="{{ site.data.profile.portrait_url | relative_url }}" class="lazy w-100 rounded-xl" src="{{ '/assets/images/empty_300x200.png' | relative_url }}">
</div>
+9
View File
@@ -0,0 +1,9 @@
---
show: true
width: 1
date: 2017-01-13 00:01:00 +0800
class: "" # Override the default card style
---
<div>
<img src="{{ 'assets/images/badges/PKU_red.png' | relative_url }}" class="img-fluid rounded-xl" >
</div>
+9
View File
@@ -0,0 +1,9 @@
---
show: true
width: 1
date: 2017-01-12 00:01:00 +0800
class: "" # Override the default card style
---
<div>
<img src="{{ 'assets/images/badges/MIT_Social_circle.png' | relative_url }}" class="img-fluid rounded-xl" >
</div>
+9
View File
@@ -0,0 +1,9 @@
---
show: true
width: 1
date: 2017-01-11 00:01:00 +0800
class: "" # Override the default card style
---
<div>
<img src="{{ 'assets/images/etc/tim_the_beaver.png' | relative_url }}" class="img-fluid rounded-xl" >
</div>
+23
View File
@@ -0,0 +1,23 @@
---
show: false
width: 6
date: 2020-01-12 00:01:00 +0800
---
<div class="m-4">
<h5>Education</h5>
<ul class="list-unstyled mb-1">
{% for item in site.data.profile.education %}
<li class="media mb-1">
<img src="{{ item.logo | relative_url }}" alt="{{ item.name }}" style="width: 18px;" class="mr-1 mt-1">
<div class="media-body">
<div>{{ item.name }}</div>
<div class="small">{{ item.dept }}</div>
<div class="small d-flex">
<div>{{ item.position }}</div>
<div class="mt-auto ml-auto no-break"><em>{{ item.date }}</em></div>
</div>
</div>
</li>
{% endfor %}
</ul>
</div>
+8
View File
@@ -0,0 +1,8 @@
---
show: true
width: 4
date: 2017-01-14 00:01:00 +0800
---
<div class="p-4 text-center">
$a^2 + b^2 = c^2$
</div>
+13
View File
@@ -0,0 +1,13 @@
---
show: true
width: 4
date: 2020-01-12 00:01:00 +0800
---
<div class="p-4">
<h5>Disable Showcase Page?</h5>
<hr />
<p>
If you want to disable this showcase page, you can hide it from the navigation bar by removing the showcase in <code>data/navigation.yml</code>
</p>
</div>
+21
View File
@@ -0,0 +1,21 @@
---
show: true
width: 4
date: 2020-01-12 00:01:00 +0800
---
<div>
<img data-src="{{ 'assets/images/covers/cover1.jpg' | relative_url }}" class="lazy w-100 rounded-xl" src="{{ '/assets/images/empty_300x200.png' | relative_url }}">
<div class="card-img-overlay" style="overflow: scroll; background: rgb(255,255,255,0.8)">
<h5 class="card-title">Image Lazyload</h5>
<p class="card-text">
It is highly recommended to use lazyload for images to improve page loading speed, especially for pages with many images.
Example code snippet:
</p>
<p class="card-text">
{% raw %}
<code>&lt;img data-src=&quot;[Image URL]&quot; class=&quot;lazy w-100 rounded-xl&quot; src=&quot;{{ '/assets/images/empty_300x200.png' | relative_url }}&quot;&gt;</code>
{% endraw %}
</p>
</div>
</div>
+15
View File
@@ -0,0 +1,15 @@
---
show: true
width: 4
date: 2020-01-12 00:01:00 +0800
---
<div>
<img data-src="https://api.star-history.com/svg?repos=luost26/academic-homepage&type=Date" class="lazy w-100 rounded-xl-top" src="{{ '/assets/images/empty_300x200.png' | relative_url }}">
<div class="card-body">
<h5 class="card-title">GitHub Star History</h5>
<p class="card-text">
This image shows the star history of the GitHub repository of this website.
</p>
<p class="card-text"><small><a href="https://github.com/luost26/academic-homepage" target="_blank">Give a star!</a></small></p>
</div>
</div>
+17
View File
@@ -0,0 +1,17 @@
---
show: true
width: 4
date: 2021-09-12 00:01:00 +0800
height: 295px
images:
- src: https://picsum.photos/seed/first1111/800/800
title: Photo 1
desc: Description 1.
link: https://picsum.photos/
- src: https://picsum.photos/seed/second22/800/800
title: Photo 2
desc: Description 2
- src: https://picsum.photos/seed/third33/800/800
---
{% include widgets/carousel.html id=page.id images=page.images height=page.height %}
+23
View File
@@ -0,0 +1,23 @@
---
show: true
width: 8
date: 2024-01-12 00:01:00 +0800
---
<div class="p-4">
<h2>Welcome to Showcase!</h2>
<hr />
<p>
<code>Showcase</code> is a page where you can show off almost anything you want. It can be the photo of your pets, your favorite books, your favorite projects, or anything else you want to show to the world.
</p>
<p>
You can create a new showcase item by creating a new file in the <code>_showcase</code> folder. It gives you the highest flexibility to customize the item using any HTML code.
</p>
<p>
Cards are ordered by the <code>date</code> field in the front matter in descending order. The <code>width</code> field is used to determine the width of the card, ranging from 1 to 12.
Layout is done by the <a href="https://masonry.desandro.com/" target="_blank">Masonry</a> library.
</p>
<p>
For a tidy layout, it is recommended to set the width of the cards to be either multiple of 3 or multiple of 4 for all cards, except for small badges that do not take up much space (width=1).
</p>
</div>
+266
View File
@@ -0,0 +1,266 @@
.highlighter-rouge {
font-size: 0.875rem;
}
/* Blog content styling */
.blog-content {
line-height: 1.7;
}
.blog-content h1,
.blog-content h2,
.blog-content h3,
.blog-content h4,
.blog-content h5,
.blog-content h6 {
margin-top: 2rem;
margin-bottom: 1rem;
font-weight: 500;
}
.blog-content h1 {
font-size: 2rem;
border-bottom: 2px solid #e9ecef;
padding-bottom: 0.5rem;
}
.blog-content h2 {
font-size: 1.5rem;
border-bottom: 1px solid #e9ecef;
padding-bottom: 0.25rem;
}
.blog-content h3 {
font-size: 1.25rem;
}
.blog-content p {
margin-bottom: 1rem;
}
.blog-content ul,
.blog-content ol {
margin-bottom: 1rem;
padding-left: 2rem;
}
.blog-content li {
margin-bottom: 0.5rem;
}
.blog-content blockquote {
border-left: 3px solid #e0e0e0;
padding-left: 1rem;
margin: 1.5rem 0;
font-style: italic;
color: #6c757d;
}
.blog-content img {
max-width: 100%;
height: auto;
border-radius: 0.375rem;
margin: 1rem 0;
}
/* Multi-column image layouts */
.blog-content .row img {
margin: 0.5rem 0;
transition: transform 0.2s ease-in-out;
}
.blog-content .row img:hover {
transform: scale(1.02);
}
/* Image gallery styles */
.blog-content .img-fluid {
width: 100%;
height: auto;
object-fit: cover;
}
.blog-content .shadow-sm {
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
}
/* Responsive image containers */
.blog-content .col-md-6 img,
.blog-content .col-md-4 img,
.blog-content .col-lg-3 img {
width: 100%;
height: 200px;
object-fit: cover;
border-radius: 0.375rem;
}
/* Mixed content layouts */
.blog-content .col-md-8 {
padding-right: 1rem;
}
.blog-content .col-md-4 {
padding-left: 1rem;
}
@media (max-width: 768px) {
.blog-content .col-md-8,
.blog-content .col-md-4 {
padding: 0;
margin-bottom: 1rem;
}
.blog-content .col-md-6 img,
.blog-content .col-md-4 img {
height: 150px;
}
}
.blog-content table {
width: 100%;
margin-bottom: 1rem;
border-collapse: collapse;
}
.blog-content table th,
.blog-content table td {
padding: 0.75rem;
border: 1px solid #dee2e6;
}
.blog-content table th {
background-color: #f8f9fa;
font-weight: 600;
}
/* Math formula styling */
.katex-display {
margin: 1.5rem 0;
text-align: center;
overflow-x: auto;
overflow-y: hidden;
}
.katex {
font-size: 1.1em;
}
/* Ensure math formulas are properly displayed */
.katex-display .katex {
display: inline-block;
white-space: nowrap;
}
/* Fix for math formula containers */
.katex-display {
display: block;
width: 100%;
}
/* Ensure proper spacing around math formulas */
.blog-content .katex-display {
margin: 2rem 0;
padding: 1rem 0;
}
/* Inline math styling */
.katex-inline {
display: inline;
margin: 0 0.2em;
}
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
font-weight: 600;
}
/* Blog layout — content preserves original width, TOC uses remaining space */
.blog-layout-wrapper {
display: flex;
justify-content: center;
padding: 0 15px;
gap: 1.5rem;
}
.blog-main {
flex: 0 1 950px;
min-width: 0;
}
.blog-toc-sidebar {
flex: 0 0 auto;
width: clamp(160px, 18vw, 360px);
display: none;
}
@media (min-width: 992px) {
.blog-toc-sidebar {
display: block;
}
}
/* Blog Table of Contents */
.blog-toc-nav {
position: sticky;
top: 6rem;
max-height: calc(100vh - 8rem);
overflow-y: auto;
padding-left: 0.75rem;
border-left: 2px solid #f0f0f0;
}
.blog-toc-title {
font-size: 0.875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: #aaa;
margin-bottom: 0.75rem;
}
.blog-toc-list {
list-style: none;
padding: 0;
margin: 0;
}
.blog-toc-list li {
margin-bottom: 0.25rem;
}
.blog-toc-list a {
display: block;
font-size: 0.8rem;
line-height: 1.4;
color: #999;
text-decoration: none;
padding: 0.15rem 0;
transition: color 0.2s ease;
}
.blog-toc-list a:hover {
color: #2d3436;
text-decoration: none;
}
.blog-toc-list a.toc-active {
color: #212529;
font-weight: 600;
}
.blog-toc-list .toc-h3 {
padding-left: 0.75rem;
}
.blog-toc-list .toc-h4 {
padding-left: 1.5rem;
}
/* Hide TOC scrollbar */
.blog-toc-nav::-webkit-scrollbar {
width: 0;
}
.blog-toc-nav {
scrollbar-width: none;
}
+93
View File
@@ -0,0 +1,93 @@
@charset "utf-8";
body {
font-family: "Lato", sans-serif;
font-weight: 400;
padding-top: 5.0rem;
}
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
font-weight: 700;
}
.card {
border-radius: 0.8rem!important;
}
.card-img-overlay {
border-radius: 0.8rem!important;
}
.rounded-xl {
border-radius: 0.8rem!important;
}
.rounded-xl-bottom {
border-bottom-right-radius: 0.8rem !important;
border-bottom-left-radius: 0.8rem !important;
}
.rounded-xl-top {
border-top-left-radius: 0.8rem !important;
border-top-right-radius: 0.8rem !important;
}
.text-profile-position {
font-weight: 400;
}
.text-profile-bio {
/* font-family: "Raleway"; */
font-weight: 400;
}
.navbar {
background-color: rgba(255, 255, 255, 0.6) !important;
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
}
.inline-badge {
height: 16px;
vertical-align: -10%;
margin-right: 2px;
line-break: unset;
}
.no-break {
white-space: nowrap;
}
.cover-image {
width: 180px;
max-height: 120px;
}
.abstract-body {
min-height: 100px;
}
img.lazy {
background-image: url('images/loading.gif');
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: 50px 50px;
min-height: 80px;
}
div.lazy {
background-image: url('images/loading.gif');
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: 50px 50px;
min-height: 80px;
}
.badge-publication {
font-size: 100%;
}
.email-text {
font-family: Source Code Pro, monospace;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

+57
View File
@@ -0,0 +1,57 @@
(function () {
var tocList = document.querySelector('.blog-toc-list');
if (!tocList) return;
var content = document.querySelector('.blog-content');
var headings = content.querySelectorAll('h1, h2, h3');
var navbarHeight = 90;
if (headings.length === 0) {
document.getElementById('blog-toc').style.display = 'none';
return;
}
// Add scroll-margin to all headings so anchor links clear the navbar
headings.forEach(function (heading, i) {
if (!heading.id) {
heading.id = 'heading-' + i;
}
heading.style.scrollMarginTop = navbarHeight + 'px';
var li = document.createElement('li');
var a = document.createElement('a');
a.href = '#' + heading.id;
a.textContent = heading.textContent;
a.className = 'toc-' + heading.tagName.toLowerCase();
a.addEventListener('click', function (e) {
e.preventDefault();
var target = document.getElementById(heading.id);
if (target) {
window.scrollTo({
top: target.offsetTop - navbarHeight,
behavior: 'smooth'
});
history.pushState(null, null, '#' + heading.id);
}
});
li.appendChild(a);
tocList.appendChild(li);
});
// Highlight active heading on scroll
var tocLinks = tocList.querySelectorAll('a');
function updateActive() {
var scrollPos = window.scrollY + navbarHeight + 10;
var current = null;
headings.forEach(function (heading) {
if (heading.offsetTop <= scrollPos) {
current = heading.id;
}
});
tocLinks.forEach(function (link) {
link.classList.toggle('toc-active', link.getAttribute('href') === '#' + current);
});
}
window.addEventListener('scroll', updateActive, { passive: true });
updateActive();
})();
+122
View File
@@ -0,0 +1,122 @@
// Formatted version of a popular md5 implementation
// Original copyright (c) Paul Johnston & Greg Holt.
function md5(inputString) {
var hc = "0123456789abcdef";
function rh(n) { var j, s = ""; for (j = 0; j <= 3; j++) s += hc.charAt((n >> (j * 8 + 4)) & 0x0F) + hc.charAt((n >> (j * 8)) & 0x0F); return s; }
function ad(x, y) { var l = (x & 0xFFFF) + (y & 0xFFFF); var m = (x >> 16) + (y >> 16) + (l >> 16); return (m << 16) | (l & 0xFFFF); }
function rl(n, c) { return (n << c) | (n >>> (32 - c)); }
function cm(q, a, b, x, s, t) { return ad(rl(ad(ad(a, q), ad(x, t)), s), b); }
function ff(a, b, c, d, x, s, t) { return cm((b & c) | ((~b) & d), a, b, x, s, t); }
function gg(a, b, c, d, x, s, t) { return cm((b & d) | (c & (~d)), a, b, x, s, t); }
function hh(a, b, c, d, x, s, t) { return cm(b ^ c ^ d, a, b, x, s, t); }
function ii(a, b, c, d, x, s, t) { return cm(c ^ (b | (~d)), a, b, x, s, t); }
function sb(x) {
var i; var nblk = ((x.length + 8) >> 6) + 1; var blks = new Array(nblk * 16); for (i = 0; i < nblk * 16; i++) blks[i] = 0;
for (i = 0; i < x.length; i++) blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8);
blks[i >> 2] |= 0x80 << ((i % 4) * 8); blks[nblk * 16 - 2] = x.length * 8; return blks;
}
var i, x = sb("" + inputString), a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, olda, oldb, oldc, oldd;
for (i = 0; i < x.length; i += 16) {
olda = a; oldb = b; oldc = c; oldd = d;
a = ff(a, b, c, d, x[i + 0], 7, -680876936); d = ff(d, a, b, c, x[i + 1], 12, -389564586); c = ff(c, d, a, b, x[i + 2], 17, 606105819);
b = ff(b, c, d, a, x[i + 3], 22, -1044525330); a = ff(a, b, c, d, x[i + 4], 7, -176418897); d = ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = ff(c, d, a, b, x[i + 6], 17, -1473231341); b = ff(b, c, d, a, x[i + 7], 22, -45705983); a = ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = ff(d, a, b, c, x[i + 9], 12, -1958414417); c = ff(c, d, a, b, x[i + 10], 17, -42063); b = ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = ff(a, b, c, d, x[i + 12], 7, 1804603682); d = ff(d, a, b, c, x[i + 13], 12, -40341101); c = ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = ff(b, c, d, a, x[i + 15], 22, 1236535329); a = gg(a, b, c, d, x[i + 1], 5, -165796510); d = gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = gg(c, d, a, b, x[i + 11], 14, 643717713); b = gg(b, c, d, a, x[i + 0], 20, -373897302); a = gg(a, b, c, d, x[i + 5], 5, -701558691);
d = gg(d, a, b, c, x[i + 10], 9, 38016083); c = gg(c, d, a, b, x[i + 15], 14, -660478335); b = gg(b, c, d, a, x[i + 4], 20, -405537848);
a = gg(a, b, c, d, x[i + 9], 5, 568446438); d = gg(d, a, b, c, x[i + 14], 9, -1019803690); c = gg(c, d, a, b, x[i + 3], 14, -187363961);
b = gg(b, c, d, a, x[i + 8], 20, 1163531501); a = gg(a, b, c, d, x[i + 13], 5, -1444681467); d = gg(d, a, b, c, x[i + 2], 9, -51403784);
c = gg(c, d, a, b, x[i + 7], 14, 1735328473); b = gg(b, c, d, a, x[i + 12], 20, -1926607734); a = hh(a, b, c, d, x[i + 5], 4, -378558);
d = hh(d, a, b, c, x[i + 8], 11, -2022574463); c = hh(c, d, a, b, x[i + 11], 16, 1839030562); b = hh(b, c, d, a, x[i + 14], 23, -35309556);
a = hh(a, b, c, d, x[i + 1], 4, -1530992060); d = hh(d, a, b, c, x[i + 4], 11, 1272893353); c = hh(c, d, a, b, x[i + 7], 16, -155497632);
b = hh(b, c, d, a, x[i + 10], 23, -1094730640); a = hh(a, b, c, d, x[i + 13], 4, 681279174); d = hh(d, a, b, c, x[i + 0], 11, -358537222);
c = hh(c, d, a, b, x[i + 3], 16, -722521979); b = hh(b, c, d, a, x[i + 6], 23, 76029189); a = hh(a, b, c, d, x[i + 9], 4, -640364487);
d = hh(d, a, b, c, x[i + 12], 11, -421815835); c = hh(c, d, a, b, x[i + 15], 16, 530742520); b = hh(b, c, d, a, x[i + 2], 23, -995338651);
a = ii(a, b, c, d, x[i + 0], 6, -198630844); d = ii(d, a, b, c, x[i + 7], 10, 1126891415); c = ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = ii(b, c, d, a, x[i + 5], 21, -57434055); a = ii(a, b, c, d, x[i + 12], 6, 1700485571); d = ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = ii(c, d, a, b, x[i + 10], 15, -1051523); b = ii(b, c, d, a, x[i + 1], 21, -2054922799); a = ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = ii(d, a, b, c, x[i + 15], 10, -30611744); c = ii(c, d, a, b, x[i + 6], 15, -1560198380); b = ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = ii(a, b, c, d, x[i + 4], 6, -145523070); d = ii(d, a, b, c, x[i + 11], 10, -1120210379); c = ii(c, d, a, b, x[i + 2], 15, 718787259);
b = ii(b, c, d, a, x[i + 9], 21, -343485551); a = ad(a, olda); b = ad(b, oldb); c = ad(c, oldc); d = ad(d, oldd);
}
return rh(a) + rh(b) + rh(c) + rh(d);
}
// This script is inspired by https://github.com/dakridge/identicon
createHashGroupForString = function (str) {
var hashGroup = [];
var hash = md5(str);
for (var i = 0; i < hash.length; i += 1) {
var byte = parseInt(hash[i], 16);
hashGroup.push(byte);
}
return hashGroup;
}
createBubbleInfo = function (hashGroup, n, w, h) {
var maxN = hashGroup.length / 2;
n = n < maxN ? n : maxN;
var wh = w < h ? w : h;
var scaleX = function (v) { return (w / 16) * v; };
var scaleY = function (v) { return (h / 16) * v; };
var radius = function (v) { var min = 10; var max = wh / 2; return min + ((v / 16) * (max - min)); };
var color = function (i) {
var c = [
"#1f77b4", "#aec7e8", // blue
"#ff7f0e", "#ffbb78", // orange
"#2ca02c", "#98df8a", // green
"#d62728", "#ff9896", // red
"#9467bd", "#c5b0d5", // purple
"#8c564b", "#c49c94", // brown
// "#e377c2", "#f7b6d2", // pink
// "#7f7f7f", "#c7c7c7", // gray
"#bcbd22", "#dbdb8d", // yellow
"#17becf", "#9edae5", // cyan
];
return c[i % c.length];
};
var bubbleInfo = [];
for (var i = 0; i < n; i++) {
var xRel = hashGroup[2 * i];
var yRel = hashGroup[2 * i + 1];
bubbleInfo.push({
x: scaleX(xRel),
y: scaleY(yRel),
radius: radius(hashGroup[(xRel * yRel) % hashGroup.length]),
color: color(xRel + yRel)
});
}
return bubbleInfo;
}
drawBubble = function (svg, bubbleInfo) {
// Sort bubbles by radius in descending order
bubbleInfo.sort(function (a, b) {
return b.radius - a.radius;
});
for (var i = 0; i < bubbleInfo.length; i++) {
var bubble = bubbleInfo[i];
var circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", bubble.x);
circle.setAttribute("cy", bubble.y);
circle.setAttribute("r", bubble.radius);
circle.setAttribute("fill", bubble.color);
circle.setAttribute("fill-opacity", 0.75);
svg.appendChild(circle);
}
}
var canvases = document.querySelectorAll(".bubble-visual-hash");
canvases.forEach(function (canvas) {
var hash = canvas.getAttribute("data-bubble-visual-hash");
var width = canvas.viewBox.baseVal.width;
var height = canvas.viewBox.baseVal.height;
var bubbleInfo = createBubbleInfo(createHashGroupForString(hash), 8, width, height);
drawBubble(canvas, bubbleInfo);
});
+42
View File
@@ -0,0 +1,42 @@
// aHR0cHM6Ly9naXRodWIuY29tL2x1b3N0MjYvYWNhZGVtaWMtaG9tZXBhZ2U=
$(function () {
lazyLoadOptions = {
scrollDirection: 'vertical',
effect: 'fadeIn',
effectTime: 300,
placeholder: "",
onError: function(element) {
console.log('[lazyload] Error loading ' + element.data('src'));
},
afterLoad: function(element) {
if (element.is('img')) {
// remove background-image style
element.css('background-image', 'none');
element.css('min-height', '0');
} else if (element.is('div')) {
// set the style to background-size: cover;
element.css('background-size', 'cover');
element.css('background-position', 'center');
}
}
}
$('img.lazy, div.lazy:not(.always-load)').Lazy({visibleOnly: true, ...lazyLoadOptions});
$('div.lazy.always-load').Lazy({visibleOnly: false, ...lazyLoadOptions});
$('[data-toggle="tooltip"]').tooltip()
var $grid = $('.grid').masonry({
"percentPosition": true,
"itemSelector": ".grid-item",
"columnWidth": ".grid-sizer"
});
// layout Masonry after each image loads
$grid.imagesLoaded().progress(function () {
$grid.masonry('layout');
});
$(".lazy").on("load", function () {
$grid.masonry('layout');
});
})
@@ -0,0 +1,68 @@
const citationCountElements = document.querySelectorAll('[data-semantic-scholar-id]');
citationCountElements.forEach(element => {
const id = element.getAttribute('data-semantic-scholar-id');
if (id) {
element.setAttribute('data-semantic-scholar-id', id.toLowerCase());
}
});
const semanticScholarIds = new Set(Array.from(citationCountElements).map(element => element.getAttribute('data-semantic-scholar-id')).filter(id => id));
let uncachedSemanticScholarIds = [];
semanticScholarIds.forEach(id => {
const cacheKey = `semanticScholarCitationCount:${id}`;
const cachedData = localStorage.getItem(cacheKey);
if (cachedData) {
const { _, timestamp } = JSON.parse(cachedData);
// If cached data is older than 1 hour, consider it uncached
if (Date.now() - timestamp > 1 * 60 * 60 * 1000) {
uncachedSemanticScholarIds.push(id);
}
} else {
uncachedSemanticScholarIds.push(id);
}
});
let showSemanticScholarCitationCount = () => {
// Update the DOM with the cached citation counts
semanticScholarIds.forEach(id => {
const cacheKey = `semanticScholarCitationCount:${id}`;
const cachedData = localStorage.getItem(cacheKey);
if (cachedData) {
const { citationCount } = JSON.parse(cachedData);
const elements = document.querySelectorAll(`[data-semantic-scholar-id="${id}"]`);
elements.forEach(element => {
element.innerHTML = `<a class="badge badge-pill badge-publication badge-info" href="https://www.semanticscholar.org/paper/${id}" target="_blank"><i class="ai ai-semantic-scholar"></i> ${parseInt(citationCount).toLocaleString()} citations</a>`;
});
}
});
};
if (uncachedSemanticScholarIds.length > 0) {
fetch('https://api.semanticscholar.org/graph/v1/paper/batch?fields=citationCount', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
ids: Array.from(semanticScholarIds)
})
}).then(response => {
return response.json();
}).then(data => {
data.forEach(paper => {
console.log(paper);
// Cache citation count data
const cacheKey = `semanticScholarCitationCount:${paper.paperId}`;
const cacheData = {
citationCount: paper.citationCount,
timestamp: Date.now()
};
localStorage.setItem(cacheKey, JSON.stringify(cacheData));
});
}).catch(error => {
console.error('Error fetching Semantic Scholar data:', error);
}).finally(showSemanticScholarCitationCount);
} else {
showSemanticScholarCitationCount();
}
+32
View File
@@ -0,0 +1,32 @@
---
layout: default
title : Blog
navbar_title: Blog
body_attr: >-
data-spy="scroll" data-target="#navbar-year" data-offset="100"
---
{% assign blogs_by_year = site.posts | sort: "date" | reverse | group_by_exp: "item", "item.date | date: '%Y'" %}
<div class="row">
<div class="col-12 col-lg-10">
{% for year in blogs_by_year %}
{% assign num_blogs = year.items | size %}
<h2 class="pt-4" id="year-{{ year.name }}">{{ year.name }}</h2>
<div class="my-0 p-0 bg-white shadow-sm rounded-xl">
{% for item in year.items %}
{% include widgets/blog_card.html item=item hide_bottom_border=forloop.last first=forloop.first last=forloop.last %}
{% endfor %}
</div>
{% endfor %}
</div>
<div class="col-2 d-none d-lg-block">
<div id="navbar-year" class="nav nav-pills flex-column sticky-top" style="top: 80px">
{% for year in blogs_by_year %}
<a class="nav-link d-block" href="#year-{{ year.name }}">{{ year.name }}</a>
{% endfor %}
</div>
</div>
</div>
+31 -70
View File
@@ -1,78 +1,39 @@
---
layout: default
title: Home
url: /
title : Homepage
navbar_title: Home
---
<div class="profile">
<div>
<div class="profile-photo-placeholder">👨‍🔬</div>
</div>
<div>
<div class="profile-name">{{ site.name }}</div>
<div class="profile-position">{{ site.position }} &mdash; <a href="{{ site.affiliation_link }}">{{ site.affiliation }}</a></div>
<p class="profile-bio">{{ site.data.profile.bio }}</p>
<div class="profile-links">
{% if site.email %}<a href="mailto:{{ site.email }}">✉ Email</a>{% endif %}
{% if site.github %}<a href="https://github.com/{{ site.github }}" target="_blank">GitHub</a>{% endif %}
{% if site.linkedin %}<a href="https://linkedin.com/in/{{ site.linkedin }}" target="_blank">LinkedIn</a>{% endif %}
{% if site.google_scholar %}<a href="{{ site.google_scholar }}" target="_blank">Google Scholar</a>{% endif %}
{% if site.orcid %}<a href="https://orcid.org/{{ site.orcid }}" target="_blank">ORCID</a>{% endif %}
<div class="row">
<div class="col-lg-3 col-md-4">
{% include widgets/profile_card_mini.html %}
</div>
</div>
</div>
<div class="col-lg-9 col-md-8">
<div class="section">
<div class="section-title">Actualités</div>
<ul class="news-list">
{% for item in site.news limit:5 %}
<li class="news-item">
<span class="news-date">{{ item.date | date: "%b %Y" }}</span>
<span>{{ item.content | markdownify | remove: '<p>' | remove: '</p>' }}</span>
</li>
{% endfor %}
</ul>
</div>
{% include widgets/profile_card_bio_only.html %}
<div class="section">
<div class="section-title">Publications sélectionnées</div>
<div class="pub-list">
{% assign selected = site.publications | where: "selected", true %}
{% for pub in selected %}
<div class="pub-card">
<div>
<div class="pub-title">{{ pub.title }}</div>
<div class="pub-authors">{{ pub.authors }}</div>
<div class="pub-venue">{{ pub.venue }}, {{ pub.year }}</div>
<div class="pub-links">
{% if pub.paper_url %}<a href="{{ pub.paper_url }}" target="_blank">Paper</a>{% endif %}
{% if pub.code_url %}<a href="{{ pub.code_url }}" target="_blank">Code</a>{% endif %}
</div>
</div>
<!-- Debugging widgets -->
{% include widgets/debug_repo_name.html %}
{% include widgets/debug_url.html %}
{% if site.data.display.homepage.show_experience %}
{% include widgets/experience_card.html %}
{% endif %}
{% if site.data.display.homepage.show_news %}
{% assign count_news = site.news | size %}
{% if count_news > 0 %}
{% include widgets/news_card.html limit=site.data.display.homepage.num_news %}
{% endif %}
{% endif %}
{% if site.data.display.homepage.show_selected_publications %}
{% assign pubs = site.publications | sort: "date" | reverse | where: "selected", true %}
{%
include widgets/publication_card.html
publications=pubs
title='<i class="fas fa-star"></i> Selected Publications'
%}
{% endif %}
</div>
{% endfor %}
</div>
</div>
<div class="section">
<div class="section-title">Intérêts</div>
<div class="interests-list">
{% for interest in site.data.profile.interests %}
<span class="interest-tag">{{ interest }}</span>
{% endfor %}
</div>
</div>
<div class="section">
<div class="section-title">Formation</div>
<ul class="edu-list">
{% for edu in site.data.profile.education %}
<li class="edu-item">
<div>
<div class="edu-degree">{{ edu.degree }}</div>
<div style="font-size:13px;color:var(--text-muted)">{{ edu.institution }}</div>
</div>
<div class="edu-year">{{ edu.year }}</div>
</li>
{% endfor %}
</ul>
</div>
+26
View File
@@ -0,0 +1,26 @@
---
layout: default
title : Homepage
navbar_title: Home (Layout 2)
---
{% include widgets/profile_card.html %}
{% if site.data.display.homepage.show_experience %}
{% include widgets/experience_card.html %}
{% endif %}
{% if site.data.display.homepage.show_news %}
{% assign count_news = site.news | size %}
{% if count_news > 0 %}
{% include widgets/news_card.html limit=site.data.display.homepage.num_news %}
{% endif %}
{% endif %}
{% if site.data.display.homepage.show_selected_publications %}
{% assign pubs = site.publications | sort: "date" | reverse | where: "selected", true %}
{%
include widgets/publication_card.html
publications=pubs
title='<i class="fas fa-star"></i> Selected Publications'
%}
{% endif %}
+26 -21
View File
@@ -1,27 +1,32 @@
---
layout: default
title: Publications
url: /publications
title : Publications
navbar_title: Publications
body_attr: >-
data-spy="scroll" data-target="#navbar-year" data-offset="100"
---
<h1 style="font-size:1.5rem;font-weight:600;margin-bottom:2rem">Publications</h1>
<div class="pub-list">
{% assign pubs_by_year = site.publications | group_by: "year" | sort: "name" | reverse %}
{% for year_group in pubs_by_year %}
<div style="margin-bottom:2rem">
<div style="font-size:1rem;font-weight:600;color:var(--text-muted);margin-bottom:1rem">{{ year_group.name }}</div>
{% for pub in year_group.items %}
<div class="pub-card" style="margin-bottom:1rem">
<div>
<div class="pub-title">{{ pub.title }}</div>
<div class="pub-authors">{{ pub.authors }}</div>
<div class="pub-venue">{{ pub.venue }}</div>
<div class="pub-links">
{% if pub.paper_url %}<a href="{{ pub.paper_url }}" target="_blank">Paper</a>{% endif %}
{% if pub.code_url %}<a href="{{ pub.code_url }}" target="_blank">Code</a>{% endif %}
{% assign pubs_by_year = site.publications | sort: "date" | reverse | group_by_exp: "item", "item.date | date: '%Y'" %}
<div class="row">
<div class="col-12 col-lg-10">
{% for year in pubs_by_year %}
{% assign num_papers = year.items | size %}
<h2 class="pt-4" id="year-{{ year.name }}">{{ year.name }}</h2>
<div class="my-0 p-0 bg-white shadow-sm rounded-xl">
{% for item in year.items %}
{% include widgets/publication_item.html item=item hide_bottom_border=forloop.last first=forloop.first last=forloop.last %}
{% endfor %}
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
{% endfor %}
<div class="col-2 d-none d-lg-block">
<div id="navbar-year" class="nav nav-pills flex-column sticky-top" style="top: 80px">
{% for year in pubs_by_year %}
<a class="nav-link d-block" href="#year-{{ year.name }}">{{ year.name }}</a>
{% endfor %}
</div>
</div>
</div>
+27 -14
View File
@@ -1,19 +1,32 @@
---
layout: default
title: Projets
url: /showcase
title : Showcase
navbar_title: Showcase
container_class: container-xl
---
<h1 style="font-size:1.5rem;font-weight:600;margin-bottom:2rem">Projets</h1>
<div class="showcase-grid">
{% for project in site.showcase %}
<a class="showcase-card" href="{{ project.url }}" {% if project.url contains 'http' %}target="_blank"{% endif %} style="display:block;text-decoration:none;color:inherit">
<div class="showcase-title">{{ project.title }}</div>
<div class="showcase-desc">{{ project.description }}</div>
<div class="showcase-tags">
{% for tag in project.tags %}
<span class="showcase-tag">{{ tag }}</span>
{% endfor %}
{% assign cards_by_group = site.showcase | sort: "date" | reverse | where: "show", true | group_by_exp: "item", "item.group" %}
{% for group in cards_by_group %}
<h1>{{ group.name }}</h1>
<div class="row grid mb-4">
<div class="grid-sizer col-1"></div>
{% for item in group.items %}
{% if item.width >= 6 -%}
{%- assign width_sm = 12 -%}
{%- assign width_xs = 12 -%}
{%- elsif item.width >= 2 -%}
{%- assign width_sm = 6 -%}
{%- assign width_xs = 6 -%}
{%- else -%}
{%- assign width_sm = item.width | times: 2 | at_most: 12 -%}
{%- assign width_xs = item.width | times: 2 | at_most: 12 -%}
{%- endif -%}
<div class="p-2 grid-item col-md-{{ item.width | at_most: 12 }} col-sm-{{ width_sm }} col-{{ width_xs }}">
<div class="{% if item.class != null %}{{ item.class }}{% else %}card border-0 shadow-sm bg-white{% endif %}">
{{ item.content }}
</div>
</div>
</a>
{% endfor %}
{% endfor %}
</div>
{% endfor %}