如果打开powershell或者跨平台的pwsh之后,无法使用conda命令,如何初始化环境呢。
搜索anaconda,打开终端,然后搜索where conda
命令,可以显示类似的结果。
复制conda.exe
的全路径,然后在没有显示conda的powershell终端上,输入:
conda_full_path init powershell
关闭终端,然后重启,输入conda env list
来验证修改的结果,如果正常显示内容,代表显示成功。
如果打开powershell或者跨平台的pwsh之后,无法使用conda命令,如何初始化环境呢。
搜索anaconda,打开终端,然后搜索where conda
命令,可以显示类似的结果。
复制conda.exe
的全路径,然后在没有显示conda的powershell终端上,输入:
conda_full_path init powershell
关闭终端,然后重启,输入conda env list
来验证修改的结果,如果正常显示内容,代表显示成功。
使用jekyll搭建站点,用markdown编写POST,如果图片都存在本地,而且repo存在类似github等国外网站的时候,速度就会非常慢。这个时候,如果图片放在图床或者对象存储器上,就比较轻量化了。我有一个腾讯云账号,对象存储服务每个月有10G的免费流量。之前都是使用自己写的上传脚本上传图片,然后将回传的地址复制到markdown文件中。
如果直接在vscode粘贴图片的过程就实现了上传,那就比较好了。搜索了一下,发现tencent-cloud-cos-upload-image
这个插件可以实现该功能。不过使用的过程中,发现了在windows平台使用过程中的一个小bug。默认在windows中,path.seq为\
符号,但是这个符号在cos中会被转移成文件名的一部分,导致无法正常上传到目标文件夹中。这个时候只能修改插件的代码了。
如上图所示,打开cos.js文件夹,增加红色方框处的代码,将path.seq从\
更改成/
,这样cos存储服务器可以正确识别路径,可以正确将图片文件上传到目标路径下了。
安装了anaconda之后,有时安装扩展包的时候,可能出现如下的权限错误:
The current user does not have write permissions to the target environment
这个错误代表当前用户没有访问anaconda文件夹的权限,一个临时的解决办法就是安装扩展的时候,使用包含了administrator权限的终端进行安装。另外一个方法就是修改anaconda的权限。
vscode-powertools是一款非常好用的vscode插件,可以用来自定义一些命令,菜单和按钮功能,而不必自己去开发插件。
安装的时候,直接去vscode中,搜索名称Power Tools
的插件,点击安装即可。
在vscode的settings.json
中插入类似的代码块即可定义命令(参考:https://github.com/egodigital/vscode-powertools/wiki/Commands):
{
"ego.power-tools": {
"commands": {
"myCommand": {
"script": "my_command.js",
"button": {
"text": "Click here to start the command."
}
}
}
}
}
这里,myCommand
这个键及其子对象,都是可以重复定义的,这样可以用来定义更多的命令。而对于my_command.js
的位置,如果设置在C:\Users\<username>\.vscode-powertools
是比较妥当的。
命令的运行实视settings.json
中定义的不同而有不同的运行方式:(1)如果包含了Button
的定义,则在状态栏就会存在相应的按钮;(2)如果包含了forFile
或者forFolder
的定义,则在SideBar
中可以通过右键文件或者文件夹的而运行Excute Power Command
菜单;(3)或者直接按下CTRL+SHIFT+P快捷键,输入PTC
三个键,运行Power Tools: Commands
命令,然后选中需要运行的命令即可。
使用Zotero软件可以非常方便的将一个文件夹中的数据转换成bib后缀的文件。而如果我们想要在jekyll中发布我们的论文列表,则需要转换成jekyll支持的比如yaml、json格式的数据。因此,我使用python脚本写了一个转换的脚本,暂且将转换过程设计的主要代码说明如下:
首先我们需要安装bibtexparser
包,该包可以非常方便的加载bib文件,使用pandas将数据转换成Dataframe,就可以进行下一步处理了。
with open("./papers.bib", encoding='utf-8') as bibtex_file:
bib_database = bibtexparser.load(bibtex_file)
df = pd.DataFrame(bib_database.entries)
由于bib文件包含了一些冗余的信息,如果不是很想要,可以Copy一个Dataframe出来,然后选择目标字段。
# 由于df_sel后续需要执行赋值,因此必须是df的copy版本
df_sel = df.loc[:, ['author', 'title', 'booktitle', 'journaltitle', 'date', 'volume', 'number', 'pages', 'doi']].copy()
# 将null值复制为空字符串
df_sel.fillna('', inplace=True)
需要注意的是,必须使用loc索引以及copy函数,否则后面df_sel进行再次处理的时候会产生SettingwithCopy
错误。
for k, v in df_sel.items():
if k == 'date':
df_sel[k] = df_sel[k].apply(lambda p: p.split('-')[0])
if k == 'author':
df_sel[k] = df_sel[k].apply(lambda p: re.sub(r'(Xing, [a-zA-Z-]+)', r"<u>\1</u>", p))
if k == 'pages':
df_sel[k] = df_sel[k].apply(lambda p: re.sub(r'[-]+', '-', p))
if k == 'title' or k == 'booktitle':
df_sel[k] = df_sel[k].apply(lambda p: re.sub(r'(\{|\}|\\)', '', p))
if k == 'journaltitle':
df_sel[k] = df_sel[k].apply(lambda p: re.sub(r'\\', '', p))
apply类似map函数,可以方便的将列数据当做数组进行处理。其中author
列的操作主要是将当前作者的名字下划线处理。
js = df_sel.groupby('date').apply(lambda x: json.loads(x.to_json(orient='records'))).sort_index(ascending=False)
groupby之后,如果不apply,则每个date对应的是一个字数穿列表,使用apply之后就是一个json列表。
js.to_json('./papers.json', indent=4, force_ascii=False)
至此,一个按照年份分组的JSON格式的文献引用数据文件就生成了。
将该文件放在jekyll网站目录的_data
文件夹中,就可以使用json格式的数据了,这些数据可以在markdown、html文件中使用,只需要使用liquid代码即可。下面是一个示例的格式化代码。
<h4>{{kp[0]}}</h4>
{% for paper in kp[1] %}
<li style="margin-bottom: 10px;line-height: 1.5em;">
{{paper.author}},
{% if paper.doi =="" %}
<i>{{paper.title}}</i>
{% else %}
<a href="https://doi.org/{{ paper.doi }}" target="_blank"><i>{{paper.title}}</i></a>
{% endif %}.
{{paper.journaltitle}}
{{paper.booktitle}},
{{paper.date||date: "%Y"}}.
<b>{{paper.volume}}</b>
{% if paper.number != "" %}
({{paper.number}})
{% endif %}: p{{paper.pages}}
</li>
{% endfor %}
{% endfor %}
如果展示Liquid模板内容,参考:https://www.jasongaylord.com/blog/2020/05/31/displaying-liquid-templates-in-jekyll-code-blocks。