# 初始化 shokaX 及安装
-
安装
nodeJS
:NodeJS 官网 -
安装
PNPM
:npm install pnpm -g
-
安装
Hexo
:npm install hexo-cli -g
-
git
克隆:shokaX-can 即食罐头.git -
安装依赖:
pnpm install
-
安装密码插件:
npm install --save hexo-blog-encrypt
-
添加
scripts
和views
目录,添加以下脚本- shokax/scripts/addFooterMinHeight.js
shokax/scripts/addFooterMinHeight.js hexo.extend.filter.register('theme_inject', function(injects) {
injects.style.push('views/addFooterMinHeight.styl');
});
- shokax/scripts/addFooterMinHeight.js
/scripts/sakura.js hexo.extend.filter.register('theme_inject', function(injects) {
injects.head.file('sakura', 'views/sakura.pug', {}, {cache: true});
});
- shokax/scripts/create-time.js
shokax/scripts/create-time.js hexo.extend.filter.register('theme_inject', function(injects) {
injects.status.file('timer', 'views/create-time.pug', {}, {cache: true});
});
- shokax/view/create-time.pug
shokax/view/create-time.pug div(style="width: 100%;text-align:center;")
span(id="time")
script.
function createtime() {
const n = new Date("#{theme.createTime}");
now.setTime(now.getTime() + 250), days = (now - n) / 1e3 / 60 / 60 / 24, dnum = Math.floor(days), hours = (now - n) / 1e3 / 60 / 60 - 24 * dnum, hnum = Math.floor(hours), 1 == String(hnum).length && (hnum = "0" + hnum), minutes = (now - n) / 1e3 / 60 - 1440 * dnum - 60 * hnum, mnum = Math.floor(minutes), 1 == String(mnum).length && (mnum = "0" + mnum), seconds = (now - n) / 1e3 - 86400 * dnum - 3600 * hnum - 60 * mnum, snum = Math.round(seconds), 1 == String(snum).length && (snum = "0" + snum), document.getElementById("time").innerHTML = "此站已存活" + dnum + " 天 " + hnum + " 小时 " + mnum + " 分 " + snum + " 秒"
}
const now = new Date;
setInterval("createtime()", 250)
- shokax/views/sakura.pug
shokax/views/sakura.pug script.
window.sakuraConfig = {
sakura: 30,
xSpeed: 0.5,
ySpeed: 0.5,
rSpeed: 0.03,
direction: "TopRight",
zIndex: -1
};
script(src="https://cdn.jsdelivr.net/gh/minz71/sakura-rain/sakura-rain.js" defer)
- shokax/views/addFooterMinHeight.styl
shokax/views/addFooterMinHeight.styl main {
>.inner {
min-height: 90vh;
}
}
-
siteInit.ts
添加代码window.addEventListener('hexo-blog-decrypt', siteRefresh, {
passive: true
});
-
安装一键部署插件:
npm install hexo-deployer-git --save
-
创建
hexo-start.bat
和hexo-d.bat
hexo-start.bat @echo off
d:
cd project/shokax
call hexo clean
start cmd /k "hexo s"
timeout /t 5
start http://localhost:4000
hexo-d.bat @echo off
d:
cd project/shokax
echo Cleaning...
call hexo clean
echo Generating...
call hexo g
echo Archiving...
call hexo a
echo Deploying...
call hexo d
echo Done!
pause
-
图片放大功能暂未修复 —— 待发布
vendors-0.5-dev
# post 文件配置模板
--- | |
title: 文章标题 | |
date: 文章发布的时间 | |
comment: false # true/false 对应开启 / 关闭本文章评论 | |
sticky : true # 置顶文章 | |
tags: | |
- 文章标签1 | |
- 文章标签2 | |
categories: | |
- [计算机科学, Linux] | |
cover: cover.png # 文章顶部和文章介绍图(将覆盖文章主页轮播图) | |
audio: | |
- https://music.163.com/song?id=1387098940 | |
audio: false | |
--- |
# 代码块
语法: [language] [title] [url] [link text] [mark] [command]
选项 | 描述 |
---|---|
language | 1. 支持的语言戳此 |
2. 如果不需要代码高亮,但希望显示代码块样式,则设为 raw |
|
title | 代码块的标题文字 |
url | 代码块标题右侧显示的链接 |
link text | 上述链接显示的标题 |
示例
```java 行高亮 https://www.google.com google | |
import java.util.Scanner; |
import java.util.Scanner; |
# 标签卡
语法
;;;[id] [text] | |
content | |
;;; | |
;;;[id] [text] | |
content | |
;;; |
示例
;;;id1 卡片 1 | |
这里是卡片 1 的内容 | |
** 加粗 ** | |
[success]{.label .success} | |
;;; | |
;;;id1 卡片 2 | |
这里是卡片 2 的内容 | |
:::danger | |
危险危险 | |
::: | |
- 第一行 | |
- 第二行 | |
;;; | |
;;;id2 ②号标签卡片 1 | |
这里是卡片 1 的内容 | |
;;; | |
;;;id2 ②号标签卡片 2 | |
这里是卡片 2 的内容 | |
;;; |
这里是卡片 1 的内容
** 加粗 **
success
这里是卡片 2 的内容
危险危险
- 第一行
- 第二行
这里是卡片 1 的内容
这里是卡片 2 的内容
# links (链接块)
文章内嵌
{% links %}
- site: # 主标题
owner: # 站点所有者(选填)
url: # 站点链接
desc: # 站点描述(选填)
image: # 站点图像(选填)
color: # 站点颜色(选填)
# 多链接参考 yaml 列表格式
{% endlinks %}
外部文件
# path 为一个 yaml 文件
{% linksfile [path] %}
示例
辰海星的blog
# 隐藏文字
!!balabala!! 鼠标放置时显示内容。 | |
!!balabala!!{.bulr} 鼠标选中时显示内容 |
balabala 鼠标放置时显示内容。
balabala 鼠标选中时显示内容
# 折叠块
语法
+++[style] [title] | |
content | |
+++ |
示例
+++ 默认默认 这里是一段文字 | |
++下划线++ | |
+++ | |
+++primary 紫色 | |
:::info | |
参考信息 | |
::: | |
- 第一行 | |
- 第二行 | |
+++ | |
+++info 蓝色 | |
;;;id3 卡片 1 | |
这里是卡片 1 的内容 | |
;;; | |
;;;id3 卡片 2 | |
这里是卡片 2 的内容 | |
;;; | |
+++ | |
+++success 绿色 | |
+++ | |
+++warning 黄色 | |
[label]{.label .success} | |
+++ | |
+++danger 红色 | |
[danger]{.label .danger} | |
+++ |
默认默认 这里是一段文字
下划线
紫色
参考信息
- 第一行
- 第二行
蓝色
这里是卡片 1 的内容
这里是卡片 2 的内容
绿色
黄色
label
红色
danger
# 提醒块
语法
::: type [no-icon] | |
::: |
示例
:::default | |
默认默认 | |
::: |
默认默认
:::primary | |
基本基本 | |
::: |
基本基本
:::info | |
提示提示 | |
::: |
提示提示
:::success | |
成功成功 | |
::: |
成功成功
:::warning | |
警告警告 | |
::: |
警告警告
:::danger | |
危险危险 | |
::: |
危险危险
# 文字特效
示例
++下划线++ |
下划线
++波浪线++{.wavy} |
波浪线
++着重点++{.dot} |
着重点
++紫色下划线++{.primary} |
紫色下划线
++绿色波浪线++{.wavy .success} |
绿色波浪线
++黄色着重点++{.dot .warning} |
黄色着重点
~~删除线~~ |
删除线
~~红色删除线~~{.danger} |
红色删除线
==荧光高亮== |
荧光高亮
[赤橙黄绿青蓝紫]{.rainbow} |
赤橙黄绿青蓝紫
[红色]{.red} |
红色
[粉色]{.pink} |
粉色
[橙色]{.orange} |
橙色
[黄色]{.yellow} |
黄色
[绿色]{.green} |
绿色
[靛青]{.aqua} |
靛青
[蓝色]{.blue} |
蓝色
[紫色]{.purple} |
紫色
[灰色]{.grey} |
灰色
快捷键 [Ctrl]{.kbd} + [C]{.kbd .red} |
快捷键 Ctrl + C
H~2~0 |
H20
29^th^ |
29th
# label 标签块
语法
[:icon:text]{.style} |
示例
[default]{.label} |
default
[primary]{.label .primary} |
primary
[info]{.label .info} |
info
[:heavy_check_mark:success]{.label .success} |
✔️success
[warning]{.label .warning} |
warning
[:broken_heart:danger]{.label .danger} |
💔danger
# 练习题与答案
--- | |
title: 练习题与答案 | |
quiz: true | |
--- | |
1. 编译时多态主要指运算符重载与函数重载,而运行时多态主要指虚函数。 {.quiz .true} | |
2. 有基类 `SHAPE`,派生类 `CIRCLE`,声明如下变量: {.quiz .multi} | |
```cpp | |
SHAPE shape1,*p1; | |
CIRCLE circle1,*q1; | |
``` | |
下列哪些项是 “派生类对象替换基类对象”。 | |
- `p1=&circle1;` {.correct} | |
- `q1=&shape1;` | |
- `shape1=circle1;` {.correct} | |
- `circle1=shape1;` | |
{.options} | |
> - :heavy_check_mark: 令基类对象的指针指向派生类对象 | |
> - :x: 派生类指针指向基类的引用 | |
> - :heavy_check_mark: 派生类对象给基类对象赋值 | |
> - :x: 基类对象给派生类对象赋值 | |
> {.options} | |
3. 下列叙述正确的是 []{.gap} 。 {.quiz} | |
- 虚函数只能定义成无参函数 | |
- 虚函数不能有返回值 | |
- 能定义虚构造函数 | |
- A、B、C 都不对 {.correct} | |
{.options} | |
10. 如果定义 `int e=8; double f=6.4, g=8.9;`,则表达式 `f+int (e/3*int (f+g)/2)%4` 的值为 [9.4]{.gap}。 {.quiz .fill} | |
> 注意运算顺序和数据类型 | |
> [8.4]{.mistake} |
-
编译时多态主要指运算符重载与函数重载,而运行时多态主要指虚函数。
-
有基类
SHAPE
,派生类CIRCLE
,声明如下变量:SHAPE shape1,*p1;
CIRCLE circle1,*q1;
下列哪些项是 “派生类对象替换基类对象”。
-
下列叙述正确的是 。
-
如果定义
int e=8; double f=6.4, g=8.9;
,则表达式f+int (e/3*int (f+g)/2)%4
的值为 9.4。注意运算顺序和数据类型
8.4
# 说明
标签 | 含义 |
---|---|
{.quiz} |
选择题 |
{.quiz .multi} |
多选题 |
{.quiz .true} |
正确的判断题 |
{.quiz .false} |
错误的判断题 |
{.quiz .fill} |
填空题 |
[]{.gap} |
空白下划线 |
[答案内容]{.gap} |
答案内容带下划线 |
{.options} |
ABCDE 选项 |
{.correct} |
选择题的正确选项 |
> |
答案解析 |
[8.4]{.mistake} |
错题备注 |
# 媒体
{% media audio %}
- title: 列表 1
list:
- https://music.163.com/#/playlist?id=2943811283
- https://music.163.com/#/playlist?id=2297706586
- title: 列表 2
list:
- https://music.163.com/#/playlist?id=2031842656
{% endmedia %}
{% media video %}
- name: "测试 1"
url: https://www.youtube.com/watch?v=CPDUE3IK3nc
{% endmedia %}