#import "../html.typ" : *
#show : html-style
#metadata(( title: "设置" ))<frontmatter>

= 设置

LemonLime 没有设置编译器时（比如第一次运行）会自动弹出添加编译器的向导，具体的说明请看编译器配置一节。

== 常规设置

在工具菜单中选择"设置"，就能看到下图所示的对话框：

#image("./pics/generalsettings.png", alt: "General Settings")

各个设置意义如下：

/ 默认分值: 新建一个测试点时的默认分值，默认为 10，可以设置的最大值为 10000000。

/ 默认时间限制: 新建一个测试点默认的时间限制，默认为 1000 ms，可以设置的最大值为 86400000 ms，即 1 天。

/ 默认额外时间限制比率: 新建一个测试点默认的额外时间限制比率，默认为 0.1。（因 LemonLime 采用 realtime 作为判定 TLE 的标准，需要适当调整此值以免造成误判，参见 #link("https://github.com/Project-LemonLime/Project_LemonLime/issues/84")[issues/84]。）

/ 默认空间限制: 新建一个测试点时默认的空间限制，默认为 512 MiB，可以设置的最大值为 16777216 MiB。

/ 编译时间限制: 测试时允许编译器运行的最长时间，默认为 10000 ms，可以设置的最大值为 86400000 ms，即 1 天。

/ 检验器时间限制: 对于使用自定义校验器的试题，测试时允许校验器运行的最长时间，默认为 10000 ms，可以设置的最大值为 86400000 ms，即 1 天。

/ 源程序大小限制: 测试时可以接受的最大源程序大小，可以设置的最大值为 262144 KiB，即 256 MiB。（1 KiB = 1024 B）

/ 最大重测次数: 当测试某测试点时程序运行时间不超过时间限制的 1.1 倍，或超时不超过 100ms 时，LemonLime 会对该测试点进行重测。可以设置的最大值为 12。

/ 输入、输出文件扩展名: 在自动添加试题时扫描的输入和输出文件的扩展名。如果有多个请用 `;` 隔开。每种扩展名中只能包含英文字母和数字，Linux 平台下大小写是敏感的。注意这里的扩展名只供添加测试点时软件搜索文件使用，测试时并不会检查。

== 编译器设置

点击上方的 "编译器" 选项卡就能进入编译器的配置。

#image("./pics/compilersettings.png", alt: "Compiler Settings")

按右边的加号就会出现添加编译器的向导，第一步是选择使用预置的编译器配置还是手动配置新的编译器。一般来说，用预置的配置就能够满足大多数需求，第一步只要在需要配置的编译器前打钩，进入下一步后就能看到选择路径的界面。

#image("./pics/addcompiler.png", alt: "Add Compiler")

`gcc`、`g++` 和 `fpc` 的建议配置中包含了不同标准和不同优化等级的组合。

`Java` 的内存限制是由 Java 虚拟机限制的，你可以在之后的设置中选择不限制内存。

最后一步会让你确认编译器路径是否设置正确。

除了使用内置的六种编译器配置，你也可以选择手动配置新的编译器。

#image("./pics/addcompiler2.png", alt: "Add Compiler")

/ 编译器名称: 编译器在列表中显示的名称。

/ 编译器类型: 总共有三种类型可选，括号里给出了相关解释。`C++`、`Java` 和 `Python` 分别是三种类型的典型代表。

/ 编译器位置: 如果编译器的类型是传统型或需要编译的解释型，这里就要选择编译器的位置。对于传统型，编译器会将源代码直接转换成机器代码，而解释型的编译器会生成中间字节码。

/ 解释器位置: 如果编译器的类型是解释型，就要选择解释器的位置。解释器用于执行中间字节码或直接解释执行源代码。

/ 源程序扩展名: 用于判断哪些扩展名的源程序使用这个编译器编译，如果有多个扩展名请用 `;` 隔开。

/ 中间字节码扩展名: 解释型编译器生成的中间字节码的扩展名，例如 `Java` 的中间字节码扩展名为 `.class`。

/ 默认编译器参数: 编译时传递给编译器的参数，其中用 `%s` 表示不带扩展名的源程序文件名，`%s.*` 表示带扩展名的源程序文件名。例如 `g++` 的编译参数为 `-o %s %s.* -lm`。

/ 默认解释器参数: 运行解释器时传递的参数，表示的方法同编译器参数。

向导完成后，我们再回到编译器管理的选项卡。

如果要删除当前选择编译器，可以按右边的减号。

右边的上下箭头是用来调整编译器优先级的。编译器的优先级是指：如果选手对于同一道题提交了多种扩展名的源程序，排在前面的编译器会被先考虑，同时在源程序扩展名中设置排在前面的扩展名会被先考虑。

点击"高级选项"后可以进入下图的对话框来修改已有编译器的配置。

#image("./pics/compilersettings2.png", alt: "Compiler Settings")

/ 时间、内存限制: 由于不同语言执行效率有差异，因此可以放宽特定语言的时间限制或空间限制，也就是将时间限制或空间限制乘上一个实数。你也可以选择直接取消空间限制。

/ 配置: 每个编译器都可以有多个配置，不同配置的编译参数或解释器运行参数不同，一般用于选择不同的优化开关。

/ 环境变量: 点击环境变量按钮可以设置编译器和程序运行时额外设置的环境变量，一般用于保证运行所需的动态链接库文件能被找到。

/ 解释器视为 Watcher: （仅在 Linux、Mac 下可用）开启此选项后，将不会执行默认的 Watcher，而是将解释器视为 Watcher 执行。这时候，你的解释器需要实现和 Watcher 一样的功能，你需要启动用户程序，严格监控其时间、内存使用；并在用户程序运行结束后，通过 stdout 和 stderr 向 Lemon 汇报结果。相关实现可以参考 #link("https://github.com/Project-LemonLime/Project_LemonLime/tree/master/unix")[默认 Watcher]。借助此功能，你可以更自由地配置特殊题目。同时由于默认的计算解释型语言的运行空间的方案是测量虚拟机的内存，借助此功能，你可以自行访问虚拟机的 API，获得更准确的内存消耗，实现更精确的解释型语言时间、内存测量。最重要的是：Watcher 可以自主报告给 Lemon 程序的运行时间和内存，通过这种方式可以设置一个时间到 WASM Tick 的比例，让 Lemon 支持 WASM Judge。

== 视觉设置

点击上方的 "视觉" 选项卡就能进入视觉配置。

这个配置用于改善 LemonLime 的美观度以及提升定制性。

#image("./pics/visualmainsettings.png", alt: "Visual Main Settings")

/ 配色方案: 上面的下拉框是当前所应用的主题名字。下面的"编辑"按钮可以编辑当前主题，"+"按钮可以新增一个空配置在最后，"垃圾桶"按钮可以删除当前主题。#underline[注意: 如果不点击最下方的"确定"的话，针对配色方案的更改会全部丢失！]

/ 启动横幅毫秒数: 启动时横幅显示的毫秒数。0 表示关闭。

LemonLime 提供了两种默认的配色方案：`ranking.ioi2021.sg` 和
`仿 joi2020`。前一个就是从 #link("https://ranking.ioi2021.sg/")[IOI 2021 的实时成绩榜] 上扒下来的配色方案，而后一个是 iotang 凭感觉，根据 JOI 2020（的某一次比赛）的实时成绩榜配的配色方案，之所以凭感觉是因为它打不开原网址了。

点击配色方案的下拉框可以选择配色方案。

#image("./pics/visualmainsettings_whenchoosingtheme.png", alt: "Visual Main Settings When Choosing Theme")

点击"编辑"按钮编辑当前主题时会弹出一个这样的对话框：

#image("./pics/visualsettings.png", alt: "Visual Settings")

/ 配色方案名: 配色方案的名字。

/ 满分 HSL 颜色: 满分时的背景颜色，用 HSL 标准表示（什么是 HSL 标准？#link("https://zh.wikipedia.org/zh-hans/HSL和HSV色彩空间")[中文维基] #link("https://baike.baidu.com/item/HSL/1443144?fr=aladdin")[百度百科]）。从左往右第 1 个框是 H 值，范围为 0 到 720。第 2 个框是 S 值，范围为 0 到 100。第 3 个框是 L 值，范围为 0 到 100。

/ 背景 HSL 颜色: 背景的颜色。不是满分的颜色为从背景 HSL 颜色到满分 HSL 颜色的根据得分与满分的比例的平滑变换。

/ 无文件 HSL 颜色: 当某个选手某个题目找不到文件的时候的背景颜色。

/ 编译错误 HSL 颜色: 当某个选手某个题编译错误的时候的背景颜色。

/ 总分颜色补正: 总分一栏的颜色会对应地加上总分颜色补正的值。

/ 总分颜色变化倍率: 总分一栏的颜色的变化倍率会对应地乘上总分颜色变化倍率的值。

你可以恰当地调整它们的值，来实现一些精彩的效果，比如实现暗色主题。

点击"取消"会放弃此次的任何修改。
