<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      一份簡短的LaTeX相關術語的介紹

      本文主要介紹\(\LaTeX{}\)的相關術語以及在文件編譯過程中發(fā)生了什么。


      新人在剛接觸和使用\(\LaTeX{}\)時可能會有以下一些概念的困擾:

      • 什么是\(\TeX\)/\(\LaTeX\),它們之間有什么關系?
      • pdfTeX、LuaTeX、XeTeX這些是什么?
      • pdflatex、lualatex、xelatex這些是什么?
      • CTEX套裝、TeX Live、MacTeX、MiKTeX這些是什么?
      • tex文件所在目錄里面一大堆不同后綴名的文件都是什么東西?
      • 如何通過一堆代碼就能生成優(yōu)雅的pdf文件,底層究竟發(fā)生了什么?

      了解\(\LaTeX{}\)在編譯過程中底層發(fā)生了哪些事情對于我們遇到問題時快速定位原因是大有幫助的,這增強了我們使用\(\LaTeX{}\)的底氣,使我們能夠心定神閑地編寫tex文件,遇到問題時心中不慌。同時,這也使我們更深入地理解\(\LaTeX{}\)

      本文主要介紹\(\LaTeX{}\)的相關術語以及在文件編譯過程中發(fā)生了什么。


      \(\TeX\)\(\LaTeX{}\)

      \(\TeX{}\)

      TeX 的核心程序(即“TeX 引擎”)最初由高德納(Donald Knuth)在 1978-1982 年間用Pascal 語言編寫。TeX 引擎的執(zhí)行邏輯是通過 Pascal 代碼描述,再經(jīng) Pascal 編譯器轉換為匯編語言,最終匯編為機器碼運行。其核心功能(如字符處理、排版算法、文件 IO)都對應底層匯編級的內(nèi)存操作、分支跳轉和系統(tǒng)調(diào)用。

      當你啟動一個純粹的、未經(jīng)任何初始化的 TeX 引擎時,它只認識大約 300 個原始指令,比如 \def, \hbox, \vskip, \advance等。在此時,這些原始指令本身不是宏。它們是引擎的內(nèi)置功能,是原子操作,無法被展開或分解。可以把它們想象成 CPU 的硬件指令。

      純粹的 TeX 太難用了。因此,每次你運行 tex 或 latex 命令時,引擎做的第一件事不是讀你的 .tex 文件,而是先加載一個“格式文件”。

      這個格式文件是一個宏定義的集合,它是由 TeX 原始指令預先編寫好的、并被引擎預編譯成了一種高效加載的二進制形式。

      加載格式文件的過程,就像是給一個只有基本指令的計算機安裝了一個操作系統(tǒng)和標準庫。

      高德納本人還編寫了一個簡單的 plain TEX 格式,沒有定義諸如 \documentclass\section 等等命令。

      \(\LaTeX{}\)

      \(\LaTeX{}\) 也是一種格式,建立在 Plain TeX 之上的、一個更龐大、更結構化、更易用的宏包集合。它定義了像 \documentclass, \begin{document}, \section 這樣的高級命令。

      所有這些 LaTeX 命令,最終都會被一步步展開,轉換成 Plain TeX 的宏,然后再展開成 TeX 的原始指令,最后由引擎執(zhí)行。

      TeX、Plain TeX、LaTeX 的關系

      三者本質是不同抽象層次的排版工具,從底層技術看,三者的關系類似“匯編 → C 標準庫 → 高級語言”,宏的展開過程類似編譯中的預處理和代碼生成,最終由 TeX 引擎(二進制程序)執(zhí)行底層操作:

      1. TeX:最底層的“排版引擎”
        它是一個編程語言解釋器,自帶一套極簡的排版原語(如字符輸出、行距控制、頁面分割等)和語法規(guī)則(變量、條件判斷、循環(huán)、宏定義等)。但直接用 TeX 原語寫文檔非常繁瑣(類似用匯編語言寫程序)。

      2. Plain TeX:TeX 的“標準宏包”
        為簡化使用,高德納在 TeX 基礎上定義了一套預定義宏(macro),封裝了常用功能(如段落格式、標題、列表等),形成了“Plain TeX 格式”。
        它相當于給 TeX 內(nèi)核加了一層“標準庫”,類似 C 語言的標準庫(stdio.h 等)對匯編的封裝,讓用戶無需重復編寫基礎功能。

      3. LaTeX:基于 TeX 的“高級文檔排版系統(tǒng)”
        LaTeX 由 Leslie Lamport 設計,是更高層的“應用框架”,是在 Plain TeX 之上進一步封裝的宏集合,提供了更高層次的語義(如 \section\begin{document} 等),專注于“文檔結構”而非底層排版細節(jié)。
        它的定位類似高級編程語言,而 TeX 內(nèi)核相當于它的“解釋器/虛擬機”,Plain TeX 則是其依賴的底層庫之一。


      格式

      對于TeX系統(tǒng),其在編譯.tex源文件前,會預加載一個格式文件,其中包含各種提前定義好的宏,以被用戶在源文件中調(diào)用。

      格式文件(.fmt) 是預編譯的宏集合與狀態(tài)信息的二進制文件,用于加速 TeX 引擎的啟動和執(zhí)行。它們本質是將常用格式(宏)(如 Plain TeX、LaTeX 等的核心定義)預先解析、展開并存儲,避免每次運行時重復處理,類似“預編譯的標準庫”。

      常見的格式文件如下:

      基礎格式文件

      • plain.fmt
        對應 Plain TeX 格式的格式文件,包含高德納定義的基礎宏集合(如段落、標題、列表等基礎排版功能)。

      • latex.fmt
        對應 LaTeX 格式的基礎格式文件,是由Leslie Lamport設計的格式,屬于Plain TeX的套娃,實現(xiàn)了很多強大的宏。包含 LaTeX 核心宏(如 \documentclass\section、文檔環(huán)境等)。

      擴展格式文件

      • pdflatex.fmt
        對應 PDFLaTeX 格式的格式文件,是 LaTeX 格式的變體,直接生成 PDF 而非 DVI(需配合 pdfTeX 引擎),格式中包含 PDF 相關的宏定義(如圖片嵌入、字體映射等)。

      • xelatex.fmt
        對應 XeLaTeX 格式的格式文件,基于 XeTeX 引擎,支持 Unicode 和系統(tǒng)原生字體,格式中包含 Unicode 處理、OpenType 字體支持等宏。

      • lualatex.fmt
        對應 LuaLaTeX 格式的格式文件,基于 LuaTeX 引擎,集成 Lua 腳本功能,格式中包含 Lua 交互、高級字體處理等宏。

      • amstex.fmt
        對應 AMS-TeX 格式的格式文件,專注于數(shù)學公式排版,提供更豐富的數(shù)學宏(如復雜方程、定理環(huán)境等)。


      引擎

      DFTeX、LuaTeX、XeTeX是由TeX衍生的排版引擎,是用于編譯源代碼并生成文檔的程序,有時也稱為編譯器

      高納德將TeX的排版引擎設計得如此開放且易擴展,以至于出現(xiàn)了一些由全球社區(qū)在此基礎上編寫的新排版引擎,它們雖然拓展了若干高級特性,但仍嚴格兼容TeX引擎本身的嚴謹性。

      pdfTeX

      pdfTeX 是 TeX 引擎的一個重要擴展版本。您可以把它理解為 TeX 程序的一個“升級版”,它最革命性的功能是能夠直接輸出 PDF 文件,而不僅僅是傳統(tǒng)的 DVI 文件。

      LuaTeX

      LuaTeX于pdfTeX的基礎上開發(fā)而來,主要特性是內(nèi)置Lua腳本引擎,理論上能利用Lua獲得更靈活的擴展性,但其流行性及性能均不如XeTeX。

      XeTeX

      由Jonathan Kew開發(fā),在TeX基礎上增加了對unicode的支持,同時增加若干高級字體渲染技術、高級數(shù)學排版功能,其預載的為Plain TeX格式。XeTeX生成的目標文件為.xdv(extend DVI),其可由dvipdf或其他工具轉換為PDF文件。


      編譯命令

      編譯命令 是實際調(diào)用的、結合了引擎和格式的命令(可執(zhí)行程序)。如 \(\texttt{xelatex}\) 命令是結合 XeTeX引擎和 XeLaTeX 格式的一個編譯命令(類似于選擇編譯器(XeTeX引擎)和鏈接庫函數(shù)(選擇XeLaTeX 格式)的過程)。

      常見的引擎、格式和編譯命令的關系總結于下表。
      其中[xxx]\(\LaTeX{}\) 格式 表示與對應命令相匹配的格式,比如 \(\texttt{latex}\) 命令對應LaTeX 格式,\(\texttt{pdflatex}\) 命令對應PDFLaTeX格式。

      文檔格式 plain \(\TeX{}\) 格式 [xxx]\(\LaTeX{}\) 格式
      TeX 引擎 \(\textrm{DVI}\) \(\texttt{tex}\) N/A
      pdfTeX 引擎 \(\textrm{DVI}\) \(\texttt{etex}\) \(\texttt{latex}\)
      \(\textrm{PDF}\) \(\texttt{pdftex}\) \(\texttt{pdflatex}\)
      XeTeX 引擎 \(\textrm{PDF}\) \(\texttt{xetex}\) \(\texttt{xelatex}\)
      LuaTeX 引擎 \(\textrm{PDF}\) \(\texttt{luatex}\) \(\texttt{lualatex}\)

      在此介紹一下幾個編譯命令的基本特點:

      編譯命令 解釋
      \(\texttt{latex}\) 雖然名為 \(\texttt{latex}\) 命令,底層調(diào)用的引擎其實是 pdfTeX。 該命令生成 \(\texttt{dvi}\)(Device Independent)格式的文檔, 用 \(\texttt{dvipdfmx}\) 命令可以將其轉為 \(\texttt{pdf}\)
      \(\texttt{pdflatex}\) 底層調(diào)用的引擎也是 pdfTeX,可以直接生成 \(\texttt{pdf}\) 格式的文檔。
      \(\texttt{xelatex}\) 底層調(diào)用的引擎是 XeTeX,支持 UTF-8 編碼和對 TrueType/OpenType 字體的調(diào)用。 當前較為方便的中文排版解決方案基于 \(\texttt{xelatex}\)
      \(\texttt{lualatex}\) 底層調(diào)用的引擎是 LuaTeX。這個引擎在pdfTeX 引擎基礎上發(fā)展而來,除了支持 UTF-8 編碼和對 TrueType/OpenType 字體的調(diào)用外,還支持通過 Lua 語言擴展 \(\TeX{}\) 的功能。 \(\texttt{lualatex}\) 編譯命令下的中文排版支持需要借助 luatexja宏包。

      LaTeX 發(fā)行版

      LaTeX 發(fā)行版(LaTeX Distribution)是一套預打包的 TeX/LaTeX 系統(tǒng)集合,包含了編譯文檔所需的所有核心組件(引擎、宏包、字體、工具等),目的是讓用戶無需手動零散安裝各種組件就能直接使用 LaTeX(類似于Linux的發(fā)行版)。

      簡單說,它類似 “軟件套件”—— 就像 “Office 套件” 包含 Word、Excel 等工具,LaTeX 發(fā)行版包含了排版所需的 “引擎、宏包、字體、編譯工具” 等一整套工具鏈。

      發(fā)行版的核心組成

      一個完整的 LaTeX 發(fā)行版通常包含:

      1. TeX 引擎:如 pdfTeX、XeTeX、LuaTeX 等,負責解析代碼并生成輸出文件(PDF 或 DVI);
      2. 基礎宏包與文檔類:如 LaTeX 核心宏包(latex.ltx)、標準文檔類(article.clsbook.cls)、常用擴展宏包(amsmathgraphicx 等);
      3. 字體文件:包括 TeX 原生字體(如 Computer Modern 系列)和現(xiàn)代字體(OpenType/TrueType 等,供 XeLaTeX/LuaLaTeX 使用);
      4. 輔助工具:如文獻管理工具(BibTeX、Biber)、索引生成工具(MakeIndex)、格式文件生成工具(iniTeX)等;
      5. 配置文件與搜索路徑:定義宏包、字體的存儲位置,確保引擎能正確找到所需文件。

      宏包就是別人通過編寫宏集造的輪子,直接拿來用就可以了。類似C的標準庫或者第三方庫。

      主流的 LaTeX 發(fā)行版

      不同發(fā)行版針對不同操作系統(tǒng)優(yōu)化,核心功能一致,但安裝和維護方式略有差異:

      1. TeX Live
        • 最主流、跨平臺(Windows、macOS、Linux)的發(fā)行版,由國際 TeX 用戶組(TUG)維護;
        • 每年更新一次,包含幾乎所有常用宏包和工具,兼容性極強;
        • 適合多數(shù)用戶,尤其是需要跨平臺一致性的場景(如團隊協(xié)作)。
      2. MiKTeX
        • 主要面向 Windows 系統(tǒng)(也支持 macOS/Linux),特點是 “按需安裝”—— 初始安裝體積小,使用時自動下載缺失的宏包;
        • 適合初學者或對磁盤空間敏感的用戶,但跨平臺兼容性略遜于 TeX Live。
      3. MacTeX
        • 基于 TeX Live 的 macOS 專用發(fā)行版,預裝了針對 macOS 優(yōu)化的組件(如 PDF 預覽工具 Skim、字體管理器等);
        • 是 macOS 用戶的首選,無需手動配置系統(tǒng)適配。
      4. CTeX 套裝
        • 針對中文用戶的 Windows 發(fā)行版,集成了中文支持宏包(如 CJK)和字體;
        • 逐漸被 TeX Live + 現(xiàn)代中文宏包(如 ctex)替代。

      為什么需要發(fā)行版?

      LaTeX 系統(tǒng)的組件極其龐大(宏包數(shù)千個,字體和工具繁多),手動收集、安裝和維護這些組件會非常繁瑣,且容易出現(xiàn)版本沖突(如宏包依賴不兼容)。發(fā)行版通過預打包和統(tǒng)一管理,解決了這些問題:

      • 確保所有組件版本匹配,減少 “編譯報錯”;
      • 提供統(tǒng)一的更新機制(如 TeX Live 的 tlmgr 工具);
      • 內(nèi)置中文、日文等多語言支持(現(xiàn)代發(fā)行版中已默認集成)。

      LaTeX 發(fā)行版是 “開箱即用” 的 TeX/LaTeX 工具集合,包含了編譯文檔所需的引擎、宏包、字體和工具。主流選擇是跨平臺的 TeX Live(適合多數(shù)用戶)和 macOS 專用的 MacTeX,Windows 用戶也可考慮 MiKTeX。安裝發(fā)行版后,即可通過 pdflatexxelatex 等命令編譯 LaTeX 文檔。


      編輯器

      所謂編輯器就是可以編輯和書寫latex源碼的程序軟件,比如Notepad(記事本)、NotePad3、Vim等。在這些簡單的編輯器中寫好代碼保存后,需要到命令行中輸入編譯命令進行編譯(熟練之后可以編寫批處理文件和Makefile文件到命令行編譯)。

      “四十歲后,不滯于物,草木竹石均可為劍。自此精修,漸進于無劍勝有劍之境。”——《神雕俠侶》獨孤求敗

      為了簡化書寫和編譯的復雜度,一些集成開發(fā)環(huán)境(IDE,Integrated Development Environment)被開發(fā)出用于幫助用戶提高效率。 在 LaTeX 領域,常見的 IDE 有 VS Code、TeXstudio、WinEdt、Texworks、TeXShop 等,它們集成了 LaTeX 代碼編輯、語法高亮、一鍵編譯、PDF 預覽等功能,方便用戶編寫和排版文檔。

      IDE是一種集成了代碼編輯、編譯、調(diào)試、項目管理等多種功能的軟件工具,旨在為開發(fā)者提供一個統(tǒng)一的工作環(huán)境,提高開發(fā)效率。

      較為常用的是VS Code和TeXstudio,這兩個都支持跨操作系統(tǒng),WinEdt主要搭配CTeX套裝在Windows環(huán)境下使用。

      個人建議WinEdt只搭配CTEX使用,原因有三個,其一,CTEX套裝默認集成了WinEdt編輯器。其二,WinEdt為商用軟件,需要付費,雖然免費版也能使用全部功能。其三,軟件閉源,更新緩慢。

      VS Code和Texstudio看個人習慣,沒使用過VS Code的推薦使用Texstudio,新手推薦使用Texstudio,原因是它職責單一,只用來編寫tex文件,并且個人感覺Debug比VS Code好用。并且Texstudio是用QT框架編寫的開源軟件,如果有功能建議可以去其Github主頁提issues。

      \(\LaTeX{}\) 用到的文件一覽

      除了源代碼文件 \(\texttt{.tex}\) 以外,使用 \(\LaTeX{}\) 時還可能接觸到各種格式的文件。本節(jié)簡單介紹一下經(jīng)常見到的文件。

      每個宏包和文檔類都是帶特定擴展名的文件,除此之外也有一些文件出現(xiàn)于 \(\LaTeX{}\) 模板中:

      文件擴展名 作用
      \(\texttt{.sty}\) 宏包文件。宏包的名稱與文件名一致。
      \(\texttt{.cls}\) 文檔類文件。文檔類名稱與文件名一致。
      \(\texttt{.bib}\) 參考文獻數(shù)據(jù)庫文件。
      \(\texttt{.bst}\) 用到的參考文獻格式模板。

      在編譯過程中可能會生成相當多的輔助文件和日志。一些功能如交叉引用、參考文獻、目錄、索引等,需要先通過編譯生成輔助文件,然后再次編譯時讀入輔助文件得到正確的結果,所以復雜的源代碼可能要編譯多次。

      中間文件 作用
      \(\texttt{.log}\) 排版引擎生成的日志文件,供排查錯誤使用。
      \(\texttt{.aux}\) 生成的主輔助文件,記錄交叉引用、目錄、參考文獻的引用等。
      \(\texttt{.toc}\) 生成的目錄記錄文件。
      \(\texttt{.lof}\) 生成的圖片目錄記錄文件。
      \(\texttt{.lot}\) 生成的表格目錄記錄文件。
      \(\texttt{.bbl}\) BibTeX生成的參考文獻記錄文件。
      \(\texttt{.blg}\) BibTeX生成的日志文件。
      \(\texttt{.idx}\) 生成的供 makeindex 處理的索引記錄文件。
      \(\texttt{.ind}\) makeindex 處理 \(\texttt{.idx}\) 生成的用于排版的格式化索引文件。
      \(\texttt{.ilg}\) makeindex 生成的日志文件。
      \(\texttt{.out}\) hyperref 宏包生成的 PDF 書簽記錄文件。

      編譯過程發(fā)生了什么

      xelatex編譯命令為例(其他編譯命令類似),結合一個包含參考文獻、圖表的最簡示例,詳細描述編譯流程,并說明中間文件的作用。

      最簡 LaTeX 示例代碼

      先定義一個包含文檔結構、圖表、參考文獻的示例文件 main.tex

      \documentclass{article}
      \usepackage{graphicx}  % 插入圖片
      \usepackage{caption}   % 圖表標題
      \usepackage{biblatex}  % 參考文獻管理
      \addbibresource{refs.bib}  % 關聯(lián)參考文獻庫
      
      \begin{document}
      \section{引言}
      這是一個示例文檔,包含圖\ref{fig:example}和參考文獻\cite{knuth1984tex}。
      
      \begin{figure}[h]
        \centering
        \includegraphics[width=0.5\textwidth]{example.png}  % 插入圖片
        \caption{示例圖片}
        \label{fig:example}
      \end{figure}
      
      \printbibliography  % 輸出參考文獻列表
      \end{document}
      

      配套文件:

      • refs.bib(參考文獻庫,包含一條條目);
      • example.png(圖片文件)。

      XeLaTeX 編譯全流程(分階段解析)

      XeLaTeX 編譯本質是 XeTeX 引擎加載 xelatex.fmt 格式文件,解析 .tex 源文件,經(jīng)宏展開、排版計算、調(diào)用外部工具(如 Biber),最終生成 PDF 的過程。核心步驟如下:

      階段 1:初始化與格式文件加載(xelatex main.tex 啟動時)

      1. XeTeX 引擎啟動

        XeLaTeX 是 XeTeX 引擎的 “前端命令”,執(zhí)行 xelatex main.tex 時,實際啟動的是 XeTeX 二進制程序(底層為匯編指令實現(xiàn)的機器碼,如內(nèi)存分配、文件 IO 等系統(tǒng)調(diào)用)。

      2. 加載 xelatex.fmt 格式文件

        • xelatex.fmt 是預編譯的二進制格式文件(類似 “預編譯的宏庫”),包含 LaTeX 核心宏定義(如 \documentclass\section)、XeTeX 特有的 Unicode 和字體處理宏(如 fontspec 基礎定義)。
        • 加載目的:避免每次編譯重新解析 LaTeX 核心宏,加速啟動(類似 C 程序加載預編譯的標準庫 .so/.dll)。

      階段 2:解析 .tex 源文件,宏展開與結構分析

      XeTeX 引擎逐行讀取 main.tex,對指令進行宏展開(文本替換)和語義分析(識別文檔結構、圖表、引用等)。

      1. 預處理與宏展開
        • 遇到 \documentclass{article}:展開為 article.cls 文檔類的宏定義(如頁面大小、字體默認設置等),本質是一系列底層 TeX 原語(如 \textwidth=345pt 等長度設置)。
        • 遇到 \usepackage{graphicx}:加載 graphicx.sty 宏包,展開為圖片處理的宏(如 \includegraphics 對應處理圖片路徑、縮放的底層指令)。
        • 遇到 \begin{document}:標志文檔內(nèi)容開始,觸發(fā)頁面初始化(如頁眉頁腳、頁邊距設置)。
      2. 處理交叉引用與標簽
        • 遇到 \label{fig:example}:將標簽 fig:example 與當前圖號(如 “1”)關聯(lián),寫入 .aux 輔助文件(文本格式),供后續(xù)編譯解析引用(如 \ref{fig:example} 需要讀取 .aux 中的圖號)。
        • 此時 \ref{fig:example} 暫時無法確定具體數(shù)值(因標簽定義和引用可能跨頁),會先記錄為占位符(如 ??)。
      3. 處理圖片
        • \includegraphics{example.png}:調(diào)用 XeTeX 內(nèi)置的圖片處理模塊(底層為圖像處理庫的匯編指令,如解析 PNG 格式、計算像素與 TeX 單位的轉換),記錄圖片在 PDF 中的位置和尺寸,但不直接嵌入(需后續(xù)步驟生成時寫入)。

      階段 3:第一次編譯生成中間文件(未完成引用和參考文獻)

      XeTeX 引擎完成源文件解析后,進行排版計算(如行間距、分頁),生成 .xdv 中間文件 和其他輔助文件:

      1. .xdv 文件
        • 全稱 “eXtended Device Independent”,是 XeTeX 特有的中間格式,包含排版后的文本、字體、圖形位置信息(但未包含實際圖片和完整字體數(shù)據(jù)),類似 “排版指令清單”。
      2. 其他輔助文件
        • .aux:記錄交叉引用(標簽與編號的映射,如 \newlabel{fig:example}{{1}{1}} 表示圖 1 在第 1 頁)、參考文獻引用信息(如 \abx@aux@cite{knuth1984tex})。
        • .log:編譯日志,包含宏展開過程、錯誤信息(如宏未定義、圖片缺失)、加載的宏包和字體列表(用于調(diào)試)。
        • .out:部分圖表位置信息(如浮動體位置計算結果)。

      階段 4:調(diào)用參考文獻工具(Biber)處理引用

      由于 LaTeX 無法直接解析 .bib 文件,需通過外部工具生成可識別的參考文獻列表:

      1. 執(zhí)行 biber main
        • Biber 讀取 .aux 中記錄的引用條目(如 knuth1984tex),解析 refs.bib 中的 BibTeX 格式數(shù)據(jù)(如 @book{knuth1984tex, ...}),生成 .bbl 文件(LaTeX 可識別的參考文獻列表宏代碼)。
        • 例如,refs.bib 中的條目會被轉換為 \bibitembiblatex 專用的宏定義,包含作者、標題、出版信息等。

      階段 5:第二次 XeLaTeX 編譯(解決引用和參考文獻)

      再次執(zhí)行 xelatex main.tex,目的是讀取第一次編譯生成的 .aux(交叉引用)和 .bbl(參考文獻),填充占位符:

      1. 解析 .aux 中的交叉引用
        • \ref{fig:example} 讀取 .aux 中的 \newlabel 指令,替換為實際編號 “1”。
      2. 插入?yún)⒖嘉墨I列表
        • \printbibliography 展開為 .bbl 中的宏代碼,將參考文獻條目排版到文檔末尾。
      3. 更新 .aux 和生成最終 .xdv
        • 此時交叉引用和參考文獻已確定,.aux 會被更新(確保無遺漏),生成包含完整內(nèi)容的 .xdv 文件。

      階段 6:轉換 .xdv 為 PDF(最終輸出)

      XeTeX 引擎調(diào)用內(nèi)置的 PDF 生成模塊,將 .xdv 轉換為 PDF:

      1. 嵌入字體
        • XeTeX 基于 xelatex.fmt 中的字體配置,調(diào)用系統(tǒng)字體庫(如計算機中的 Times New Roman 或中文字體),將文檔中使用的字體輪廓數(shù)據(jù)(TrueType/OpenType)嵌入 PDF(避免字體缺失導致亂碼)。
      2. 嵌入圖片
        • 讀取 example.png 的二進制數(shù)據(jù),按 .xdv 中記錄的位置和尺寸嵌入 PDF,底層通過圖像壓縮算法(如 PNG 解碼)處理像素數(shù)據(jù)。
      3. 生成 PDF 結構
        • 構建 PDF 的頁面樹、目錄(若有)、交叉引用表(點擊引用跳轉)等結構,最終生成 main.pdf

      為什么需要多輪編譯?

      核心原因是 LaTeX 是 “單遍掃描” 引擎,無法在一次編譯中同時確定 “引用” 和 “被引用對象” 的位置 / 編號:

      • 第一次編譯:識別 “被引用對象”(如圖、文獻條目),記錄到 .aux,但無法知道它們最終的編號 / 頁碼。
      • 第二次編譯(或調(diào)用 BibTeX/Biber 后):讀取 .aux.bbl 中的記錄,反向填充 “引用” 的內(nèi)容。
      • 若內(nèi)容長度導致頁碼變化(如參考文獻列表增加新頁),需額外編譯一次同步頁碼引用。

      調(diào)用參考文獻工具處理引用的參考文獻工具通常有兩種:BibTeX和Biber。

      工具 編譯流程(標準輪次) 核心中間文件變化
      BibTeX xelatex → xelatex → bibtex → xelatex .aux(記錄引用)→ .bbl(BibTeX 生成)→ 最終 PDF
      Biber xelatex → biber → xelatex .aux(記錄引用)→ .bbl(Biber 生成)→ 最終 PDF

      注:Biber 流程通常比 BibTeX 少一輪初始 xelatex,因為 biblatex.aux 的處理更高效。

      使用 BibTeX 時,標準流程需要 “xelatex 兩次 → bibtex → xelatex 一次(或多次)”,這是因為傳統(tǒng) BibTeX 對 .aux 的依賴更嚴格,需要兩次初始編譯確保標簽信息完整。而現(xiàn)代 Biber 配合 biblatex 可簡化流程,但本質仍是通過多輪編譯解決 “引用 - 被引用” 的依賴關系。

      實際使用中,無論哪種工具,最終目標都是確保交叉引用、頁碼、參考文獻列表完全同步,因此建議在復雜文檔中多編譯 1-2 次,避免遺漏。

      中間文件匯總及作用

      文件名 類型 作用
      main.aux 輔助文件 記錄交叉引用(標簽與編號)、參考文獻引用信息,供多輪編譯同步數(shù)據(jù)
      main.log 日志文件 記錄編譯過程(宏加載、錯誤信息、字體使用),用于調(diào)試
      main.xdv 中間格式 包含排版后的文本、圖形位置信息,是 XeTeX 特有的 “排版指令集”
      main.bbl 參考文獻 BibTeX/Biber 生成的 LaTeX 宏代碼,包含格式化后的參考文獻條目
      main.blg BibTeX/Biber 日志 記錄 BibTeX/Biber 處理參考文獻的過程(如條目解析、格式轉換)
      main.out 浮動體信息 記錄圖表等浮動體的位置計算結果,輔助排版優(yōu)化

      底層技術補充(匯編 / 編譯器視角)

      • XeTeX 引擎的本質:是用 C 語言編寫的程序(最終編譯為 x86-64/ARM 匯編指令),核心邏輯包括:
        • 詞法分析(識別 \section 等指令為 “宏” token);
        • 語法分析(解析宏的嵌套結構,如 \begin{figure}\end{figure} 的匹配);
        • 內(nèi)存管理(分配緩沖區(qū)存儲宏展開結果、排版數(shù)據(jù))。
      • 宏展開的底層:類似 C 預處理器的 #define 替換,但更復雜(支持參數(shù)、條件判斷),由 XeTeX 引擎中的 “宏處理器” 模塊通過字符串操作指令(匯編層面的 movcmp)實現(xiàn)。
      • PDF 生成:最終調(diào)用系統(tǒng)的文件寫入指令(如 write 系統(tǒng)調(diào)用,對應匯編的 sys_write),將二進制數(shù)據(jù)(字體、圖片、文本)按 PDF 規(guī)范組織成 main.pdf

      (PS:這樣的編譯器我們能寫出來嗎,怎么都是老外寫的?)


      參考文章

      1. 一份 (不太) 簡短的 LaTeX2ε 介紹
      2. 雜談: Tex 排版系統(tǒng)歷史及各引擎版本梳理
      3. LaTeX引擎、格式、宏包、發(fā)行版大梳理
      posted @ 2025-10-30 12:18  Invinc-Z  閱讀(214)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品少妇爆乳无码aⅴ区| 色噜噜噜亚洲男人的天堂| 久久久久久久一线毛片| 国产精品久久欧美久久一区| 香蕉久久久久久av成人| 午夜福利激情一区二区三区| 国产偷窥熟女高潮精品视频| 北条麻妃一区二区三区av高清| 欧美 亚洲 中文 国产 综合| 色吊丝中文字幕在线观看| 国产毛片精品一区二区色| 毛片av在线尤物一区二区| 华人在线亚洲欧美精品| 日韩激情一区二区三区| 国产欧美一区二区精品性色| 国产不卡一区二区四区| 泰兴市| 日韩丝袜人妻中文字幕| 精品人妻系列无码人妻漫画| 国产又色又爽又黄的网站免费| 国产在线无码精品无码| 日韩av一中美av一中文字慕| 女人与牲口性恔配视频免费| 麻豆精品一区二区综合av| 国产免费播放一区二区三区| 亚洲国产精品一区在线看| 国产精品免费看久久久| 久草热久草热线频97精品| 国产一区二区三区免费观看| 中文字幕人妻中出制服诱惑| 亚洲特黄色片一区二区三区| 乱人伦中文字幕成人网站在线| 一本一本久久a久久精品综合| 日韩精品一区二区三区中文无码 | 亚洲国产精品自产拍久久| 久久久午夜精品福利内容| 日韩精品中文字幕第二页| 内射老妇bbwx0c0ck| 久久精品国产99精品亚洲| 国产精品无码专区| 自拍偷在线精品自拍偷免费|