LibreLogo

LibreLogo 是简单、本地化的类 Logo 编程环境,带有一只海龟矢量图形,用于计算机 (编程及文字处理) 、DTP 及图形设计的教学。参见 http://www.numbertext.org/logo/librelogo.pdf

LibreLogo 工具栏

LibreLogo 工具栏 (视图 - 工具栏 - Logo) 包括海龟移动、程序启动/停止、主页、清屏、程序编辑器/语法高亮/翻译图标,还有一个输入栏 (命令行)。

海龟移动图标

它们等效于 Logo 命令「FORWARD 10」「BACK 10」「LEFT 15」「RIGHT 15」。点击这些图标还可以选中海龟形状,使页面滚动到其所在位置。

启动Logo程序

点击 “启动 Logo 程序” 可将 Writer 文档中的文本 (或只有选中的部分文本) 作为 LibreLogo 程序执行。对于空文档,将插入示例程序并执行之。

点击「停止」图标可中止程序执行。

主页

点击「归位」图标可重置海龟的位置与设置。

清屏

点击「清屏」图标可删除文档中绘制的对象。

程序编辑器/代码高亮/翻译

The “magic wand” icon sets 2-page layout for program editing, expands and converts to uppercase the abbreviated, lowercase Logo commands in the Writer document. Change the language of the document ( - Language Settings - Languages - Western) and click on this icon to translate the Logo program to the selected language.

命令行

在命令行按【回车】键可执行其内容。要停止程序执行请使用“停止”图标。

按回车键可重复命令行,如对于下述命令序列:

 FORWARD 200 LEFT 89

要重置命令行,请在命令行处三击,或按 Ctrl+A 选择先前命令,再输入新命令。

基本乌龟设置的图形用户界面

LibreLogo 的海龟形状是一个固定大小的常规绘图对象。您可以用标准操作 (鼠标或“绘图对象属性”工具栏的“旋转”图标) 来改变它的位置以及旋转它。修改海龟形状的“线条宽度”“线条颜色”“区域颜色”设置可设置 LibreLogo 的 PENSIZE, PENCOLOR 与 FILLCOLOR 属性。

程序编辑

LibreLogo 绘制的图形与程序本身使用同一个 Writer 文档。LibreLogo 画板位于 Writer 文档的第一页。您可以在 LibreLogo 程序之前插入分页符,并使用 Logo 工具栏的“魔法棒”图标设置页面缩放,同时改变字体大小为适合双页视图的比例,以方便使用 LibreLogo 编程: 左边 (第一页) 作为画板,而右边 (第二页) 作为 LibreLogo 程序编辑器。

LibreLogo 编程语言

LibreLogo 是一款易于本地化的类 Logo 编程语言,由 LibreOffice 母语团队本地化为多种语言版本。对于教学等领域的简单的 Logo 程序,它可向下兼容旧版 Logo 系统。

 TO triangle :size
REPEAT 3 [
FORWARD :size
LEFT 120
]
END

triangle 10 triangle 100 triangle 200

与 Logo 编程语言的不同之处

LibreLogo 的其他功能

LibreLogo 命令

基本语法

大小写敏感性

命令、颜色常量不区分大小写:

 PRINT “Hello, World!”
print “Hello, World, again!”

变量名区分大小写:

 a = 5
A = 7
PRINT a
PRINT A

程序行

LibreLogo 程序的行就是 LibreOffice Writer 文档中的段落。程序行可包含多条命令:

 PRINT “Hello, World!” PRINT “LibreLogo”

注释

分号开始直到行 (段落) 末尾的部分或整行为注释:

 ; 一些注释
PRINT 5 * 5 ; 一些注释

跨段落的程序行

可以通过行末的波浪线符号将程序行分散在多个段落中:

 PRINT “这是一行非常长的 ” + ~
“警告消息”

海龟移动

FORWARD (fd)

 FORWARD 10 ; 向前移动 10 磅 (1磅 = 1/72 英寸)
FORWARD 10pt ; 参见上行
FORWARD 0.5in ; 向前移动 0.5 英寸 (1 英寸 = 2.54 厘米)
FORWARD 1" ; 参见上文
FD 1mm
FD 1cm

BACK (bk)

 BACK 10 ; 向后移动 10 磅

LEFT (lt)

 LEFT 90 ; 逆时针旋转 90 度
LEFT 90° ; 参见上行
LT 3h ; 参见上行 (时钟位置)
LT any ; 转到随机位置 (即旋转任意角度)

RIGHT (rt)

 RIGHT 90 ; 顺时针旋转 90 度

PENUP (pu)

 PENUP ; 向上移动海龟,但不绘图

PENDOWN (pd)

 PENDOWN ; 移动海龟,同时绘图

POSITION (pos)

 POSITION [0, 0] ; 转向并移动至左上角
POSITION PAGESIZE ; 转向并移动至右下角
POSITION [PAGESIZE[0], 0] ; 转向并移动至右上角
POSITION ANY ; 转向并移动至任意位置

HEADING (seth)

 HEADING 0 ; 朝北
HEADING 12h ; 同上
HEADING [0, 0] ; 朝左上角
HEADING ANY ; 朝向随机方向

其他海龟命令

HIDETURTLE (ht)

 HIDETURTLE ; 隐藏海龟 (直到执行到 showturtle 命令)

SHOWTURTLE (st)

 SHOWTURTLE ; 显示海龟

HOME

 HOME ; 重置初始的海龟位置

CLEARSCREEN (cs)

 CLEARSCREEN ; 移除文档的绘图对象

FILL 与 CLOSE

 FILL ; 关闭并填充实际的线条形状或点
CLOSE ; 关闭实际线条形状或连接各点

示例: 填充正三角形:

 FORWARD 50 LEFT 120 FORWARD 50 FILL

示例: 绘制正三角形:

 FORWARD 50 LEFT 120 FORWARD 50 CLOSE

笔迹设置

PENSIZE (ps)

 PENSIZE 100 ; 线条宽度为 100 点
PENSIZE ANY ; 等效于 PENSIZE RANDOM 10

PENCOLOR/PENCOLOUR (pc)

 PENCOLOR “red” ; 设置红色笔迹 (参数为颜色名称,参见颜色常量)
PENCOLOR [255, 255, 0] ; 设置黄色 (RGB 列表)
PENCOLOR 0xffff00 ; 设置黄色 (十六进制颜色代码)
PENCOLOR 0 ; 设置黑色 (0x000000)
PENCOLOR ANY ; random color
PENCOLOR [5] ; 设置红色 (参数为颜色 ID,参见颜色常量)
PENCOLOR “invisible” ; 透明笔迹颜色,供没有可见边缘的形状使用
PENCOLOR “~red” ; 设置随机红色

PENTRANSPARENCY

 PENTRANSPARENCY 80 ; 将实际的笔颜色透明度设置为80%

PENCAP/LINECAP

 PENCAP “none” ; 不要额外的线条端点 (默认)
PENCAP “round” ; 圆形线条端点
PENCAP “square” ; 方形线条端点

PENJOINT/LINEJOINT

 PENJOINT “rounded” ; 圆形线条接头 (默认)
PENJOINT “miter” ; 锋利线条接头
PENJOINT “bevel” ; 斜面线条接头
PENJOINT “none” ; 无线条接头

PENSTYLE

 PENSTYLE “solid” ; 实线 (默认)
PENSTYLE “dotted” ; 点线
PENSTYLE “dashed” ; 虚线

; 下述参数可通过列表指定自定义的点线纹路:
; – 相邻点数
; – 点长
; – 相邻线条数
; – 线长
; – 点/线距离
; – 类型 (可选):
; 0 = 矩形点 (默认)
; 2 = 方形点 (长度与距离与笔迹尺寸相关)

PENSTYLE [3, 1mm, 2, 4mm, 2mm, 2] ; ...––...––...––

填充设置

FILLCOLOR/FILLCOLOUR (fc)

 FILLCOLOR “blue” ; 用蓝色填充,参见 PENCOLOR
FILLCOLOR “invisible” CIRCLE 10 ; 取消填充圆圈
FILLCOLOR [“blue”, “red”] ; 红蓝渐变
FILLCOLOR [[255, 255, 255], [255, 128, 0]] ; 白橙渐变
FILLCOLOR [“blue”, “red”, 1, 0, 0] ; 设置轴渐变 (提供需要的旋转与边框参数), 可选的值: 0-5 = 线性, 轴, 放射, 椭圆, 方形及矩形渐变
FILLCOLOR [“red”, “blue”, 0, 90, 20] ; 线性,20% 的边框,从海龟的实际头部旋转 90 度
FILLCOLOR [“red”, “blue”, 0, 90, 20, 0, 0, 200, 50] ; 从 200% 到 50% 的强度
FILLCOLOR [ANY, ANY, 2, 0, 0, 50, 50] ; 放射状渐变,随机颜色,50-50% 水平与垂直方向的中间位置

FILLTRANSPARENCY

 FILLTRANSPARENCY 80 ; 设置实际填充颜色的透明度为 80%
FILLTRANSPARENCY [80] ; 设置线性透明度渐变,从 80% 到 0%
FILLTRANSPARENCY [80, 20] ; 设置线性透明度渐变,从 80% 到 20%
FILLTRANSPARENCY [80, 20, 1, 90] ; 设置轴向透明度渐变,从海龟的实际头部旋转 90 度
FILLTRANSPARENCY [80, 20, 2, 0, 20, 50, 50] ; 设置放射状透明度渐变,从外圈的 80% 透明度到内圈的 20%,边框占 20% border,50-50% 水平与垂直方向的中间位置

FILLSTYLE

 FILLSTYLE 0 ; 全部涂满 (默认)
FILLSTYLE 1 ; 黑色,单方向空隙 (水平)
FILLSTYLE 2 ; 黑色,单方向空隙 (45 度)
FILLSTYLE 3 ; 黑色,单方向空隙 (-45 度)
FILLSTYLE 4 ; 黑色,单方向空隙 (垂直)
FILLSTYLE 5 ; 红色交叉空隙 (45 度)
FILLSTYLE 6 ; 红色交叉空隙 (0 度)
FILLSTYLE 7 ; 蓝色交叉空隙 (45 度)
FILLSTYLE 8 ; 蓝色交叉空隙 (0 度)
FILLSTYLE 9 ; 蓝色三重交叉
FILLSTYLE 10 ; 黑色单方向宽空隙 (45 度)

; 通过下述参数用列表指定自定义空隙:
; – 样式 (1 = 单方向, 2 = 双方向, 3 = 三方向)
; – 颜色
; – 距离
; – 角度

FILLSTYLE [2, “green”, 3pt, 15°] ; 绿色交叉空隙 (15 度)

绘制对象

CIRCLE

 CIRCLE 100 ; 绘制圆圈图形 (直径 = 100pt)

ELLIPSE

 ELLIPSE [50, 100] ; 绘制直径分别为 50 和 100 的椭圆
ELLIPSE [50, 100, 2h, 12h] ; 绘制椭圆扇区 (从 2h 到 12h 的时钟位置)
ELLIPSE [50, 100, 2h, 12h, 2] ; 绘制椭圆部分
ELLIPSE [50, 100, 2h, 12h, 3] ; 绘制椭圆弧线

SQUARE

 SQUARE 100 ; 绘制正方形 (尺寸 = 100pt)

RECTANGLE

 RECTANGLE [50, 100] ; 绘制矩形 (50×100pt)
RECTANGLE [50, 100, 50] ; 绘制圆角矩形

POINT

 POINT ; 以笔迹尺寸与颜色绘制一个点

CLOSE 可连接最后的点,FILL 可填充由点定义的形状。例如,很容易从中间开始绘制“平面”的星星:

 PENUP
REPEAT 5 [
FORWARD 80
POINT
BACK 80
RIGHT 36
FORWARD 50
POINT
BACK 50
RIGHT 120
] FILL

LABEL

 LABEL “text” ; 在海龟位置输出 text
LABEL 'text' ; 参见上行
LABEL "text ; 参见上行 (仅适用于单个单词)

TEXT

 CIRCLE 10 TEXT “文字” ; 设置实际绘制对象的文字内容

字体设置

FONTCOLOR/FONTCOLOUR

 FONTCOLOR “green” ; 设置字体颜色

FONTFAMILY

 FONTFAMILY “Linux Libertine G” ; 设置字体 (族) 
FONTFAMILY “Linux Libertine G:smcp=1” ; 同时设置字体功能 (小型大写)
FONTFAMILY “Linux Libertine G:smcp=1&onum=1” ; 小型大写 + 旧式字体

FONTSIZE

 FONTSIZE 12 ; 设置 12pt

FONTWEIGHT

 FONTWEIGHT “bold” ; 设置粗体
FONTWEIGHT “normal” ; 设置正常粗细

FONTSTYLE

 FONTSTYLE “italic” ; 设置倾斜变体
FONTSTYLE “normal” ; 设置常规变体

PICTURE (pic)

PICTURE 用于

形状组合

 ; PICTURE [ LibreLogo_commands ]
PICTURE [ FORWARD 100 CIRCLE 100 ] ; 像树一样的组合形状

请参见 LibreOffice Writer 帮助中的「组合」章节。

 TO tree location
PENUP POSITION location HEADING 0 PENDOWN
PICTURE [ FORWARD 100 CIRCLE 100 ] ; 像树一样的组合形状
END

PICTURE [ tree [230, 400] tree [300, 400] ] ; 组合形状嵌套组合形状

开始新行形状

 PICTURE ; 开始新一行形状
FORWARD 10 PICTURE FORWARD 10 ; 两行形状

保存SVG图像

 PICTURE “example.svg” [ CIRCLE 5 ] ; 将图片保存到用户目录,格式为 SVG 图像文件
PICTURE “Desktop/example.svg” [ FORWARD 100 CIRCLE 5 ] ; 同上,使用相对路径
PICTURE “/home/user/example.svg” [ CIRCLE 5 ] ; Unix/Linux 平台的绝对路径
PICTURE “C:\example.svg” [ CIRCLE 5 ] ; Windows 平台的绝对路径

保存SVG/SMIL动画 (使用SLEEP命令绘制)

 PICTURE “animation.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 ] ; 另存为 SVG/SMIL 动画 (参见 SLEEP)
PICTURE “animation2.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 SLEEP 2000 ] ; 同上,但在最后一个对象后使用 SLEEP 可导致循环: 在符合 SMIL 规范的浏览器中,SVG 动画在 2 秒后会重新播放

左边框一致

使用 PICTURE 使位置与线条形状在 Writer 左边框保持一致:

 PICTURE [ CIRCLE 20 POSITION [-100, 100] CIRCLE 20 ]

循环

REPEAT

 ; REPEAT 数字 [ 命令 ]

REPEAT 10 [ FORWARD 10 LEFT 45 CIRCLE 10 ] ; 重复 10 次
 ; 数字是可选的

REPEAT [ POSITION ANY ] ; 无休止循环

REPCOUNT

循环变量 (在 FOR 与 WHILE 循环中也存在)。

 REPEAT 100 [ FORWARD REPCOUNT LEFT 90 ]

FOR IN

按列表元素循环:

 FOR i IN [1, 5, 7, 9, 11] [
FORWARD i
LEFT 90
]

按字符序列中的字符循环:

 FOR i IN “text” [
LABEL i
FORWARD 10
]

WHILE

 WHILE TRUE [ POSITION ANY ] ; 无休止循环
WHILE REPCOUNT <= 10 [ FORWARD 50 LEFT 36 ] ; 与 REPEAT 10 [ ... ] 类似

BREAK

停止循环。

 REPEAT [ ; 无休止循环
POSITION ANY
IF REPCOUNT = 100 [ BREAK ] ; 等效于 REPEAT 100 [ ... ]
]

CONTINUE

跳到下一次循环。

 REPEAT 100 [
POSITION ANY
IF REPCOUNT % 2 = 0 [ CONTINUE ]
CIRCLE 10 ; 在每个偶数位置绘制圆圈
]

条件

IF

 ; IF 条件 [ 真值块 ]
; IF 条件 [ 真值块 ] [ 假值块 ]

IF a < 10 [ PRINT “小” ]
IF a < 10 [ PRINT “小” ] [ PRINT “大” ]

AND、OR、NOT

逻辑运算符。

 IF a < 10 AND NOT a = 5 [ PRINT “0, 1, 2, 3, 4, 6, 7, 8 or 9” ]
IF a < 10 AND a != 5 [ PRINT “0, 1, 2, 3, 4, 6, 7, 8 or 9” ] ; 同上

子过程

TO, END

新单词 (或过程)。

 TO triangle
REPEAT 2 [ FORWARD 100 RIGHT 120 ] FILL
END

REPEAT 10 [ triangle PENUP POSITION ANY PENDOWN ]

OUTPUT

函数返回值。

 TO randomletter
OUTPUT RANDOM “qwertzuiopasdfghjklyxcvbnm”
END

PRINT randomletter + randomletter + randomletter ; 输出 3 个字母长的随机字符序列

STOP

从过程返回。

 TO example number
IF number < 0 [ STOP ]
PRINT SQRT number ; 输出平方根
]

example 100
example -1 ; 没有输出结果,也不会出错
example 25

默认变量

ANY

颜色等的默认变量值。

 PENCOLOR ANY ; 随机笔迹颜色

TRUE

逻辑值。

 WHILE TRUE [ POSITION ANY ] ; 无休止循环
PRINT TRUE ; 输出 true

FALSE

逻辑值。

 WHILE NOT FALSE [ POSITION ANY ] ; 无休止循环
PRINT FALSE ; 输出 false

PAGESIZE

 PRINT PAGESIZE ; 输出页面尺寸列表,单位为点,如 [595.30, 841.89]

PI/π

 PRINT PI ; 输出 3.14159265359

输入/输出

PRINT

 PRINT “文字” ; 在对话框中输出“文字”
PRINT 5 + 10 ; 输出 15

INPUT

 PRINT INPUT “输入数值?” ; 要求并通过请求对话框输出字符串
PRINT FLOAT (INPUT “第一个数字?”) + FLOAT (INPUT “第二个数字?”) ; 简单计算

SLEEP

 SLEEP 1000 ; 等待 1000 ms (1 秒)

GLOBAL

设置用于过程的全局变量。

 GLOBAL about
about = “LibreLogo”

TO example
PRINT about
GLOBAL about ; 希望添加新数值时
about = “全局变量的新数值”
END

example
PRINT about

函数

RANDOM

 PRINT RANDOM 100 ; 随机浮点数 (0 <= x < 100)
PRINT RANDOM “text” ; “text”中的任一字母
PRINT RANDOM [1, 2] ; 随机列表元素 (1 或 2)

INT

 PRINT INT 3.8 ; 输出 3 (3.8 的整数部分)
PRINT INT RANDOM 100 ; 随机整数 (0 <= x < 100)
PRINT INT “7” ; 将字符串参数转换为整数

FLOAT

 ; 将字符串参数转换为浮点数
PRINT 2 * FLOAT “5.5” ; 输出 11.0

STR

 ; 将数字参数转换为字符串
PRINT “结果: ” + STR 5 ; print “结果: 5”
PRINT 10 * STR 5 ; 输出 5555555555

SQRT

 PRINT SQRT 100 ; 输出 10,即 100 的平方根

SIN

 PRINT SIN 90 * PI/180 ; 输出 1.0 (90° 角的正弦值)

COS

 PRINT COS 0 * PI/180 ; 输出 1.0 (0° 角的余弦值)

LOG10

 PRINT LOG10 100 ; 输出 2.0 (100的常用对数)

ROUND

 PRINT ROUND 3.8 ; 输出 4 (3.8 四舍五入后的结果)
PRINT ROUND RANDOM 100 ; 随机整数 (0 <= x <= 100)

ABS

 PRINT ABS -10 ; 输出 10,即 -10 的绝对值

COUNT

 PRINT COUNT “text” ; 输出 4,即“text”的字符个数
PRINT COUNT [1, 2, 3] ; 输出 3,即列表大小

SET

 ; 将列表转换为 Python 集
PRINT SET [4, 5, 6, 6] ; 输出 {4, 5, 6}
PRINT SET [4, 5, 6, 6] | SET [4, 1, 9] ; 输出 {1, 4, 5, 6, 9},并集
PRINT SET [4, 5, 6, 6] & SET [4, 1, 9] ; 输出{4},交集
PRINT SET ([4, 5, 6, 6]) - SET [4, 1, 9] ; 输出 {5, 6},差集
PRINT SET [4, 5, 6, 6] ^ SET [4, 1, 9] ; 输出 {1, 5, 6, 9}, 对称差集

RANGE

 ; Python-like list generation
PRINT LIST RANGE 10 ; print [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
PRINT LIST RANGE 3 10 ; print [3, 4, 5, 6, 7, 8, 9]
PRINT LIST RANGE 3 10 3 ; print [3, 6, 9]

FOR i IN RANGE 10 50 10 [ ; loop for [10, 20, 30, 40]
FORWARD i
LEFT 90
]

LIST

 ; 通过 set 与 list 将列表重复元素移除
PRINT LIST (SET [1, 3, 5, 5, 2, 1]) ; 输出 [1, 3, 5, 2]

TUPLE

转换为 Python 元组 (不可修改列表)

 PRINT TUPLE [4, 5]

SORTED

返回排序后的列表。

 PRINT SORTED [5, 1, 3, 4] ; 输出 [1, 3, 4, 5]

SUB

用正则表达式匹配规则替换字符序列。

 PRINT SUB (“t”, “T”, “text”) ; 输出 “Text”,将 “t” 替换为了 “T”
PRINT SUB (“(.)”, “\\1\\1”, “text”) ; 输出 “tteexxtt”,每个字符重复两遍

SEARCH

使用正则表达式匹配规则搜索字符序列。

 IF SEARCH (“\w”, "word") [ PRINT “单词中有字母。” ]

FINDALL

查找与给定正则表达式匹配的所有字符序列。

 PRINT FINDALL(“\w+”, “Dogs, cats.”) ; 输出 [“Dogs”, “cats”],即单词列表。

MIN

 PRINT MIN [1, 2, 3] ; 输出 1,列表中最小的元素

MAX

 PRINT MAX [1, 2, 3] ; 输出 3,列表的最大元素

颜色常量

 PENCOLOR “SILVER” ; 按颜色名称设置
PENCOLOR [1] ; 按颜色 ID 设置
PENCOLOR “~SILVER” ; 随机银色

ID

名称

0

BLACK (黑色)

1

SILVER (银色)

2

GRAY/GREY (灰)

3

WHITE (白)

4

MAROON (栗色)

5

RED (红色)

6

PURPLE (紫色)

7

FUCHSIA/MAGENTA (品红)

8

GREEN (绿色)

9

LIME (绿黄)

10

OLIVE (黄绿)

11

YELLOW (黄色)

12

NAVY (海蓝)

13

BLUE (蓝色)

14

TEAL (蓝绿)

15

AQUA (水色)

16

PINK (粉红)

17

TOMATO (西红柿红)

18

ORANGE (橙色)

19

GOLD (金色)

20

VIOLET (紫罗兰色)

21

SKYBLUE (天蓝)

22

CHOCOLATE (巧克力色)

23

BROWN (棕色)

24

INVISIBLE (透明)


请支持我们!