Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Hexo——相关问题汇总

本文记录Hexo使用过程中可能遇到的问题


Hexo生成的html文件是空的

  • 表现为部署到云端后,显示为空白页面

问题起因

  • 由于node版本问题导致的,可能是node版本太新了

  • 重新安装node为旧版本即可,本文使用的暂时是node 12版本

  • 安装命令(注意:直接使用brew install node@12可能无法安装成功,会出现找不到指定版本的错误,12版本太老了,过期了):

    1
    2
    3
    brew install nvm ## 安装nvm后按照提示将相应启动脚本配置到~/.zshrc中
    nvm install 12.14.0
    nvm use 12.14.0
  • nvm use 只是临时切换 node 版本,只适用于当前 terminal,如果打开新的 terminal,node 可能还是之前的旧版本。如果想要永久切换的话,可使用如下命令(实际上,本地切换到12.14.0后重启terminal也是该版本,未发现其他问题):

    1
    nvm alias default 12.14.0

符号有问题导致编译错误

  • 问题现象:编译 .md 文档时出现错误 Unhandled rejection Nunjucks Error: [Line xx, Column xx] expected variable end

  • 问题起因:Nunjucks 模板引擎可能会将 LaTeX 表达式中的某些符号(如 {, }, _, \ 等)误认为是模板语法的一部分,从而导致解析错误

  • 修复方式:

    • 方式一:不要写容易冲突的字符,一般来说常见的是 这两个,可以在中间加上空格(这不会改变latex内容),切换为 { {和} }

    • 方式二:使用

      1
      	

      $$
      rgt_{i \cdot }(\boldsymbol{v}) = \mathbb{E}_{v \sim F}\left[\max_{{v’}_{i \cdot } \in V_{i \cdot }} u_{i \cdot }(v_{i \cdot }; ({v’}_{i \cdot }, \boldsymbol{v}_{-i \cdot })) - u_{i \cdot }(v_{i \cdot }; \boldsymbol{v})\right].
      $$

      ```

      • 注:这种方式下,错误会消失,但是latex公式无法被渲染
  • 注:在使用 jinja2 模板代码时,常常会出现问题,建议统一使用类似 {% set a=10 %} 的方式解决

Python-Jupyter——Jupyter使用笔记


pip 命令与执行环境不同

  • 原因是 pip 执行的是系统的命令行,而系统的命令行默认 shell 环境与 python 环境不同,可以通过下面的代码确认原因:

    1
    2
    3
    4
    5
    6
    # 查看内核的 Python 路径(应正确)
    import sys
    print(sys.executable) # 输出:.conda/envs/xxx_env/bin/python

    # 查看 shell 中的 pip 路径(可能错误)
    !which pip # Linux/Mac
    • 若两者输出不同,则说明是 shell 环境问题
  • 解法一:指定 python 来执行对应的 pip

    1
    2
    import sys
    !{sys.executable} -m pip list
  • 解法二:修改 ~/.bashrc 文件,并重启 Jupyter

    • 待尝试

Ubuntu-Jupyter——修改默认路径

Ubuntu下修改Jupyter的默认路径

  • 经测试,按照本文的方法修改后不一定生效
  • 一个比较优雅的方法是每次进入指定路径,从该路径启动jupyter notebook
    • 这种方法可确保Jupyter根目录为指定目录

查看配置文件

  • 首先查看是已经生成Jupyter的配置文件,默认新装的Jupyter根目录为~/, 是没有配置文件的
    1
    2
    # 查看配置文件命令
    cat ~/.jupyter/jupyter_notebook_config.py

生成配置文件

  • 如果没有配置文件,则首先需要生成新的配置文件

    1
    2
    # 生成配置文件命令
    jupyter notebook --generate-config
    • root用户执行时可能需要按照要求加上参数

编辑配置文件有两种方式

相对路径方式

打开配置文件修改相对目录c.NotebookApp.default_url,这里默认为/tree, 修改成自己想要的地址即可

1
2
3
# /tree表示当前路径pwd, 如下则表示当前终端路径下的/Coding路径
c.NotebookApp.default_url = '/tree/Coding'
# 这种情况以后打开Jupyter时都需要到指定的文件目录下才行,适用于多个jupyter路径的情况

一般使用这种情况时建议直接保留相对目录/tree即可,这样可以在启动Jupyter时直接在那个文件目录下启动

绝对路径方式

打开配置文件配置绝对目录c.NotebookApp.notebook_dir

1
2
# 这种情况下无论在哪里打开都是绝对目录 	
c.NotebookApp.notebook_dir = u'/home/jiahong/JupyterWorkspace'

如果两种情况都配置了,默认以第一中情况为主,因为第一个是redirect的
如果两种情况都没配置,默认等价于配置了c.NotebookApp.default_url = '/tree'

Python-Jupyter——安装pip包

安装pip包


在Jupyter环境中安装pip包

  • 为了方便使用,我们一般会选择将Jupyter的内核切换为某个特定的虚拟Python环境,切换后,Jupyter的Python命令会按照新环境运行,但是安装软件包不会默认安装到当前环境(而是base环境)

  • 直接使用下面的命令安装会安装在base环境中

    1
    !pip install xxx
  • 如果想要安装在当前运行环境中,可以使用下面的命令

    1
    2
    import sys
    !{sys.executable} -m pip install xxx

Python——list返回最大的K个元素的索引

自定义的一个有用的Python方法


返回最大的K个值的索引

引用自Stack Overflow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def get_top_k_indexes_of_list(target_list, k, is_max=True, min_value=None):
"""
get the top k indexes of elements in list
Example:
Problem: I have a list say a = [5,3,1,4,10],
and I need to get a index of top two values of the list viz 5 and 10.
Is there a one-liner that python offers for such a case?
Usage: get_top_k_indexes_of_list(target_list=a, k=2, is_max=True)
link: https://stackoverflow.com/questions/13070461/get-index-of-the-top-n-values-of-a-list-in-python
:param target_list: target list
:param k: the number of indexes
:param is_max: True means max else False means min
:param min_value: if min_value is not None
filter the indexes whose value less than or equals to min_value
:return: a list of indexes
"""
indexes = sorted(range(len(target_list)), key=lambda i: target_list[i], reverse=is_max)[:k]
result = list()
if min_value is not None:
for index in indexes:
if target_list[index] <= min_value:
break
result.append(index)
else:
result = indexes
return result

一次性索引出多个元素

1
2
3
4
5
6
7
8
9
def get_elements_from_list(target_list, indexes):
"""
get elements from target_list by indexes
:param target_list: target list
:param indexes: a list of indexes
:return: a list of elements
"""
elements = [target_list[i] for i in indexes]
return elements

Python-Jupyter——配置跨机器使用

Jupyter notebook默认是不能跨机器使用的,只能使用localhost访问,本文讲述了让其能跨机器访问的方法


Jupyter notebook跨机器使用配置说明

生成配置文件

1
jupyter notebook --generate-config
* 如果是`root`用户可能会存在问题,按照提示操作即可

生成密码

1
jupyter notebook password
* 按照提示输入密码,这就是以后在远程访问时使用的密码
* 生成的秘钥在`~/.jupyter/jupyter_notebook_config.json`下

修改配置文件

1
vim  jupyter_notebook_config.py
  • 需要修改以下行
    1
    2
    3
    4
    c.NotebookApp.ip='*' # 这里可以写成本机的公网ip,或者是局域网ip
    c.NotebookApp.password = u'sha1:***' # 这里需要复制修改成刚才生成的密文
    c.NotebookApp.open_browser = False # 启动Jupyter时是否自动打开Web页面
    c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口

Ubuntu-Jupyter——Python2与Python3共存

在Jupyter中同时配置Python 2和Python 3环境


准备工作

  • 检查对应的虚拟环境(Python2和Python3)是否都已经安装成功,如没有的话请安装相应版本号,下面是管理包时常用的一些命令

    • 检查版本号

      1
      conda env list # check all python versions
    • 创建虚拟环境

      1
      conda create -n Python3 Python=3.6 # Python3可以是自己自定义的名字
    • 激活虚拟环境

      1
      source activate Python3 # Windows中不需要`source`
    • 停止虚拟环境

      1
      deactivate Python3
    • 从硬盘删除虚拟环境

      1
      conda remove -n Python3 --all

Jupyter on Python 3

还需要配置Python2

  • 检查Python2对应的pip版本大于等于9.0

    1
    python2 -m pip --version
    • 注意,如果python2指的是我们想设置的版本,如果电脑上对应多个版本的Python2,请选择对应的那个,后面的pip会根据Python2版本自动被确定下来,比如可使用/home/jiahong/anaconda2/envs/Python3.6/python绝对路径来指定确定的Python版本
    • 这里的python2 -m是用于指定pip版本的修饰,用于指明pip的版本,所以上一步中的路径指定也可以直接直接pip的绝对路径
  • 安装方法1

    1
    2
    python2 -m pip install ipykernel
    python2 -m ipykernel install --user
    • 这种安装方法是可以随意重复的,不会造成重复安装,所以可以直接将Python 2和Python 3两个版本都安装一遍
  • 安装方法2

    1
    2
    3
    conda create -n ipykernel_py2 python=2 ipykernel
    source activate ipykernel_py2 # On Windows, remove the word 'source'
    python -m ipykernel install --user

Jupyter on Python 2

  • 将上面的Python2全都指定为Python3即可
    • 比如
      1
      2
      python3 -m pip install ipykernel
      python3 -m ipykernel install --user

Hexo——使用总结

Hexo 使用总结


在博客中引用自己的博客

  • 在 _config.yml 中设置属性

    1
    permalink: :title.html
  • 引用方式

    1
    2
    3
    # 引用文档,以引用论文为例
    # 引用的应该是生成时使用的文件路径或者title,后面跟上.html,但是还要根据不同设置来修改,总之就是访问时的链接
    [引用示例](/Notes/Hexo/Hexo——使用总结.html "/Notes/Hexo/Hexo——使用总结.html")

引用示例


导入图片

  • 在同目录下新建与Markdown文档文件名相同的文件夹,将图片存入文件夹中
  • 在Markdown文档中使用特殊语法导入
    1
    {% asset_img picture.png descreption %}

插入LaTex公式

LaTex公式

  • 在线公式编辑地址
  • LaTex公式用法参见LaTex——笔记

借助工具插入公式

MathJax引擎(推荐)
  • 这种方式只需要在是实现时首先添加引擎代码,后面就可以完全像是Latex一样写公式
头部添加
  • 添加头部如下

    1
    2
    <!-- <script src="//cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"  type="text/javascript"></script> -->
    <script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
    1
    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
    • 说明:
      • 第一个头部可用,在各种浏览器均能正确加载
      • 第二个涉及到https的安全性问题,在部署到GitHub时,某些浏览器上不能正确加载
  • 测试说明:

    • yilla主题下Chrome和Firefox浏览器中不添加上面的头部当前文档也能识别出公式, 其他浏览器未测试
    • next主题下必须加上这个头部才行
写公式
  • 行内公式
    1
    公式如下: \\(\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\\) 所示

公式如下: \(\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\) 所示

  • 行间公式
    1
    公式如下:$$\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$所示

公式如下:$$\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$所示

  • 公式等号对齐

    • 公式如下:

      1
      2
      3
      4
      5
      6
      7
      8
      $$
      \begin{align}
      Q(\theta, \theta^{i}) &= \mathbb{E}\_{Z}[logP(Y,Z|\theta)|Y,\theta^{i}] \\\\
      &= \mathbb{E}\_{Z\sim P(Z|Y,\theta^{i})}[logP(Y,Z|\theta)] \\\\
      &= \sum_{Z} P(Z|Y,\theta^{i})logP(Y,Z|\theta) \\\\
      &= \sum_{Z} logP(Y,Z|\theta)P(Z|Y,\theta^{i})
      \end{align}
      $$

      $$
      \begin{align}
      Q(\theta, \theta^{i}) &= \mathbb{E}_{Z}[logP(Y,Z|\theta)|Y,\theta^{i}] \\
      &= \mathbb{E}_{Z\sim P(Z|Y,\theta^{i})}[logP(Y,Z|\theta)] \\
      &= \sum_{Z} P(Z|Y,\theta^{i})logP(Y,Z|\theta) \\
      &= \sum_{Z} logP(Y,Z|\theta)P(Z|Y,\theta^{i})
      \end{align}
      $$

Google Chart服务器
  • 引用方式
    1
    2
    # <img src="http://chart.googleapis.com/chart?cht=tx&chl=Latex公式" style="border:none;">
    <img src="http://chart.googleapis.com/chart?cht=tx&chl=\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}" style="border:none;">
forkosh服务器
  • 引用方式
    1
    2
    <img src="http://www.forkosh.com/mathtex.cgi? Latex公式">
    <img src="http://www.forkosh.com/mathtex.cgi?\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}">

给文字加颜色

  • 给文字添加颜色示例

    1
    <span style="color:red">红色文字</span>

    红色文字

LaTex——省略号

省略号在LaTeX中的使用

  • 参考链接:LaTeX入门(6)
  • 常见的省略号有:“\ldots”,“\cdots”,“\vdots”,“\ddots”等
  • 对于常规的“\ldots”(下),“\cdots”(中),一般来说,使用“\dots”更好些,能够自动适配选择位置
  • “\vdots”,“\ddots”则用在特殊情况下,比如矩阵等

LaTex——笔记

LaTex使用笔记


LaTex公式等号对齐示例

  • LaTex公式等号对齐

    1
    2
    3
    4
    5
    6
    7
    $$
    \begin{align}
    L(x)&=U(x) \\\\
    &=N(x) \\\\
    &=M(x)
    \end{align}
    $$
    • 其中\\表示换行&表示每一行的对齐点
    • 在Markdown文档中要注意\\\\才对应\\,因为\在Markdown文档中是转义字符

      $$
      \begin{align}
      L(x)&=U(x) \\
      &=N(x) \\
      &=M(x)
      \end{align}
      $$


LaTex特殊公式总结

  • LaTex特殊公式总结
    LaTex 符号
    \partial \(\partial\)
    \nabla \(\nabla\)
    \infty \(\infty\)
    \int \(\int\)
    \iint \(\iint\)
    \iiint \(\iiint\)
    \oint \(\oint\)
    \triangle \(\triangle\)
    \bigtriangledown \(\bigtriangledown\)
    \triangleleft \(\triangleleft\)
    \triangleright \(\triangleright\)
    \circ \(\circ\)
    \odot \(\odot\)
    \otimes \(\otimes\)

LaTex公式空格类型总结

  • 公式空格总结表
    LaTex 空格效果
    a\qquad b \(a\qquad b\)
    a\quad b \(a\quad b\)
    a\ b \(a\ b\)
    a; b \(a; b\)
    a, b \(a, b\)
    ab \(ab\)
    a!b \(a!b\)

LaTex公式后面加上序号

  • 公式后面加上序号示例

    1
    $$y(x) = x^{2} \tag{1}$$

    $$y(x) = x^{2} \tag{1}$$


LaTex公式中分段函数的使用

  • 大括号实现分段函数示例

    1
    2
    3
    4
    5
    $$f(x)=
    \begin{cases}
    0& \text{x=0}\\\\
    1& \text{x!=0}
    \end{cases}$$

    $$f(x)=
    \begin{cases}
    0& \text{x=0}\\
    1& \text{x!=0}
    \end{cases}$$


LaTex公式argmax的使用

目标:实现下标在整个argmax下面居中

  • argmax使用(1)

    1
    $$j^{\star}=\mathop{\arg \max}_{j}f(j)$$

    $$j^{\star}=\mathop{\arg \max}_{j}f(j)$$

  • argmax使用(2)

    1
    $$j^{\star}=\underset{j}{\arg \max}f(j)$$

    $$j^{\star}=\underset{j}{\arg \max}f(j)$$

1…626364…66
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

659 posts
53 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4