<?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>LatexonDocs</title><link>https://hiraethecho.github.io/docs/tags/latex/</link><description>Recent contentinLatexonDocs</description><generator>Hugo --0.152.2</generator><language>en</language><managingEditor>wyz2016zxc@outlook.com(Hiraeth)</managingEditor><webMaster>wyz2016zxc@outlook.com(Hiraeth)</webMaster><lastBuildDate>Mon, 16 Mar 2026 15:39:39 +0800</lastBuildDate><atom:link href="https://hiraethecho.github.io/docs/tags/latex/index.xml" rel="self" type="application/rss+xml"/><item><title>latex基本概念</title><link>https://hiraethecho.github.io/docs/software/latex/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/software/latex/</guid><description>&lt;h1 id="latex概览"&gt;
&lt;a class="anchor inpage" href="#latex%e6%a6%82%e8%a7%88"&gt;#&lt;/a&gt;latex概览&lt;/h1&gt;
&lt;h2 id="tex-和-latex"&gt;
&lt;a class="anchor inpage" href="#tex-%e5%92%8c-latex"&gt;##&lt;/a&gt;tex 和 latex&lt;/h2&gt;
&lt;h3 id="1-tex底层排版引擎"&gt;
&lt;a class="anchor inpage" href="#1-tex%e5%ba%95%e5%b1%82%e6%8e%92%e7%89%88%e5%bc%95%e6%93%8e"&gt;###&lt;/a&gt;&lt;strong&gt;1. TeX：底层排版引擎&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;作者&lt;/strong&gt;：Donald Knuth（高德纳）开发，1978 年发布。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定位&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;是一个&lt;strong&gt;底层的排版编程语言&lt;/strong&gt;，提供精确的排版控制（如盒模型、断行算法、数学公式布局等）。&lt;/li&gt;
&lt;li&gt;语法类似编程（需手动处理格式细节），适合专业人士或极客。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;直接操作命令（如 &lt;code&gt;\hbox&lt;/code&gt;, &lt;code&gt;\vskip&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;默认生成 &lt;code&gt;.dvi&lt;/code&gt; 文件（需转换为 PDF/PS）。&lt;/li&gt;
&lt;li&gt;无预定义的高层结构（如章节、目录需手动实现）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;示例（纯 TeX 代码）&lt;/strong&gt;：&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="latex概览">
  <a class="anchor inpage" href="#latex%e6%a6%82%e8%a7%88">#</a>latex概览</h1>
<h2 id="tex-和-latex">
  <a class="anchor inpage" href="#tex-%e5%92%8c-latex">##</a>tex 和 latex</h2>
<h3 id="1-tex底层排版引擎">
  <a class="anchor inpage" href="#1-tex%e5%ba%95%e5%b1%82%e6%8e%92%e7%89%88%e5%bc%95%e6%93%8e">###</a><strong>1. TeX：底层排版引擎</strong></h3>
<ul>
<li><strong>作者</strong>：Donald Knuth（高德纳）开发，1978 年发布。</li>
<li><strong>定位</strong>：
<ul>
<li>是一个<strong>底层的排版编程语言</strong>，提供精确的排版控制（如盒模型、断行算法、数学公式布局等）。</li>
<li>语法类似编程（需手动处理格式细节），适合专业人士或极客。</li>
</ul>
</li>
<li><strong>特点</strong>：
<ul>
<li>直接操作命令（如 <code>\hbox</code>, <code>\vskip</code>）。</li>
<li>默认生成 <code>.dvi</code> 文件（需转换为 PDF/PS）。</li>
<li>无预定义的高层结构（如章节、目录需手动实现）。</li>
</ul>
</li>
</ul>
<p><strong>示例（纯 TeX 代码）</strong>：</p>
<details open>
    <summary>tex</summary><pre
        class="chroma codeblock"
      ><code class="language-tex" data-lang="tex"
          ><span style="display:flex;"><span><span style="color:#66d9ef">\font\myfont</span>=cmr12 at 14pt
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\myfont</span> Hello, <span style="color:#66d9ef">\TeX</span>!
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\bye</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h3 id="2-latex基于-tex-的高级封装">
  <a class="anchor inpage" href="#2-latex%e5%9f%ba%e4%ba%8e-tex-%e7%9a%84%e9%ab%98%e7%ba%a7%e5%b0%81%e8%a3%85">###</a><strong>2. LaTeX：基于 TeX 的高级封装</strong></h3>
<ul>
<li><strong>作者</strong>：Leslie Lamport（莱斯利·兰波特）开发，1984 年发布。</li>
<li><strong>定位</strong>：
<ul>
<li>是 <strong>TeX 的宏包集合</strong>（一组预定义的命令和模板），提供<strong>文档逻辑结构</strong>（如章节、参考文献、交叉引用）。</li>
<li>隐藏了 TeX 的底层复杂性，用户只需关注内容。</li>
</ul>
</li>
<li><strong>特点</strong>：
<ul>
<li>提供标准文档类（如 <code>article</code>, <code>book</code>）。</li>
<li>内置自动化功能（目录、编号、参考文献管理）。</li>
<li>依赖宏包扩展功能（如 <code>graphicx</code> 插入图片、<code>amsmath</code> 增强数学公式）。</li>
</ul>
</li>
</ul>
<p><strong>示例（LaTeX 代码）</strong>：</p>
<details open>
    <summary>tex</summary><pre
        class="chroma codeblock"
      ><code class="language-tex" data-lang="tex"
          ><span style="display:flex;"><span><span style="color:#66d9ef">\documentclass</span>{article}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\begin</span>{document}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\section</span>{Introduction}
</span></span><span style="display:flex;"><span>Hello, <span style="color:#66d9ef">\LaTeX</span>!
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\end</span>{document}</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h3 id="核心区别">
  <a class="anchor inpage" href="#%e6%a0%b8%e5%bf%83%e5%8c%ba%e5%88%ab">###</a><strong>核心区别</strong></h3>
<table>
  <thead>
      <tr>
          <th>特性</th>
          <th>TeX</th>
          <th>LaTeX</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>设计目标</strong></td>
          <td>底层排版控制</td>
          <td>高层文档结构</td>
      </tr>
      <tr>
          <td><strong>语法复杂度</strong></td>
          <td>复杂（类似编程）</td>
          <td>简单（声明式）</td>
      </tr>
      <tr>
          <td><strong>典型用户</strong></td>
          <td>排版系统开发者、极客</td>
          <td>学术作者、普通用户</td>
      </tr>
      <tr>
          <td><strong>扩展性</strong></td>
          <td>需手动实现一切</td>
          <td>通过宏包（如 <code>hyperref</code>）扩展</td>
      </tr>
      <tr>
          <td><strong>默认输出</strong></td>
          <td><code>.dvi</code></td>
          <td><code>.dvi</code> 或 <code>.pdf</code>（现代工具链）</td>
      </tr>
  </tbody>
</table>
<h3 id="类比解释">
  <a class="anchor inpage" href="#%e7%b1%bb%e6%af%94%e8%a7%a3%e9%87%8a">###</a><strong>类比解释</strong></h3>
<ul>
<li><strong>TeX 类似汇编语言</strong>：
<ul>
<li>直接控制硬件（排版细节），但编写复杂。</li>
</ul>
</li>
<li><strong>LaTeX 类似高级语言（如 Python）</strong>：
<ul>
<li>通过抽象（如 <code>\section</code>）隐藏细节，提升效率。</li>
</ul>
</li>
</ul>
<h3 id="技术关系">
  <a class="anchor inpage" href="#%e6%8a%80%e6%9c%af%e5%85%b3%e7%b3%bb">###</a><strong>技术关系</strong></h3>
<ul>
<li>LaTeX 本质是一组 TeX 宏（<code>.sty</code> 文件），最终仍由 TeX 引擎（如 <code>pdftex</code>, <code>xetex</code>, <code>luatex</code>）执行。</li>
<li>编译流程示例：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>latex document.tex   <span style="color:#75715e"># 调用 pdftex 引擎处理 LaTeX 宏</span>
</span></span><span style="display:flex;"><span>xelatex document.tex <span style="color:#75715e"># 调用 xetex 引擎处理 LaTeX 宏</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="总结">
  <a class="anchor inpage" href="#%e6%80%bb%e7%bb%93">###</a><strong>总结</strong></h3>
<ul>
<li><strong>TeX 是引擎，LaTeX 是模板</strong>。</li>
<li>LaTeX 让用户摆脱 TeX 的底层复杂性，专注于内容逻辑。</li>
<li>现代用户通常直接使用 <code>pdflatex</code>/<code>xelatex</code>/<code>lualatex</code>，无需接触原始 TeX 命令。</li>
</ul>
<p>如果需要进一步解释某个具体细节（如宏包机制或引擎差异），可以继续讨论！</p>
<h2 id="引擎和使用">
  <a class="anchor inpage" href="#%e5%bc%95%e6%93%8e%e5%92%8c%e4%bd%bf%e7%94%a8">##</a>引擎和使用</h2>
<h3 id="1-排版引擎engines">
  <a class="anchor inpage" href="#1-%e6%8e%92%e7%89%88%e5%bc%95%e6%93%8eengines">###</a><strong>1. 排版引擎（Engines）</strong></h3>
<p>引擎是实际执行排版工作的底层程序，负责解析代码、计算布局并生成输出文件（如 PDF/DVI）。<br>
<strong>属于引擎的有</strong>：</p>
<ul>
<li><code>tex</code>：Knuth 原始 TeX 引擎（生成 <code>.dvi</code>）。</li>
<li><code>pdftex</code>：扩展的 TeX 引擎，直接生成 PDF（<code>pdflatex</code> 的基础）。</li>
<li><code>xetex</code>（XeTeX）：支持 Unicode 和系统字体的引擎（<code>xelatex</code> 的基础）。</li>
<li><code>luatex</code>（LuaTeX）：内嵌 Lua 脚本的引擎（<code>lualatex</code> 的基础）。</li>
</ul>
<h3 id="2-模板格式formats">
  <a class="anchor inpage" href="#2-%e6%a8%a1%e6%9d%bf%e6%a0%bc%e5%bc%8fformats">###</a><strong>2. 模板/格式（Formats）</strong></h3>
<p>格式是基于引擎的预定义命令集合（宏包），提供高层抽象，简化用户操作。<br>
<strong>属于格式的有</strong>：</p>
<ul>
<li><code>latex</code>：LaTeX 格式（运行在 <code>pdftex</code>/<code>xetex</code>/<code>luatex</code> 等引擎上）。
<ul>
<li>不是独立引擎，而是通过 <code>latex</code> 命令调用引擎（如 <code>pdftex + LaTeX 宏</code> → <code>pdflatex</code>）。</li>
</ul>
</li>
<li><code>plain tex</code>：Knuth 提供的极简格式（比原始 TeX 稍友好，但远不如 LaTeX）。</li>
<li><code>contex</code>：另一种高级格式（基于 LuaTeX，适合复杂排版）。</li>
</ul>
<h3 id="3-前端命令frontends">
  <a class="anchor inpage" href="#3-%e5%89%8d%e7%ab%af%e5%91%bd%e4%bb%a4frontends">###</a><strong>3. 前端命令（Frontends）</strong></h3>
<p>用户直接调用的命令，本质是 <strong>“引擎 + 格式” 的组合</strong>：</p>
<table>
  <thead>
      <tr>
          <th>命令</th>
          <th>实际调用</th>
          <th>说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>latex</code></td>
          <td><code>pdftex + LaTeX 格式</code></td>
          <td>传统 LaTeX（DVI 输出）。</td>
      </tr>
      <tr>
          <td><code>pdflatex</code></td>
          <td><code>pdftex + LaTeX 格式</code></td>
          <td>直接生成 PDF（无 Unicode 支持）。</td>
      </tr>
      <tr>
          <td><code>xelatex</code></td>
          <td><code>xetex + LaTeX 格式</code></td>
          <td>支持 Unicode 和系统字体。</td>
      </tr>
      <tr>
          <td><code>lualatex</code></td>
          <td><code>luatex + LaTeX 格式</code></td>
          <td>支持 Lua 脚本和现代字体。</td>
      </tr>
  </tbody>
</table>
<h3 id="关键区分">
  <a class="anchor inpage" href="#%e5%85%b3%e9%94%ae%e5%8c%ba%e5%88%86">###</a><strong>关键区分</strong></h3>
<ul>
<li><strong>引擎</strong>：<code>tex</code>, <code>pdftex</code>, <code>xetex</code>, <code>luatex</code>（核心执行者）。</li>
<li><strong>格式</strong>：<code>latex</code>, <code>plain tex</code>, <code>contex</code>（定义高级命令的规则）。</li>
<li><strong>前端命令</strong>：<code>latex</code>, <code>pdflatex</code>, <code>xelatex</code>, <code>lualatex</code>（组合引擎和格式的快捷方式）。</li>
</ul>
<h3 id="常见误解澄清">
  <a class="anchor inpage" href="#%e5%b8%b8%e8%a7%81%e8%af%af%e8%a7%a3%e6%be%84%e6%b8%85">###</a><strong>常见误解澄清</strong></h3>
<ol>
<li><strong><code>latex</code> 不是引擎</strong>：
<ul>
<li>它是 LaTeX 格式通过 <code>pdftex</code> 引擎运行的接口（命令）。</li>
</ul>
</li>
<li><strong><code>pdflatex</code> vs <code>pdftex</code></strong>：
<ul>
<li><code>pdftex</code> 是引擎，<code>pdflatex</code> = <code>pdftex</code> + LaTeX 格式。</li>
</ul>
</li>
</ol>
<hr>
<h2 id="引擎engines">
  <a class="anchor inpage" href="#%e5%bc%95%e6%93%8eengines">##</a>引擎（Engines）</h2>
<h3 id="基础引擎">
  <a class="anchor inpage" href="#%e5%9f%ba%e7%a1%80%e5%bc%95%e6%93%8e">###</a>基础引擎</h3>
<table>
  <thead>
      <tr>
          <th>引擎名称</th>
          <th>特点</th>
          <th>输出格式</th>
          <th>主要用途</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>tex</strong></td>
          <td>Knuth原始引擎，底层控制</td>
          <td>.dvi</td>
          <td>历史兼容、底层排版开发</td>
      </tr>
      <tr>
          <td><strong>pdftex</strong></td>
          <td>TeX的扩展，直接PDF输出</td>
          <td>.pdf</td>
          <td>传统LaTeX文档排版</td>
      </tr>
      <tr>
          <td><strong>xetex</strong> (XeTeX)</td>
          <td>支持Unicode和系统字体</td>
          <td>.xdv/.pdf</td>
          <td>多语言排版、系统字体支持</td>
      </tr>
      <tr>
          <td><strong>luatex</strong> (LuaTeX)</td>
          <td>内嵌Lua解释器，动态脚本</td>
          <td>.pdf</td>
          <td>复杂排版、自动化处理</td>
      </tr>
  </tbody>
</table>
<h3 id="引擎特性对比">
  <a class="anchor inpage" href="#%e5%bc%95%e6%93%8e%e7%89%b9%e6%80%a7%e5%af%b9%e6%af%94">###</a>引擎特性对比</h3>
<table>
  <thead>
      <tr>
          <th>特性</th>
          <th>tex</th>
          <th>pdftex</th>
          <th>xetex</th>
          <th>luatex</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Unicode支持</td>
          <td>❌</td>
          <td>❌</td>
          <td>✔️</td>
          <td>✔️</td>
      </tr>
      <tr>
          <td>OpenType字体</td>
          <td>❌</td>
          <td>❌</td>
          <td>✔️</td>
          <td>✔️</td>
      </tr>
      <tr>
          <td>Lua脚本</td>
          <td>❌</td>
          <td>❌</td>
          <td>❌</td>
          <td>✔️</td>
      </tr>
      <tr>
          <td>系统字体</td>
          <td>❌</td>
          <td>❌</td>
          <td>✔️</td>
          <td>✔️</td>
      </tr>
      <tr>
          <td>输出格式</td>
          <td>DVI</td>
          <td>PDF</td>
          <td>XDV/PDF</td>
          <td>PDF</td>
      </tr>
  </tbody>
</table>
<h2 id="格式formats">
  <a class="anchor inpage" href="#%e6%a0%bc%e5%bc%8fformats">##</a>格式（Formats）</h2>
<h3 id="主要格式">
  <a class="anchor inpage" href="#%e4%b8%bb%e8%a6%81%e6%a0%bc%e5%bc%8f">###</a>主要格式</h3>
<table>
  <thead>
      <tr>
          <th>格式名称</th>
          <th>基于引擎</th>
          <th>特点</th>
          <th>适用场景</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>plain tex</strong></td>
          <td>tex</td>
          <td>Knuth提供的极简格式</td>
          <td>底层TeX编程</td>
      </tr>
      <tr>
          <td><strong>latex</strong></td>
          <td>多引擎</td>
          <td>高级文档结构，宏包丰富</td>
          <td>学术论文、书籍、报告</td>
      </tr>
      <tr>
          <td><strong>contex</strong></td>
          <td>luatex</td>
          <td>模块化设计，强大功能</td>
          <td>复杂排版、图形密集型文档</td>
      </tr>
  </tbody>
</table>
<h2 id="前端命令frontend-commands">
  <a class="anchor inpage" href="#%e5%89%8d%e7%ab%af%e5%91%bd%e4%bb%a4frontend-commands">##</a>前端命令（Frontend Commands）</h2>
<h3 id="常用命令组合">
  <a class="anchor inpage" href="#%e5%b8%b8%e7%94%a8%e5%91%bd%e4%bb%a4%e7%bb%84%e5%90%88">###</a>常用命令组合</h3>
<table>
  <thead>
      <tr>
          <th>命令</th>
          <th>实际组成</th>
          <th>输出格式</th>
          <th>特点</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>tex</code></td>
          <td>tex + plain tex</td>
          <td>.dvi</td>
          <td>原始TeX排版</td>
      </tr>
      <tr>
          <td><code>latex</code></td>
          <td>pdftex + latex格式</td>
          <td>.dvi</td>
          <td>传统LaTeX处理</td>
      </tr>
      <tr>
          <td><code>pdflatex</code></td>
          <td>pdftex + latex格式</td>
          <td>.pdf</td>
          <td>直接PDF输出</td>
      </tr>
      <tr>
          <td><code>xelatex</code></td>
          <td>xetex + latex格式</td>
          <td>.pdf</td>
          <td>Unicode和字体支持</td>
      </tr>
      <tr>
          <td><code>lualatex</code></td>
          <td>luatex + latex格式</td>
          <td>.pdf</td>
          <td>Lua脚本+现代特性</td>
      </tr>
  </tbody>
</table>
<h2 id="文件格式">
  <a class="anchor inpage" href="#%e6%96%87%e4%bb%b6%e6%a0%bc%e5%bc%8f">##</a>文件格式</h2>
<h3 id="输入文件类型">
  <a class="anchor inpage" href="#%e8%be%93%e5%85%a5%e6%96%87%e4%bb%b6%e7%b1%bb%e5%9e%8b">###</a>输入文件类型</h3>
<table>
  <thead>
      <tr>
          <th>扩展名</th>
          <th>类型</th>
          <th>说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>.tex</code></td>
          <td>源文件</td>
          <td>TeX/LaTeX源代码</td>
      </tr>
      <tr>
          <td><code>.sty</code></td>
          <td>宏包文件</td>
          <td>LaTeX功能扩展包</td>
      </tr>
      <tr>
          <td><code>.cls</code></td>
          <td>文档类</td>
          <td>文档类型定义</td>
      </tr>
      <tr>
          <td><code>.bib</code></td>
          <td>参考文献</td>
          <td>BibTeX数据库文件</td>
      </tr>
  </tbody>
</table>
<h3 id="输出文件类型">
  <a class="anchor inpage" href="#%e8%be%93%e5%87%ba%e6%96%87%e4%bb%b6%e7%b1%bb%e5%9e%8b">###</a>输出文件类型</h3>
<table>
  <thead>
      <tr>
          <th>扩展名</th>
          <th>生成工具</th>
          <th>说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>.dvi</code></td>
          <td>tex/latex</td>
          <td>设备无关文件</td>
      </tr>
      <tr>
          <td><code>.pdf</code></td>
          <td>pdflatex/xelatex/lualatex</td>
          <td>便携文档格式</td>
      </tr>
      <tr>
          <td><code>.xdv</code></td>
          <td>xetex</td>
          <td>扩展DVI格式</td>
      </tr>
      <tr>
          <td><code>.aux</code></td>
          <td>所有引擎</td>
          <td>辅助信息文件</td>
      </tr>
      <tr>
          <td><code>.log</code></td>
          <td>所有引擎</td>
          <td>编译日志文件</td>
      </tr>
  </tbody>
</table>
<h2 id="工具链组件">
  <a class="anchor inpage" href="#%e5%b7%a5%e5%85%b7%e9%93%be%e7%bb%84%e4%bb%b6">##</a>工具链组件</h2>
<h3 id="核心工具">
  <a class="anchor inpage" href="#%e6%a0%b8%e5%bf%83%e5%b7%a5%e5%85%b7">###</a>核心工具</h3>
<table>
  <thead>
      <tr>
          <th>工具名称</th>
          <th>用途</th>
          <th>示例</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>texlua</strong></td>
          <td>Lua解释器</td>
          <td>运行TeX相关Lua脚本</td>
      </tr>
      <tr>
          <td><strong>kpsewhich</strong></td>
          <td>文件查找</td>
          <td>定位TeX文件位置</td>
      </tr>
      <tr>
          <td><strong>bibtex</strong></td>
          <td>参考文献处理</td>
          <td>生成参考文献列表</td>
      </tr>
      <tr>
          <td><strong>makeindex</strong></td>
          <td>索引生成</td>
          <td>创建文档索引</td>
      </tr>
  </tbody>
</table>
<h3 id="编译工具链">
  <a class="anchor inpage" href="#%e7%bc%96%e8%af%91%e5%b7%a5%e5%85%b7%e9%93%be">###</a>编译工具链</h3>
<pre class="mermaid">graph TD
    A[.tex源文件] --&gt; B{选择引擎}
    B --&gt; C[pdflatex]
    B --&gt; D[xelatex]
    B --&gt; E[lualatex]

    C --&gt; F[生成PDF]
    D --&gt; F
    E --&gt; F

    subgraph &#34;可选处理&#34;
        G[.bib文件] --&gt; H[bibtex]
        I[.idx文件] --&gt; J[makeindex]
        H --&gt; K[.bbl文件]
        J --&gt; L[.ind文件]
    end

    K --&gt; C
    L --&gt; C</pre><h2 id="选择指南">
  <a class="anchor inpage" href="#%e9%80%89%e6%8b%a9%e6%8c%87%e5%8d%97">##</a>选择指南</h2>
<h3 id="引擎选择建议">
  <a class="anchor inpage" href="#%e5%bc%95%e6%93%8e%e9%80%89%e6%8b%a9%e5%bb%ba%e8%ae%ae">###</a>引擎选择建议</h3>
<ol>
<li><strong>中文/多语言文档</strong>：<code>xelatex</code> 或 <code>lualatex</code></li>
<li><strong>传统英文文档</strong>：<code>pdflatex</code></li>
<li><strong>需要动态功能</strong>：<code>lualatex</code>（Lua脚本）</li>
<li><strong>底层开发</strong>：<code>tex</code> 或 <code>luatex</code></li>
</ol>
<h2 id="列举">
  <a class="anchor inpage" href="#%e5%88%97%e4%b8%be">##</a>列举</h2>
<h3 id="1">
  <a class="anchor inpage" href="#1">###</a><strong>1. <code>tex</code>（原始 TeX 引擎）</strong></h3>
<ul>
<li><strong>作用</strong>：Knuth 开发的原始 TeX 排版引擎，处理 <code>.tex</code> 文件并生成 <code>.dvi</code>（DeVice Independent）文件。</li>
<li><strong>特点</strong>：
<ul>
<li>仅支持传统的 TeX 命令，不支持现代字体（如 OpenType）。</li>
<li>主要用于历史兼容性或极简排版。</li>
</ul>
</li>
<li><strong>使用示例</strong>：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>tex mydocument.tex  <span style="color:#75715e"># 生成 mydocument.dvi</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="2">
  <a class="anchor inpage" href="#2">###</a><strong>2. <code>latex</code>（LaTeX 格式 + pdfTeX 引擎）</strong></h3>
<ul>
<li><strong>作用</strong>：使用 <code>pdftex</code> 引擎处理 LaTeX 文档（<code>.tex</code>），默认生成 PDF（也可生成 DVI）。</li>
<li><strong>特点</strong>：
<ul>
<li>基于 <code>pdftex</code>，支持 PDF 输出、微调排版和基本字体扩展。</li>
<li>但不支持 Unicode 和 OpenType 字体（需额外宏包如 <code>fontspec</code>）。</li>
</ul>
</li>
<li><strong>使用示例</strong>：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>latex mydocument.tex  <span style="color:#75715e"># 生成 mydocument.dvi</span>
</span></span><span style="display:flex;"><span>pdflatex mydocument.tex  <span style="color:#75715e"># 生成 mydocument.pdf</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="3">
  <a class="anchor inpage" href="#3">###</a><strong>3. <code>xetex</code>（XeTeX 引擎，支持 Unicode 和系统字体）</strong></h3>
<ul>
<li><strong>作用</strong>：TeX 引擎，原生支持 Unicode 和系统字体（如 <code>.ttf</code>/<code>.otf</code>）。</li>
<li><strong>特点</strong>：
<ul>
<li>直接调用系统字体，无需额外配置。</li>
<li>适用于多语言排版（如中文、阿拉伯语）。</li>
<li>输出格式为 <code>.xdv</code>（扩展 DVI），通常转换为 PDF。</li>
</ul>
</li>
<li><strong>使用示例</strong>：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>xetex mydocument.tex  <span style="color:#75715e"># 生成 mydocument.xdv（通常自动转 PDF）</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="4">
  <a class="anchor inpage" href="#4">###</a><strong>4. <code>xelatex</code>（LaTeX + XeTeX 引擎）</strong></h3>
<ul>
<li><strong>作用</strong>：<code>latex</code> 的增强版，使用 <code>xetex</code> 引擎处理 LaTeX 文档，支持现代字体。</li>
<li><strong>特点</strong>：
<ul>
<li>支持 <code>fontspec</code> 宏包，可轻松使用系统字体。</li>
<li>适合中文排版（如配合 <code>ctex</code> 宏包）。</li>
</ul>
</li>
<li><strong>使用示例</strong>：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>xelatex mydocument.tex  <span style="color:#75715e"># 直接生成 PDF</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="5">
  <a class="anchor inpage" href="#5">###</a><strong>5. <code>luatex</code>（LuaTeX 引擎，支持 Lua 脚本）</strong></h3>
<ul>
<li><strong>作用</strong>：扩展的 TeX 引擎，内置 Lua 解释器，允许动态脚本控制排版。</li>
<li><strong>特点</strong>：
<ul>
<li>支持 Unicode 和 OpenType 字体（类似 XeTeX）。</li>
<li>可通过 <code>\directlua{}</code> 嵌入 Lua 代码，实现高级自动化。</li>
<li>默认生成 PDF。</li>
</ul>
</li>
<li><strong>使用示例</strong>：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>luatex mydocument.tex  <span style="color:#75715e"># 生成 PDF</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="6">
  <a class="anchor inpage" href="#6">###</a><strong>6. <code>lualatex</code>（LaTeX + LuaTeX 引擎）</strong></h3>
<ul>
<li><strong>作用</strong>：<code>latex</code> 的现代替代品，使用 <code>luatex</code> 引擎，结合 LaTeX 和 Lua 扩展。</li>
<li><strong>特点</strong>：
<ul>
<li>支持 <code>fontspec</code> 和 Lua 脚本，灵活性极高。</li>
<li>适合复杂排版（如自动生成内容、动态调整格式）。</li>
</ul>
</li>
<li><strong>使用示例</strong>：
<details open>
    <summary>sh</summary><pre
        class="chroma codeblock"
      ><code class="language-sh" data-lang="sh"
          ><span style="display:flex;"><span>lualatex mydocument.tex  <span style="color:#75715e"># 生成 PDF</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script></li>
</ul>
<h3 id="总结对比">
  <a class="anchor inpage" href="#%e6%80%bb%e7%bb%93%e5%af%b9%e6%af%94">###</a><strong>总结对比</strong></h3>
<table>
  <thead>
      <tr>
          <th>命令</th>
          <th>引擎</th>
          <th>输出格式</th>
          <th>Unicode 支持</th>
          <th>OpenType 支持</th>
          <th>Lua 支持</th>
          <th>典型用途</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>tex</code></td>
          <td>TeX</td>
          <td>DVI</td>
          <td>❌</td>
          <td>❌</td>
          <td>❌</td>
          <td>原始 TeX 排版</td>
      </tr>
      <tr>
          <td><code>latex</code></td>
          <td>pdfTeX</td>
          <td>DVI/PDF</td>
          <td>❌</td>
          <td>❌</td>
          <td>❌</td>
          <td>传统 LaTeX 文档</td>
      </tr>
      <tr>
          <td><code>pdflatex</code></td>
          <td>pdfTeX</td>
          <td>PDF</td>
          <td>❌</td>
          <td>❌</td>
          <td>❌</td>
          <td>直接生成 PDF</td>
      </tr>
      <tr>
          <td><code>xetex</code></td>
          <td>XeTeX</td>
          <td>XDV/PDF</td>
          <td>✔️</td>
          <td>✔️</td>
          <td>❌</td>
          <td>多语言排版（系统字体）</td>
      </tr>
      <tr>
          <td><code>xelatex</code></td>
          <td>XeTeX</td>
          <td>PDF</td>
          <td>✔️</td>
          <td>✔️</td>
          <td>❌</td>
          <td>现代 LaTeX（中文友好）</td>
      </tr>
      <tr>
          <td><code>luatex</code></td>
          <td>LuaTeX</td>
          <td>PDF</td>
          <td>✔️</td>
          <td>✔️</td>
          <td>✔️</td>
          <td>动态脚本控制排版</td>
      </tr>
      <tr>
          <td><code>lualatex</code></td>
          <td>LuaTeX</td>
          <td>PDF</td>
          <td>✔️</td>
          <td>✔️</td>
          <td>✔️</td>
          <td>高级 LaTeX 自动化</td>
      </tr>
  </tbody>
</table>
]]></content:encoded></item><item><title>Latex Tricks</title><link>https://hiraethecho.github.io/docs/software/latex-trick/</link><pubDate>Sun, 04 May 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/software/latex-trick/</guid><description>&lt;h1 id="latex-tricks"&gt;
&lt;a class="anchor inpage" href="#latex-tricks"&gt;#&lt;/a&gt;Latex tricks&lt;/h1&gt;
&lt;h2 id="note"&gt;
&lt;a class="anchor inpage" href="#note"&gt;##&lt;/a&gt;note&lt;/h2&gt;
&lt;h2 id="comment"&gt;
&lt;a class="anchor inpage" href="#comment"&gt;##&lt;/a&gt;comment&lt;/h2&gt;
&lt;p&gt;use following to comment mulilines:&lt;/p&gt;
&lt;details open&gt;
&lt;summary&gt;tex&lt;/summary&gt;&lt;pre
class="chroma codeblock"
&gt;&lt;code class="language-tex" data-lang="tex"
&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\iffalse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;comments
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;another line
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
&gt;&lt;button onclick="copyCode(this)" class="copybtn"&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;
&lt;script&gt;
function copyCode(btn) {
const code = btn.previousElementSibling.textContent.trim();
navigator.clipboard.writeText(code).then(() =&gt; {
btn.innerText = "copied";
setTimeout(() =&gt; (btn.innerText = "copy"), 2000);
});
}
&lt;/script&gt;&lt;details open&gt;
&lt;summary&gt;tex&lt;/summary&gt;&lt;pre
class="chroma codeblock"
&gt;&lt;code class="language-tex" data-lang="tex"
&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\newcommand&lt;/span&gt;{&lt;span style="color:#66d9ef"&gt;\chen&lt;/span&gt;}[1]{{&lt;span style="color:#66d9ef"&gt;\textcolor&lt;/span&gt;{red}{[Chen: #1]}}}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\newcommand&lt;/span&gt;{&lt;span style="color:#66d9ef"&gt;\liu&lt;/span&gt;}[1]{{&lt;span style="color:#66d9ef"&gt;\textcolor&lt;/span&gt;{magenta}{[Liu: #1]}}}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\newcommand&lt;/span&gt;{&lt;span style="color:#66d9ef"&gt;\wang&lt;/span&gt;}[1]{{&lt;span style="color:#66d9ef"&gt;\textcolor&lt;/span&gt;{blue}{[Wang: #1]}}}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\begin&lt;/span&gt;{document}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\liu&lt;/span&gt;{test}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\chen&lt;/span&gt;{test}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\wang&lt;/span&gt;{test}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;\end&lt;/span&gt;{document}&lt;/span&gt;&lt;/span&gt;&lt;/code
&gt;&lt;button onclick="copyCode(this)" class="copybtn"&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;
&lt;script&gt;
function copyCode(btn) {
const code = btn.previousElementSibling.textContent.trim();
navigator.clipboard.writeText(code).then(() =&gt; {
btn.innerText = "copied";
setTimeout(() =&gt; (btn.innerText = "copy"), 2000);
});
}
&lt;/script&gt;&lt;h2 id="diff"&gt;
&lt;a class="anchor inpage" href="#diff"&gt;##&lt;/a&gt;diff&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;latexdiff&lt;/code&gt; to diff in pdf. tldr:&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="latex-tricks">
  <a class="anchor inpage" href="#latex-tricks">#</a>Latex tricks</h1>
<h2 id="note">
  <a class="anchor inpage" href="#note">##</a>note</h2>
<h2 id="comment">
  <a class="anchor inpage" href="#comment">##</a>comment</h2>
<p>use following to comment mulilines:</p>
<details open>
    <summary>tex</summary><pre
        class="chroma codeblock"
      ><code class="language-tex" data-lang="tex"
          ><span style="display:flex;"><span><span style="color:#66d9ef">\iffalse</span>
</span></span><span style="display:flex;"><span>comments
</span></span><span style="display:flex;"><span>another line
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\fi</span></span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><details open>
    <summary>tex</summary><pre
        class="chroma codeblock"
      ><code class="language-tex" data-lang="tex"
          ><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\newcommand</span>{<span style="color:#66d9ef">\chen</span>}[1]{{<span style="color:#66d9ef">\textcolor</span>{red}{[Chen: #1]}}}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\newcommand</span>{<span style="color:#66d9ef">\liu</span>}[1]{{<span style="color:#66d9ef">\textcolor</span>{magenta}{[Liu: #1]}}}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\newcommand</span>{<span style="color:#66d9ef">\wang</span>}[1]{{<span style="color:#66d9ef">\textcolor</span>{blue}{[Wang: #1]}}}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\begin</span>{document}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\liu</span>{test}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\chen</span>{test}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\wang</span>{test}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\end</span>{document}</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><h2 id="diff">
  <a class="anchor inpage" href="#diff">##</a>diff</h2>
<p><code>latexdiff</code> to diff in pdf. tldr:</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">  Determine differences between two LaTeX files.
  More information: &lt;https://ctan.org/pkg/latexdiff&gt;.

  Determine changes between different versions of a LaTeX file (the resulting LaTeX file can be compiled to show differences underlined):

      latexdiff old.tex new.tex &gt; diff.tex

  Determine changes between different versions of a LaTeX file by highlighting differences in boldface:

      latexdiff --type=BOLD old.tex new.tex &gt; diff.tex

  Determine changes between different versions of a LaTeX file, and display minor changes in equations with both added and deleted graphics:

      latexdiff --math-markup=fine --graphics-markup=both old.tex new.tex &gt; diff.tex</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p><code>git-latexdiff</code> compare pdf in git history</p>
<p>Important options:</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">Usage: git latexdiff [options] OLD [NEW]
OLD and NEW are Git revision identifiers. NEW defaults to HEAD.
If &#34;--&#34; is used for NEW, then diff against the working directory.
    --latex               run latex instead of pdflatex
    --xelatex             run xelatex instead of pdflatex
    --lualatex            run lualatex instead of pdflatex
    --main &lt;file&gt;         name of the main LaTeX, R Sweave,
    --tmpdirprefix        where temporary directory will be created (default: /tmp).
                            Relative path will use repository root as a base
    --ignore-latex-errors keep on going even if latex gives errors, so long as
                          a PDF file is produced</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>For example, use <code>git latexdiff HEAD -- --tmpdirprefix tmp --main main.tex</code> to check differences between worktree and last commit.</p>
<h2 id="picture">
  <a class="anchor inpage" href="#picture">##</a>picture</h2>
<p>If fix position:</p>
<details open>
    <summary>tex</summary><pre
        class="chroma codeblock"
      ><code class="language-tex" data-lang="tex"
          ><span style="display:flex;"><span><span style="color:#66d9ef">\usepackage</span>{float} <span style="color:#75715e">% 在导言区添加
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">\usepackage</span>{graphicx} <span style="color:#75715e">% 用于插入图片
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\begin</span>{figure}[H] <span style="color:#75715e">% 使用 [H] 固定位置
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">\centering</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">\includegraphics</span><span style="color:#a6e22e">[width=0.8\textwidth]</span>{example-image}
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">\caption</span>{固定位置的图片}
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">\label</span>{fig:example}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">\end</span>{figure}</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>centering:</p>
<details open>
    <summary>tex</summary><pre
        class="chroma codeblock"
      ><code class="language-tex" data-lang="tex"
          ><span style="display:flex;"><span><span style="color:#66d9ef">\usepackage</span>{graphicx} <span style="color:#75715e">% 在导言区添加
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">\centering</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">\includegraphics</span><span style="color:#a6e22e">[width=0.8\textwidth]</span>{example-image}
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">\par</span> <span style="color:#75715e">% 确保居中生效
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}</span></span></code
        ><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script>]]></content:encoded></item><item><title>Write latex with neovim</title><link>https://hiraethecho.github.io/docs/software/vimtex/</link><pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://hiraethecho.github.io/docs/software/vimtex/</guid><description>&lt;h1 id="write-latex-with-neovim"&gt;
&lt;a class="anchor inpage" href="#write-latex-with-neovim"&gt;#&lt;/a&gt;Write latex with neovim&lt;/h1&gt;
&lt;p&gt;\(\latex\)&lt;/p&gt;
&lt;h2 id="vimtex"&gt;
&lt;a class="anchor inpage" href="#vimtex"&gt;##&lt;/a&gt;vimtex&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;vimtex&lt;/code&gt;基本上是提供了全套的功能，包括&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;目录，标签等&lt;/li&gt;
&lt;li&gt;各种环境，&lt;code&gt;insert&lt;/code&gt;模式下的各种snippets，&lt;code&gt;normal&lt;/code&gt;模式下的文本对象和命令&lt;/li&gt;
&lt;li&gt;编译，报错&lt;/li&gt;
&lt;li&gt;正向搜索（从tex定位到pdf）和反向搜索（从pdf定位到tex）&lt;/li&gt;
&lt;li&gt;conceal （有点影响性能）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而且帮助文档非常详尽，维护积极，而且&lt;code&gt;vim&lt;/code&gt;上也能用&lt;/p&gt;</description><content:encoded><![CDATA[<h1 id="write-latex-with-neovim">
  <a class="anchor inpage" href="#write-latex-with-neovim">#</a>Write latex with neovim</h1>
<p>\(\latex\)</p>
<h2 id="vimtex">
  <a class="anchor inpage" href="#vimtex">##</a>vimtex</h2>
<p><code>vimtex</code>基本上是提供了全套的功能，包括</p>
<ul>
<li>目录，标签等</li>
<li>各种环境，<code>insert</code>模式下的各种snippets，<code>normal</code>模式下的文本对象和命令</li>
<li>编译，报错</li>
<li>正向搜索（从tex定位到pdf）和反向搜索（从pdf定位到tex）</li>
<li>conceal （有点影响性能）</li>
</ul>
<p>而且帮助文档非常详尽，维护积极，而且<code>vim</code>上也能用</p>
<p>缺点几乎没有，除了对与某些信奉unix哲学<em>做一件事并做到最好</em>的人（比如说我）来说有些臃肿。另一个是预设置的快捷键很多，但不一定符合所有人习惯（又是我）。</p>
<h2 id="latex">
  <a class="anchor inpage" href="#latex">##</a>latex</h2>
<p>首先需要一个<code>latex</code>发行版，比如<code>texlive</code>或者<code>miktex</code>。实际编译过程很复杂，为了生成目录和参考文献需要多次编译。但是<code>latexmk</code>可以帮助完成复杂的顺序。最重要的是，<code>latexmk</code>可以监听文本变化，自动重新编译，以此实现“实时”预览。</p>
<blockquote class="alert alert-tip">
      <p class="alert-heading">实际上不是实时。会在每次保存文件时编译，所以<code>insert</code>模式下敲字时并不会更新。另一方面还取决于编译速度。</p></blockquote><p>在<code>archlinux</code>上，可以安装整个<code>texlive</code>，如果觉得太臃肿也可以安装其中部分包，例如我只安装了</p>
<details open>
    <summary>TEXT</summary><pre
        class="codeblock"
      ><code class="language-" data-lang="">texlive-bibtexextra
texlive-binextra
texlive-langchinese
texlive-latexextra
texlive-mathscience
texlive-pstricks
texlive-xetex</code><button onclick="copyCode(this)" class="copybtn">copy</button></pre></details>

  <script>
    function copyCode(btn) {
      const code = btn.previousElementSibling.textContent.trim();
      navigator.clipboard.writeText(code).then(() => {
        btn.innerText = "copied";
        setTimeout(() => (btn.innerText = "copy"), 2000);
      });
    }
  </script><p>除此之外还有<code>tectonic</code>等可用，但是难以实现实时预览。</p>
<blockquote class="alert alert-note">
      <p class="alert-heading">可以用texpresso</p></blockquote><h2 id="lsp">
  <a class="anchor inpage" href="#lsp">##</a>lsp</h2>
<p><code>texlab</code></p>
<p><code>tex-fmt</code></p>
<h2 id="compile">
  <a class="anchor inpage" href="#compile">##</a>compile</h2>
<p>原则上可以直接用命令行编译。但是既然在<code>neovim</code>里，可以用插件封装的命令。</p>
<p>用<code>vimtex</code>或<code>texlab</code></p>
<h2 id="inverse-and-reverse-search">
  <a class="anchor inpage" href="#inverse-and-reverse-search">##</a>inverse and reverse search</h2>
<h2 id="snippets">
  <a class="anchor inpage" href="#snippets">##</a>snippets</h2>
<h3 id="mathzone">
  <a class="anchor inpage" href="#mathzone">###</a>mathzone</h3>
<p>为了在文本和数学公式环境中使用不同的片段，例如<code>CC</code>只在数学公式中自动展开为<code>\mathbb{C}</code>，需要对能检测数学环境。</p>
<p>最简单的方法是调用<code>vimtex</code>的功能。</p>
<p>用<code>python</code>检测。</p>
<p>用treesitter检测。</p>
<h3 id="engine">
  <a class="anchor inpage" href="#engine">###</a>engine</h3>
<p>UltiSnip</p>
<p>LuaSnip</p>
]]></content:encoded></item></channel></rss>