hexo-theme-yelee
hexo-theme-yelee copied to clipboard
Markdown中写的代码块,生成html静态文件显示不好
Markdown中代码:
Yelee主题生成的静态文件效果:
问题1:代码块最前面和最后面都出现多余的行 问题2:html中显示的代码,没有格式,全部左对齐了
我有发现了一个问题,上述问题Chrome浏览器可以显示正常,百度浏览器显示不正常。 可能是浏览器不兼容的问题?
但是不管使用哪个浏览器,代码块的最上方和最下方都会多一个空行。
我找了些代码调试,没发现多余行。 麻烦把上面的代码文本贴出来我测试下
package wordcount;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
//创建一个 WordMapper 类继承与 Mapper 抽象类
public class WordMapper extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
//Mapper 抽象类的核心方法,三个参数
@Override
protected void map(Object key, //首字符偏移量
Text value, //文件的一行内容
Context context) //Mapper端的上下文
throws IOException, InterruptedException {
//默认使用空格分隔
StringTokenizer itr = new StringTokenizer(value.toString());
while(itr.hasMoreTokens()){
word.set(itr.nextToken());
context.write(word, one);
}
}
}
没发现多余行
好的,非常感谢!
我在找找原因,有可能是我自己的配置问题。
我的配置如下:
v3.5下代码块有头部和底部时候会出现空行
post代码
location匹配规则
| 符号 | 说明 |
| --- | --- |
| ~ | 正则匹配, 区分大小写 |
| ~* | 正则匹配, 不区分大小写 |
| ^~ | 普通字符匹配, 如果该选项匹配, 只匹配该选项, 不匹配别的选项, 一般用来匹配目录; 如果最大前缀匹配的路径以“^~”开始,那么nginx不再检查正则表达式 |
| = | 普通字符精确匹配; 使用“=”前缀可以定义URI和路径的精确匹配. 如果发现匹配, 则终止路径查找. |
| ~* | 定义一个命名的 location, 使用在内部定向时, 例如 error_page, try_files |
Nginx中将路径匹配分为两类:
1. 前缀路径匹配, 即前缀字符串定义的路径, 如上配置文件中“/,/static/js/,/static/css/,/api,/trip/”
2. 正则表达式路径匹配, 即使用正则表达式需要在路径开始添加“~*”前缀 (不区分大小写), 或者“~”前缀(区分大小写)。如上配置文件中“/\.ht,^/~([^/]+)(/?.*)$,\.do$,/trip/, \.php$,\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar||bmp|rtf|js|mov)”
Nginx首先检查前缀字符串定义的路径 (前缀路径), 在这些路径中找到能最精确匹配请求URI的路径。然后Nginx按在配置文件中的出现顺序检查正则表达式路径, 匹配上某个路径后即停止匹配并使用该路径的配置, 否则使用最大前缀匹配的路径的配置.
``` Crmsh 例子
location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}
location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}
location ~* /js/.*/\.js
表示确实存在这个问题, 每次都不得不把空行删掉。
把代码从chrome里复制出来替换掉MD文件里的代码应该可以解决问题
之前用另外一个主题时也有这个问题 https://github.com/yscoder/hexo-theme-indigo/issues/62
准确说是当代码块中有空行时,会把块里的空行自动提到代码块前端和后端,而代码块里的代码本有的空行就没有了,比如python的代码,根据PEP8规范需要在函数与函数间空一行,如果使用了yelee模板后,那函数与函数间的空行就没有了,而空行被放到了行首,希望有办法修复这个问题。
确实存在这个问题,更换默认主题就不存在这个
可以变通一下,把空行全部替换成空格,因我是ubuntu用户,写mardown是使用vim编辑器,所以全文替换空行很方便,把空行换成空格后生成的Html就没问题了。
如果用空格替换空行,不是就没有空行了吗,遇到这样的问题,都是需要有空行的
我发现的方法是在需要有空行的地方,前一行行尾输入两个以上空格再回车,比如 imshow("image", img);空格空格回车waitKey();应该就能看到两行之间有空行了,我使用的是yelee主题
解决办法:
-
- 找到hexo-util/lib/highlight.js文件
-
- 修改highlight.js代码35~38行为
numbers += '<span class="line">' + (firstLine + i) + '</span>\n';
content += '<span class="line';
content += (mark.indexOf(firstLine + i) !== -1) ? ' marked' : '';
content += '">' + line + '</span>\n';
源于: https://leokongwq.github.io/2016/10/14/hexo-codeblock-multiblank.html 亲测有效