微信公众号放Latex数学公式的完美解决方案

微信公众号放Latex数学公式的完美解决方案

做微信公众号的同学都知道,公众号编辑器上刚增加了贴代码的功能。但是对于我们这些理科生而言,光有贴代码的功能还是远远不够的。

有时候我们还需要放一些数学模型啦,数学公式啦之类的。所以怎么在公众号上贴数学公式呢?

初探

一般的做法是在word或者latex上写好,然后截图放上去。因为公众号是不支持类似latex和markdown等的公式输入的,但是截图的做法虽然很粗暴,但是效果却很差。

因为字体,大小,间距等不一致,以及截图上传后失真等。往往会给读者带来很差的视觉观感,比如下面:

微信公众号放Latex数学公式的完美解决方案

所以,该办法并不是长远之计。得另辟蹊径,找到一条符合公众号情的*贴公式之路才行。

再探

找着找着,了解到了用markdown写公众号的方式,因为现在很多markdown支持latex公式渲染了,直接在markdown上编辑渲染好,然后复制上去。

看起来很完美,不是么。说干就干,我们试试,这里推荐一个markdown的渲染平台:

https://mdnice.com/

对公众号的支持也非常不错,还有很多种可选的主题。将我们的测试片段放上去,复制右边渲染好的部分到公众号上。

微信公众号放Latex数学公式的完美解决方案

好像成功了:

微信公众号放Latex数学公式的完美解决方案

我们发送到手机上预览试试,完美!

微信公众号放Latex数学公式的完美解决方案

修正

进行了上面的尝试,相信大家会很快发现一些问题。比如黏贴过去后,我们调整一下字体大小,然后点保存:
微信公众号放Latex数学公式的完美解决方案

???看来还是有一些小差错需要修正。

更为关键的是,直接复制过去的,字体和公众号上的默认字体不一样,于是就有可能造成:
微信公众号放Latex数学公式的完美解决方案

上面为markdown渲染的文本,下面为公众号原生输入的文本。字体很明显在手机上显示是不一样的。这是由于公众号默认输入字体和markdown渲染的字体不同导致,于是我们尝试更改markdown中复制过来的内容的字体:

微信公众号放Latex数学公式的完美解决方案

改成默认字体后,emmm……又发生了上面的bug。难道真的没有办法了吗??好气,明明都快成功了。

终极解决方案

通过多方面的尝试,我们换一种思维方式。既然在公众号上改markdown渲染的文本不行,那我们为何不在markdown上直接改渲染后的文本格式,让markdown渲染后的文本格式适配公众号的格式,这样还省去了排版的烦恼,何乐而不为呢!

最开心的是,该markdown渲染平台允许自定义渲染格式(CSS)可以很方便对渲染的文本进行更改:

微信公众号放Latex数学公式的完美解决方案

主要是更改字体和大小即可,其他的按照需要设置。字体好像公众号默认的是arial,所以我就选了这个,大小我一般喜欢15号字,所以就写15px。其他的边距啊啥的大家可自行设置,也可以直接使用默认的。

微信公众号放Latex数学公式的完美解决方案

这里放上自己的CSS代码,上面的注释也写得很清楚了,稍微有点计算机常识的都知道怎么改。主要是为了适应公众号上的格式,渲染好的复制过去以后就尽量不要动了,因为稍微动一下可能就会出现上面所说的bug(即公式莫名其妙消失了)。

/*自定义样式,实时生效*/

/* 全局属性
 * 页边距 padding:30px;
 * 全文字体 font-family:ptima-Regular;
 * 英文换行 word-break:break-all;
 */
#nice {
  font-family:arial;
}

/* 段落,下方未标注标签参数均同此处
 * 上边距 margin-top:5px;
 * 下边距 margin-bottom:5px;
 * 行高 line-height:26px;
 * 词间距 word-spacing:3px;
 * 字间距 letter-spacing:3px;
 * 对齐 text-align:left;
 * 颜色 color:#3e3e3e;
 * 字体大小 font-size:16px;
 * 首行缩进 text-indent:0em;
 */
#nice p {
  margin:20px 10px 0px 0px;
  line-height:1.75;
  letter-spacing:0.2em;
  font-size:15px;
  word-spacing:0.1em;
  text-indent:0em;
}

/* 一级标题 */
#nice h1 {
  border-bottom:2px solid rgb(248,57,41);
  font-size:1.3em;
}

/* 一级标题内容 */
#nice h1 span {
  display:inline-block;
  font-weight:normal;
  background:rgb(248,57,41);
  color:#ffffff;
  padding:3px 10px 1px;
  border-top-right-radius:3px;
  border-top-left-radius:3px;
  margin-right:3px;
}

/* 一级标题修饰 请参考有实例的主题 */
#nice h1:after {
}
 
/* 二级标题 */
#nice h2 {
  text-align:left;
  margin:20px 10px 0px 0px;
}

/* 二级标题内容 */
#nice h2 span {
  font-family:STHeitiSC-Light;
  font-size:18px;
  font-weight:bolder;
  display:inline-block;
  padding-left:10px;
  border-left:5px solid rgb(248,57,41);
}

/* 二级标题修饰 请参考有实例的主题 */
#nice h2:after {
}

/* 三级标题 */
#nice h3 {
}

/* 三级标题内容 */
#nice h3 span {
  font-size:14px;
  color:rgb(165,213,93);
}

/* 三级标题修饰 请参考有实例的主题 */
#nice h3:after {
}

/* 无序列表整体样式
 * list-style-type: square|circle|disc;
 */
#nice ul {
  font-size: 14px;
}

/* 无序列表整体样式
 * list-style-type: upper-roman|lower-greek|lower-alpha;
 */
#nice ol {
  font-size: 14px;
}

/* 列表内容,不要设置li
 */
#nice li section {
  font-size:13px;
}

/* 引用
 * 左边缘颜色 border-left-color:black;
 * 背景色 background:gray;
 */
#nice blockquote {
  font-style:normal;
  border-left:none;
  padding:10px;
  position:relative;
  line-height:1.8;
  border-radius:0px 0px 10px 10px;
  color:#FEEEED;
  background:#000;
  box-shadow:#84A1A8 0px 10px 15px;
}
#nice blockquote:before {
  content:"? ";
  display:inline;
  color:#FFF;
  font-size:4em;
  font-family:Arial,serif;
  line-height:1em;
  font-weight:700;
}

/* 引用文字 */
#nice blockquote p {
  color:#FEEEED;
  font-size:13px;
  display:inline;
}
#nice blockquote:after {
  content:"”";
  float:right;
  display:inline;
  color:#FFF;
  font-size:3em;
  line-height:1em;
  font-weight:500;
}

/* 链接 
 * border-bottom: 1px solid #009688;
 */
#nice a {
  color:rgb(248,57,41);
  border-bottom: 1px solid #ff3502;
  font-family:STHeitiSC-Light;
}

/* 加粗 */
#nice strong {
  font-weight:border;
  color:rgb(248,57,41);
}

/* 斜体 */
#nice em {
  color:rgb(248,57,41);
  letter-spacing:0.3em;
}

/* 加粗斜体 */
#nice strong em {
  color:rgb(248,57,41);
  letter-spacing:0.3em;
}

/* 删除线 */
#nice del {
}
 
/* 分隔线
 * 粗细、样式和颜色
 * border-top:1px solid #3e3e3e;
 */
#nice hr {
  height:1px;
  padding:0;
  border:none;
  border-top:medium solidid #333;
  text-align:center;
  background-image:linear-gradient(to right,rgba(248,57,41,0),rgba(248,57,41,0.75),rgba(248,57,41,0));
}

/* 图片
 * 宽度 width:80%;
 * 居中 margin:0 auto;
 * 居左 margin:0 0;
 */
#nice img {
  border-radius:0px 0px 5px 5px;
  display:block;
  margin:20px auto;
  width:85%;
  height:100%;
  object-fit:contain;
  box-shadow:#84A1A8 0px 10px 15px;
}

/* 图片描述文字 */
#nice figcaption {
  display:block;
  font-size:12px;
  font-family:PingFangSC-Light;
}

/* 行内代码 */
#nice p code,li code {
  color:rgb(271,93,108);
}

/* 非微信代码块
 * 代码块不换行 display:-webkit-box !important;
 * 代码块换行 display:block;
 */
#nice pre code {
}

/*
 * 表格内的单元格
 * 字体大小 font-size: 16px;
 * 边框 border: 1px solid #ccc;
 * 内边距 padding: 5px 10px;
 */
#nice table tr th,
#nice table tr td {
  font-size: 14px;
}

/* 脚注文字 */
#nice .footnote-word {
  color:rgb(248,57,41);
}

/* 脚注上标 */
#nice .footnote-ref {
  color:rgb(248,57,41);
}

/*脚注链接样式*/
#nice .footnote-item em {
  color:#6E1E51;
  font-size:12px;
}

/* "参考资料"四个字 
 * 内容 content: "参考资料";
 */
#nice .footnotes-sep:before {
}

/* 参考资料编号 */
#nice .footnote-num {
}

/* 参考资料文字 */
#nice .footnote-item p { 
}

/* 参考资料解释 */
#nice .footnote-item p em {
}

/* 行间公式
 * 最大宽度 max-width: 300% !important;
 */
#nice .block-equation svg {
}

/* 行内公式
 */
#nice .inline-equation svg {  
}

微信公众号放Latex数学公式的完美解决方案

上一篇:C++学习(c++17)——1.3一个小程序(part2.Datebase类)


下一篇:QQ微信的第三方登录实现