<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>效率 on 夜云泊</title>
    <link>https://lifeislife.cn/tags/%E6%95%88%E7%8E%87/</link>
    <description>feedId:57980998056508425+userId:73222296380546048 Recent content in 效率 on 夜云泊</description>
    <generator>Hugo -- 0.161.1</generator>
    <language>zh</language>
    <lastBuildDate>Mon, 12 Sep 2022 14:05:17 +0000</lastBuildDate>
    <atom:link href="https://lifeislife.cn/tags/%E6%95%88%E7%8E%87/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux 下切换 Python 版本</title>
      <link>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3linux%E4%B8%8B%E5%88%87%E6%8D%A2python%E7%89%88%E6%9C%AC/</link>
      <pubDate>Mon, 12 Sep 2022 14:05:17 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3linux%E4%B8%8B%E5%88%87%E6%8D%A2python%E7%89%88%E6%9C%AC/</guid>
      <description>&lt;h2 id=&#34;需求背景&#34;&gt;需求背景&lt;/h2&gt;
&lt;p&gt;用过 Python 的都知道，Python 是不向后兼容的，也就是 Python3.X 开发的程序，使用 Python2.X 环境就无法正常运行。因为很多语法都改变了。现在接触到的大部分 Python 程序都是 Python3.X 开发的，但是偶尔也会遇到使用 Python2.X 的时候。这就需要灵活切换版本。&lt;/p&gt;
&lt;p&gt;一般 Linux 的各个发行版都预装了 Python2.X。我使用的 Debian 就预装了 Python2.7。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 2.7.16
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是我同时也安装了 Python3.7&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls /usr/bin &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;python*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dh_python2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python2.7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3.7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3.7m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;alias-修改别名&#34;&gt;alias 修改别名&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/python3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 3.7.3  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面的别名修改只对当前终端有效。如果要使每个窗口都使用这个别名，将别名加入&lt;code&gt;~/.bashrc&lt;/code&gt;，如 zsh 是则是&lt;code&gt;~/.zshrc&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;软链接&#34;&gt;软链接&lt;/h2&gt;
&lt;p&gt;和修改别名类似&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s python /usr/bin/python3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-alternatives&#34;&gt;update-alternatives&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;update-alternatives&lt;/code&gt;是 Debian 系统提供的一个工具，Ubuntu 是基于 Debian 的，所以 Ubuntu 也可以使用，其他发行版没有该工具。它可以用来方便快捷地切换应用版本，不仅仅用来切换 Python，其他应用程序有多个版本的也可以使用该工具。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;update-alternatives&lt;/code&gt;本质也是建立软链接，只不过有了统一的管理，首先我们需要使用&lt;code&gt;--install&lt;/code&gt;参数，添加一些候选项，也就是执行&lt;code&gt;python&lt;/code&gt;这个命令时，它可以有哪些选择，在这里就是&lt;code&gt;python3.7.3&lt;/code&gt;和&lt;code&gt;python2.7.16&lt;/code&gt;两个选择。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --install &amp;lt;链接&amp;gt; &amp;lt;名称&amp;gt; &amp;lt;路径&amp;gt; &amp;lt;优先级&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;，这里的&lt;code&gt;/usr/bin/python&lt;/code&gt;链接文件，两个可选项必须是一样的，这样这个链接文件才可以选择两个不同的可选项去链接。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python&lt;/code&gt;是在命令行执行的命令。&lt;code&gt;/usr/bin/python2.7&lt;/code&gt;是执行&lt;code&gt;python&lt;/code&gt;命令后调用具体哪个版本。最后的数字&lt;code&gt;2&lt;/code&gt;是优先级，也就是&lt;code&gt;python2.7&lt;/code&gt;比&lt;code&gt;python3.7&lt;/code&gt;优先级高，如果不指定版本，那么默认就是使用&lt;code&gt;python2&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我们再查看一下版本信息，发现是&lt;code&gt;python2.7.16&lt;/code&gt;。说明是默认版本。并且&lt;code&gt;python&lt;/code&gt;已被链接到我们管理的软链接上。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 2.7.16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ll /usr/bin  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root   python -&amp;gt; /etc/alternatives/python
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看&lt;code&gt;python&lt;/code&gt;的可选配置，可以看到有两个可选配置，默认是&lt;code&gt;python2&lt;/code&gt;，第一列是序号，如果我们想切换到&lt;code&gt;python3&lt;/code&gt;，对应的数字&lt;code&gt;2&lt;/code&gt;即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root at RISCX in ~
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ update-alternatives --config python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;There are &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; choices &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the alternative python &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;providing /usr/bin/python&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Selection    Path                Priority   Status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;            /usr/bin/python2.7   &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;         auto mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;            /usr/bin/python2.7   &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;         manual mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;            /usr/bin/python3.7   &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;         manual mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Press &amp;lt;enter&amp;gt; to keep the current choice&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;*&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;, or &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; selection number:2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/bin/python3.7 to provide /usr/bin/python &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;python&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in manual mode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次查看版本信息，发现已经切换成功。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 3.7.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;执行&lt;code&gt;update-alternatives&lt;/code&gt;经常会导致我的终端&lt;strong&gt;回车失效&lt;/strong&gt;，可以参考&lt;a href=&#34;https://dunky-z.github.io/2022/09/12/%E8%A7%A3%E5%86%B3Linux%E7%BB%88%E7%AB%AF%E5%9B%9E%E8%BD%A6%E9%94%AE%E5%8F%98%E6%88%90%E5%AD%97%E7%AC%A6M/&#34;&gt;解决 Linux 终端回车键变成字符 M&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;--remove&lt;/code&gt;，删除可选项：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --remove python /usr/bin/python2.7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<h2 id="需求背景">需求背景</h2>
<p>用过 Python 的都知道，Python 是不向后兼容的，也就是 Python3.X 开发的程序，使用 Python2.X 环境就无法正常运行。因为很多语法都改变了。现在接触到的大部分 Python 程序都是 Python3.X 开发的，但是偶尔也会遇到使用 Python2.X 的时候。这就需要灵活切换版本。</p>
<p>一般 Linux 的各个发行版都预装了 Python2.X。我使用的 Debian 就预装了 Python2.7。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 2.7.16
</span></span></code></pre></div><p>但是我同时也安装了 Python3.7</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ ls /usr/bin <span class="p">|</span> grep <span class="s2">&#34;python*&#34;</span>
</span></span><span class="line"><span class="cl">dh_python2
</span></span><span class="line"><span class="cl">python
</span></span><span class="line"><span class="cl">python2
</span></span><span class="line"><span class="cl">python2.7
</span></span><span class="line"><span class="cl">python3
</span></span><span class="line"><span class="cl">python3.7
</span></span><span class="line"><span class="cl">python3.7m
</span></span><span class="line"><span class="cl">python3m
</span></span></code></pre></div><h2 id="alias-修改别名">alias 修改别名</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ <span class="nb">alias</span> <span class="nv">python</span><span class="o">=</span>/usr/bin/python3
</span></span><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 3.7.3  
</span></span></code></pre></div><p>上面的别名修改只对当前终端有效。如果要使每个窗口都使用这个别名，将别名加入<code>~/.bashrc</code>，如 zsh 是则是<code>~/.zshrc</code>。</p>
<h2 id="软链接">软链接</h2>
<p>和修改别名类似</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ln -s python /usr/bin/python3
</span></span></code></pre></div><h2 id="update-alternatives">update-alternatives</h2>
<p><code>update-alternatives</code>是 Debian 系统提供的一个工具，Ubuntu 是基于 Debian 的，所以 Ubuntu 也可以使用，其他发行版没有该工具。它可以用来方便快捷地切换应用版本，不仅仅用来切换 Python，其他应用程序有多个版本的也可以使用该工具。</p>
<p><code>update-alternatives</code>本质也是建立软链接，只不过有了统一的管理，首先我们需要使用<code>--install</code>参数，添加一些候选项，也就是执行<code>python</code>这个命令时，它可以有哪些选择，在这里就是<code>python3.7.3</code>和<code>python2.7.16</code>两个选择。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># --install &lt;链接&gt; &lt;名称&gt; &lt;路径&gt; &lt;优先级&gt;</span>
</span></span><span class="line"><span class="cl">sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 <span class="m">2</span>
</span></span><span class="line"><span class="cl">sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 <span class="m">1</span>
</span></span></code></pre></div><p><strong>注意</strong>，这里的<code>/usr/bin/python</code>链接文件，两个可选项必须是一样的，这样这个链接文件才可以选择两个不同的可选项去链接。</p>
<p><code>python</code>是在命令行执行的命令。<code>/usr/bin/python2.7</code>是执行<code>python</code>命令后调用具体哪个版本。最后的数字<code>2</code>是优先级，也就是<code>python2.7</code>比<code>python3.7</code>优先级高，如果不指定版本，那么默认就是使用<code>python2</code>。</p>
<p>我们再查看一下版本信息，发现是<code>python2.7.16</code>。说明是默认版本。并且<code>python</code>已被链接到我们管理的软链接上。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 2.7.16
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ ll /usr/bin  <span class="p">|</span> grep <span class="s2">&#34;python&#34;</span>
</span></span><span class="line"><span class="cl">lrwxrwxrwx <span class="m">1</span> root   python -&gt; /etc/alternatives/python
</span></span></code></pre></div><p>查看<code>python</code>的可选配置，可以看到有两个可选配置，默认是<code>python2</code>，第一列是序号，如果我们想切换到<code>python3</code>，对应的数字<code>2</code>即可。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root at RISCX in ~
</span></span><span class="line"><span class="cl">$ update-alternatives --config python
</span></span><span class="line"><span class="cl">There are <span class="m">2</span> choices <span class="k">for</span> the alternative python <span class="o">(</span>providing /usr/bin/python<span class="o">)</span>.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Selection    Path                Priority   Status
</span></span><span class="line"><span class="cl">------------------------------------------------------------
</span></span><span class="line"><span class="cl">* <span class="m">0</span>            /usr/bin/python2.7   <span class="m">2</span>         auto mode
</span></span><span class="line"><span class="cl">  <span class="m">1</span>            /usr/bin/python2.7   <span class="m">2</span>         manual mode
</span></span><span class="line"><span class="cl">  <span class="m">2</span>            /usr/bin/python3.7   <span class="m">1</span>         manual mode
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Press &lt;enter&gt; to keep the current choice<span class="o">[</span>*<span class="o">]</span>, or <span class="nb">type</span> selection number:2
</span></span><span class="line"><span class="cl">update-alternatives: using /usr/bin/python3.7 to provide /usr/bin/python <span class="o">(</span>python<span class="o">)</span> in manual mode
</span></span></code></pre></div><p>再次查看版本信息，发现已经切换成功。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 3.7.3
</span></span></code></pre></div><blockquote>
<p>执行<code>update-alternatives</code>经常会导致我的终端<strong>回车失效</strong>，可以参考<a href="https://dunky-z.github.io/2022/09/12/%E8%A7%A3%E5%86%B3Linux%E7%BB%88%E7%AB%AF%E5%9B%9E%E8%BD%A6%E9%94%AE%E5%8F%98%E6%88%90%E5%AD%97%E7%AC%A6M/">解决 Linux 终端回车键变成字符 M</a></p>
</blockquote>
<p><code>--remove</code>，删除可选项：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo update-alternatives --remove python /usr/bin/python2.7
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>浏览器任务栏多窗口命名</title>
      <link>https://lifeislife.cn/posts/%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BB%BB%E5%8A%A1%E6%A0%8F%E5%A4%9A%E7%AA%97%E5%8F%A3%E5%91%BD%E5%90%8D/</link>
      <pubDate>Sun, 28 Aug 2022 08:56:28 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BB%BB%E5%8A%A1%E6%A0%8F%E5%A4%9A%E7%AA%97%E5%8F%A3%E5%91%BD%E5%90%8D/</guid>
      <description>&lt;h2 id=&#34;需求&#34;&gt;需求&lt;/h2&gt;
&lt;p&gt;工作时需要开启多个标签页，在同一个窗口里打开又查找不变，于是分为多个窗口，每个窗口里的标签页工作内容一致。如所有文档放在一个窗口，需要百度，Google 搜索时用单独的一个问题搜索窗口。这样就避免每次打开窗口都要挨个点一遍。&lt;/p&gt;
&lt;h2 id=&#34;edge-设置&#34;&gt;Edge 设置&lt;/h2&gt;
&lt;p&gt;打开设置-更多工具 - 为窗口命名。即可重命名窗口&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102824.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102824.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102435.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102435.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;h2 id=&#34;chrome-设置&#34;&gt;Chrome 设置&lt;/h2&gt;
&lt;p&gt;同上，路径基本一致都是在&lt;strong&gt;设置&lt;/strong&gt;-&lt;strong&gt;更多工具&lt;/strong&gt;中。&lt;/p&gt;
&lt;h2 id=&#34;升级&#34;&gt;升级&lt;/h2&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/28/09-17-17-bbceed32bc17a5ca1eb37c46ecf7b650-116a3e41478ffc331c722340b21bbf7b-018594.gif&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/28/09-17-17-bbceed32bc17a5ca1eb37c46ecf7b650-116a3e41478ffc331c722340b21bbf7b-018594.gif&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;在使用过程中发现窗口太多任务栏太挤了，Chrome 自身有标签分组的功能，其实完全可以替代窗口。也可以满足我的需求。&lt;a href=&#34;https://sspai.com/post/65936&#34;&gt;少数派&lt;/a&gt;有介绍，就不造轮子了。体验一段时间确实很好用。&lt;/p&gt;
</description>
      <content:encoded><![CDATA[<h2 id="需求">需求</h2>
<p>工作时需要开启多个标签页，在同一个窗口里打开又查找不变，于是分为多个窗口，每个窗口里的标签页工作内容一致。如所有文档放在一个窗口，需要百度，Google 搜索时用单独的一个问题搜索窗口。这样就避免每次打开窗口都要挨个点一遍。</p>
<h2 id="edge-设置">Edge 设置</h2>
<p>打开设置-更多工具 - 为窗口命名。即可重命名窗口</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102824.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102824.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102435.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/20220525102435.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<h2 id="chrome-设置">Chrome 设置</h2>
<p>同上，路径基本一致都是在<strong>设置</strong>-<strong>更多工具</strong>中。</p>
<h2 id="升级">升级</h2>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/28/09-17-17-bbceed32bc17a5ca1eb37c46ecf7b650-116a3e41478ffc331c722340b21bbf7b-018594.gif">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/28/09-17-17-bbceed32bc17a5ca1eb37c46ecf7b650-116a3e41478ffc331c722340b21bbf7b-018594.gif" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>在使用过程中发现窗口太多任务栏太挤了，Chrome 自身有标签分组的功能，其实完全可以替代窗口。也可以满足我的需求。<a href="https://sspai.com/post/65936">少数派</a>有介绍，就不造轮子了。体验一段时间确实很好用。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Markdown 书写 PDF 输出优雅的解决方案</title>
      <link>https://lifeislife.cn/posts/markdown%E4%B9%A6%E5%86%99pdf%E8%BE%93%E5%87%BA%E4%BC%98%E9%9B%85%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</link>
      <pubDate>Sat, 20 Aug 2022 08:28:03 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/markdown%E4%B9%A6%E5%86%99pdf%E8%BE%93%E5%87%BA%E4%BC%98%E9%9B%85%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/</guid>
      <description>&lt;h1 id=&#34;折腾背景&#34;&gt;折腾背景&lt;/h1&gt;
&lt;p&gt;Markdown 的简便性是 LaTeX 无法替代的，LaTeX 对排版的精准控制能力又是 Markdown 无法比拟的。一直在寻找一种能够将 Markdown 优雅地转换成 PDF 的解决方案，虽然早就听说也使用过 Pandoc 这把瑞士军刀，但是它太过强大，以致于一直都没用明白。只会简单的转换命令，但是实际效果并不好，最近学会了使用 LaTeX 模板的功能，这才让我眼前一亮，这才是我想要的结果。&lt;/p&gt;
&lt;h2 id=&#34;效果演示&#34;&gt;效果演示&lt;/h2&gt;
&lt;iframe src=&#34;https://lifeislife.cn/myjs/pdfjs/web/viewer.html?file=/misc/Markdown书写PDF输出优雅的解决方案.pdf&#34; style=&#34;width:100%;height:600px&#34;&gt;&lt;/iframe&gt;
&lt;h1 id=&#34;基础环境配置&#34;&gt;基础环境配置&lt;/h1&gt;
&lt;p&gt;Markdown 生成 PDF 主要需要使用 Pandoc 和 LaTeX 两个工具，具体安装方式如下：&lt;/p&gt;
&lt;h2 id=&#34;pandoc-的安装&#34;&gt;Pandoc 的安装&lt;/h2&gt;
&lt;p&gt;Pandoc 是由 John MacFarlane 开发的标记语言转换工具，可实现不同标记语言间的格式转换。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Windows 下的安装：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下载&lt;a href=&#34;https://github.com/jgm/pandoc/releases&#34;&gt;安装包&lt;/a&gt;直接安装即可&lt;/li&gt;
&lt;li&gt;如果安装了 Chocolate：&lt;code&gt;choco install pandoc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果安装了 winget：&lt;code&gt;winget install pandoc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Linux/FreeBSD下的安装：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pandoc 已经包含在大部分 Linux 发行版的官方仓库中，直接使用诸如&lt;code&gt;apt/dnf/yum/pacman&lt;/code&gt;之类的安装工具直接安装即可&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;macOS 下的安装：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brew install pandoc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;详细的安装说明参见：&lt;a href=&#34;https://pandoc.org/installing.html&#34;&gt;官方安装文档&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;latex-的安装&#34;&gt;LaTeX 的安装&lt;/h2&gt;
&lt;p&gt;LaTeX 工具，建议安装 texlive。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 下的安装：
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/41855480&#34;&gt;参考该文章&lt;/a&gt;下载完整 texlive，注意安装后需要再安装 cjk，cjk-fonts 等相关 package&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Linux/FreeBSD下的安装：
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;apt/dnf/yum/pacman/pkg&lt;/code&gt; 等安装工具安装 texlive、texlive-latex 等相关软件包&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;macOS 下的安装：
&lt;ul&gt;
&lt;li&gt;使用 HomeBrew 安装 texlive 即可&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;模板配置&#34;&gt;模板配置&lt;/h1&gt;
&lt;h2 id=&#34;配置-pandoc-模板&#34;&gt;配置 Pandoc 模板&lt;/h2&gt;
&lt;p&gt;为保证生成的 pdf 格式（自动插入封面、目录页、页眉页脚等信息），在本地环境中安装模板，具体步骤是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下载&lt;a href=&#34;https://github.com/Dunky-Z/MPPL&#34;&gt;MPPL: Markdown to PDF with Pandoc via Latex&lt;/a&gt;仓库&lt;/li&gt;
&lt;li&gt;将&lt;code&gt;template/mppl.latex&lt;/code&gt;拷贝到&lt;code&gt;*/pandoc/templates&lt;/code&gt;目录下
&lt;ul&gt;
&lt;li&gt;Window 下：&lt;code&gt;C:/Users/USERNAME/AppData/Roaming/pandoc/templates&lt;/code&gt;，如果&lt;code&gt;Roaming&lt;/code&gt;没有&lt;code&gt;pandoc&lt;/code&gt;目录，请手动创建！&lt;/li&gt;
&lt;li&gt;Linux/FreeBSD/MacOS：&lt;code&gt;~/.pandoc/templates/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;配置-latex-模板&#34;&gt;配置 LaTeX 模板&lt;/h2&gt;
&lt;p&gt;模板定制主要修改模板最前面的&lt;strong&gt;模板基础配置&lt;/strong&gt;相关内容，主要可修改的包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;公司和组织，目前默认是&amp;quot;MPPL&amp;quot;&lt;/li&gt;
&lt;li&gt;正文缩进，目前默认是 2em（2 个中文字符，4 个英文字符）&lt;/li&gt;
&lt;li&gt;主要中文字体和英文字体：目前都是微软雅黑&lt;/li&gt;
&lt;li&gt;页眉、页脚展示内容，目前是：
&lt;ul&gt;
&lt;li&gt;左页眉：title&lt;/li&gt;
&lt;li&gt;右页眉：&amp;ldquo;企业机密 - 禁止外传&amp;rdquo;&lt;/li&gt;
&lt;li&gt;左页脚：company&lt;/li&gt;
&lt;li&gt;右页脚：页码&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;字体设置&#34;&gt;字体设置&lt;/h2&gt;
&lt;p&gt;目前页面默认的字体是微软雅黑，对于非 Windows 系统，可能不存在该字体，则有以下两种解决方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;手工安装微软雅黑字体（需要 msyh,msyhbd 两个文件）&lt;/li&gt;
&lt;li&gt;修改为其他字体，如苹方、文泉驿等&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;若需要多个团队共同使用，建议采用方案一。&lt;/p&gt;
&lt;h1 id=&#34;如何生成-pdf&#34;&gt;如何生成 PDF&lt;/h1&gt;
&lt;h2 id=&#34;pdf-文件指定-metadata-信息&#34;&gt;PDF 文件指定 metadata 信息&lt;/h2&gt;
&lt;p&gt;在每个 Markdown 最前面增加以下主要 metadata 信息，metadata 内容开始行内容为三个“-”，结束行为三个“.”，示例如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;MPPL&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;subtitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Markdown to PDF with Pandoc via LaTeX&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2022-08&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Dominic&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;company&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;COMPANYNAME&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;file-code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;COMPANY-DEPARTMENT-00000000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;logo-url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;./img/logo.png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;history&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;V0.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Dominic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;ld&#34;&gt;2022-08-19&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;创建文档&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其他可选配置项目如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;header-left: 左页眉&lt;/li&gt;
&lt;li&gt;header-right: 右页眉&lt;/li&gt;
&lt;li&gt;footer-left: 左页脚&lt;/li&gt;
&lt;li&gt;footer-right: 右页脚&lt;/li&gt;
&lt;li&gt;CJKmainfont: 主要中文字体&lt;/li&gt;
&lt;li&gt;mainfont: 主要字体&lt;/li&gt;
&lt;li&gt;lot: 是否创建表格目录&lt;/li&gt;
&lt;li&gt;lof: 是否创建图片目录&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;可选配置项中，建议除了 subtitle 外，全部在模板中定制，不在 Markdown 文件中定制&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;markdown-其他编写要求&#34;&gt;Markdown 其他编写要求&lt;/h2&gt;
&lt;p&gt;Pandoc 默认使用的 pandoc_markdown 格式，为避免 Markdown 转 pdf 格式异常，在编写 Markdown 的时候有几个原则要求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个标题前后都必须有空行&lt;/li&gt;
&lt;li&gt;每个表格前后都必须有空行&lt;/li&gt;
&lt;li&gt;每个代码块前后收必须有空行&lt;/li&gt;
&lt;li&gt;每个列表前后必须有空行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;总之，不同文本类型之间都要有空行&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;生成-pdf-文件&#34;&gt;生成 PDF 文件&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pandoc --listings --pdf-engine&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;xelatex --template&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mppl.latex README.md -o README.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;摆脱命令行优雅的-vscode-书写转换方案&#34;&gt;摆脱命令行，优雅的 VSCode 书写转换方案&lt;/h1&gt;
&lt;h2 id=&#34;vscode-与插件安装&#34;&gt;VSCode 与插件安装&lt;/h2&gt;
&lt;p&gt;打开 VSCode 编辑器，在插件页搜索 &lt;code&gt;markdown-preview-enhanced&lt;/code&gt;，接着点击 &lt;code&gt;Install&lt;/code&gt; 按钮。详情参考&lt;a href=&#34;https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/vscode-installation&#34;&gt;VS Code 安装 MPE&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Markdown Preview Enhanced 以下简称 MPE&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;使用-vscode-书写-markdown&#34;&gt;使用 VSCode 书写 Markdown&lt;/h2&gt;
&lt;p&gt;新建文件以&lt;code&gt;.md&lt;/code&gt;为后缀即可开始编辑 Markdown 文件，使用 MPE 实时预览与导出。&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201459472.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201459472.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;h2 id=&#34;配置-mpe-使用-pandoc-导出&#34;&gt;配置 MPE 使用 Pandoc 导出&lt;/h2&gt;
&lt;p&gt;右击 MPE 的预览区域，可以看到 MPE 提供多种导出 PDF 的方案，如使用 Chrome 的 Puppeteer 导出，Prince 导出，Pandoc 导出等等。&lt;/p&gt;
&lt;p&gt;在未使用 Pandoc 前，我也一直使用 MPE 提供的 Chrome 方式导出，但是导出的 PDF 排版总是不尽如意。现在介绍如何使用 Pandoc 方式导出。&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201500627.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201500627.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;创建 PDF 文档，你需要在 &lt;code&gt;markdown&lt;/code&gt; 文件中的 &lt;code&gt;front-matter&lt;/code&gt; 里声明 &lt;code&gt;pdf_document&lt;/code&gt; 的输出类型：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pdf_document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;latex_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;xelatex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pandoc_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;--&lt;span class=&#34;l&#34;&gt;template=mppl.latex,--listings]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;front-matter&lt;/code&gt;：文章的最开头，也就是上文元数据放的地方。和元数据放在一起即可，如图所示：&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201526775.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201526775.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;latex_engine&lt;/code&gt;：默认情况下 PDF 文档由 &lt;code&gt;pdflatex&lt;/code&gt; 生成。你可以用 &lt;code&gt;latex_engine&lt;/code&gt; 选项来定义你想用的引擎。支持的引擎有 &lt;code&gt;pdflatex&lt;/code&gt;，&lt;code&gt;xelatex&lt;/code&gt;，以及 &lt;code&gt;lualatex&lt;/code&gt;。这里需要使用&lt;code&gt;xelatex&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pandoc_args&lt;/code&gt;：配置 Pandoc 接受的一些参数，这里我们使用 &lt;code&gt;--template=mppl.latex&lt;/code&gt; 和 &lt;code&gt;--listings&lt;/code&gt; 来指定模板和使用 &lt;code&gt;listings&lt;/code&gt;。这里配置的参数就是执行 Pandoc 时使用的参数，以后就不需要命令行输入了。这里使用上文的&lt;code&gt;mppl.latex&lt;/code&gt;模板。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;配置完之后，右击预览界面，选择 Pandoc 导出，稍等片刻，即可生成 PDF 文件。&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201537508.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201537508.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;h1 id=&#34;常见问题解决&#34;&gt;常见问题解决&lt;/h1&gt;
&lt;h2 id=&#34;latex-相关错误&#34;&gt;LaTeX 相关错误&lt;/h2&gt;
&lt;p&gt;VSCode 导出出错时报错信息较短，并且常常不知道具体报错原因及位置，因为是 LaTeX 转换成 PDF 的过程中出现的错误。报错位置是 LaTeX 中间源码的位置，而不是 VSCode 中的位置。这时候我常用的方法是先将 Markdown 转为 LaTeX，然后再转为 PDF，在 LaTeX 编辑器里就可以看到错误位置了。&lt;/p&gt;
&lt;p&gt;比如下面这个错误，我们能看到一些报错信息&lt;code&gt;cant use \spacefactor in math mode&lt;/code&gt;，但是并不知道具体哪里的错误。从信息里可以看出和&lt;code&gt;\LaTex&lt;/code&gt;有关，大概能推测出是使用了这个命令，因为文章里使用了这个命令的地方只有一处。但是如果有其他的错误，就很难确定了。&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201655326.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201655326.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;h3 id=&#34;markdown-转换-latex&#34;&gt;Markdown 转换 LaTeX&lt;/h3&gt;
&lt;p&gt;这里还是以模板仓库的&lt;code&gt;README.md&lt;/code&gt;为例，当然这个文件是可以正常转换 PDF 的，不会报错。这里只是拿&lt;code&gt;README.md&lt;/code&gt;做一个如何使用命令的演示。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pandoc --listings --template&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mppl.latex -s README.md -o README.tex
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;latex-编辑器打开以-texstudio-为例&#34;&gt;LaTeX 编辑器打开，以 TexStudio 为例&lt;/h3&gt;
&lt;p&gt;打开&lt;code&gt;README.tex&lt;/code&gt;文件，编译：


&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201708811.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201708811.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201717673.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201717673.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;我们可以快速的定位到问题出现的位置，只要搜索相关问题即可。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;\LaTeX{} 这个宏不能用在数学模式下。但是因为我在 Markdown 里必须使用美元符号&lt;code&gt;$$&lt;/code&gt;才能表示 LaTeX 环境，才能正确输出 LaTeX 符号，而 Markdown 转换成 LaTeX 源码时，这个宏就会被包裹在数学环境里，就会报错。如果我想在 PDF 里显示这个符号，那就在 Markdown 里不使用美元符号&lt;code&gt;$$&lt;/code&gt;，而是直接输入&lt;code&gt;\LaTeX{}&lt;/code&gt;即可，再导出 PDF 时就不会报错。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <content:encoded><![CDATA[<h1 id="折腾背景">折腾背景</h1>
<p>Markdown 的简便性是 LaTeX 无法替代的，LaTeX 对排版的精准控制能力又是 Markdown 无法比拟的。一直在寻找一种能够将 Markdown 优雅地转换成 PDF 的解决方案，虽然早就听说也使用过 Pandoc 这把瑞士军刀，但是它太过强大，以致于一直都没用明白。只会简单的转换命令，但是实际效果并不好，最近学会了使用 LaTeX 模板的功能，这才让我眼前一亮，这才是我想要的结果。</p>
<h2 id="效果演示">效果演示</h2>
<iframe src="/myjs/pdfjs/web/viewer.html?file=/misc/Markdown书写PDF输出优雅的解决方案.pdf" style="width:100%;height:600px"></iframe>
<h1 id="基础环境配置">基础环境配置</h1>
<p>Markdown 生成 PDF 主要需要使用 Pandoc 和 LaTeX 两个工具，具体安装方式如下：</p>
<h2 id="pandoc-的安装">Pandoc 的安装</h2>
<p>Pandoc 是由 John MacFarlane 开发的标记语言转换工具，可实现不同标记语言间的格式转换。</p>
<ul>
<li>
<p>Windows 下的安装：</p>
<ul>
<li>下载<a href="https://github.com/jgm/pandoc/releases">安装包</a>直接安装即可</li>
<li>如果安装了 Chocolate：<code>choco install pandoc</code></li>
<li>如果安装了 winget：<code>winget install pandoc</code></li>
</ul>
</li>
<li>
<p>Linux/FreeBSD下的安装：</p>
<ul>
<li>Pandoc 已经包含在大部分 Linux 发行版的官方仓库中，直接使用诸如<code>apt/dnf/yum/pacman</code>之类的安装工具直接安装即可</li>
</ul>
</li>
<li>
<p>macOS 下的安装：</p>
<ul>
<li><code>brew install pandoc</code></li>
</ul>
</li>
</ul>
<blockquote>
<p>详细的安装说明参见：<a href="https://pandoc.org/installing.html">官方安装文档</a></p>
</blockquote>
<h2 id="latex-的安装">LaTeX 的安装</h2>
<p>LaTeX 工具，建议安装 texlive。</p>
<ul>
<li>Windows 下的安装：
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/41855480">参考该文章</a>下载完整 texlive，注意安装后需要再安装 cjk，cjk-fonts 等相关 package</li>
</ul>
</li>
<li>Linux/FreeBSD下的安装：
<ul>
<li>使用 <code>apt/dnf/yum/pacman/pkg</code> 等安装工具安装 texlive、texlive-latex 等相关软件包</li>
</ul>
</li>
<li>macOS 下的安装：
<ul>
<li>使用 HomeBrew 安装 texlive 即可</li>
</ul>
</li>
</ul>
<h1 id="模板配置">模板配置</h1>
<h2 id="配置-pandoc-模板">配置 Pandoc 模板</h2>
<p>为保证生成的 pdf 格式（自动插入封面、目录页、页眉页脚等信息），在本地环境中安装模板，具体步骤是：</p>
<ul>
<li>下载<a href="https://github.com/Dunky-Z/MPPL">MPPL: Markdown to PDF with Pandoc via Latex</a>仓库</li>
<li>将<code>template/mppl.latex</code>拷贝到<code>*/pandoc/templates</code>目录下
<ul>
<li>Window 下：<code>C:/Users/USERNAME/AppData/Roaming/pandoc/templates</code>，如果<code>Roaming</code>没有<code>pandoc</code>目录，请手动创建！</li>
<li>Linux/FreeBSD/MacOS：<code>~/.pandoc/templates/</code></li>
</ul>
</li>
</ul>
<h2 id="配置-latex-模板">配置 LaTeX 模板</h2>
<p>模板定制主要修改模板最前面的<strong>模板基础配置</strong>相关内容，主要可修改的包括：</p>
<ul>
<li>公司和组织，目前默认是&quot;MPPL&quot;</li>
<li>正文缩进，目前默认是 2em（2 个中文字符，4 个英文字符）</li>
<li>主要中文字体和英文字体：目前都是微软雅黑</li>
<li>页眉、页脚展示内容，目前是：
<ul>
<li>左页眉：title</li>
<li>右页眉：&ldquo;企业机密 - 禁止外传&rdquo;</li>
<li>左页脚：company</li>
<li>右页脚：页码</li>
</ul>
</li>
</ul>
<h2 id="字体设置">字体设置</h2>
<p>目前页面默认的字体是微软雅黑，对于非 Windows 系统，可能不存在该字体，则有以下两种解决方案：</p>
<ol>
<li>手工安装微软雅黑字体（需要 msyh,msyhbd 两个文件）</li>
<li>修改为其他字体，如苹方、文泉驿等</li>
</ol>
<p>若需要多个团队共同使用，建议采用方案一。</p>
<h1 id="如何生成-pdf">如何生成 PDF</h1>
<h2 id="pdf-文件指定-metadata-信息">PDF 文件指定 metadata 信息</h2>
<p>在每个 Markdown 最前面增加以下主要 metadata 信息，metadata 内容开始行内容为三个“-”，结束行为三个“.”，示例如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yml" data-lang="yml"><span class="line"><span class="cl"><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;MPPL&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;0.1&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">subtitle</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Markdown to PDF with Pandoc via LaTeX&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;2022-08&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">author</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Dominic&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">company</span><span class="p">:</span><span class="w"> </span><span class="l">COMPANYNAME</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">file-code</span><span class="p">:</span><span class="w"> </span><span class="l">COMPANY-DEPARTMENT-00000000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">logo</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">logo-url</span><span class="p">:</span><span class="w"> </span><span class="l">./img/logo.png</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">history</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l">V0.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">author</span><span class="p">:</span><span class="w"> </span><span class="l">Dominic</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">date</span><span class="p">:</span><span class="w"> </span><span class="ld">2022-08-19</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">desc</span><span class="p">:</span><span class="w"> </span><span class="l">创建文档</span><span class="w">
</span></span></span></code></pre></div><p>其他可选配置项目如下：</p>
<ul>
<li>header-left: 左页眉</li>
<li>header-right: 右页眉</li>
<li>footer-left: 左页脚</li>
<li>footer-right: 右页脚</li>
<li>CJKmainfont: 主要中文字体</li>
<li>mainfont: 主要字体</li>
<li>lot: 是否创建表格目录</li>
<li>lof: 是否创建图片目录</li>
</ul>
<blockquote>
<p>可选配置项中，建议除了 subtitle 外，全部在模板中定制，不在 Markdown 文件中定制</p>
</blockquote>
<h2 id="markdown-其他编写要求">Markdown 其他编写要求</h2>
<p>Pandoc 默认使用的 pandoc_markdown 格式，为避免 Markdown 转 pdf 格式异常，在编写 Markdown 的时候有几个原则要求：</p>
<ul>
<li>每个标题前后都必须有空行</li>
<li>每个表格前后都必须有空行</li>
<li>每个代码块前后收必须有空行</li>
<li>每个列表前后必须有空行</li>
</ul>
<p><strong>总之，不同文本类型之间都要有空行</strong>。</p>
<h2 id="生成-pdf-文件">生成 PDF 文件</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pandoc --listings --pdf-engine<span class="o">=</span>xelatex --template<span class="o">=</span>mppl.latex README.md -o README.pdf
</span></span></code></pre></div><h1 id="摆脱命令行优雅的-vscode-书写转换方案">摆脱命令行，优雅的 VSCode 书写转换方案</h1>
<h2 id="vscode-与插件安装">VSCode 与插件安装</h2>
<p>打开 VSCode 编辑器，在插件页搜索 <code>markdown-preview-enhanced</code>，接着点击 <code>Install</code> 按钮。详情参考<a href="https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/vscode-installation">VS Code 安装 MPE</a>。</p>
<blockquote>
<p>Markdown Preview Enhanced 以下简称 MPE</p>
</blockquote>
<h2 id="使用-vscode-书写-markdown">使用 VSCode 书写 Markdown</h2>
<p>新建文件以<code>.md</code>为后缀即可开始编辑 Markdown 文件，使用 MPE 实时预览与导出。</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201459472.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201459472.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<h2 id="配置-mpe-使用-pandoc-导出">配置 MPE 使用 Pandoc 导出</h2>
<p>右击 MPE 的预览区域，可以看到 MPE 提供多种导出 PDF 的方案，如使用 Chrome 的 Puppeteer 导出，Prince 导出，Pandoc 导出等等。</p>
<p>在未使用 Pandoc 前，我也一直使用 MPE 提供的 Chrome 方式导出，但是导出的 PDF 排版总是不尽如意。现在介绍如何使用 Pandoc 方式导出。</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201500627.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201500627.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>创建 PDF 文档，你需要在 <code>markdown</code> 文件中的 <code>front-matter</code> 里声明 <code>pdf_document</code> 的输出类型：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yml" data-lang="yml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">output</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">pdf_document</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">latex_engine</span><span class="p">:</span><span class="w"> </span><span class="l">xelatex</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pandoc_args</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>--<span class="l">template=mppl.latex,--listings]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span></code></pre></div><ul>
<li>
<p><code>front-matter</code>：文章的最开头，也就是上文元数据放的地方。和元数据放在一起即可，如图所示：</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201526775.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201526775.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
</li>
<li>
<p><code>latex_engine</code>：默认情况下 PDF 文档由 <code>pdflatex</code> 生成。你可以用 <code>latex_engine</code> 选项来定义你想用的引擎。支持的引擎有 <code>pdflatex</code>，<code>xelatex</code>，以及 <code>lualatex</code>。这里需要使用<code>xelatex</code>。</p>
</li>
<li>
<p><code>pandoc_args</code>：配置 Pandoc 接受的一些参数，这里我们使用 <code>--template=mppl.latex</code> 和 <code>--listings</code> 来指定模板和使用 <code>listings</code>。这里配置的参数就是执行 Pandoc 时使用的参数，以后就不需要命令行输入了。这里使用上文的<code>mppl.latex</code>模板。</p>
</li>
</ul>
<p>配置完之后，右击预览界面，选择 Pandoc 导出，稍等片刻，即可生成 PDF 文件。</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201537508.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201537508.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<h1 id="常见问题解决">常见问题解决</h1>
<h2 id="latex-相关错误">LaTeX 相关错误</h2>
<p>VSCode 导出出错时报错信息较短，并且常常不知道具体报错原因及位置，因为是 LaTeX 转换成 PDF 的过程中出现的错误。报错位置是 LaTeX 中间源码的位置，而不是 VSCode 中的位置。这时候我常用的方法是先将 Markdown 转为 LaTeX，然后再转为 PDF，在 LaTeX 编辑器里就可以看到错误位置了。</p>
<p>比如下面这个错误，我们能看到一些报错信息<code>cant use \spacefactor in math mode</code>，但是并不知道具体哪里的错误。从信息里可以看出和<code>\LaTex</code>有关，大概能推测出是使用了这个命令，因为文章里使用了这个命令的地方只有一处。但是如果有其他的错误，就很难确定了。</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201655326.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201655326.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<h3 id="markdown-转换-latex">Markdown 转换 LaTeX</h3>
<p>这里还是以模板仓库的<code>README.md</code>为例，当然这个文件是可以正常转换 PDF 的，不会报错。这里只是拿<code>README.md</code>做一个如何使用命令的演示。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pandoc --listings --template<span class="o">=</span>mppl.latex -s README.md -o README.tex
</span></span></code></pre></div><h3 id="latex-编辑器打开以-texstudio-为例">LaTeX 编辑器打开，以 TexStudio 为例</h3>
<p>打开<code>README.tex</code>文件，编译：


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201708811.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201708811.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201717673.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/202208201717673.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>我们可以快速的定位到问题出现的位置，只要搜索相关问题即可。</p>
<blockquote>
<p>\LaTeX{} 这个宏不能用在数学模式下。但是因为我在 Markdown 里必须使用美元符号<code>$$</code>才能表示 LaTeX 环境，才能正确输出 LaTeX 符号，而 Markdown 转换成 LaTeX 源码时，这个宏就会被包裹在数学环境里，就会报错。如果我想在 PDF 里显示这个符号，那就在 Markdown 里不使用美元符号<code>$$</code>，而是直接输入<code>\LaTeX{}</code>即可，再导出 PDF 时就不会报错。</p>
</blockquote>
]]></content:encoded>
    </item>
  </channel>
</rss>
