<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh_CN">
  <title>mail_set的铺子</title>
  <subtitle>No description</subtitle>
  <link href="https://blog.mailset.top/" rel="alternate" type="text/html"/>
  <link href="https://blog.mailset.top/atom.xml" rel="self" type="application/atom+xml"/>
  <id>https://blog.mailset.top/</id>
  <updated>2026-10-10T19:10:00.000Z</updated>
  <entry>
    <title>使用LaTeX重制数学试卷</title>
    <link href="https://blog.mailset.top/%E4%BD%BF%E7%94%A8latex%E9%87%8D%E5%88%B6%E6%95%B0%E5%AD%A6%E8%AF%95%E5%8D%B7/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E4%BD%BF%E7%94%A8latex%E9%87%8D%E5%88%B6%E6%95%B0%E5%AD%A6%E8%AF%95%E5%8D%B7/</id>
    <published>2026-10-02T04:30:00.000Z</published>
    <updated>2026-10-02T04:30:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<h2>写在前面</h2>
<p>今天久违的更新一次博客，想把这一段时间用 $\LaTeX$ 制作数学试卷的经验分享出来</p>
<h2>安装</h2>
<h3>TexLive</h3>
<p>Windows版推荐使用TexLive，下载地址：<code>https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/texlive.iso</code></p>
<p>对于Linux，可以使用包管理器直接下载TexLive，这里以Arch为例：</p>
<pre><code>sudo pacman -S texlive
</code></pre>
<p>该<code>texlive</code>是一个软件包组，会下载TexLive中的内容。</p>
<h3>exam-zh</h3>
<p>对于卷子本体，我选择了<code>exam-zh</code>这个宏包来方便排版。项目地址：<code>https://github.com/xkwxdyy/exam-zh</code></p>
<p>如果你使用的是上面的TexLive发行版，可以直接在终端中使用它自带的<code>tlmgr</code>这个宏包管理器安装<code>exam-zh</code>这个宏：</p>
<p>在Windows下，可以按下组合键<code>Win+X</code>，在弹出的选择框内选择“终端（管理员）”或“Windows Powershell（管理员）”，之后在出现的窗口中输入以下内容：</p>
<pre><code>tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/ #设置镜像源
tlmgr update --self #更新tlmgr
tlmgr install exam-zh #安装exam-zh
</code></pre>
<p>Linux使用的命令同上，但可能需要以root权限运行以上命令</p>
<p>更多关于exam-zh的内容可以参考<a href="https://github.com/xkwxdyy/exam-zh">官方仓库</a></p>
<h2>配置</h2>
<p>对于 $\LaTeX$ 文本编辑器，我选择了 <a href="https://code.visualstudio.com/">Visual Studio Code</a></p>
<p>在VSCode中安装<code>LaTeX Workshow</code>,<code>LaTex</code>等插件，更详细的教程可以参考<a href="https://github.com/shinyypig/latex-vscode-config">这个</a>，在这里就不过多叙述了</p>
<p>值得注意的是这个exam-zh强制要求使用 <code>XeLaTeX</code> 作为编译器，然而上面的插件默认使用<code>pdflatex</code>构建，于是我们需要按下<code>Ctrl+Shift+P</code>，然后搜索<code>Preferences: Open User Settings</code>来打开VSCode的设置页面</p>
<p>之后在设置页面内搜索<code>recipe</code>，将搜索结果中的<code>Latex-workshop › Latex › Recipe: Default</code>下的内容从<code>first</code>改为<code>latexmk (xelatex)</code></p>
<p>这样你就可以享受到每次保存/切换窗口的时候自动构建了，构建出的内容应当是和<code>.tex</code>文件同目录，同名称的<code>.pdf</code>文件</p>
<h2>试卷</h2>
<h3>文字内容</h3>
<h4>拼好题</h4>
<p>如果你想要干的是拼好题的话，试卷中的文字内容，我十分建议使用带有识图功能的DeepSeek，豆包等AI直接通过卷子图片转成LaTeX文字内容</p>
<p>就让AI直接按下面的格式生成：</p>
<pre><code>\documentclass[fontset=fandol]{exam-zh}
\usepackage{unicode-math,microtype,esvect,xeCJK}
\examsetup{
  question/show-answer = false,
  fillin/no-answer-type = none,
  title/title-format=\bfseries \LARGE,
  %page/size = a3paper, % 使用横版样式
}

\hfuzz=5pt

\begin{document}

\title{训练}
\maketitle

\section{选择题}
\begin{question}
  已知空间向量 $\symbfit{a}=(\sqrt{3},0,1),\symbfit{b}=\left(\dfrac14,0,\dfrac{\sqrt{3}}4\right)$，则 $\symbfit{a}$ 在 $\symbfit{b}$ 上的投影向量的模为
  \begin{choices}
  \item $\sqrt{3}$
  \item $1$
  \item $2$
  \item $\dfrac12$
  \end{choices}
\end{question}

\section{多选题}
\begin{question}
  已知直线 $l:2x-y+4=0$，则下列说法正确的是
  \begin{choices}
  \item $l$ 在 $x$ 轴上的截距为 $2$
  \item $l$ 与直线 $x+2y+4=0$ 垂直
  \item $l$ 与直线 $2x-y-1=0$ 之间的距离为 $\sqrt{5}$
  \item $l$ 与圆 $x^2+y^2=4$ 相离
  \end{choices}
\end{question}

\section{填空题}
\begin{question}
  已知两直线 $3x+y-3=0$ 与 $3x+y-1=0$ 之间的距离为 \fillin.
\end{question}

\section{解答题}
\begin{problem}[points = 15]
  求满足下列条件的直线方程：
  \begin{enumerate}
    \item 过点 $(1,2)$，且与直线 $3x-2y+3=0$ 平行的直线方程；
    \item 过点 $(-1,2)$，且与直线 $3x-y+2=0$ 垂直的直线方程；
    \item 过点 $(1,-2)$，且在两坐标轴上截距相等的直线方程.
  \end{enumerate}
  \vspace{3cm}
\end{problem}
\end{document}
</code></pre>
<p>这样生成出来的试卷还是比较赏心悦目的，只有题，没有其他很复杂的内容</p>
<p>如果更想要带主标题，科目，注意事项等的高考试卷对应的样式的卷子的话可以看<a href="https://github.com/xkwxdyy/exam-zh/blob/main/examples-basic/03-real-exam-scenario.tex">这个模板</a></p>
<h3>图片内容</h3>
<p>对于立体几何，找到一个趁手的工具还是很困难的，你总不能说你爱对着TikZ搓吧（</p>
<p>那么我们就可以使用<a href="https://inkscape.org/">InkScape</a>这个矢量画图工具</p>
<p>首先我们可以把照片中的几何图形（或者你在geogebra中绘制好的，调好透视的3d图形）复制到画布中</p>
<p>接着创建新图层，将原来的图片锁定，在新图层中把线，点，标签什么的都描一遍</p>
<p>这个工具的吸附功能还是比较好用的，可以在右上角开启</p>
<p>具体怎么用，我可能会出一期视频，或者你也可以找找其他的教程</p>
<p>画完之后隐藏原来只含有源图片的图层，然后<code>Ctrl+A</code>全选，<code>Ctrl+Shift+D</code>打开画布控制菜单，最后点击缩放内容到画布右边的按钮就可以限制尺寸了</p>
<p>我推荐内容保存成默认的<code>InkScape SVG</code>便于之后的更改，但是想要插入 $\LaTeX$ 文档里面的话这个格式肯定是不方便的，于是我们就要在左上角的<code>文件&gt;保存副本</code>中手动保存成<code>.pdf</code>格式，这样更方便使用</p>
<h3>图文混编</h3>
<p>那接下来要做的就是把图片和文字混编起来了，常见的有下面几种形式</p>
<h4>图文并列</h4>
<h5>wrapstuff</h5>
<p><code>wrapstuff</code>是嵌入到<code>exam-zh</code>内的功能，混编之后就像这样：</p>
<p><img src="https://pic.mailset.top/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20261002_154743.png" alt="wrapstuff" /></p>
<p>源代码：</p>
<pre><code>\begin{question}
  \begin{wrapstuff}[r]
    \includegraphics[width=0.35\linewidth]{img/p10-1.pdf}
  \end{wrapstuff}
  如图，平行六面体 $ABCD-A_1B_1C_1D_1$ 的所有棱长均为 $1$，且 $\angle BAD=60^\circ,\angle A_1AB=120^\circ,\angle A_1AD=90^\circ$，记 $\vv{AB}=\symbfit{a},\vv{AD}=\symbfit{b},\vv{AA_1}=\symbfit{c}$，则下列说法正确的是
  \begin{choices}
  \item $\vv{BD_1}=\symbfit{b}+\symbfit{c}-\symbfit{a}$
  \item $|\vv{BD_1}|=\sqrt{3}$
  \item $\vv{AC_1}\perp \vv{A_1D}$
  \item 直线 $BD_1$ 与 $A_1D$ 所成角的余弦值为 $\dfrac{\sqrt{6}}6$
  \end{choices}
\end{question}
</code></pre>
<p>其中的<code>width=0.35\linewidth</code>的意思是占这一行的35%，嫌大嫌小都可以调</p>
<p>但是这个方法有较大的局限性，比如在大题里用很可能会让排版爆掉，于是就有了下面这个灵活性更高的方法</p>
<h5>minipage</h5>
<p><code>minipage</code>是 $\LaTeX$ 中自带的宏，效果如下：</p>
<p><img src="https://pic.mailset.top/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20261002_155144.png" alt="minipage" /></p>
<p>源代码：</p>
<pre><code>\begin{problem}[points = 13]
  如图，在平行六面体 $ABCD-A_1B_1C_1D_1$ 中，$M$ 为 $AC$ 与 $BD$ 的交点，$N$ 为 $BB_1$ 的靠近 $B$ 的三等分点，若 $\vv{A_1B_1}=\symbfit{a},\vv{A_1D_1}=\symbfit{b},\vv{A_1A}=\symbfit{c}$.
  \par\noindent
  \begin{minipage}[t]{0.7\linewidth}
    \begin{enumerate}
      \item 用 $\symbfit{a},\symbfit{b},\symbfit{c}$ 表示 $\vv{A_1C},\vv{NM}$ 向量；
      \item 若 $\angle B_1A_1D_1=\angle B_1A_1A=\angle D_1A_1A=\dfrac{\pi}{3}$，$|\vv{A_1B_1}|=|\vv{A_1D_1}|=|\vv{A_1A}|=2$，计算 $\vv{A_1C}\cdot\vv{NM}$.
    \end{enumerate}
    \vspace{3cm}
  \end{minipage}
  \hfill
  \begin{minipage}[t]{0.3\linewidth}
    \vspace{0pt}
    \includegraphics[width=\linewidth]{img/p15-1.pdf}
  \end{minipage}
\end{problem}
</code></pre>
<p>这个<code>[t]</code>代表顶部对齐，写上可以让小题与题干之间的距离看起来更赏心悦目</p>
<p>然而下面的这个<code>\vspace{0pt}</code>如果去掉就会让整个排版很诡异的崩溃</p>
<p>上面的<code>\vspace{3cm}</code>可以自己改动。如果这个题比较难写，需要留空比较多的话可以把数字写大一点</p>
<p>这里的<code>\includegraphics[width=\linewidth]</code>指的就是<code>minipage</code>中的宽度了，如果想调文字和图片的占比的话就要调整<code>\begin{minipage}</code>后面的数字了。注意相加需要不大于1（多了会超出边距），可以小于1（适用于想让文字与图片空隙大一点的情况）</p>
<h4>图文分排</h4>
<h5>center &amp; flushright/left</h5>
<p><code>center</code>,<code>flushright</code>,<code>flushleft</code>同样是 $\LaTeX$ 自带的宏，我们以<code>center</code>为例，效果如下：</p>
<p><img src="https://pic.mailset.top/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20261002_160112.png" alt="center" /></p>
<p>源代码：</p>
<pre><code>\begin{question}
  如图，在棱长为 $1$ 的正方体 $ABCD-A_1B_1C_1D_1$ 中，$E,F$ 分别是 $AB,AD$ 的中点，$M$ 为线段 $C_1D_1$ 上的动点，则下列说法正确的是
  \begin{center}
    \includegraphics[width=0.3\linewidth]{img/p11-1.pdf}
  \end{center}
  \begin{choices}
  \item 三棱锥 $M-A_1EF$ 的体积为定值
  \item 不存在点 $M$，使得 $EF\perp ME$
  \item 平面 $MEF$ 与平面 $ABCD$ 所成角的正切值的最大值为 $2\sqrt{2}$
  \item $\vv{D_1M}=\dfrac12\vv{D_1C_1}$ 时，平面 $MEF$ 截该正方体的外接球所得截面的面积为 $3\pi$
  \end{choices}
\end{question}
</code></pre>
<p>其中的<code>\begin{center}</code>可以换成<code>\begin{flushright}</code>,<code>\begin{flushleft}</code>等，效果为靠右或者靠左</p>
<h5>textfigure</h5>
<p><code>textfigure</code>是<code>exam-zh</code>内置的一个宏，效果和<code>flushright</code>有点像，只不过好像会引入额外的间隔，效果如下：</p>
<p><img src="https://pic.mailset.top/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20261002_160604.png" alt="textfigure" /></p>
<p>源代码：</p>
<pre><code>\begin{question}
    \textfigure{
    如图，一个结晶体的形状为平行六面体$ABCD-A_1B_1C_1D_1$，其中，以顶点$A$为端点的三条棱长都相等，且它们彼此的夹角都是$60^\circ$，下列说法中正确的是
    }{
        \includegraphics[width=0.3\linewidth]{img/image10.png}
    }
    \begin{choices}
        \item $(\vv{AA_1}+\vv{AB}+\vv{AD})^2=2\vv{AC}^2$
        \item $\vv{AC_1}\cdot(\vv{AB}−\vv{AD})=0$
        \item 向量$\vv{B_1C}$与$\vv{AA_1}$的夹角是$60^\circ$
        \item $\vv{BD_1}$与$\vv{AC}$所成角的余弦值为$\dfrac{\sqrt{6}}{3}$
    \end{choices}
\end{question}
</code></pre>
<p>AI说这个在大题中可能会有问题，需要注意一下，尽量还是用<code>minipage</code>或者<code>flushright</code>比较好吧（其实我也不清楚QwQ）</p>
<h4>多图并排</h4>
<p><code>multifigures</code>是<code>exam-zh</code>内置的一个宏，可以实现多个图片的横向/纵向并排，效果如下：</p>
<p><img src="https://pic.mailset.top/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20261002_161226.png" alt="multifigures-vertical" /></p>
<p>源代码：</p>
<pre><code>\begin{problem}[points = 17]
  如图①所示，在$Rt\triangle{ABC}$中，$\angle{C}=90°,BC=3,AC=6$，$D,E$分别是$AC,AB$上的点，
  且$DE\parallel{BC},DE=2$，将$\triangle{ADE}$沿$DE$折起到$\triangle{A_1DE}$的位置，使$A_1C\perp{CD}$，如图②所示.
  \begin{enumerate}
    \item 求证：$A_1C\perp$平面$BCDE$；
    \item 若$M$是$A_1D$的中点,求直线$CM$与平面$A_1BE$所成角的大小;
    \item 线段$BC$上是否存在点$P$,使平面$A_1DP$与平面$A_1BE$垂直?并说明理由.
  \end{enumerate}
  \begin{multifigures}[columns=1, xshift=0.75\linewidth]
  \item[图①] \includegraphics[width=0.4\linewidth]{img/image19-1.png}
  \item[图②] \includegraphics[width=0.4\linewidth]{img/image19-2.png}
  \end{multifigures}
\end{problem}
</code></pre>
<p>这里面的<code>xshift=0.75\linewidth</code>指的是图片向右偏移到0.75列宽的位置，比较适合大题</p>
<p>其中把<code>columns=1</code>改成其他的数值，比如<code>columns=2</code>就可以有横向编排的效果，比如：</p>
<p><img src="https://pic.mailset.top/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_20261002_161516.png" alt="multifigures-horizonal" /></p>
<p>源代码：</p>
<pre><code>\begin{question}
  如图，在空间四边形$ABCD$中，$AC$和$BD$为对角线，$G$为$\triangle{ABC}$的重心，$E$是$BD$上一点，$BE=3ED$，以$\{\vv{AB},\vv{AC},\vv{AD}\}$为基底，则$\vv{GE}=$ \fillin
\end{question}

\begin{question}
  如图，在直三棱柱$ABC-A_1B_1C_1$中，$\angle{ABC}=90^\circ$,$AB=BC=AA_1=2$，点$D$是$AC$的中点，则异面直线$A_1D$和$B_1C$所成角的大小为 \fillin
\end{question}

\begin{multifigures}[columns = 2, column-gap=2cm]
\item[13题图] \includegraphics[width=0.4\linewidth]{img/image13.png}
\item[14题图] \includegraphics[width=0.4\linewidth]{img/image14.png}
\end{multifigures}
</code></pre>
<p>其中的<code>column-gap=2cm</code>指的是两张图片之间的间距，可以变大也可以变小</p>
<p>横向的比较适用于填空题，选择题的多张图片挤在一起</p>
<h2>导出</h2>
<p>做完这这一切就可以导出了。其实在每次按下保存的时候，VSCode中的插件就会自动为我们编译好，不过为了防止未定义行为（究竟在未定义些什么。。。），我们可以手动编译一下：</p>
<pre><code>xelatex paper.tex
</code></pre>
<p>其中的<code>paper.tex</code>为你的tex文件的文件名，还是尽量不要用中文比较好，可能会引发其他很难定位的问题</p>
<p>如果想要A3大小的横排，就在我刚开始给出的模板中取消<code>page/size = a3paper</code>那一行前面的<code>%</code>符号（这个符号代表 $\LaTeX$ 中的注释）</p>
<p>享受你的试卷吧</p>
<h2>结语</h2>
<p>这篇文章是我在做了这几次粘贴来的试卷的数字化（迫真）后总结出来的，可能会有照顾不到的地方，也可能有一些更好的但是我不知道的解决方法，恳请看到这个文章的各位大佬发现问题后点明，谢谢大家！</p>
]]></content>
    <author><name>mail_set</name></author>
  </entry>
  <entry>
    <title>时隔一年</title>
    <link href="https://blog.mailset.top/%E6%97%B6%E9%9A%94%E4%B8%80%E5%B9%B4/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E6%97%B6%E9%9A%94%E4%B8%80%E5%B9%B4/</id>
    <published>2025-11-08T15:40:00.000Z</published>
    <updated>2025-11-08T15:40:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>Hi, 我是 mail_set 也许并没有人看，但是我还是发了</p>
<h2>学业</h2>
<p>初中毕业了，现在顺利进入了县里面的重点高中，学习成绩也还可以，走着看吧</p>
<p>遇到了很好的老师，当上了班长，我觉得我还挺幸运的，期待三年后的我考上个本科...或许是一本？或许是双一流？或许是211？我也许应该相信自己，但这才高一</p>
<h2>博客</h2>
<p>我的Github账号终于被Github还回来了，挺开心的，所以我还是要把这个博客迁移回Github去</p>
<h2>生活</h2>
<p>搬进了新房子，不用爬楼了</p>
<p>平常感觉想东西淡然了点吧，也许没以前那么计较了</p>
<hr />
<p>刚刚还想起来有一堆可以写的，现在咋就全忘完了？</p>
]]></content>
    <author><name>mail_set</name></author>
    <category term="日常"/>
  </entry>
  <entry>
    <title>解决淘宝买的1.3寸oled花屏的问题</title>
    <link href="https://blog.mailset.top/%E8%A7%A3%E5%86%B3%E6%B7%98%E5%AE%9D%E4%B9%B0%E7%9A%841-3%E5%AF%B8oled%E8%8A%B1%E5%B1%8F%E7%9A%84%E9%97%AE%E9%A2%98/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E8%A7%A3%E5%86%B3%E6%B7%98%E5%AE%9D%E4%B9%B0%E7%9A%841-3%E5%AF%B8oled%E8%8A%B1%E5%B1%8F%E7%9A%84%E9%97%AE%E9%A2%98/</id>
    <published>2024-11-18T13:30:00.000Z</published>
    <updated>2024-11-18T13:30:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>最近想玩树莓派Pico了，就在淘宝上买了个便宜的1.3寸oled屏，好像是ssd1315主控，但我找遍全网都没找到能用的micropython的驱动，刚刚终于找着了，作此小纪</p>
<p>访问这个库 <a href="https://github.com/robert-hh/SH1106">robert-hh/sh1106</a> 下载sh1106.py，上传到你的pico上，代码范例：</p>
<pre><code>from machine import Pin, I2C
from utime import sleep
import sh1106

pin = Pin("LED", Pin.OUT)

i2c = I2C(0, scl=Pin(13), sda=Pin(12))
print("I2C device: " + str(i2c.scan()))
oled = sh1106.SH1106_I2C(128,64,i2c)
oled.init_display()
oled.poweron()
stat = 0
oled.flip(True)
while True:
    oled.text("I2C:" + str(i2c.scan()),0,2)
    oled.invert(stat)
    oled.show()
    stat = 0 if stat else 1
    sleep(0.5)
</code></pre>
<p>有什么错误欢迎大家指正！</p>
]]></content>
    <author><name>mail_set</name></author>
  </entry>
  <entry>
    <title>解决git commit -S无法签名的问题</title>
    <link href="https://blog.mailset.top/%E8%A7%A3%E5%86%B3git-commit-s%E6%97%A0%E6%B3%95%E7%AD%BE%E5%90%8D%E7%9A%84%E9%97%AE%E9%A2%98/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E8%A7%A3%E5%86%B3git-commit-s%E6%97%A0%E6%B3%95%E7%AD%BE%E5%90%8D%E7%9A%84%E9%97%AE%E9%A2%98/</id>
    <published>2024-11-15T16:40:00.000Z</published>
    <updated>2024-11-15T16:40:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>刚刚提交git的时候发现<code>git commit -S</code>卡了很长时间，接着失败了，但是笔者探索出来了一个解决方案</p>
<p>笔者用的是Windows 11系统，GnuPG版本为<code>2.4.5</code></p>
<h2>现象</h2>
<p>在<code>git commit -S -m "aaa"</code>的时候，会卡住很长时间不动，以往是卡完之后commit成功或者不用卡就成功，但今天失败了，输出如下所示：</p>
<pre><code>error: gpg failed to sign the data:
gpg: can't connect to the keyboxd: IPC connect call failed?
gpg: error opening key DB: No Keybox daemon running?
gpg: skipped "XXX": Input/output error?
[GNUPG:] INV_SGNR 0 XXX?
[GNUPG:] FAILURE sign 33587249?
gpg: signing failed: Input/output error?

fatal: failed to write commit object
</code></pre>
<h2>解决</h2>
<p>我发现的解决方法很简单，新开一个终端，运行：</p>
<pre><code>gpg-agent --daemon
</code></pre>
<p>输出：</p>
<pre><code>gpg-agent[pid]: gpg-agent (GnuPG) 2.4.5 started
</code></pre>
<p>这条命令将会卡住终端，切换到原来的终端上继续commit</p>
<p>再次commit，成功:</p>
<pre><code>[main aaa] aaa
 n files changed, n insertions(+), n deletions(-)
 create mode 100644 aaa
 create mode 100644 bbb
 create mode 100644 ccc
</code></pre>
<p>解决</p>
<hr />
<p>如果有什么疑问或者补充可以在下面评论！感谢支持！</p>
<hr />
<p>2025/11/08 补:
第二次试了没用了。</p>
]]></content>
    <author><name>mail_set</name></author>
  </entry>
  <entry>
    <title>把网站所有图片资源迁移为webp格式</title>
    <link href="https://blog.mailset.top/%E6%8A%8A%E7%BD%91%E7%AB%99%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E8%B5%84%E6%BA%90%E8%BF%81%E7%A7%BB%E4%B8%BAwebp%E6%A0%BC%E5%BC%8F/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E6%8A%8A%E7%BD%91%E7%AB%99%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E8%B5%84%E6%BA%90%E8%BF%81%E7%A7%BB%E4%B8%BAwebp%E6%A0%BC%E5%BC%8F/</id>
    <published>2024-10-25T11:30:00.000Z</published>
    <updated>2026-10-10T19:10:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>本网站从此把所有的需要对外显示的图片资源文件全部转换为webp格式</p>
<p>我为什么这样做？看完文章你就明白了</p>
<p>我将会先介绍如何把所有图片资源转为webp格式</p>
<h2>cwebp下载</h2>
<p>cwebp是谷歌官方出品的一款将已有图片转换为webp格式文件的软件，用这个软件可以很方便的将已有的很多格式的图片资源文件转换为webp格式文件</p>
<p>具体的教程可以看<a href="https://developers.google.cn/speed/webp/docs/cwebp">GoogleDocs/https://developers.google.cn/speed/webp/docs/cwebp</a>来了解更加详细的信息</p>
<p>如果想手动编译的话，可以访问<a href="https://chromium.googlesource.com/webm/libwebp/">GoogleGit/https://chromium.googlesource.com/webm/libwebp/</a>来寻找源代码，自行编译</p>
<p>但是如果不想编译的话，谷歌也提供了现成的编译过的release，访问<a href="https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html">GoogleAPIs/https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html</a>来直接下载release</p>
<p>需要注意的是，要获取最新版本，必须<strong>往下翻到底</strong>才能看到</p>
<p>文件格式如下所示：</p>
<pre><code>libwebp-version-os-platform.zip
</code></pre>
<p>或者</p>
<pre><code>libwebp-version-os-platform.tar.gz
</code></pre>
<p>例如：</p>
<pre><code>libwebp-1.4.0-windows-x64.zip
</code></pre>
<p>按需要下载自己需要的文件</p>
<p>或对于 ArchLinux</p>
<pre><code>sudo pacman -S libwebp-utils 
</code></pre>
<p>其他发行版请搜索对应的包</p>
<h2>使用</h2>
<p>下载之后就需要解压了，压缩包中只有一个目录，我们把他解压出来，解压出来后目录结构大致如下：</p>
<pre><code>libwebp-1.4.0-windows-x64
│  README.md
│  test.webp
│  test_ref.ppm
│
├─bin
│      anim_diff.exe
│      anim_dump.exe
│      cwebp.exe
│      dwebp.exe
│      freeglut.dll
│      get_disto.exe
│      gif2webp.exe
│      img2webp.exe
│      vwebp.exe
│      webpinfo.exe
│      webpmux.exe
│      webp_quality.exe
│
├─doc
│      api.md
│      tools.md
│
├─include
│  └─webp
│          decode.h
│          demux.h
│          encode.h
│          mux.h
│          mux_types.h
│          types.h
│
└─lib
        libwebp.lib
        libwebpdemux.lib
        libwebpmux.lib
</code></pre>
<p>我们需要的只是bin目录下的cwebp.exe文件，可以讲bin目录加入进环境变量中，这里不再细讲</p>
<p>打开控制台，查看是否正常</p>
<pre><code>cwebp -version
</code></pre>
<p>输出就像：</p>
<pre><code>1.4.0
libsharpyuv: 0.4.0
</code></pre>
<p>正常使用（有损压缩）用法：</p>
<pre><code>cwebp -m [可选，压缩品质(0-6)，数字越大越慢，默认为4] -q &lt;品质(0-100)，数字越大品质越好&gt; ./输入文件 -o ./输出.webp
# 例如
cwebp -m 6 -q 95 ./default.png -o ./default.webp
</code></pre>
<p>一般情况下的输出：</p>
<pre><code>Saving file './default.webp'
File:      ./default.png
Dimension: 2338 x 1440
Output:    367416 bytes Y-U-V-All-PSNR 49.86 52.49 52.66   50.59 dB
           (0.87 bpp)
block count:  intra4:      12127  (91.66%)
              intra16:      1103  (8.34%)
              skipped:        26  (0.20%)
bytes used:  header:            586  (0.2%)
             mode-partition:  52214  (14.2%)
 Residuals bytes  |segment 1|segment 2|segment 3|segment 4|  total
    macroblocks:  |       1%|       5%|      18%|      77%|   13230
      quantizer:  |       6 |       6 |       5 |       4 |
   filter level:  |       2 |       0 |       0 |       9 |
</code></pre>
<p>想要无损压缩的也可以，用法：</p>
<pre><code>cwebp -lossless ./输入文件 -o ./输出.webp
# 例如
cwebp -lossless ./default.png -o ./default.webp
</code></pre>
<p>一般情况下的输出</p>
<pre><code>Saving file './default.webp'
File:      ./default.png
Dimension: 350 x 350
Output:    11240 bytes (0.73 bpp)
Lossless-ARGB compressed size: 11240 bytes
  * Header size: 1337 bytes, image data size: 9878
  * Lossless features used: PREDICTION CROSS-COLOR-TRANSFORM SUBTRACT-GREEN
  * Precision Bits: histogram=3 transform=3 cache=0
</code></pre>
<p>压缩后可以使用vwebp查看是否编码正确，用法：</p>
<pre><code>vwebp ./输出.webp
</code></pre>
<p>运行后会弹出一个窗口，显示的是当前图片编码后的样式</p>
<h2>为什么用webp</h2>
<p>回到开头，我为什么要用webp而不用传统的png/jpg之类的格式呢？</p>
<p>有一个最大的好处，就是“小”</p>
<p>例如这个文章的头图，也就是网站的主图，压缩前的大小为3.26MB，而经过95品质的压缩后，大小来到了惊人的
<strong>358KB</strong>
即使是使用了无损压缩格式，压缩后也只有<strong>2.4MB</strong>左右</p>
<p>这样不但可以加快访问速度，还能省下不少的带宽，要知道Vercel免费计划每月为100GB，网站肯定是越精简越好的</p>
<p>所以你还有什么理由不用webp格式的图片呢</p>
<hr />
<p>感谢您阅读此文章，如果有什么不对的地方欢迎再评论区纠正！</p>
]]></content>
    <author><name>mail_set</name></author>
    <category term="博客"/>
  </entry>
  <entry>
    <title>网站似乎有点不一样了</title>
    <link href="https://blog.mailset.top/%E7%BD%91%E7%AB%99%E4%BC%BC%E4%B9%8E%E6%9C%89%E7%82%B9%E4%B8%8D%E4%B8%80%E6%A0%B7%E4%BA%86/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E7%BD%91%E7%AB%99%E4%BC%BC%E4%B9%8E%E6%9C%89%E7%82%B9%E4%B8%8D%E4%B8%80%E6%A0%B7%E4%BA%86/</id>
    <published>2024-10-19T07:32:31.000Z</published>
    <updated>2024-10-19T07:32:31.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>我现在更新了博客，原因是半年前删Linux的时候没备份，不小心把老博客给删了。。。</p>
<p>关于内容的话我会尽量充实的，谢谢大家了（</p>
<p>现在大家看到的这篇文章以前的内容，都是我从我知乎上同时发布的文章里<s>回复</s>恢复下来的，希望能帮到你（</p>
]]></content>
    <author><name>mail_set</name></author>
    <category term="博客"/>
  </entry>
  <entry>
    <title>在你的网站下面加上运行日期</title>
    <link href="https://blog.mailset.top/%E5%9C%A8%E4%BD%A0%E7%9A%84%E7%BD%91%E7%AB%99%E4%B8%8B%E9%9D%A2%E5%8A%A0%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%97%A5%E6%9C%9F/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/%E5%9C%A8%E4%BD%A0%E7%9A%84%E7%BD%91%E7%AB%99%E4%B8%8B%E9%9D%A2%E5%8A%A0%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%97%A5%E6%9C%9F/</id>
    <published>2024-02-05T12:00:00.000Z</published>
    <updated>2024-02-05T12:00:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>交换友链的时候突然看到了这个问题</p>
<p>对了你下面那个《已运行x天x时x秒》怎么做的，求求</p>
<p>就在这里简单写一个教程吧</p>
<h2>须知</h2>
<p>此教程主要适用于Hexo，其他框架未经测试</p>
<h2>JS</h2>
<p>在<code>source</code>文件夹下创建<code>js</code>文件夹，并创建文件<code>custom.js</code>，文件内容如下：</p>
<pre><code>var now = new Date(); 
    function createtime() { 
        var grt= new Date("02/05/2024 14:00:00");//在此处修改你的建站时间
        now.setTime(now.getTime()+250); 
        days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days); 
        hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours); 
        if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum); 
        mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;} 
        seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum); 
        snum = Math.round(seconds); if(String(snum).length ==1 ){snum = "0" + snum;} 
        document.getElementById("timeDate").innerHTML = "已运行 "+dnum+" 天 "; 
        document.getElementById("times").innerHTML = hnum + " 小时 " + mnum + " 分 " + snum + " 秒"; 
    } 
setInterval("createtime()",250);
</code></pre>
<p>之后，打开<code>_config.你的theme.yml</code>文件，寻找<code>custom_js</code>或类似的配置，修改为 <code>/js/custom.js</code></p>
<p>接着，寻找<code>footer</code>或类似的配置，加上</p>
<pre><code>&lt;br /&gt;&lt;div&gt;
    &lt;span id="timeDate"&gt;载入天数...&lt;/span&gt;&lt;span id="times"&gt;载入时分秒...&lt;/span&gt;
&lt;/div&gt;
</code></pre>
<p>就可以了</p>
<hr />
<p>参考自：<a href="https://blog.csdn.net/wangqingchuan92/article/details/126346205">https://blog.csdn.net/wangqingchuan92/article/details/126346205</a></p>
]]></content>
    <author><name>mail_set</name></author>
    <category term="博客"/>
  </entry>
  <entry>
    <title>AList设置https</title>
    <link href="https://blog.mailset.top/alist%E8%AE%BE%E7%BD%AEhttps/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/alist%E8%AE%BE%E7%BD%AEhttps/</id>
    <published>2024-02-05T11:00:00.000Z</published>
    <updated>2024-02-05T11:00:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>看了很多教程，要不就是nginx反代要不就是宝塔，想着出一篇简单的教程</p>
<p>接上文，在letsencrypt<s>白嫖了</s>申请了自己域名的证书之后，自己Alist网盘的https改怎么设置呢？</p>
<h3>DDNS</h3>
<p>会弄AList的人大多数也会DDNS了，但在这里我还是向大家推荐一个软件：DDNS-GO，具体就请自己搜索了</p>
<h3>配置</h3>
<p>注意：以下方法仅适用于Linux（因为我没有在Windows下使用过AList，更不知道这东西在Windows下的配置文件在哪里，能找到的话可以自己试试看）</p>
<p>首先，打开命令行，切换到root用户</p>
<p>如果你是使用一键脚本安装的AList的话，那么他的配置文件大概率在<code>/opt/alist/data</code>目录下，这个目录没有root权限是进不去的</p>
<p>之后，打开文件<code>/opt/alist/data/config.json</code>，其中有如下内容：</p>
<pre><code>"scheme": {
    "address": "0.0.0.0",
    "http_port": 5244,
    "https_port": -1,
    "force_https": false,
    "cert_file": "",
    "key_file": "",
    "unix_file": "",
    "unix_file_perm": ""
  }
</code></pre>
<p>你可能注意到了，其中有 cert_file和key_file两条配置，正对应着上次申请证书最后输出的<code>Certificate is saved at:</code>和<code>Key is saved at:</code>，把后面的文件路径填进去，就配置好证书文件了</p>
<p>但是，先别急着restart，这个<code>https_port</code>还是-1呢，你可以把他变成你想要的数字，像我就把<code>http_port</code>换成了5243，<code>https_port</code>换成了5244，对于我这种记不住端口号的人十分友好</p>
<p>如果你想要强制使用https，也可以把下面的<code>force_https</code>改为true，不过我倒是没有开，如果哪天https端口炸了。。。</p>
<h3>启用</h3>
<p>大功告成！使用下面的命令重新启动AList</p>
<pre><code>systemctl restart alist
</code></pre>
<p>享受有着SSL/TLS加持的AList吧</p>
<hr />
<p>如果觉得对你有用的话，欢迎到处转发，有什么问题还可以在下面问我</p>
]]></content>
    <author><name>mail_set</name></author>
    <category term="网盘"/>
  </entry>
  <entry>
    <title>letsencrypt免费证书申请--Certbot</title>
    <link href="https://blog.mailset.top/letsencrypt%E5%85%8D%E8%B4%B9%E8%AF%81%E4%B9%A6%E7%94%B3%E8%AF%B7-certbot/" rel="alternate" type="text/html"/>
    <id>https://blog.mailset.top/letsencrypt%E5%85%8D%E8%B4%B9%E8%AF%81%E4%B9%A6%E7%94%B3%E8%AF%B7-certbot/</id>
    <published>2024-02-05T10:00:00.000Z</published>
    <updated>2024-02-05T10:00:00.000Z</updated>
    <summary></summary>
    <content type="html"><![CDATA[<p>刚才找了半天教程找不到，在这里分享一下</p>
<h3>安装 Certbot</h3>
<p>如果你用的是ArchLinux，那么可以通过下面的命令直接安装</p>
<pre><code>sudo pacman -S certbot
</code></pre>
<p>如果你用的是其他发行版/MacOS/Windows，那么请访问<a href="https://certbot.eff.org/">https://certbot.eff.org/</a></p>
<h3>申请证书</h3>
<p>打开终端，输入下面的命令（适用于Linux，Windows用户请去掉sudo）</p>
<pre><code>sudo certbot certonly -d "你的域名" --manual --preferred-challenges dns-01
</code></pre>
<p>域名样例： 泛域名：*.mailset.top 单个域名：mailset.top/www.mailset.top</p>
<p>如果你是第一次申请，前面两个问题均输入Y即可</p>
<p>之后，会有输出如下：</p>
<pre><code>Please deploy a DNS TXT record under the name:

_acme-challenge.你的网址.

with the following value:

要添加的记录

Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.mailset.top.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.
</code></pre>
<p>这时你先别急着回车，先访问你的dns提供商， 在 _acme-challenge.你的网址 添加一个 TXT 记录，内容为上文 要添加记录 中的内容</p>
<p>添加之后，可以先nslookup一下看看是否成功添加，之后再按回车确认</p>
<p>如果成功，下文会输出证书的地址，直接用即可</p>
<h3>建议</h3>
<p>第一次使用可以在certbot命令的参数加上 --dry-run，因为一个月同一个域名申请证书的机会是有限的，要是几次验证全没过。。。</p>
<p>之后就可以去掉 --dry-run，让它实际的申请证书了</p>
<hr />
<p>一会儿再写一个alist证书设置，希望对你有用（</p>
<p>有什么疑问欢迎在下面提问</p>
]]></content>
    <author><name>mail_set</name></author>
    <category term="博客"/>
  </entry>
</feed>
