Module

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

== 关于模块 ==

=== 模块是什么? ===
模块(或者称为 Routing Library)是一系列的已知代码,用来解决已知的一系列问题。

=== 注意事项 ===
 * 特别注意保护模块,不要外传,尤其是电子版,后果相当严重
 * 在向模版中添加代码前,要反复检验该段代码的正确性

=== 模块的位置 ===
模块目前存放在 acm90.8800.org (10.71.101.90 / 10.71.10.90)。

=== 访问与编辑模块 ===
可以通过以下三种途径访问 acm90.8800.org 上的模块:
 1. svn 方式
   * 这是在模块中修改、添加代码的唯一途径
   * 注意代码文件中若含有中文,应使用 UTF-8 无 BOM 的编码
   * Linux 命令行下可以通过 `svn co svn://10.71.10.90/module` 命令来签出模块的原始代码,接着使用各种 svn 操作来维护其内容。注意要经常使用 `svn up` 来更新代码,避免冲突
   * 此方式需要用户名和密码,密码目前是存放在 `/srv/svn/conf/passwd` 文件里,可以让有 90 管理权限的同学添加新帐号
 2. websvn 方式
   * 在浏览器内直接查看模块代码,也可在线直接比较各个修订版本的模块代码,但不能修改代码
   * 用浏览器打开 http://10.71.10.90:81/svn/ 即可
   * 从计算中心 218 子网访问不需要密码,其他地方访问需要 acm 用户以及四个字母的密码 (详见配置文件 `/etc/nginx/sites-available/svnweb`)
 3. pdf 方式
   * 用来查看单文件 pdf 版本的模块,这是被用来打印的版本。
   * 用浏览器打开 http://10.71.10.90:81/module/ ,下载 `module-latest.pdf` 即可,在 `history` 下可以找到历史版本
   * 如果 Linux 下中文显示为空白,则说明 evince 版本过低,使用 `sudo apt-get install poppler-data` 命令安装 poppler-data 软件包即可解决
   * pdf 版本会每隔一段时间(目前是 5 分钟)自动生成一次,当然如果上一次生成时的 svn 修订版本号和最新的修订版本号相同就不会重复生成了
   * 其中 logs 包含了自动生成 pdf 版本的日志记录,如发生错误,可以看到 `error-log.html` 文件,应该会有错误信息,关于 TeX 生成的日志可以在 `/home/quark/module_build/.output/*.log` 找到
   * 同方式 2,从计算中心 218 子网访问不需要密码,其他地方访问需要 acm 用户以及四个字母的密码

UPDATE 2011-10-6: svn 和 module 后面有一个 "/",现在不能省略

=== 关于 pdf 版本的自动生成 ===
pdf 版本自动生成是 2010 年由 quark 新加入的功能,原理是由一段脚本自动解析模块目录结构,生成 tex 文件,最终由此生成 pdf 文件。

关于这段脚本实现的 pdf 自动生成,有一些需要注意的地方:
 * 文件夹名
   * 目前只处理一层文件夹,也就是说代码只能放在一层文件夹内
   * 文件夹名称中如果出现下划线,则生成对应的章和节,否则只有一个章
     * 比如,如果有“图论_匹配”和“图论_网络流”两个文件夹,则会生成一个名叫“图论”的章,在这一章下面有“匹配”和“网络流”两个节
     * 再比如,“数论”和“应用”两个文件夹名称都没有下划线,那么它们是两章
   * 以 "." 开头的目录会被无视
 * 文件名
   * 文件名会被当作节或者是节下面的小节标题。其中下划线会被换成空格,请避免在文件名中使用空格,全部使用下划线
   * 文件可以有不同的类型,按照后缀来区分,后缀应该是小写字母
     * .txt 文件会被当作无格式纯文本填入对应章节,同章节中,这种类型的文件会最先处理
     * .tex 文件会被原封不动地当作 TeX 代码填入对应章节,它适合用来写一些带有数学公式等的内容。注意这种类型的文件乱写会最后的生成失败,所以要谨慎
     * .c, .cpp 这些代码文件会被格式化后填入对应章节,格式化内容主要包括:
       * 以 4 个空格作为缩进重新整理整个代码
       * 语法高亮,其中数字(包括整数和浮点数)会被加上下划线以更好地区分 1 和 l。
     * .pdf 文件会被整页插入到对应位置,依然使用主文档的页眉页脚
 * 文件内容
   * .txt 和代码文件中,如果一行超过 88 个字符(一个汉字算做两个字符),会被强制折行,被强制折行的一行最后会有一个 \ 符号
   * 除了 .pdf 类型的文件,其他文件必须是 UTF-8 编码,这样中文可以正确在 websvn 上显示。如果是其他的编码或者甚至就是一个二进制文件(使用 file 命令得到的输出是 data),很可能会导致自动生成失败。

关于模块

模块是什么?

模块(或者称为 Routing Library)是一系列的已知代码,用来解决已知的一系列问题。

注意事项

  • 特别注意保护模块,不要外传,尤其是电子版,后果相当严重
  • 在向模版中添加代码前,要反复检验该段代码的正确性

模块的位置

模块目前存放在 acm90.8800.org (10.71.101.90 / 10.71.10.90)。

访问与编辑模块

可以通过以下三种途径访问 acm90.8800.org 上的模块:

1. svn 方式

  • 这是在模块中修改、添加代码的唯一途径
  • 注意代码文件中若含有中文,应使用 UTF-8 无 BOM 的编码
  • Linux 命令行下可以通过 svn co svn://10.71.10.90/module 命令来签出模块的原始代码,接着使用各种 svn 操作来维护其内容。注意要经常使用 svn up 来更新代码,避免冲突
  • 此方式需要用户名和密码,密码目前是存放在 /srv/svn/conf/passwd 文件里,可以让有 90 管理权限的同学添加新帐号

2. websvn 方式

  • 在浏览器内直接查看模块代码,也可在线直接比较各个修订版本的模块代码,但不能修改代码
  • 用浏览器打开 http://10.71.10.90:81/svn/ 即可
  • 从计算中心 218 子网访问不需要密码,其他地方访问需要 acm 用户以及四个字母的密码 (详见配置文件 /etc/nginx/sites-available/svnweb)

3. pdf 方式

  • 用来查看单文件 pdf 版本的模块,这是被用来打印的版本。
  • 用浏览器打开 http://10.71.10.90:81/module/ ,下载 module-latest.pdf 即可,在 history 下可以找到历史版本
  • 如果 Linux 下中文显示为空白,则说明 evince 版本过低,使用 sudo apt-get install poppler-data 命令安装 poppler-data 软件包即可解决
  • pdf 版本会每隔一段时间(目前是 5 分钟)自动生成一次,当然如果上一次生成时的 svn 修订版本号和最新的修订版本号相同就不会重复生成了
  • 其中 logs 包含了自动生成 pdf 版本的日志记录,如发生错误,可以看到 error-log.html 文件,应该会有错误信息,关于 TeX 生成的日志可以在 /home/quark/module_build/.output/*.log 找到
  • 同方式 2,从计算中心 218 子网访问不需要密码,其他地方访问需要 acm 用户以及四个字母的密码

UPDATE 2011-10-6: svn 和 module 后面有一个 "/",现在不能省略

关于 pdf 版本的自动生成

pdf 版本自动生成是 2010 年由 quark 新加入的功能,原理是由一段脚本自动解析模块目录结构,生成 tex 文件,最终由此生成 pdf 文件。

关于这段脚本实现的 pdf 自动生成,有一些需要注意的地方:

  • 文件夹名
    • 目前只处理一层文件夹,也就是说代码只能放在一层文件夹内
    • 文件夹名称中如果出现下划线,则生成对应的章和节,否则只有一个章
      • 比如,如果有“图论_匹配”和“图论_网络流”两个文件夹,则会生成一个名叫“图论”的章,在这一章下面有“匹配”和“网络流”两个节
      • 再比如,“数论”和“应用”两个文件夹名称都没有下划线,那么它们是两章
    • 以 "." 开头的目录会被无视
  • 文件名
    • 文件名会被当作节或者是节下面的小节标题。其中下划线会被换成空格,请避免在文件名中使用空格,全部使用下划线
    • 文件可以有不同的类型,按照后缀来区分,后缀应该是小写字母
      • .txt 文件会被当作无格式纯文本填入对应章节,同章节中,这种类型的文件会最先处理
      • .tex 文件会被原封不动地当作 TeX 代码填入对应章节,它适合用来写一些带有数学公式等的内容。注意这种类型的文件乱写会最后的生成失败,所以要谨慎
      • .c, .cpp 这些代码文件会被格式化后填入对应章节,格式化内容主要包括:
        • 以 4 个空格作为缩进重新整理整个代码
        • 语法高亮,其中数字(包括整数和浮点数)会被加上下划线以更好地区分 1 和 l。
      • .pdf 文件会被整页插入到对应位置,依然使用主文档的页眉页脚
  • 文件内容
    • .txt 和代码文件中,如果一行超过 88 个字符(一个汉字算做两个字符),会被强制折行,被强制折行的一行最后会有一个 \ 符号
    • 除了 .pdf 类型的文件,其他文件必须是 UTF-8 编码,这样中文可以正确在 websvn 上显示。如果是其他的编码或者甚至就是一个二进制文件(使用 file 命令得到的输出是 data),很可能会导致自动生成失败。