#latex #generate #reports

rustex

一个用于在 Rust 中创建简单自动生成 LaTeX 文件的库

1 个不稳定版本

0.1.0 2023年8月4日

#1398 in 文本处理

MIT 许可证

135KB
906

RusTeX

一个用于在 Rust 中创建简单自动生成 LaTeX 文件的库。

快速开始

要使用 RusTeX,将 crate 添加到你的 Cargo.toml

[dependencies]
rustex = "0.1.0"

文档

文档可在此处访问:这里

实现的功能

组件

  • 命令
  • 章节
  • 枚举
  • 表格
  • 文本
  • 标签
  • 页面分隔符

格式化

  • Markdown 粗体 (**粗体**)
  • Markdown 斜体 (_斜体_)
  • 彩色文本 (#blue{text})

示例

一个包含生成的 PDF 文件的完整示例在 example 文件夹中。

  1. 首先创建一个基本 Document

    const DOCUMENT_NAME: &str = "generated_tex/main.tex";
    const DOCUMENT_CLASS: ClassType = ClassType::Report;
    const FONT_SIZE: &str = "12pt";
    
    let doc_file: File = File::create(DOCUMENT_NAME).unwrap();
    
    let doc_class: DocumentClass = DocumentClass::new(
        DOCUMENT_CLASS,
        vec![FONT_SIZE]
    );
    
    let mut doc: Document = Document::new(doc_file, doc_class);
    
  2. 添加一些 Packages

    let packages = vec![
        Package::new(
            "babel",
            vec!["english"]
        ),
        Package::new(
            "geometry",
            vec!["margin=2.5cm"]
        ),
        Package::new(
            "fontenc",
            vec!["T1"]
        )
    ];
    
    doc.add_packages(packages);
    
  3. 添加一些全局 Commands

    let commands = vec![
        Command::new(r"\title{Title}"),
        Command::new(r"\author{Author}"),
        Command::new(r"\date{YYYY / MM / DD}"),
        Command::new(r"\setlength{\tabcolsep}{18pt}")
    ];
    
    doc.add_global_commands(commands);
    
  4. 然后你可以添加不同的 Items

    • 任何 Item 都可以添加到 Document

    • 任何 Item 都可以添加到 Container

    • Container 是一个 Item,因此它们可以嵌套

    • Items 的显示顺序是它们被添加的顺序

      let mut section_1: Section = Section::new(
          "Section",             // Section name
          SectionType::Section,  // Section type
          true,                  // Display section number
          "sec_1"                // Label
      );
      
      let paragraph_1 = Text::new(
          "Lorem ipsum dolor sit amet, **consectetur** adipiscing elit. Integer congue nisi condimentum
          lacus vulputate cursus. _Curabitur_ bibendum orci ac nibh vestibulum ultrices. Aenean pulvinar
          mattis lectus, sed vehicula leo pellentesque eget. Sed sed quam sit amet nulla lacinia mollis.
          Maecenas dignissim, augue quis suscipit pellentesque, ipsum turpis facilisis eros, eu aliquam
          erat massa sit amet ex."
      );
      
      section_1.add_item(paragraph_1);
      doc.add_item(section_1);
      

依赖

~2.2–3MB
~53K SLoC