Texmacs是一个所见即所得的排版工具,即有点类似Word,又有LaTex的排版效果。

但是它不怎么流行,可能名字取得不好,叫Texmacs,可是既不是TeX,也不是emacs,容易让人误解。

Getting started with TeXmacs

这是Texmacs自带的教程。

1. Document structure

  • tag是Texmacs文档的一种结构,鼠标移到tag区域时会出现水蓝色的框。tag给区域内文本赋予特殊意义,比如strong tag可以给文本加粗。
  • 共有三位数的tag可供选用。tag描述的往往是目的,而不是布局。后者是通过样式文件来定义的。
  • tag可以嵌套,事实上,Texmacs文档就是一堆嵌套的tag。

2. Navigation

  • 右下角状态栏提供当前光标所在位置的一些信息
  • 对于数学公式中的乘法,虽然看上去乘号省略了,但是实际在文档中还是要书写的

3. Toolbars

工具栏大部分是上下文相关的。

  • 主工具栏:非上下文相关
  • 模式相关工具栏:根据编辑模式(文本、公式、图形、其他)不同而变化,分为四个子区域
    • 区域一:图标用于插入顶层文档结构
    • 区域二:图标用于文本格式
    • 区域三:图标用于特定的tmdoc样式
    • 区域四:图标用于插入表格、图像等特殊标记
  • 焦点工具栏:提供当前焦点下,即水蓝色框中内容相关的操作

4. Mathematical formulas

教如何书写一个公式。

5. Mathematical symbols

  • 有一些快捷方式可用于输入数学符号,比如->会被转化为→
  • 使用tab可以在字母变体之间切换,比如在a后面敲tab,可以将其转化为希腊字母alpha

The GNU TeXmacs manual

Getting started

  • Conventions for this manual
    • Windows上的Meta键是Win键,但是此键已然绑定了很多快捷方式,可以用Escape代替
  • Configuring TeXmacs 【略】
  • Creating, saving and loading documents
    • 创建一个新文档时,可以在焦点工具栏修改其设置,也可以在Document菜单修改其设置
  • Printing documents 【略】

Writing simple documents

  • Generalities
    • Meta+'E可以插入带音标的e
    • 会自动插入连字符(hyphen)
    • 状态栏左边显示文本标的信息,右边显示字符标的信息
  • Structured text
    • 长文档可以组织成章、节和小节。通过选择Docuemnt -> Style来告诉TeXmacs所需布局。
    • 默认文档样式:generic, article, book, letter, exam, beamer, seminar source
    • 确定文档样式之后,可以插入分节,然后插入环境(也就是tags),比如定理、命题、评议、列表等等。 可以自定义tag。
    • 当前编辑模式是一个重要的概念,共有五种:文本、公式、程序、图形、以及代码。
  • Content-based tags
    • 是最简单的用于文本的结构, Insert -> Content tag
    • 常用的基于内容的tag
      • strong, em (emphasis), dfn (definition), name (the name of a particular thing)
      • person (the name of a person), cite* (bibliographic), abbr (abbreviation)
      • acronym, verbatim (like computer program output), kdb (text which should be entered on a keyboard)
      • code* (code of a computer program), var (variables in a computer program)
  • Lists
    • Insert -> Itemize,插入普通列表,可以是bullets, dashes后者arrows
    • Insert -> Enumerate,插入编号列表
    • Insert -> Description,插入慨念定义列表
  • Environments
    • Insert -> Environment
    • 粒度比content-based tag更大一些
    • 公式中常见的比如theorem和proof,还有proposition、lemma、corollary、axiom、definition
      • 可以用dueto,也就是\DUETOReturn来指定相关作者
    • 其他常用的,但是不对其环绕文本进行强调的是remark、note、example、warning、exercise以及problem
    • 剩下的诸如verbatim、code、quote、quotation以及verse可用来键入多段文本
  • Layout issues
    • 不推荐手动布局,比如空白最好使用Insert -> Space来插入(好像没有找到)
    • 默认提供多重空白命令,既可以插入严格长度或者高度的空白,也可以插入制表符空白
    • 对于段落排布,可以justified(两侧对齐),left ragged(左对齐),centered(剧中),right ragged(右对齐)。
    • 可以通过Document -> Page来指定页面布局,比如当选择paper作为页面类型时,可以显示设置分页符;当设置成papyrus时,须避免设置分页符;automatic页面类型假设纸张大小等同于窗口大小。页面边距和文本宽度可以通过Document -> Page -> Layout指定。Document -> Page -> Screen布局可以减少边距。
  • The font selection system
    • 全局性文档字体可以通过Document -> Font,局部可以用Format -> Font设置文本。
    • 下列字体特征可供设置
      • Family, Shape (bold, italic, small capitals, etc.),size
      • 字体浏览器允许按照规则过滤字体:weight,Slant(决定字体的倾斜度),stretch(水平拉长),case,spacing(比如等宽字体),Device(模拟各种手写或者机打字体),category(门类)。
    • 若系统中没有找到指定的字体,字体浏览框中会给出近似字体
    • 如果没有选中任何字体,就点击ok,那么当前的设定的字体属性会插入作为TeXmacs标记,并且作为渲染的指引。
    • TeXmacs自带一些字体,比如Stix字体,以及其他许多以TeXMACS。使用这些字体可以在不同平台获得一致表现。
  • Mastering the keyboard
    • General prefix rules
      • 击键的活动前缀依赖于当前的“look and feel”,可以通过Edit -> Preferences设定:
        • Ctrl+,在各种程序中常见的快捷键
          • 文中竟然举了一个shift-insert的例子
        • Alt+,跟当前编辑模式相关的快捷俺就,比如alt+s对字体进行强化
        • meta+.,复合的TeXmacs快捷方式,一般先表明输入标记类型,然后再表明具体输入。如Meta+E后跟+会输入一个加法符号
        • Meta+Ctrl+,和方向键组合使用来定位或者缩放标的
        • Meta+Alt+,和方向键组合使用来来进行结构化的鼠标移动
        • Alt+Ctrl+,有时候用来创建额外的快捷键
        • Shift+F5,可以用于插入特殊字符,Shift+F5s插入ß。但是Shift+F5\会插入\本身,因为\被用来输入混合命令
      • 但是操作系统往往把Meta+用作系统快捷键,这时候就需要使用ESC来作为替代了。
  • Keyboard shortcuts for text mode
    • 列集了一些快捷键用于输入特殊字符
    • 除了上面列集的快捷键,也可以使用Shift+F5作为快捷键
  • Hybrid commands and LaTeX simulation
    • 可以直接从键盘输入LATEX命令,以\进入混合模式,然后键入LATEX命令,比如\FRACReturn。要键入\本身,需要使用Shift+F5\
    • \会搜索所输入命令是否是latex复集、函数,或者环境的做用。\等同于下列命令之一:Meta+I LMeta+I EMeta+I AMeta+I #Meta+I V
  • Dynamic objects
    • 动态标的会有多重状态,因为其状态会在运行的时候变更
    • 一个例子是使用Meta+!插入的label标的,默认是inactive,此状态下可以输入label的相关信息,比如其名字。有些label需要更多参数,可以使用tab来输入。
  • Various useful keyboard shortcuts
    • Ctrl+Backspace,移除上层元素
    • SpaceTab,插入一个非断行空白
    • SpaceTabTab,插入一个四分空白
    • Meta+Space,插入一个小空白
    • Meta+Shift+Space,插入一个小的逆向空白
    • Ctrl+Home,跳到文档开头
    • Ctrl+End,跳到文档结尾
    • Meta+:,插入一个断行
    • Meta+Shift+R,插入一小段严格文本,不能被分行
    • SpaceTabTabMeta+SpaceMeta+Shift+Space插入的空白可以用Meta+Ctrl+<-或者Meta+Ctrl+->来缩放。这样可能比Format->Space插入的空白更有通用性。

Mathematical formulas

略。

Tabular material

  • Creating a table
    • Meta+T``Shift+N``T创建一个空白表格
    • Meta+T``Shift+N``Shift+T创建一个内容剧中的空白表格
    • Meta+T``Shift+N``B创建一个区块,其中小区有更小的边框
    • Meta+T``Shift+N``Shift+B
    • 在公式模式,可以有以下额外的命令
      • Meta+T``Shift+N``M,创建一个矩阵
      • Meta+T``Shift+N``D,创建一个行列式
      • Meta+T``Shift+N``C,创建一个选项表
    • 可以通过Inser->Table->Small table/Big table来创建小、大表格
    • 有其他类似表格的营房(environment),用户也可以自定义新的
      • 例如可使用Insert->Mathematics->Equations或者Alt+&来插入一个eqnarray*营房,可以允许数学公式跨越多行。
      • 空白的表格大小只有1x1,其单元格为空。可以使用Meta搭配方向键来插入行或者列。敲回车也能开始新行。
  • Table editing mode
    • 默认情况下,格式操作在单元格生效,可以通过Table->Cell修改操作模式:
      • Meta``M``C,操作于单元格
      • Meta``M``H,操作于表行
      • Meta``M``V,操作于表列
      • Meta``M``T,操作于整表
  • Alignment
    • 可用Meta+Ctrl和方向键快速对齐
    • 可选择Table->Horizontal/Vertical cell alignment来对齐
      • 或者使用Meta+T``H``XMeta+T``V``X
    • 要选择表格与周遭的对齐方式,可以采用Table->Horizontal/Vertical table alignment
      • 或者使用Meta+T``Shift+H``XMeta+T``Shift+V``X
  • Size
    • 通过Table->Cell width->Set width resp.``Table->Cell height-Set height可以设置单元格的宽度或者高度,可以有几种控制方式
      • 最小模式,指定值和内容,两者取小
      • 确切模式,按指定值
      • 最大模式,指定值和内容,两者取大
    • 边框大小和单元格填充被计入单元格箱体的尺寸
    • 可以通过Table->Special table properties来指定整张表格的的大小
      • 可以通过Table->Special cell properties->Distribute unused space来分配剩余
  • Border and background color
    • 各个方向上都可以指定边框大小和单元格填充
      • 可以使用快捷键Meta+T``B``xMeta+T``P``x
      • 在块部环境下,
        • 默认边框时1ln,也就是当前字体的标准行宽
        • 默认水平单元格填充是1spc,也就是当前字体中单个空白的宽度
        • 默认垂直单元格填充是1sep,两箱体间的最小间距
      • 通过Table -> Cell background color可以设置单元格背景
      • 整表也可以有变宽和表格填充,通过Table->Special table properties->Border设置,比情形下,填充是发生在边框外部
  • Advanced features
    • 可以改变单元格的span,让其捅进右边或者下边相邻的单元格
    • 可以在单元格里面创建子表格
    • 可以修改文本的高度和深度,以便让基线匹配
    • 单元格内容支持水平连字符,整表支持垂直连字符
    • 粘连多个表行或者表列
    • 去激活表格,从而看见它的源代码
    • 设置表格的扩展中心,一个单元格上的属性可以用于四周的单元格上
    • 指定表格的最小和最大尺寸
    • 当前所欲表格均在营区tabuler、block、matrixneir,创建自定义表格阔集时,可以Table->Special table properties->Extract format来抽取现有表格的样式
  • Creating labels, links and references
    • Meta+!Insert->Link->label可以创建一个非活动label
      • 通过Meta+?``TabInsert->Link->Reference可以创建到label的引用
      • 输入完后记得使用Return来激活它
    • 对分节加label时,最好放在分节符后面
      • 给数学等式(Insert->Mathematics->Equation)加label的时候,最好放在等式内的开始处
      • 有多个等式的时候,最好把标签放在等式编号后面,Ctrl+#可以加编号
    • 通过Meta+T或Insert->Link->Hyperlink可以创建到其他文档的超链接
      • #label指向当前文档的某个label
      • url#label指向url位置的文档的某个label
    • Meta+I``*或Insert->Link->Action,可以关联一个动作
      • 第二个字段包含Guile/Scheme脚本命令
      • 默认安全设置下,需要用户同意才会执行脚本,但是可以通过Options->Security修改
    • Meta+I``I或Insert->Link->Include可以包含其他文档
  • Inserting images
    • 受支持的文件包括ps,eps,tif,pdf,pdm,gif,ppm,xpm,fig等
    • 图像按原设计尺寸展示,并且按照下边界对齐
      • 但是在图像选取对话框中可以修改宽度,高度,对齐方式等等
      • 若指定width却没有指定height,那么图像被缩放时会保留原始比例
        • 以1par为width可以让图像跨越整个段落,同时高度也会被按比例缩放
      • 可以用w和h作为单位来表示原图中的宽度和高度
    • 一个自带的脚本可以用来将带LATEX公式的XFIG图片转化为受封装的postscript。
    • 对于某些格式,TeXmacs会使用外部转换器,比如Ghostscript,ImageMagick,NETPBM
  • Generating a table of contents
    • 通过Insert->Automatic->Table可以在当前位置出入章节目录
      • 但是必须在分页符可见的模式下(在Document->Page的Format选项卡中选paper作为Screen rendering option),这样才可以准确计算页面编号
      • 使用Document->Update->Table of content/All来生成章节目录,可能要做多次,因为页面编号会随着章节目录的变动而变动
  • Compiling a bibliography
  • Generating an index
  • Compiling a glossary
  • Multiple extractions
  • Books and multifile documents

Creating technical pictures

介绍Texmacs自带的图片编辑器,或许功能不够强大,但是优点是与TeXmacs整合紧密,可以方便插入文本,公式和超链接。

Advanced layout features

  • Flows
    • 复杂页面区分不同的flow:
      • 主文本,脚注,以及分栏
        • 插入脚注可以通过Format->Page insertion->Footnote
        • 插入分类可以通过Paragraph->Number of columns
      • 不同的flow再分页的时候有不同的表现
  • Floating objects
    • 浮动标的可以在主文本之外自由移动,通常用于盛放那些太大的图示或者表格。
      • 通过Insert->Note->Floating object
      • 也可以Insert->Note->Floating figure resp.然后Insert->NOte->Floating table
      • 如果要在浮动标的中插入多个更小的图示或者表格,可以Insert→Image→Small figure resp. Insert→Table→Small table
    • 在浮动标的里面可以通过Focus->Allowed positions来控制其位置
      • 浮动标的不会出现在主文本中,除非文本与上底或者下底的距离不超过3行
  • Page breaking
    • 通过Docuemnt->Page->Breaking可以准确控制分页

Editing tools

  • Cut and paste
    • 可以用鼠标左键的单击和拖曳来选中的区域
      • 也可以按住Shift,然后通过左右方向键
      • 也可以通过Ctrl+Space来开启一个选取区域
        • 通过Ctrl+G可以消除选取
      • Ctrl+Space可以不断扩大选取区域的范围,达到最大范围的时候则取消选取
    • 可以通过Edit->Cut或者Shift+Delete来删除
    • 对于拷贝操作,可以通过Edit->Copy或者Ctrl+insert
    • 对于粘贴操作,可以通过Edit->Paste或者Shift+insert
    • 改变颜色通过Format->Color->红色
    • 如果选中公式,可以通过Insert->Fraction可以将其转化为分数的分子
    • 复制粘贴到其他程序的时候,采用的时TeXmacs数据格式,可以通过下列命令修改
      • Tools->Miscellaneous->Import selections as resp
      • Tools->Miscellaneous->Expor selections as
    • 也可以在菜单Edit->Copy to以及Edit->Paste from子菜单中操作
    • 默认情况下,复制和粘贴使用首要剪贴板,在上一项中列举的子菜单操作中也可以选取其他剪贴板
  • Search and replace
    • Edit->Search或Ctrl+S开启搜索
      • 通过PageUp和PageDown(或上下方向键、或Return)可以在候选词之间切换
    • 搜索过程会只查看与和前光标相同模式和语言下的内容
      • 也就是说在公式模式下搜索x不会找到在主文本中的x
    • Edit->Replace或Ctrl+=来打开替换工具栏
      • 使用Shift+Return可以撤销上次替换
      • 使用Ctrl+Return可以完成所有替换
    • 在搜索和替换工具栏上有按键可以打开搜索和替换对话框,用于输入更复杂的文本或者符号
    • 当搜索非文本内容时
      • 在搜索对话框中敲F6插入一个strong标签,会搜索所有的strong标记
      • 通过Ctrl+?似乎不能键入select-region标签
  • Spell checking
    • 附带安装的ispell可以用来做拼写检查
    • 拼写检查的快捷键时Meta+$或Edit->Spell
    • 要确保对应语言的字典文件已经安装
  • Undoing and redoing changes
    • Edit->Undo或Ctrl+z可以撤销操作
    • Edit->Redo或Ctrl+y可以重复撤销的操作
    • TeXmacs保存整颗记录树,可以通过Edit->Redo选择合适的分支
    • 不是所有的操作都可以被撤销
      • 一些全局设置不可以被撤销
      • 有外部程序造成的修改也不可以被撤销
  • Structured editing
    • 默认情况下,当前焦点时包含光标的最内层的标签
    • 举了编辑数学公式中的矩阵的例子,还是略过吧
  • Structured cursor movement
    • 有以下几种结构化的光标移动
      • 遍历文档的所有结构
        • Ctrl+方向键
      • 遍历与某最内层标签相同的标签
        • Ctrl+翻页键
      • 在当前最内层标签中移动
        • Meta+Alt+方向键、Home、End、Delete、Backspace、翻页键
    • 大部分此类快捷键搭配Shift+可以用于选取内容
  • Structured variants
    • 当创建定理、等式、列表等营区后,若想改变其类型,可以使用Ctrl+Tab以及Ctrl+Shift+Tab快捷键
    • 通过Ctrl+#可以给营区增加或者删除编号
  • Positioning and resizing objects
    • 通过Meta+Ctrl+开头的快捷键
    • 应用于以下标签
      • 空白(通过Format->Space插入,需要把光标放在空白之后此类快捷键才会生效
      • 箱体修改器(通过Format->Adjust插入的move, shift等等)
      • 动画(其时长可以通过Meta+Ctrl+搭配左右方向键修改)
      • 图像(其尺寸和对齐可以被修改)
  • Versioning tools
    • 可以通过Tools->Versioning tool开启一个Version菜单
    • 默认提供对Git, Subversion的支持
    • 对比两个版本要先,加载新版本然后,Versin->Compare->With older version
      • 也有Versin->Compare->With newer version
      • Version->Move或者Ctrl+移位键来在版本改动中移动
    • 差异可以显示为三种方式:
      • 只显示旧的
      • 只显示新的
      • 同时显示新旧
    • 对于每个差异都可以指定显示方式
      • Ctrl+<-旧版本
      • Ctrl+->新版本
      • Ctrl+|显示新旧
      • Ctrl+Tab来循环切换
    • 选定版本可以通过Version->Retain,或者使用Ctrl+1/2/Return
      • 如果过完每个差异,可以通过Version->Retain->Current version来选定所有差异
    • Version->Gain可以选择差异粒度
      • 可以比较开始时设置,也可以选中某个部分修改其差异粒度

Laptop presentations

为笔记本设计的展示模式。可以通过View->Presentation或Ctrl-F9开启。

Using GNU TeXmacs as an interface

如何与外部系统够同,比如计算机代数系统。

Writing TeXmacs style files

样式文件可以用于:

  • 可以对重复性的元素,比如分节、定理、枚举进行抽象
  • 一种对文本进行结构化的机制
  • 标准文档样式可以让你的写作看起来更像是专业文档

Docuemnt->Style可以选择一个主样式,用于反映所需的文档类型比如新建,文章、书籍等。 样式包则用来对主样式进行更深入的定制,比如number-europe会启用欧洲样式的定理编号;maxima包则提供了用于MAXIMA计算机代数系统的一个阔集。多个样式包可以共同使用。

当你想增加标记或者自定义布局,有两个选择,要么写一个主样式,要么写一个样式包。大多数情况下,写一个样式包足矣。

Customizing TeXmacs

程序的大部分可以通过Edit->Preferences来配置。其他部分则可以通过Guile/Scheme来扩展。

The TeXmacs plug-in system

有多种扩展方式

  • 自定义其样式文件
  • 自定义用户界面
  • 自定义与外部程序的连接

其他

(草草收尾)

2022-09-03更新:在Ubuntu下编译Xmacs/Mogan

mogan/xmacs是国人维护的TeXmacs的一个分叉。本文记录在Ubuntu 22.04编译Mogan的一些心得体会。

Mogan和TeXmac保存中文内容时候,采用文件的格式略有不同,TeXmacs会保存中文字符的转移编码,而Mogan则直接保存中文字符,导致不兼容。

首先肯定是从Github(或者Gitee镜像)上扒拉下来Mogan的源代码。

Mogan的构建系统是基于CMake,所以进度Mogan源代码的根目录,然后创建一个build文件夹,然后在build文件夹中执行cmake ..即可。

当然,cmake会告诉你一些依赖的料库没有找到,需要安装。

比如Mogan用到QT作为其界面料库,可以安装QT5或者QT6.

建议安装QT5,因为可以fcitx输入法直接支持qt5(需要安装fcitx5-frontend-qt5料包)。

QT5的基础包是qtbase5,apt安装之。然后通过cmake ..来找出其他依赖,比如libqt5svg之类的。

如果是QT6,可能会遇到Qt6Gui could not be found because dependency WrapOpenGL could not be found.的问题。 大概是因为Ubuntu运行在虚拟机中,安装libgl1-mesa-dev或可解决此问题,参考https://forum.qt.io/topic/121929/qt6-android-cmake-project-fails-at-start-failed-to-find-qt-component-core-config-file-at/3

默认配置下,cmake会安装到系统路径中,如果要安装到其他路径,比如/opt/mogan,可以在执行cmake的时候指定: cmake .. -DCMAKE_INSTALl_PREFIX=/opt/mogan

执行完cmake之后,就可以通过makemake install来编译和安装。

中文字体安装

TeXmacs提供中文字体,可以到https://www.texmacs.org/tmweb/download/fonts.en.html#fonts-cjk处下载。

下载后解压,放置到~/.Xmacs目录中的fonts子目录。(如果是TeXmacs的话,其配置在~/.TeXmacs目录。 然后执行mogan --delete-font-cache &来刷新其字体缓存。

Outline插件

可以从tm-forge获得,只要将其miscellanea/outline子目录拷贝到Mogan的配置目录~/.Xmacs, 然后重启,使用快捷键Ctrl+Shift+O快捷键调出即可。

(更新完)

2022-09-05更新:Ubuntu 22.04上安装TeXmacs

虽然GNU TeXmacs的官方没有给出最新的2.1.2的deb安装包,但其实可以从https://www.texmacs.org/Download/ftp/tmftp/Linux/ubuntu2204/TeXmacs-2.1.2.amd64.deb直接下载到。

也可以下载通用版的https://www.texmacs.org/tmweb/download/linux.en.html,但是性能堪忧,字体渲染模糊。。

尝试编译

可以参考https://github.com/texmacs/texmacs/wiki/Build-with-CMake-on-GNU-Linux

但是Guile-1.8.8貌似在Ubuntu 22.04上编译有问题,执行make之后,在快结束的时候下面命令会失败

/bin/bash ../libtool  --tag=CC   --mode=link gcc  -g -O2 -Wall -Wmissing-prototypes   -o guile guile-guile.o libguile.la -lgmp -lcrypt -lm -lltdl
libtool: link: gcc -g -O2 -Wall -Wmissing-prototypes -o .libs/guile guile-guile.o  ./.libs/libguile.so -lgmp -lcrypt -lm -lltdl
cat alist.doc arbiters.doc async.doc backtrace.doc boolean.doc chars.doc continuations.doc debug.doc deprecation.doc deprecated.doc discouraged.doc dynl.doc dynwind.doc environments.doc eq.doc error.doc eval.doc evalext.doc extensions.doc feature.doc fluids.doc fports.doc futures.doc gc.doc goops.doc gsubr.doc gc-mark.doc gc-segment.doc gc-malloc.doc gc-card.doc guardians.doc hash.doc hashtab.doc hooks.doc i18n.doc init.doc ioext.doc keywords.doc lang.doc list.doc load.doc macros.doc mallocs.doc modules.doc numbers.doc objects.doc objprop.doc options.doc pairs.doc ports.doc print.doc procprop.doc procs.doc properties.doc random.doc rdelim.doc read.doc root.doc rw.doc scmsigs.doc script.doc simpos.doc smob.doc sort.doc srcprop.doc stackchk.doc stacks.doc stime.doc strings.doc srfi-4.doc srfi-13.doc srfi-14.doc strorder.doc strports.doc struct.doc symbols.doc threads.doc throw.doc values.doc variable.doc vectors.doc version.doc vports.doc weaks.doc ramap.doc unif.doc dynl.doc filesys.doc posix.doc net_db.doc socket.doc regex-posix.doc | GUILE="/home/eric/gitsource/Github/texmacs-guile/pre-inst-guile" ../scripts/snarf-check-and-output-texi          > guile-procedures.texi || { rm guile-procedures.texi; false; }

应该是系统库的问题,就不深究了。

(更新完)