File: wxmaxima.zh_CN.html

package info (click to toggle)
wxmaxima 20.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid
  • size: 46,476 kB
  • sloc: cpp: 77,833; xml: 10,445; ansic: 3,583; lisp: 1,837; makefile: 13; sh: 7
file content (1040 lines) | stat: -rw-r--r-- 93,240 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta name="generator" content="pandoc" />
  <title>wxMaxima</title>
  <style type="text/css">
    code{white-space: pre-wrap;}
    span.smallcaps{font-variant: small-caps;}
    span.underline{text-decoration: underline;}
    div.column{display: inline-block; vertical-align: top; width: 50%;}
    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
    ul.task-list{list-style: none;}
    pre > code.sourceCode { white-space: pre; position: relative; }
    pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
    pre > code.sourceCode > span:empty { height: 1.2em; }
    code.sourceCode > span { color: inherit; text-decoration: inherit; }
    div.sourceCode { margin: 1em 0; }
    pre.sourceCode { margin: 0; }
    @media screen {
    div.sourceCode { overflow: auto; }
    }
    @media print {
    pre > code.sourceCode { white-space: pre-wrap; }
    pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
    }
    pre.numberSource code
      { counter-reset: source-line 0; }
    pre.numberSource code > span
      { position: relative; left: -4em; counter-increment: source-line; }
    pre.numberSource code > span > a:first-child::before
      { content: counter(source-line);
        position: relative; left: -1em; text-align: right; vertical-align: baseline;
        border: none; display: inline-block;
        -webkit-touch-callout: none; -webkit-user-select: none;
        -khtml-user-select: none; -moz-user-select: none;
        -ms-user-select: none; user-select: none;
        padding: 0 4px; width: 4em;
        color: #aaaaaa;
      }
    pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
    div.sourceCode
      {   }
    @media screen {
    pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
    }
    code span.al { color: #ff0000; font-weight: bold; } /* Alert */
    code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
    code span.at { color: #7d9029; } /* Attribute */
    code span.bn { color: #40a070; } /* BaseN */
    code span.bu { } /* BuiltIn */
    code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
    code span.ch { color: #4070a0; } /* Char */
    code span.cn { color: #880000; } /* Constant */
    code span.co { color: #60a0b0; font-style: italic; } /* Comment */
    code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
    code span.do { color: #ba2121; font-style: italic; } /* Documentation */
    code span.dt { color: #902000; } /* DataType */
    code span.dv { color: #40a070; } /* DecVal */
    code span.er { color: #ff0000; font-weight: bold; } /* Error */
    code span.ex { } /* Extension */
    code span.fl { color: #40a070; } /* Float */
    code span.fu { color: #06287e; } /* Function */
    code span.im { } /* Import */
    code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
    code span.kw { color: #007020; font-weight: bold; } /* Keyword */
    code span.op { color: #666666; } /* Operator */
    code span.ot { color: #007020; } /* Other */
    code span.pp { color: #bc7a00; } /* Preprocessor */
    code span.sc { color: #4070a0; } /* SpecialChar */
    code span.ss { color: #bb6688; } /* SpecialString */
    code span.st { color: #4070a0; } /* String */
    code span.va { color: #19177c; } /* Variable */
    code span.vs { color: #4070a0; } /* VerbatimString */
    code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
  </style>
  <link rel="stylesheet" href="wxmaxima.css" type="text/css" />
  <link rel="icon" type="image/svg+xml" href="wxmaxima.svg" />
</head>
<body>
<div id="header">
<h1 class="title">wxMaxima</h1>
</div>
<div id="TOC">
<ul>
<li><a href="#wxmaxima-用户手册">wxMaxima 用户手册</a></li>
<li><a href="#wxmaxima-简介"><span class="toc-section-number">1</span> wxMaxima 简介</a>
<ul>
<li><a href="#maxima-和-wxmaxima"><span class="toc-section-number">1.1</span> Maxima 和 wxMaxima</a>
<ul>
<li><a href="#maxima"><span class="toc-section-number">1.1.1</span> Maxima</a></li>
<li><a href="#wxmaxima"><span class="toc-section-number">1.1.2</span> wxMaxima</a></li>
</ul></li>
<li><a href="#工作簿workbook基础"><span class="toc-section-number">1.2</span> 工作簿(Workbook)基础</a>
<ul>
<li><a href="#工作簿的使用"><span class="toc-section-number">1.2.1</span> 工作簿的使用</a></li>
<li><a href="#单元格"><span class="toc-section-number">1.2.2</span> 单元格</a></li>
<li><a href="#水平光标和竖直光标"><span class="toc-section-number">1.2.3</span> 水平光标和竖直光标</a></li>
<li><a href="#向-maxima-发送单元格"><span class="toc-section-number">1.2.4</span> 向 Maxima 发送单元格</a></li>
<li><a href="#命令自动补全"><span class="toc-section-number">1.2.5</span> 命令自动补全</a></li>
<li><a href="#侧边栏"><span class="toc-section-number">1.2.6</span> 侧边栏</a></li>
<li><a href="#mathml-输出"><span class="toc-section-number">1.2.7</span> MathML 输出</a></li>
<li><a href="#标记语言markdown支持"><span class="toc-section-number">1.2.8</span> 标记语言(Markdown)支持</a></li>
<li><a href="#快捷键"><span class="toc-section-number">1.2.9</span> 快捷键</a></li>
<li><a href="#导出-tex-时的-tex-代码"><span class="toc-section-number">1.2.10</span> 导出 TeX 时的 TeX 代码</a></li>
</ul></li>
<li><a href="#文件格式"><span class="toc-section-number">1.3</span> 文件格式</a>
<ul>
<li><a href="#mac"><span class="toc-section-number">1.3.1</span> .mac</a></li>
<li><a href="#wxm"><span class="toc-section-number">1.3.2</span> .wxm</a></li>
<li><a href="#wxmx"><span class="toc-section-number">1.3.3</span> .wxmx</a></li>
</ul></li>
<li><a href="#设置选项"><span class="toc-section-number">1.4</span> 设置选项</a>
<ul>
<li><a href="#默认动图帧率"><span class="toc-section-number">1.4.1</span> 默认动图帧率</a></li>
<li><a href="#新-maxima-会话的默认绘图尺寸"><span class="toc-section-number">1.4.2</span> 新 Maxima 会话的默认绘图尺寸</a></li>
<li><a href="#在文本中匹配括号"><span class="toc-section-number">1.4.3</span> 在文本中匹配括号</a></li>
<li><a href="#不自动保存工作簿"><span class="toc-section-number">1.4.4</span> 不自动保存工作簿</a></li>
<li><a href="#设置信息保存的位置"><span class="toc-section-number">1.4.5</span> 设置信息保存的位置</a></li>
</ul></li>
</ul></li>
<li><a href="#对-maxima-功能的扩充"><span class="toc-section-number">2</span> 对 Maxima 功能的扩充</a>
<ul>
<li><a href="#为变量添加下标"><span class="toc-section-number">2.1</span> 为变量添加下标</a></li>
<li><a href="#在状态栏中提供反馈信息"><span class="toc-section-number">2.2</span> 在状态栏中提供反馈信息</a></li>
<li><a href="#绘图"><span class="toc-section-number">2.3</span> 绘图</a>
<ul>
<li><a href="#将绘制的图形嵌入工作簿"><span class="toc-section-number">2.3.1</span> 将绘制的图形嵌入工作簿</a></li>
<li><a href="#设置嵌入图形的大小"><span class="toc-section-number">2.3.2</span> 设置嵌入图形的大小</a></li>
<li><a href="#更好的绘图质量"><span class="toc-section-number">2.3.3</span> 更好的绘图质量</a></li>
<li><a href="#在交互式-gnuplot-窗口中打开嵌入的绘图"><span class="toc-section-number">2.3.4</span> 在交互式 gnuplot 窗口中打开嵌入的绘图</a></li>
<li><a href="#在绘图窗口中打开-gnuplot-控制台"><span class="toc-section-number">2.3.5</span> 在绘图窗口中打开 gnuplot 控制台</a></li>
<li><a href="#在工作簿中嵌入动图"><span class="toc-section-number">2.3.6</span> 在工作簿中嵌入动图</a></li>
<li><a href="#同时打开多个绘图窗口"><span class="toc-section-number">2.3.7</span> 同时打开多个绘图窗口</a></li>
<li><a href="#用-draw-函数绘图侧边栏"><span class="toc-section-number">2.3.8</span> “用 draw 函数绘图”侧边栏</a></li>
</ul></li>
<li><a href="#嵌入图片"><span class="toc-section-number">2.4</span> 嵌入图片</a></li>
<li><a href="#启动时读取的文件"><span class="toc-section-number">2.5</span> 启动时读取的文件</a></li>
<li><a href="#以-wx-开头的特殊变量"><span class="toc-section-number">2.6</span> 以 wx 开头的特殊变量</a></li>
<li><a href="#输出美观的二维公式"><span class="toc-section-number">2.7</span> 输出美观的二维公式</a></li>
<li><a href="#错误bug报告"><span class="toc-section-number">2.8</span> 错误(bug)报告</a></li>
<li><a href="#让输出显示为红色"><span class="toc-section-number">2.9</span> 让输出显示为红色</a></li>
</ul></li>
<li><a href="#疑难解答"><span class="toc-section-number">3</span> 疑难解答</a>
<ul>
<li><a href="#无法连接到-maxima"><span class="toc-section-number">3.1</span> 无法连接到 Maxima</a></li>
<li><a href="#从损坏的-.wxmx-文件中取回信息的方法"><span class="toc-section-number">3.2</span> 从损坏的 .wxmx 文件中取回信息的方法</a></li>
<li><a href="#在命令完成前显示一些调试信息"><span class="toc-section-number">3.3</span> 在命令完成前显示一些调试信息</a></li>
<li><a href="#绘图结果是空的绘图框和错误信息"><span class="toc-section-number">3.4</span> 绘图结果是空的绘图框和错误信息</a></li>
<li><a href="#绘制动图时得到error-undefined-variable错误未定义的变量"><span class="toc-section-number">3.5</span> 绘制动图时得到“error: undefined variable(错误:未定义的变量)”</a></li>
<li><a href="#删除了一个单元格而撤销操作不起作用"><span class="toc-section-number">3.6</span> 删除了一个单元格,而撤销操作不起作用</a></li>
<li><a href="#wxmaxima-启动时显示信息maxima-process-terminatedmaxima-进程已终止"><span class="toc-section-number">3.7</span> wxMaxima 启动时显示信息“Maxima process terminated(Maxima 进程已终止)。”</a></li>
<li><a href="#maxima-永远在计算中而不响应输入"><span class="toc-section-number">3.8</span> Maxima 永远在计算中而不响应输入</a></li>
<li><a href="#基于-sbcl-的-maxima-耗尽内存"><span class="toc-section-number">3.9</span> 基于 SBCL 的 Maxima 耗尽内存</a></li>
<li><a href="#在-ubuntu-系统上有时输入无响应或响应迟缓"><span class="toc-section-number">3.10</span> 在 Ubuntu 系统上,有时输入无响应或响应迟缓</a></li>
<li><a href="#wxmaxima-在处理希腊字符或元音变音符时停止"><span class="toc-section-number">3.11</span> wxMaxima 在处理希腊字符或元音变音符时停止</a></li>
<li><a href="#绘图-1"><span class="toc-section-number">3.12</span> 绘图</a>
<ul>
<li><a href="#是否可以同时输出和嵌入绘图文件"><span class="toc-section-number">3.12.1</span> 是否可以同时输出和嵌入绘图文件?</a></li>
<li><a href="#是否可以指定绘制图形的相对比例"><span class="toc-section-number">3.12.2</span> 是否可以指定绘制图形的相对比例?</a></li>
</ul></li>
<li><a href="#有没有办法在-latex-页面中显示更多的文字"><span class="toc-section-number">3.13</span> 有没有办法在 LaTeX 页面中显示更多的文字?</a></li>
<li><a href="#是否有深色模式"><span class="toc-section-number">3.14</span> 是否有深色模式?</a></li>
<li><a href="#wxmaxima-有时在启动后的一段时间内无响应"><span class="toc-section-number">3.15</span> wxMaxima 有时在启动后的一段时间内无响应</a></li>
</ul></li>
<li><a href="#命令行参数"><span class="toc-section-number">4</span> 命令行参数</a></li>
</ul>
</div>
<h1 class="unnumbered" number="" id="wxmaxima-用户手册">wxMaxima 用户手册</h1>
<p>wxMaxima 是计算机代数系统(CAS,computer algebra system)Maxima 的图形用户界面(GUI,graphical user interface)。在 wxMaxima 中,用户可以使用 Maxima 所有的命令。此外,wxMaxima 还提供了一些向导以方便用户使用最常用的功能。本手册描述了一些 wxMaxima 的特性,这些特性使其成为最流行的 Maxima 图形用户界面之一。</p>
<div class="figure">
<img src="./wxMaximaLogo.png" id="img_wxMaximaLogo" alt="" />
<p class="caption">wxMaxima 的 logo</p>
</div>
<p>在介绍本手册的内容之前,先给出一些关于文档导航的说明。正下方是一个简短的目录。单击任何列出的条目,即可跳转到手册对应节的顶部。单击<a href="#TOC">目录</a>可定位到详细的目录。此扩展目录可用于更直接地跳转到手册的各小节、小小节,以方便查看内容。</p>
<ul>
<li><a href="#introduction-to-wxmaxima" title="wxMaxima 简介">简介</a>:</li>
</ul>
<p>wxMaxima 基础知识</p>
<ul>
<li><a href="#extensions-to-maxima" title="扩充内容">扩充内容</a>:</li>
</ul>
<p>wxMaxima 向 Maxima 添加的命令</p>
<ul>
<li><a href="#troubleshooting" title="疑难解答">疑难解答</a>:</li>
</ul>
<p>当 wxMaxima 不按预期运行时的解决办法</p>
<ul>
<li><a href="#faq" title="常见提问">常见提问(FAQ)</a>:</li>
</ul>
<p>常见提问(Frequently asked questions)</p>
<ul>
<li><a href="#command-line-arguments" title="Maxima 命令行">命令行</a>:</li>
</ul>
<p>wxMaxima 支持的命令行参数</p>
<hr />
<h1 number="1" id="wxmaxima-简介"><span class="header-section-number">1</span> wxMaxima 简介</h1>
<h2 number="1.1" id="maxima-和-wxmaxima"><span class="header-section-number">1.1</span> Maxima 和 wxMaxima</h2>
<p>在开源领域,大型项目通常被分割成小型项目,后者对于小规模开发组来说更容易处理。例如,一个 CD 刻录机程序会包括一个实际刻录 CD 的命令行程序和一个图形用户界面,该界面使得用户不必了解所有的命令行参数就能刻录 CD,从而实际上避开了使用命令行。这种方法的一个优点是,投入到命令行程序中的开发工作可以被许多程序共享:同一个刻录 CD 的命令行程序可以用作文件管理器应用程序的“发送到 CD”插件、音乐播放器的“刻录到 CD”功能以及 DVD 备份工具的刻录 CD 功能。另一个优点是将一个大型任务分解成更小的部分时,开发人员就可以为同一个程序提供多个用户界面。</p>
<p>一个像 Maxima 这样的计算机代数系统(CAS,computer algebra system)也适合前述框架。Maxima 可以用作任意精度计算器程序的底层软件,也可以在更大计算系统中作为公式转换程序来帮助计算(例如 <a href="https://www.sagemath.org/">Sage</a>)。Maxima 也可以直接作为独立的计算系统使用,它可以通过命令行来访问。然而,在通常情况下,像 wxMaxima 这样的用户界面是使用 Maxima 的一种更有效的方法,特别是对于新手而言更是如此。</p>
<h3 number="1.1.1" id="maxima"><span class="header-section-number">1.1.1</span> Maxima</h3>
<p>Maxima 是一个功能齐全的计算机代数系统(CAS)。CAS 是一个程序,它可以通过对公式变形并找到问题的解来求解数学问题,而不是仅仅输出结果的数值。换言之,Maxima 可以作为一个计算器,给出变量的数值表示,也可以提供解析解。此外,它还提供了一系列数值分析方法,用于求解没有解析解的方程或方程组。</p>
<div class="figure">
<img src="./maxima_screenshot.png" id="img_maxima_screenshot" alt="" />
<p class="caption">Maxima 截图,命令行</p>
</div>
<p>大量关于 Maxima 的文档<a href="http://maxima.sourceforge.net/documentation.html">可在互联网上获得</a>。wxMaxima 的“帮助”菜单中也提供了部分文档。按下帮助键(在大多数系统上是按 F1 键)后,wxMaxima 的上下文相关帮助功能会自动打开 Maxima 的手册页,并跳转到光标处命令对应的内容。</p>
<h3 number="1.1.2" id="wxmaxima"><span class="header-section-number">1.1.2</span> wxMaxima</h3>
<p>wxMaxima 是一个图形用户界面,它提供了 Maxima 的全部功能和灵活性。wxMaxima 为用户提供了图形显示和许多其他功能,使得 Maxima 更易于使用。例如,wxMaxima 允许用户通过右键单击将任何单元格的内容(或者,如果需要,也可以导出公式的任何部分)作为文本、LaTeX 代码或 MathML 代码导出。实际上,用户可以将整个工作簿(workbook)导出为 HTML 文件或 LaTeX 文件。有关 wxMaxima 的文档,包括说明其各种使用方法的工作簿,都可以在 wxMaxima 的<a href="https://wxMaxima-developers.github.io/wxMaxima/help.html">帮助站点</a>上找到,也可以通过“帮助”菜单查看相关说明。</p>
<div class="figure">
<img src="./wxMaximaWindow.png" id="img_wxMaximaWindow" alt="" />
<p class="caption">wxMaxima 界面</p>
</div>
<p>在 wxMaxima 中输入的计算式是由 Maxima 命令行工具在后台执行的。</p>
<h2 number="1.2" id="工作簿workbook基础"><span class="header-section-number">1.2</span> 工作簿(Workbook)基础</h2>
<p>大部分 wxMaxima 功能是不言自明的,但有些细节需要注意。<a href="https://wxMaxima-developers.github.io/wxMaxima/help.html">这个网站</a>包含多个工作簿,这些工作簿涉及 wxMaxima 的各个方面。学习其中的一些(特别是“10 minute <em>(wx)Maxima</em> tutorial”,即“十分钟 (wx)Maxima 教程”)将增加用户对 Maxima 的内容和 wxMaxima 与 Maxima 交互过程的熟悉度。本手册集中描述 wxMaxima 的某些功能,这些功能可能并非不言而喻的,也可能不会被在线文档涵盖。</p>
<h3 number="1.2.1" id="工作簿的使用"><span class="header-section-number">1.2.1</span> 工作簿的使用</h3>
<p>wxMaxima 的特性之一是可以将发送给 Maxima 的命令提前组织到单元格中,这些单元格只在用户请求时才被处理(这意味着:把命令发送给 Maxima)。在处理单元格时,该单元格(且仅该单元格)中的所有命令将作为批处理进行计算。(前面的语句并不十分准确,因为可以选择一组相邻的单元格并且一起计算它们,或者让 Maxima 一次性算完工作簿中的所有单元格。)wxMaxima 提交命令的方法乍一看可能会觉得陌生。但是,这种做法确实大大简化了处理大型文档的工作(用户不希望每次更改都自动触发对整个文档的重新计算)。而且,该方法用于调试命令时非常方便。</p>
<p>如果输入文本到 wxMaxima 中,则会自动创建一个新的工作簿单元格。可以在工具栏中选择此单元格的类型。如果创建了一个(数学)代码单元格,则可以将该单元格发送到 Maxima,这将使得计算结果显示在代码下方。下面显示了一对这样的命令:</p>
<div class="figure">
<img src="./InputCell.png" id="img_InputCell" alt="" />
<p class="caption">输入、输出单元格</p>
</div>
<p>在计算(数学)输入单元格的内容时,Maxima 会为该输入指定一个标签(默认情况下以红色显示,并且可以由“%i”加数字识别),以便在 wxMaxima 会话的后续内容中引用该标签。Maxima 生成的输出也会获得以“%o”开头的标签,而当用户为输出指定了名称(如变量名)时,该标签是隐藏的。在后一种情况下,默认显示用户定义的名称。不过,此时仍可以访问 Maxima 自动生成的“%o”型标签。</p>
<p>除了(数学)输入单元格外,wxMaxima 中还可以使用文本单元格、图片单元格、标题单元格、节单元格和小节单元格等。每个单元格都有独立的撤消缓冲区,因此通过更改多个单元格的内容,然后逐步撤销不需要的更改来进行调试,是非常容易的。此外,工作簿本身有一个全局撤消缓冲区,可以撤消单元格编辑、添加和删除操作。</p>
<p>下图显示了不同的单元格类型(标题单元格、节单元格、小节单元格、文本单元格、输入/输出单元格和图片单元格):</p>
<div class="figure">
<img src="./cell-example.png" id="img_cell-example" alt="" />
<p class="caption">wxMaxima 的不同类型单元格</p>
</div>
<h3 number="1.2.2" id="单元格"><span class="header-section-number">1.2.2</span> 单元格</h3>
<p>工作簿由单元格组成。每个单元格可以包含以下类型的内容:</p>
<ul>
<li>一行或多行 Maxima 命令;</li>
<li>一个或多个图片;</li>
<li>Maxima 的输出(含提问、报错信息);</li>
<li>文本块,例如可用于组成文档的段落;</li>
<li>文档标题、节标题或小节标题等。</li>
</ul>
<p>当输入文本时,wxMaxima 的默认行为是自动创建一个数学单元格。可以使用“单元格”菜单、菜单中显示的热键或工具栏中的下拉列表创建其他类型的单元格。一旦创建了非数学单元格,输入到文档的任何内容都将被解释为文本。</p>
<p>额外的注释文本可以输入到一个数学单元格中,格式为:<code>/*此注释将不会发送到 Maxima 中进行计算*/</code>。</p>
<h3 number="1.2.3" id="水平光标和竖直光标"><span class="header-section-number">1.2.3</span> 水平光标和竖直光标</h3>
<p>在一般的文字处理程序中,如果用户试图选择多个行,该程序将尝试扩展选择范围,使其自动包括这些行的所有内容。类似地,在 wxMaxima 中,如果同时选择了多个单元格,则 wxMaxima 会将选择范围扩展到所有这些单元格的内容。</p>
<p>与一般程序不同的是,wxMaxima 通过定义两种类型的光标,提供了操作灵活性。wxMaxima 将在需要时自动在它们之间切换:</p>
<ul>
<li>如果光标在两个单元格之间移动或单击,则会使用水平光标;</li>
<li>如果在单元格内输入时,则会使用垂直光标。此种光标是当使用鼠标指针或方向键在单元格内移动光标时被激活的,与文本编辑器中光标的激活方式非常相似。</li>
</ul>
<h3 number="1.2.4" id="向-maxima-发送单元格"><span class="header-section-number">1.2.4</span> 向 Maxima 发送单元格</h3>
<p>只要按下键盘上的 <kbd>CTRL+ENTER</kbd>、<kbd>SHIFT+ENTER</kbd> 或 <kbd>ENTER</kbd> 键,(数学)代码单元格中的命令就会执行。wxMaxima 的默认设置是,<kbd>CTRL+ENTER</kbd> 或 <kbd>SHIFT+ENTER</kbd>键会使得命令由 Maxima 执行,但也可以设置为按下 <kbd>ENTER</kbd> 键执行命令。</p>
<h3 number="1.2.5" id="命令自动补全"><span class="header-section-number">1.2.5</span> 命令自动补全</h3>
<p>wxMaxima 包含自动补全功能,该功能可以通过菜单“单元格-&gt;自动补全”(Cell-&gt;Complete Word)或按组合键<kbd>CTRL+K</kbd> 来触发。自动补全是上下文相关的。例如,如果在使用 ezUnits (单位换算包)的单元格中激活,它将提供适用的单位列表。</p>
<div class="figure">
<img src="./ezUnits.png" id="img_ezUnits" alt="" />
<p class="caption">ezUnits</p>
</div>
<p>除了补全文件名、单位名、当前命令或变量的名称之外,自动补全功能还可以显示大多数命令的模板,指示该命令所需参数的类型(和含义)。要激活此功能,可按下 <kbd>SHIFT+CTRL+K</kbd> 或选择相应的菜单项(“单元格-&gt;显示模板”,Cell-&gt;Show Template)。</p>
<h4 number="1.2.5.1" id="希腊字母"><span class="header-section-number">1.2.5.1</span> 希腊字母</h4>
<p>计算机一般以 8 位值(8-bit)存储字符,所以最多可以储存 256 个不同字符。大部分语言中的所有字母、数字和控制符号(传输结束、字符串结束、为菜单绘制矩形的线条和边缘等)都符合该限制。</p>
<p>不过,对于大多数国家来说,256 个字符的代码页并没有包括希腊字母,而这些字母是数学上常用的。为了克服这种限制,<a href="https://home.unicode.org/">Unicode</a>被发明了:一种使英文文本储存方式不变的编码,可使用的字符数远超 256 个。</p>
<p>如果使用支持 Unicode 或不关心字体编码的 Lisp 编译器来编译 Maxima,则在 Maxima 中可以使用 Unicode。前述两种情况中一般至少有一种是真的。wxMaxima 提供了一种使用键盘输入希腊字母的方法:</p>
<ul>
<li>可以通过按下 <kbd>ESC</kbd> 键,然后开始键入希腊字母的英文名称来输入该字母。</li>
<li>或者,也可以通过按下 <kbd>ESC</kbd>、一个英文字母(对希腊字母 omicron 而言是两个)并再次按下 <kbd>ESC</kbd> 来输入。在这种情况下,支持以下字母:</li>
</ul>
<table>
<thead>
<tr class="header">
<th align="center">按键</th>
<th align="center">希腊字母</th>
<th align="center">按键</th>
<th align="center">希腊字母</th>
<th align="center">按键</th>
<th align="center">希腊字母</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="center">a</td>
<td align="center">alpha</td>
<td align="center">i</td>
<td align="center">iota</td>
<td align="center">r</td>
<td align="center">rho</td>
</tr>
<tr class="even">
<td align="center">b</td>
<td align="center">beta</td>
<td align="center">k</td>
<td align="center">kappa</td>
<td align="center">s</td>
<td align="center">sigma</td>
</tr>
<tr class="odd">
<td align="center">g</td>
<td align="center">gamma</td>
<td align="center">l</td>
<td align="center">lambda</td>
<td align="center">t</td>
<td align="center">tau</td>
</tr>
<tr class="even">
<td align="center">d</td>
<td align="center">delta</td>
<td align="center">m</td>
<td align="center">mu</td>
<td align="center">u</td>
<td align="center">upsilon</td>
</tr>
<tr class="odd">
<td align="center">e</td>
<td align="center">epsilon</td>
<td align="center">n</td>
<td align="center">nu</td>
<td align="center">f</td>
<td align="center">phi</td>
</tr>
<tr class="even">
<td align="center">z</td>
<td align="center">zeta</td>
<td align="center">x</td>
<td align="center">xi</td>
<td align="center">c</td>
<td align="center">chi</td>
</tr>
<tr class="odd">
<td align="center">h</td>
<td align="center">eta</td>
<td align="center">om</td>
<td align="center">omicron</td>
<td align="center">y</td>
<td align="center">psi</td>
</tr>
<tr class="even">
<td align="center">q</td>
<td align="center">theta</td>
<td align="center">p</td>
<td align="center">pi</td>
<td align="center">o</td>
<td align="center">omega</td>
</tr>
<tr class="odd">
<td align="center">A</td>
<td align="center">Alpha</td>
<td align="center">I</td>
<td align="center">Iota</td>
<td align="center">R</td>
<td align="center">Rho</td>
</tr>
<tr class="even">
<td align="center">B</td>
<td align="center">Beta</td>
<td align="center">K</td>
<td align="center">Kappa</td>
<td align="center">S</td>
<td align="center">Sigma</td>
</tr>
<tr class="odd">
<td align="center">G</td>
<td align="center">Gamma</td>
<td align="center">L</td>
<td align="center">Lambda</td>
<td align="center">T</td>
<td align="center">Tau</td>
</tr>
<tr class="even">
<td align="center">D</td>
<td align="center">Delta</td>
<td align="center">M</td>
<td align="center">Mu</td>
<td align="center">U</td>
<td align="center">Upsilon</td>
</tr>
<tr class="odd">
<td align="center">E</td>
<td align="center">Epsilon</td>
<td align="center">N</td>
<td align="center">Nu</td>
<td align="center">P</td>
<td align="center">Phi</td>
</tr>
<tr class="even">
<td align="center">Z</td>
<td align="center">Zeta</td>
<td align="center">X</td>
<td align="center">Xi</td>
<td align="center">C</td>
<td align="center">Chi</td>
</tr>
<tr class="odd">
<td align="center">H</td>
<td align="center">Eta</td>
<td align="center">Om</td>
<td align="center">Omicron</td>
<td align="center">Y</td>
<td align="center">Psi</td>
</tr>
<tr class="even">
<td align="center">T</td>
<td align="center">Theta</td>
<td align="center">P</td>
<td align="center">Pi</td>
<td align="center">O</td>
<td align="center">Omega</td>
</tr>
</tbody>
</table>
<p>用同样的方法还可以输入一些其他的数学符号:</p>
<table>
<thead>
<tr class="header">
<th>按键</th>
<th>数学符号</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>hbar</td>
<td>ħ,普朗克常数</td>
</tr>
<tr class="even">
<td>Hbar</td>
<td>Ħ,“H”上有一个短横</td>
</tr>
<tr class="odd">
<td>2</td>
<td>²,平方</td>
</tr>
<tr class="even">
<td>3</td>
<td>³,三次方</td>
</tr>
<tr class="odd">
<td>/2</td>
<td>½,二分之一</td>
</tr>
<tr class="even">
<td>partial</td>
<td>∂,偏微分号</td>
</tr>
<tr class="odd">
<td>integral</td>
<td>∫,积分号</td>
</tr>
<tr class="even">
<td>sq</td>
<td>√,根号</td>
</tr>
<tr class="odd">
<td>ii</td>
<td>ⅈ,虚部</td>
</tr>
<tr class="even">
<td>ee</td>
<td>ⅇ,元素</td>
</tr>
<tr class="odd">
<td>in</td>
<td>∈,属于</td>
</tr>
<tr class="even">
<td>impl,implies</td>
<td>⇒,可推出</td>
</tr>
<tr class="odd">
<td>inf</td>
<td>∞,无穷</td>
</tr>
<tr class="even">
<td>empty</td>
<td>∅,空集</td>
</tr>
<tr class="odd">
<td>TB</td>
<td>▶,向右的大三角形</td>
</tr>
<tr class="even">
<td>tb</td>
<td>▸,向右的小三角形</td>
</tr>
<tr class="odd">
<td>and</td>
<td>⋀,且</td>
</tr>
<tr class="even">
<td>or</td>
<td>⋁,或</td>
</tr>
<tr class="odd">
<td>xor</td>
<td>⊻,异或</td>
</tr>
<tr class="even">
<td>nand</td>
<td>⊼,且非</td>
</tr>
<tr class="odd">
<td>nor</td>
<td>⊽,或非</td>
</tr>
<tr class="even">
<td>equiv</td>
<td>⇔,等价</td>
</tr>
<tr class="odd">
<td>not</td>
<td>¬,非</td>
</tr>
<tr class="even">
<td>union</td>
<td>⋃,并</td>
</tr>
<tr class="odd">
<td>inter</td>
<td>⋂,交</td>
</tr>
<tr class="even">
<td>subseteq</td>
<td>⊆,(可相等)子集</td>
</tr>
<tr class="odd">
<td>subset</td>
<td>⊂,子集</td>
</tr>
<tr class="even">
<td>notsubseteq</td>
<td>⊈,非(可相等)子集</td>
</tr>
<tr class="odd">
<td>notsubset</td>
<td>⊄,非子集</td>
</tr>
<tr class="even">
<td>approx</td>
<td>≅,约等于</td>
</tr>
<tr class="odd">
<td>propto</td>
<td>∝,成比例</td>
</tr>
<tr class="even">
<td>neq,!=,/= 或 #</td>
<td>≠,不等于</td>
</tr>
<tr class="odd">
<td>+/- 或 pm</td>
<td>±,加减号</td>
</tr>
<tr class="even">
<td>&lt;= 或 leq</td>
<td>≤,小于等于</td>
</tr>
<tr class="odd">
<td>&gt;= 或 geq</td>
<td>≥,大于等于</td>
</tr>
<tr class="even">
<td>&lt;&lt; 或 ll</td>
<td>≪,远小于</td>
</tr>
<tr class="odd">
<td>&gt;&gt; 或 gg</td>
<td>≫,远大于</td>
</tr>
<tr class="even">
<td>equiv</td>
<td>≣,等价于</td>
</tr>
<tr class="odd">
<td>qed</td>
<td>∎,证毕</td>
</tr>
<tr class="even">
<td>nabla</td>
<td>∇,nabla 算符</td>
</tr>
<tr class="odd">
<td>sum</td>
<td>∑,求和号</td>
</tr>
<tr class="even">
<td>prod</td>
<td>∏,求积号</td>
</tr>
<tr class="odd">
<td>exists</td>
<td>∃,存在</td>
</tr>
<tr class="even">
<td>nexists</td>
<td>∄,不存在</td>
</tr>
<tr class="odd">
<td>parallel</td>
<td>∥,平行</td>
</tr>
<tr class="even">
<td>perp</td>
<td>⟂,垂直</td>
</tr>
<tr class="odd">
<td>leadsto</td>
<td>↝,导出</td>
</tr>
<tr class="even">
<td>-&gt;</td>
<td>→,向右箭头</td>
</tr>
<tr class="odd">
<td>–&gt;</td>
<td>⟶,向右长箭头</td>
</tr>
</tbody>
</table>
<p>如果某个特殊的 Unicode 字符不在上表中,则可以用如下方式输入:按下 <kbd>ESC</kbd> 后,输入该字符的 16 进制编码,再按下 <kbd>ESC</kbd>。</p>
<p>因此 <kbd>ESC</kbd> <kbd>61</kbd> <kbd>ESC</kbd> 输入了字符 <code>a</code>.</p>
<p>请注意,这些符号中的大多数(逻辑符号除外)在 Maxima 中没有特殊含义,因此将被解释为普通字符。如果使用不支持 Unicode 字符的 Lisp 编译器编译出 Maxima,则这些符号可能会导致输出错误消息。</p>
<h3 number="1.2.6" id="侧边栏"><span class="header-section-number">1.2.6</span> 侧边栏</h3>
<p>侧边栏可以用来访问一些常用的 Maxima 命令快捷方式、目录、包含调试消息的窗口或已执行命令的历史记录等。使用“查看”菜单可以启用这些侧边栏。它们都可以移动到 wxMaxima 窗口内部或外部。其中一个常用的是可用鼠标点选输入希腊字母的侧边栏。</p>
<div class="figure">
<img src="./SidePanes.png" id="img_SidePanes" alt="" />
<p class="caption">各种类型的侧边栏</p>
</div>
<h3 number="1.2.7" id="mathml-输出"><span class="header-section-number">1.2.7</span> MathML 输出</h3>
<p>一些文字处理程序可以识别 MathML 输入并自动将其作为可编辑的数学公式插入,或者(像 LibreOffice 7.1 那样)有一个提供“从剪贴板导入 MathML”功能的公式编辑器。有些程序也支持 RTF 公式。因此,wxMaxima 在右键单击菜单中提供了多种复制公式的方法。</p>
<h3 number="1.2.8" id="标记语言markdown支持"><span class="header-section-number">1.2.8</span> 标记语言(Markdown)支持</h3>
<p>wxMaxima 提供了一些标准的标记(markdown)语言支持,而这些记号不会与数学符号相冲突。其中一个支持是项目符号列表。</p>
<pre><code>普通文本
 *一个条目,缩进级别为 1
 *另一个条目,缩进级别为 1
   *一个条目,缩进级别为 2
   *另一个条目,缩进级别为 2
*第三个条目,缩进级别为 1
普通文本</code></pre>
<p>wxMaxima 也能将以 <code>&gt;</code> 字符开头的文本识别为引用块(译注:在译者的版本无效):</p>
<pre><code>普通文本
&gt;引用文字
&gt;引用文字
&gt;引用文字
普通文本</code></pre>
<p>wxMaxima 的 TeX 和 HTML 输出也能识别 <code>=&gt;</code>,并将其替换为相应的 Unicode 符号:</p>
<pre><code>cogito =&gt; sum.</code></pre>
<p>导出 TeX 和 HTML 文件时将识别的其他符号还有不等号(<code>&lt;=</code> 和 <code>&gt;=</code>)、双线箭头(<code>&lt;=&gt;</code>)、单线箭头(<code>&lt;-&gt;</code>、<code>-&gt;</code> 和 <code>&lt;-</code>)以及 <code>+/-</code>。对于 TeX 输出,还可以识别 <code>&lt;&lt;</code> 和 <code>&gt;&gt;</code>。</p>
<h3 number="1.2.9" id="快捷键"><span class="header-section-number">1.2.9</span> 快捷键</h3>
<p>大多数快捷键可以在相应菜单的文本中找到。由于它们实际上是从菜单文本中获取的,所以可以通过 wxMaxima 的翻译文本进行定制,以满足本地用户的需求,因此我们不在这里记录它们。但是,一些快捷键或其别名并没有记录在菜单中:</p>
<ul>
<li><kbd>CTRL+SHIFT+BACKSPACE</kbd> 删除一个单元格。</li>
<li><kbd>CTRL+TAB</kbd> 或 <kbd>CTRL+SHIFT+TAB</kbd> 开启自动补全功能。</li>
<li><kbd>SHIFT+SPACE</kbd> 插入一个不可断行的空格。</li>
</ul>
<h3 number="1.2.10" id="导出-tex-时的-tex-代码"><span class="header-section-number">1.2.10</span> 导出 TeX 时的 TeX 代码</h3>
<p>如果文本单元格以 <code>TeX:</code> 开头,则导出 TeX 时,文件将包含 <code>TeX:</code> 标记后面的文本。使用此功能可以在 wxMaxima 工作簿中输入 TeX 代码。</p>
<h2 number="1.3" id="文件格式"><span class="header-section-number">1.3</span> 文件格式</h2>
<p>在 wxMaxima 中输入的内容可以存为以下三种文件格式之一,以供以后使用:</p>
<h3 number="1.3.1" id="mac"><span class="header-section-number">1.3.1</span> .mac</h3>
<p><code>.mac</code> 文件是包含 Maxima 命令的普通文本文件,该文件可以使用 Maxima 的 read 命令或 wxMaxima 的“文件-&gt;批处理”(File-&gt;Batch)菜单项来读取它们。</p>
<p>例如:</p>
<p>创建一个名为 Quadratic.mac 的 <code>.mac</code> 文件,它包含两个命令:<code>f(x) := (x - 5)^2;</code> 和 <code>wxdraw2d(explicit(f(x),x,-5,15))</code>。读取该批处理文件的结果如下图所示(删除了一些目录路径信息):</p>
<div class="figure">
<img src="./BatchImage.png" id="img_BatchImage" alt="" />
<p class="caption">批处理</p>
</div>
<div class="sourceCode" id="cb4"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a><span class="fu">read</span>(<span class="st">&quot;test.mac&quot;</span>);</span></code></pre></div>
<p>用户可以使用 <code>.mac</code> 文件编写自己的程序包。但是由于它们没有包含足够的结构信息,因此不能作为一个 wxMaxima 工作簿来读取。</p>
<h3 number="1.3.2" id="wxm"><span class="header-section-number">1.3.2</span> .wxm</h3>
<p><code>.wxm</code> 文件包含除 Maxima 输出之外的工作簿内容。在版本号大于 5.38 的 Maxima 上,可以像 <code>.mac</code> 文件一样,使用 Maxima 的 <code>load()</code> 函数来读取。如果采用这种文本格式,使用含新功能的工作簿时会不可避免地与旧版本的 wxMaxima 不兼容。</p>
<h3 number="1.3.3" id="wxmx"><span class="header-section-number">1.3.3</span> .wxmx</h3>
<p>这种基于 XML 的文件格式保存了完整的工作簿内容,包括缩放因子和观察列表等内容。它是首选的文件格式。</p>
<h2 number="1.4" id="设置选项"><span class="header-section-number">1.4</span> 设置选项</h2>
<p>对于一些常见的可设置变量,wxMaxima提供了两种设置方法:</p>
<ul>
<li>下面的设置对话框允许用户更改当前和后续会话的默认值。</li>
<li>对于当前会话,要变更大多数可设置变量的值只能通过从工作簿添加相应的命令,见后续说明。</li>
</ul>
<div class="figure">
<img src="./wxMaxima_configuration_001.png" id="img_wxMaxima_configuration_001" alt="" />
<p class="caption">wxMaxima 设置对话框</p>
</div>
<h3 number="1.4.1" id="默认动图帧率"><span class="header-section-number">1.4.1</span> 默认动图帧率</h3>
<p>用于新生成动图的帧率保存在变量 <code>wxanimate_framerate</code> 中,可以使用设置对话框更改此变量在新工作簿中的初始值。</p>
<h3 number="1.4.2" id="新-maxima-会话的默认绘图尺寸"><span class="header-section-number">1.4.2</span> 新 Maxima 会话的默认绘图尺寸</h3>
<p>如果 <code>wxplot_size</code> 的值没有被 Maxima 更改,则使用此大小创建绘图并嵌入工作簿。</p>
<p>为了仅对单个绘图命令设置绘制图形的大小,可以使用以下代码:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true"></a><span class="cn">wxdraw2d</span>( </span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true"></a>   <span class="cn">explicit</span>(</span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true"></a>       <span class="cn">x</span>^<span class="dv">2</span>,</span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true"></a>       <span class="cn">x</span>,<span class="dv">-5</span>,<span class="dv">5</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true"></a>   )</span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true"></a>), <span class="cn">wxplot_size</span>=[<span class="dv">480</span>,<span class="dv">480</span>]$</span></code></pre></div>
<h3 number="1.4.3" id="在文本中匹配括号"><span class="header-section-number">1.4.3</span> 在文本中匹配括号</h3>
<p>该选项使以下两个功能生效:</p>
<ul>
<li>如果输入了左括号、左方括号或左双引号,wxMaxima 将自动在其后插入与之配对的右括号、右方括号或右双引号。</li>
<li>如果在输入前述字符中的任何一个时选择了文本,则所选文本将被放在配对的两个字符之间。</li>
</ul>
<h3 number="1.4.4" id="不自动保存工作簿"><span class="header-section-number">1.4.4</span> 不自动保存工作簿</h3>
<p>如果设置了此选项,则只有在用户请求时才会覆盖工作簿所在的文件。为了防止发生碰撞、断电等突发情况,临时目录(temp)中仍保留了一个最近的备份文件。</p>
<p>如果未设置此选项,则 wxMaxima 的行为更像现代手机软件:</p>
<ul>
<li>文件在退出时被自动保存;</li>
<li>每 3 分钟文件被自动保存一次;</li>
</ul>
<h3 number="1.4.5" id="设置信息保存的位置"><span class="header-section-number">1.4.5</span> 设置信息保存的位置</h3>
<p>当使用 Unix/Linux 系统时,设置信息将保存在主目录中的 <code>.wxMaxima</code> 文件里(如果 wxWidgets 版本号小于 3.1.1)或 <code>.config/wxMaxima.conf</code> 文件里(如果 wxWidgets 的版本号大于等于 3.1.1(XDG标准))。用户可以通过命令 <code>wxbuild_info();</code> 或使用菜单选项 “帮助-&gt;关于”(Help-&gt;About)来检索 wxWidgets 版本号。<a href="https://www.wxwidgets.org/">wxWidgets</a> 是跨平台的 GUI 库,也是 wxMaxima 的底层库(因此 wxMaxima 的名称中带“wx”)。 (由于文件名以点“.”开头,文件 <code>.wxMaxima</code> 或 <code>.config</code> 将被隐藏)。</p>
<p>当使用 Windows 系统时,配置信息将存储在注册表中。在注册表中的以下位置可以找到 wxMaxima 的相关条目:<code>HKEY_CURRENT_USER\Software\wxMaxima</code>。</p>
<hr />
<h1 number="2" id="对-maxima-功能的扩充"><span class="header-section-number">2</span> 对 Maxima 功能的扩充</h1>
<p>wxMaxima 是 Maxima 的图形用户界面,因此它的主要目的是将命令传递给 Maxima,并输出执行这些命令的结果。但是,在某些情况下,wxMaxima 会为 Maxima 添加新的功能。前面已提到 wxMaxima 可以将工作簿的内容导出为 HTML 和 LaTeX 文件。本节将讨论另外一些增强功能,以及在工作簿中包含图形的方法。</p>
<h2 number="2.1" id="为变量添加下标"><span class="header-section-number">2.1</span> 为变量添加下标</h2>
<p>如果 <code>wxsubscripts</code> 设置为 true,则当以下条件满足时,将使用下标来显示格式为 <code>x_y</code> 的变量名:</p>
<ul>
<li><code>y</code> 是一个字母;</li>
<li><code>y</code> 是一个整数。</li>
</ul>
<p>如果变量格式与上述条件不匹配,仍可以使用命令<code>wxdeclare_subscript(variable_name);</code> 或 <code>wxdeclare_subscript([variable_name1,variable_name2,...]);</code>来显示下标。声明为下标的变量可以使用以下命令还原格式:<code>wxdeclare_subscript(variable_name,false);</code>。</p>
<h2 number="2.2" id="在状态栏中提供反馈信息"><span class="header-section-number">2.2</span> 在状态栏中提供反馈信息</h2>
<p>长时间运行的命令中可以包含 <code>wxstatusbar()</code>,以用于在状态栏中向用户提供反馈信息。此反馈信息将被任何新生成的反馈信息覆盖(从而可以将其用作运行进度指示器),并在发送到 Maxima 的命令运行结束后立即被删除。即使在只与 Maxima(而非 wxMaxima)一起使用的库中包含命令 <code>wxstatusbar()</code> 也是可行的:如果没有运行 wxMaxima,那么命令 <code>wxstatusbar()</code> 也不会被执行。</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true"></a><span class="kw">for</span> <span class="cn">i</span>:<span class="dv">1</span> <span class="kw">thru</span> <span class="dv">10</span> <span class="kw">do</span> (</span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true"></a>    <span class="co">/* 告诉用户目前的运行位置 */</span></span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true"></a>    <span class="cn">wxstatusbar</span>(<span class="fu">concat</span>(<span class="st">&quot;Pass &quot;</span>,<span class="cn">i</span>)),</span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true"></a>    <span class="co">/* (sleep n) 是可接在字符&quot;?&quot;后使用的 Lisp 函数 */</span></span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true"></a>    <span class="co">/* 它推迟了程序的运行,此处是 3 秒 */</span></span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true"></a>    ?<span class="cn">sleep</span>(<span class="dv">3</span>)</span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true"></a>)$</span></code></pre></div>
<h2 number="2.3" id="绘图"><span class="header-section-number">2.3</span> 绘图</h2>
<p>因为绘图功能与图形密切相关,所以图形用户界面理应为原始程序的绘图功能提供一些扩充内容。</p>
<h3 number="2.3.1" id="将绘制的图形嵌入工作簿"><span class="header-section-number">2.3.1</span> 将绘制的图形嵌入工作簿</h3>
<p>Maxima 在创建图形时,通常会指示外部程序 gnuplot 用单独的窗口展示每个图形。因为在工作簿中嵌入图形通常会更方便,所以 wxMaxima 提供了自己的一组绘图函数。这些函数与其名称所对应的 Maxima 函数在使用时没有区别,但是都以“wx”为前缀。例如,<code>wxplot2d</code> 对应于 <code>plot2d</code>,<code>wxplot3d</code> 对应于 <code>plot3d</code>,<code>wxdraw</code> 对应于 <code>draw</code>,<code>wxhistogram</code> 对应于 <code>histogram</code>。</p>
<h3 number="2.3.2" id="设置嵌入图形的大小"><span class="header-section-number">2.3.2</span> 设置嵌入图形的大小</h3>
<p>如前面所述,设置对话框提供了一种更改默认绘图大小的方法,该方法设置了 <code>wxplot_size</code> 的默认值。绘图时,wxMaxima 将该变量识别为图片尺寸(以像素为单位)。可以查询该变量,或以如下方式设置所绘制图片的大小:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true"></a><span class="cn">wxplot_size</span>:[<span class="dv">1200</span>,<span class="dv">800</span>]$</span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true"></a><span class="cn">wxdraw2d</span>(</span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true"></a>    <span class="cn">explicit</span>(</span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true"></a>        <span class="fu">sin</span>(<span class="cn">x</span>),</span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true"></a>        <span class="cn">x</span>,<span class="dv">1</span>,<span class="dv">10</span></span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true"></a>    )</span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true"></a>)$</span></code></pre></div>
<p>如果只更改一个绘制图片的大小,wxMaxima 提供了一种只为当前单元格更改属性的方法。具体用法为,将 <code>wxplot_size=[value1,value2]</code> 附加到 <code>wxdraw2d()</code> 命令结尾,而不是作为该命令的一部分:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true"></a><span class="cn">wxdraw2d</span>(</span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true"></a>    <span class="cn">explicit</span>(</span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true"></a>        <span class="fu">sin</span>(<span class="cn">x</span>),</span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true"></a>        <span class="cn">x</span>,<span class="dv">1</span>,<span class="dv">10</span></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true"></a>    )</span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true"></a>),<span class="cn">wxplot_size</span>=[<span class="dv">1600</span>,<span class="dv">800</span>]$</span></code></pre></div>
<h3 number="2.3.3" id="更好的绘图质量"><span class="header-section-number">2.3.3</span> 更好的绘图质量</h3>
<p>Gnuplot 似乎没有提供一种通用的方法来确定它是否支持 cairo 库提供的高质量位图输出。如果所编译的 gnuplot 使用了 cairo 库,勾选设置菜单中的 pngcairo 选项(可被变量 <code>wxplot_pngcairo</code> 覆盖)可以提供抗锯齿和其他线条样式支持。如果设置了 <code>wxplot_pngcairo</code>,而 gnuplot 并未使用 cairo 库,则绘图将会失败并给出错误消息。</p>
<h3 number="2.3.4" id="在交互式-gnuplot-窗口中打开嵌入的绘图"><span class="header-section-number">2.3.4</span> 在交互式 gnuplot 窗口中打开嵌入的绘图</h3>
<p>如果绘图时使用 <code>wxdraw</code> 类型的命令(不含 <code>wxplot2d</code> 和 <code>wxplot3d</code>),并且底层的 <code>gnuplot</code> 项目文件不是太大,则 wxMaxima 提供了一个右键单击菜单,允许在交互式的 gnuplot 窗口中打开绘制的图形。</p>
<h3 number="2.3.5" id="在绘图窗口中打开-gnuplot-控制台"><span class="header-section-number">2.3.5</span> 在绘图窗口中打开 gnuplot 控制台</h3>
<p>在 Windows 系统上,如果 Maxima 的变量 <code>gnuplot_command</code> 的值 “gnuplot” 被换为 “wgnuplot”,则 gnuplot 会打开一个控制台窗口,在该窗口中可以输入 gnuplot 的命令。但是,启用此功能会使得每次绘图时 gnuplot 短时间内独占键盘。</p>
<h3 number="2.3.6" id="在工作簿中嵌入动图"><span class="header-section-number">2.3.6</span> 在工作簿中嵌入动图</h3>
<p>在三维图形中,点的坐标往往难以读取。一个可行的替代方法是将第三个参数指定给鼠标滚轮(即绘制多个二维图形)。<code>with_slider_draw</code> 命令是 <code>wxdraw2d</code> 的一个版本,它可以绘制多幅图片,使用户可以通过移动菜单栏中的滑块(或滚动鼠标滚轮)在这些图片之间切换。wxMaxima 支持将此动图导出为 gif 格式的图片。</p>
<p><code>with_slider_draw</code> 命令的前两个参数是用于控制绘图的变量名称和变量值的列表,接下来的参数与 <code>wxdraw2d</code> 命令的参数相同:</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true"></a><span class="cn">with_slider_draw</span>(</span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true"></a>    <span class="cn">f</span>,[<span class="dv">1</span>,<span class="dv">2</span>,<span class="dv">3</span>,<span class="dv">4</span>,<span class="dv">5</span>,<span class="dv">6</span>,<span class="dv">7</span>,<span class="dv">10</span>],</span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true"></a>    <span class="cn">title</span>=<span class="fu">concat</span>(<span class="st">&quot;f=&quot;</span>,<span class="cn">f</span>,<span class="st">&quot;Hz&quot;</span>),</span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true"></a>    <span class="cn">explicit</span>(</span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true"></a>        <span class="fu">sin</span>(<span class="dv">2</span>*<span class="va">%pi</span>*<span class="cn">f</span>*<span class="cn">x</span>),</span>
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true"></a>        <span class="cn">x</span>,<span class="dv">0</span>,<span class="dv">1</span></span>
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true"></a>    ),<span class="cn">grid</span>=<span class="kw">true</span></span>
<span id="cb9-8"><a href="#cb9-8" aria-hidden="true"></a>);</span></code></pre></div>
<p>对三维绘图而言,类似的功能由命令 <code>with_slider_draw3d</code> 提供,可用参数来旋转三维图形:</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true"></a><span class="cn">wxanimate_autoplay</span>:<span class="kw">true</span>;</span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true"></a><span class="cn">wxanimate_framerate</span>:<span class="dv">20</span>;</span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true"></a><span class="cn">with_slider_draw3d</span>(</span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true"></a>    α,<span class="fu">makelist</span>(<span class="cn">i</span>,<span class="cn">i</span>,<span class="dv">1</span>,<span class="dv">360</span>,<span class="dv">3</span>),</span>
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true"></a>    <span class="cn">title</span>=<span class="fu">sconcat</span>(<span class="st">&quot;α=&quot;</span>,α),</span>
<span id="cb10-6"><a href="#cb10-6" aria-hidden="true"></a>    <span class="cn">surface_hide</span>=<span class="kw">true</span>,</span>
<span id="cb10-7"><a href="#cb10-7" aria-hidden="true"></a>    <span class="cn">contour</span>=<span class="cn">both</span>,</span>
<span id="cb10-8"><a href="#cb10-8" aria-hidden="true"></a>    <span class="cn">view</span>=[<span class="dv">60</span>,α],</span>
<span id="cb10-9"><a href="#cb10-9" aria-hidden="true"></a>    <span class="cn">explicit</span>(</span>
<span id="cb10-10"><a href="#cb10-10" aria-hidden="true"></a>        <span class="fu">sin</span>(<span class="cn">x</span>)*<span class="fu">sin</span>(<span class="cn">y</span>),</span>
<span id="cb10-11"><a href="#cb10-11" aria-hidden="true"></a>        <span class="cn">x</span>,-π,π,</span>
<span id="cb10-12"><a href="#cb10-12" aria-hidden="true"></a>        <span class="cn">y</span>,-π,π</span>
<span id="cb10-13"><a href="#cb10-13" aria-hidden="true"></a>    )</span>
<span id="cb10-14"><a href="#cb10-14" aria-hidden="true"></a>)$</span></code></pre></div>
<p>如果重要的是图的大致形状,那么只要稍微移动一点,就可以直观地看出它的三维特征:</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true"></a><span class="cn">wxanimate_autoplay</span>:<span class="kw">true</span>;</span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true"></a><span class="cn">wxanimate_framerate</span>:<span class="dv">20</span>;</span>
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true"></a><span class="cn">with_slider_draw3d</span>(</span>
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true"></a>    <span class="cn">t</span>,<span class="fu">makelist</span>(<span class="cn">i</span>,<span class="cn">i</span>,<span class="dv">0</span>,<span class="dv">2</span>*π,<span class="fl">.05</span>*π),</span>
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true"></a>    <span class="cn">title</span>=<span class="fu">sconcat</span>(<span class="st">&quot;t=&quot;</span>,<span class="cn">t</span>),</span>
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true"></a>    <span class="cn">surface_hide</span>=<span class="kw">true</span>,</span>
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true"></a>    <span class="cn">contour</span>=<span class="cn">both</span>,</span>
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true"></a>    <span class="cn">view</span>=[<span class="dv">60</span>,<span class="dv">30+5</span>*<span class="fu">sin</span>(<span class="cn">t</span>)],</span>
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true"></a>    <span class="cn">explicit</span>(</span>
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true"></a>        <span class="fu">sin</span>(<span class="cn">x</span>)*<span class="cn">y</span>^<span class="dv">2</span>,</span>
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true"></a>        <span class="cn">x</span>,<span class="dv">-2</span>*π,<span class="dv">2</span>*π,</span>
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true"></a>        <span class="cn">y</span>,<span class="dv">-2</span>*π,<span class="dv">2</span>*π</span>
<span id="cb11-13"><a href="#cb11-13" aria-hidden="true"></a>    )</span>
<span id="cb11-14"><a href="#cb11-14" aria-hidden="true"></a>)$</span></code></pre></div>
<p>对于那些更熟悉 <code>plot</code> 而不是 <code>draw</code> 的人来说,还有一组函数:</p>
<ul>
<li><code>with_slider</code>;</li>
<li><code>wxanimate</code>。</li>
</ul>
<p>在通常情况下,动图会以设置中选择的帧率回放或导出。要设置回放单个动图的速度,可以修改变量 <code>wxanimate_framerate</code>:</p>
<div class="sourceCode" id="cb12"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true"></a><span class="cn">wxanimate</span>(<span class="cn">a</span>, <span class="dv">10</span>, <span class="fu">sin</span>(<span class="cn">a</span>*<span class="cn">x</span>), [<span class="cn">x</span>,<span class="dv">-5</span>,<span class="dv">5</span>]),</span>
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true"></a>     <span class="cn">wxanimate_framerate</span>=<span class="dv">6</span>$</span></code></pre></div>
<p>动图函数使用 Maxima 的 <code>makelist</code> 命令,因此存在如下缺陷:只有当滑块变量在绘图表达式中直接可见时,才会将该变量的值替换到表达式中。因此,执行以下例子将显示错误信息:</p>
<div class="sourceCode" id="cb13"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true"></a><span class="cn">f</span>:<span class="fu">sin</span>(<span class="cn">a</span>*<span class="cn">x</span>);</span>
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true"></a><span class="cn">with_slider_draw</span>(</span>
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true"></a>    <span class="cn">a</span>,<span class="fu">makelist</span>(<span class="cn">i</span>/<span class="dv">2</span>,<span class="cn">i</span>,<span class="dv">1</span>,<span class="dv">10</span>),</span>
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true"></a>    <span class="cn">title</span>=<span class="fu">concat</span>(<span class="st">&quot;a=&quot;</span>,<span class="fu">float</span>(<span class="cn">a</span>)),</span>
<span id="cb13-5"><a href="#cb13-5" aria-hidden="true"></a>    <span class="cn">grid</span>=<span class="kw">true</span>,</span>
<span id="cb13-6"><a href="#cb13-6" aria-hidden="true"></a>    <span class="cn">explicit</span>(<span class="cn">f</span>,<span class="cn">x</span>,<span class="dv">0</span>,<span class="dv">10</span>)</span>
<span id="cb13-7"><a href="#cb13-7" aria-hidden="true"></a>)$</span></code></pre></div>
<p>如果修改为明确要求 Maxima 代入滑块变量的值,则修改后的代码可用于绘制动图:</p>
<div class="sourceCode" id="cb14"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true"></a><span class="cn">f</span>:<span class="fu">sin</span>(<span class="cn">a</span>*<span class="cn">x</span>);</span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true"></a><span class="cn">with_slider_draw</span>(</span>
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true"></a>    <span class="cn">b</span>,<span class="fu">makelist</span>(<span class="cn">i</span>/<span class="dv">2</span>,<span class="cn">i</span>,<span class="dv">1</span>,<span class="dv">10</span>),</span>
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true"></a>    <span class="cn">title</span>=<span class="fu">concat</span>(<span class="st">&quot;a=&quot;</span>,<span class="fu">float</span>(<span class="cn">b</span>)),</span>
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true"></a>    <span class="cn">grid</span>=<span class="kw">true</span>,</span>
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true"></a>    <span class="cn">explicit</span>(</span>
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true"></a>        <span class="fu">subst</span>(<span class="cn">a</span>=<span class="cn">b</span>,<span class="cn">f</span>),</span>
<span id="cb14-8"><a href="#cb14-8" aria-hidden="true"></a>        <span class="cn">x</span>,<span class="dv">0</span>,<span class="dv">10</span></span>
<span id="cb14-9"><a href="#cb14-9" aria-hidden="true"></a>    )</span>
<span id="cb14-10"><a href="#cb14-10" aria-hidden="true"></a>)$</span></code></pre></div>
<h3 number="2.3.7" id="同时打开多个绘图窗口"><span class="header-section-number">2.3.7</span> 同时打开多个绘图窗口</h3>
<p>虽然这个 Maxima 特性不是由 wxMaxima 提供的,但是(如果安装的 Maxima 支持此特性)有时使用起来会很方便。以下例子来自 Mario Rodriguez 在 Maxima 邮件列表中的一篇帖子:</p>
<div class="sourceCode" id="cb15"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true"></a>    <span class="fu">load</span>(<span class="fu">draw</span>);</span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true"></a>    </span>
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true"></a>    <span class="co">/* 在第一个窗口中绘制抛物线 */</span></span>
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true"></a>    <span class="fu">draw2d</span>(<span class="cn">terminal</span>=[<span class="cn">wxt</span>,<span class="dv">1</span>],<span class="cn">explicit</span>(<span class="cn">x</span>^<span class="dv">2</span>,<span class="cn">x</span>,<span class="dv">-1</span>,<span class="dv">1</span>));</span>
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true"></a>    </span>
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true"></a>    <span class="co">/* 在第二个窗口中绘制抛物线 */</span></span>
<span id="cb15-7"><a href="#cb15-7" aria-hidden="true"></a>    <span class="fu">draw2d</span>(<span class="cn">terminal</span>=[<span class="cn">wxt</span>,<span class="dv">2</span>],<span class="cn">explicit</span>(<span class="cn">x</span>^<span class="dv">2</span>,<span class="cn">x</span>,<span class="dv">-1</span>,<span class="dv">1</span>));</span>
<span id="cb15-8"><a href="#cb15-8" aria-hidden="true"></a>    </span>
<span id="cb15-9"><a href="#cb15-9" aria-hidden="true"></a>    <span class="co">/* 在第三个窗口中绘制旋转抛物面 */</span></span>
<span id="cb15-10"><a href="#cb15-10" aria-hidden="true"></a>    <span class="fu">draw3d</span>(<span class="cn">terminal</span>=[<span class="cn">wxt</span>,<span class="dv">3</span>],<span class="cn">explicit</span>(<span class="cn">x</span>^<span class="dv">2</span>+<span class="cn">y</span>^<span class="dv">2</span>,<span class="cn">x</span>,<span class="dv">-1</span>,<span class="dv">1</span>,<span class="cn">y</span>,<span class="dv">-1</span>,<span class="dv">1</span>));</span></code></pre></div>
<p>在同一个窗口中绘制这些图形也是可行的:</p>
<div class="sourceCode" id="cb16"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true"></a>    <span class="cn">wxdraw</span>(</span>
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true"></a>        <span class="cn">gr2d</span>(</span>
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true"></a>            <span class="cn">key</span>=<span class="st">&quot;sin (x)&quot;</span>,<span class="cn">grid</span>=[<span class="dv">2</span>,<span class="dv">2</span>],</span>
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true"></a>            <span class="cn">explicit</span>(<span class="fu">sin</span>(<span class="cn">x</span>),<span class="cn">x</span>,<span class="dv">0</span>,<span class="dv">2</span>*<span class="va">%pi</span>)),</span>
<span id="cb16-5"><a href="#cb16-5" aria-hidden="true"></a>        <span class="cn">gr2d</span>(</span>
<span id="cb16-6"><a href="#cb16-6" aria-hidden="true"></a>        <span class="cn">key</span>=<span class="st">&quot;cos (x)&quot;</span>,<span class="cn">grid</span>=[<span class="dv">2</span>,<span class="dv">2</span>],</span>
<span id="cb16-7"><a href="#cb16-7" aria-hidden="true"></a>        <span class="cn">explicit</span>(<span class="fu">cos</span>(<span class="cn">x</span>),<span class="cn">x</span>,<span class="dv">0</span>,<span class="dv">2</span>*<span class="va">%pi</span>))</span>
<span id="cb16-8"><a href="#cb16-8" aria-hidden="true"></a>     );</span></code></pre></div>
<h3 number="2.3.8" id="用-draw-函数绘图侧边栏"><span class="header-section-number">2.3.8</span> “用 draw 函数绘图”侧边栏</h3>
<p>“用 draw 函数绘图”侧边栏暗含一个简单的代码生成器,使用它可以利用 Maxima 的 draw 程序包方便灵活地生成一些图形绘制命令模板。</p>
<h4 number="2.3.8.1" id="二维图形"><span class="header-section-number">2.3.8.1</span> 二维图形</h4>
<p>提供绘制二维图形的 <code>draw()</code> 命令的简单模板。然后可以使用具体的绘图命令填充该模板,例如利用“二维图形”按钮下方的其他按钮导入绘图命令。</p>
<p>“二维图形”按钮的一个有用的功能是,用它可以设置一个生成动画的模板,其中一个变量(默认情况下是 t)在每一帧中都有不同的值。通常动态的二维图形比静态的三维图形中的相同数据更容易理解。</p>
<h4 number="2.3.8.2" id="三维图形"><span class="header-section-number">2.3.8.2</span> 三维图形</h4>
<p>提供绘制三维图形的 <code>draw()</code> 命令的简单模板。如果没有主动使用此功能和上一功能,则所有其他按钮都将自动提前调用上一功能中的绘制二维图形模板。</p>
<h4 number="2.3.8.3" id="表达式"><span class="header-section-number">2.3.8.3</span> 表达式</h4>
<p>在光标当前所在的 <code>draw()</code> 命令中添加绘图函数表达式,如 <code>sin(x)</code>, <code>x*sin(x)</code> 或者 <code>x^2+2*x-4</code> 等 。每个图中可以绘制任意数量的图形。如果没有 <code>draw()</code> 命令,将调用绘制二维图形的模板。</p>
<h4 number="2.3.8.4" id="隐式图形"><span class="header-section-number">2.3.8.4</span> 隐式图形</h4>
<p>尝试寻找满足 <code>y=sin(x)</code>,<code>y*sin(x)=3</code> 或 <code>x^2+y^2=4</code> 之类的表达式的所有解,并在光标当前所在的 <code>draw()</code> 命令中绘制对应曲线。如果没有 <code>draw()</code> 命令,将调用绘制二维图形的模板。</p>
<h4 number="2.3.8.5" id="参数式图形"><span class="header-section-number">2.3.8.5</span> 参数式图形</h4>
<p>将变量(如 t)从下限变化到上限,并在当前绘图命令中使用两个表达式(如 <code>t*sin(t)</code> 和 <code>t*cos(t)</code>),以生成曲线上点的横、纵坐标 (x,y)(在三维图形中,第三个表达式生成竖坐标 z)。</p>
<h4 number="2.3.8.6" id="点"><span class="header-section-number">2.3.8.6</span> 点</h4>
<p>绘制多个点,并且可以选择顺次连接它们。点的坐标取自列表的列表、二维数组或为每个轴指定的一个列表或数组。</p>
<h4 number="2.3.8.7" id="图形标题"><span class="header-section-number">2.3.8.7</span> 图形标题</h4>
<p>在图形上方绘制标题。</p>
<h4 number="2.3.8.8" id="坐标轴"><span class="header-section-number">2.3.8.8</span> 坐标轴</h4>
<p>设置坐标轴。</p>
<h4 number="2.3.8.9" id="等高线"><span class="header-section-number">2.3.8.9</span> 等高线</h4>
<p>(仅适用于三维绘图)将类似于山地图中的等高线添加到当前 <code>draw()</code> 命令绘制的三维图形中,或图形在坐标面的二维投影上。另外,此向导也可以用来不绘制曲面而只显示等高线。</p>
<h4 number="2.3.8.10" id="图形名称"><span class="header-section-number">2.3.8.10</span> 图形名称</h4>
<p>在图例中增加下一个图形对应的图例项。空名称将阻止为下一个图形生成图例项。</p>
<h4 number="2.3.8.11" id="线条颜色"><span class="header-section-number">2.3.8.11</span> 线条颜色</h4>
<p>为当前 <code>draw()</code> 命令所绘图形设置线条颜色。</p>
<h4 number="2.3.8.12" id="填充颜色"><span class="header-section-number">2.3.8.12</span> 填充颜色</h4>
<p>为当前 <code>draw()</code> 命令所绘图形设置填充颜色。</p>
<h4 number="2.3.8.13" id="网格"><span class="header-section-number">2.3.8.13</span> 网格</h4>
<p>弹出设置网格线的向导。</p>
<h4 number="2.3.8.14" id="精度"><span class="header-section-number">2.3.8.14</span> 精度</h4>
<p>允许选择适当数目的点,以兼顾速度与精度(任何绘图程序都会权衡两者)。</p>
<h2 number="2.4" id="嵌入图片"><span class="header-section-number">2.4</span> 嵌入图片</h2>
<p>如果使用的是 <code>.wxmx</code> 文件格式,则可以通过拖放将图片文件嵌入 wxMaxima 文档中。但有时(例如某个图像的内容可能在稍后发生更改)最好指明在计算时加载图像:</p>
<div class="sourceCode" id="cb17"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true"></a><span class="cn">show_image</span>(<span class="st">&quot;man.png&quot;</span>);</span></code></pre></div>
<h2 number="2.5" id="启动时读取的文件"><span class="header-section-number">2.5</span> 启动时读取的文件</h2>
<p>在 wxMaxima 的设置对话框中可以编辑两个文件的命令,这些命令在启动时被执行:</p>
<ul>
<li>文件 <code>maxima-init.mac</code> 中包含每次启动 Maxima 时被执行的命令;</li>
<li>文件 <code>wxmaxima-init.mac</code> 中包含每次 wxMaxima 调用 Maxima 时被执行的命令。</li>
</ul>
<p>这些文件位于用户的主目录或配置文件目录中的 Maxima 用户目录(在 Windows 系统中通常为 maxima,在其他系统中为 .maxima)。使用命令 <code>maxima_userdir;</code> 可以确定该目录。</p>
<h2 number="2.6" id="以-wx-开头的特殊变量"><span class="header-section-number">2.6</span> 以 wx 开头的特殊变量</h2>
<ul>
<li><code>wxsubscripts</code> :告诉 Maxima 是否应将包含下划线的变量名(例如 <code>R_150</code>)转换为带下标的变量名。有关自动转换哪些变量名的详细信息,请参见 <code>wxdeclare_subscript</code>。</li>
<li><code>wxfilename</code>:此变量包含当前在 wxMaxima 中打开的文件的名称。</li>
<li><code>wxplot_pngcairo</code>:表明 wxMaxima 是否尝试使用 gnuplot 的 pngcairo 功能,以提供更多的线条样式和更好的整体图形质量。</li>
<li><code>wxplot_size</code>:定义嵌入绘图的分辨率。</li>
<li><code>wxchangedir</code>:在大多数操作系统上,wxMaxima 自动将 Maxima 的工作目录设置为当前文件的目录。这允许文件 I/O(例如通过 <code>read_matrix</code>)工作,而无需指定必须读或写的文件的整个路径。在 Windows 操作系统上,此功能有时会导致错误消息,因此可以在设置对话框中将其设置为 <code>false</code>。</li>
<li><code>wxanimate_framerate</code>:下一个动图回放的帧率。</li>
<li><code>wxanimate_autoplay</code>:是否在默认情况下自动播放动图。</li>
</ul>
<h2 number="2.7" id="输出美观的二维公式"><span class="header-section-number">2.7</span> 输出美观的二维公式</h2>
<p>函数 <code>table_form()</code> 显示的二维列表比 Maxima 的默认输出更具可读性。该函数的输入是一个列表,其中含一个或多个列表。与 <code>print</code> 命令类似,此命令即使以符号 <code>$</code> 结尾也会显示输出。以分号 <code>;</code> 结束命令时,除了得到列表,还会有“done”语句。</p>
<div class="sourceCode" id="cb18"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true"></a><span class="cn">table_form</span>(</span>
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true"></a>    [</span>
<span id="cb18-3"><a href="#cb18-3" aria-hidden="true"></a>        [<span class="dv">1</span>,<span class="dv">2</span>],</span>
<span id="cb18-4"><a href="#cb18-4" aria-hidden="true"></a>        [<span class="dv">3</span>,<span class="dv">4</span>]</span>
<span id="cb18-5"><a href="#cb18-5" aria-hidden="true"></a>    ]</span>
<span id="cb18-6"><a href="#cb18-6" aria-hidden="true"></a>)$</span></code></pre></div>
<p>正如下一个例子所示,可以在执行 <code>table_form</code> 命令之前创建需要显示的列表。</p>
<div class="figure">
<img src="./MatrixTableExample.png" id="img_MatrixTableExample" alt="" />
<p class="caption">一个三行表的例子</p>
</div>
<p>此外,由于矩阵是含列表的列表,它也可以用类似的方式转换为表格。</p>
<div class="figure">
<img src="./SecondTableExample.png" id="img_SecondTableExample" alt="" />
<p class="caption">另一个 table_form 的例子</p>
</div>
<h2 number="2.8" id="错误bug报告"><span class="header-section-number">2.8</span> 错误(bug)报告</h2>
<p>wxMaxima 提供了一些函数,用于收集当前系统的错误报告信息:</p>
<ul>
<li><code>wxbuild_info()</code> 收集当前运行的 wxMaxima 的版本信息;</li>
<li><code>wxbug_report()</code> 说明如何以及在何处提交错误报告。</li>
</ul>
<h2 number="2.9" id="让输出显示为红色"><span class="header-section-number">2.9</span> 让输出显示为红色</h2>
<p>Maxima 的 <code>box()</code> 命令使 wxMaxima 以红色输出其参数。</p>
<hr />
<h1 number="3" id="疑难解答"><span class="header-section-number">3</span> 疑难解答</h1>
<h2 number="3.1" id="无法连接到-maxima"><span class="header-section-number">3.1</span> 无法连接到 Maxima</h2>
<p>由于 Maxima(进行实际数学运算的程序)和 wxMaxima(提供易于使用的用户界面的程序)是通过本地网络连接进行通信的独立程序,因此,最有可能的原因是这种连接不起作用。例如,可能设置了防火墙不仅可以阻止来自互联网的未经授权的连接(也许还会拦截一些通向互联网的连接),而且可以阻止同一台计算机内部的进程间通信。注意,由于 Maxima 由 Lisp 语言处理程序运行,因此被阻止的通信进程不一定命名为“Maxima”。此时打开网络连接的程序名称可能是 sbcl、gcl、ccl、lisp.exe 或者类似的名字。</p>
<p>在 Un*x 系统上,另一个可能的原因是在同一台计算机上的两个程序之间提供网络连接的环回(loopback)网络配置不正确。</p>
<h2 number="3.2" id="从损坏的-.wxmx-文件中取回信息的方法"><span class="header-section-number">3.2</span> 从损坏的 .wxmx 文件中取回信息的方法</h2>
<p>大多数现代的、基于 XML 格式的文件其实都是普通的压缩(zip)文件。wxMaxima 没有启用压缩,因此可以在任何文本编辑器中查看 <code>.wxmx</code> 文件的内容。</p>
<p>如果文件末尾的 zip 签名仍然完整,那么将损坏的 <code>.wxmx</code> 文件重命名为 <code>.zip</code> 文件后,大多数操作系统都提供了提取存储在其中的信息的方法。当需要从该文件中恢复原始图像文件时,可以执行此操作。当 zip 签名不完整时,也不是毫无办法:如果 wxMaxima 在保存文件时检测到错误,那么还会有一个 <code>.wxmx~</code> 文件,其内容可能会有所帮助。</p>
<p>即使没有 <code>.wxmx~</code> 文件,<code>.wxmx</code> 文件中 XML 部分是未压缩的,可以将该文件重命名为 <code>.txt</code> 文件,并使用文本编辑器恢复文件中的 XML 部分(以 <code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</code> 开头,并以 <code>&lt;/wxMaximaDocument&gt;</code> 结尾(在 XML 部分的前后,可在文本编辑器中看到一些不可读的二进制内容)。</p>
<p>如果将只包含 XML 部分的文本文件(例如,将这一部分复制并粘贴到新文件中)保存为以 <code>.xml</code> 结尾的文件,则 wxMaxima 可以从中恢复原始文档的文本。</p>
<h2 number="3.3" id="在命令完成前显示一些调试信息"><span class="header-section-number">3.3</span> 在命令完成前显示一些调试信息</h2>
<p>通常 wxMaxima 会等待最后的公式形成后才开始输出,这节省了多次尝试输出部分公式的时间。不过, <code>disp()</code> 命令可以立即输出调试信息,而不必等待当前的 Maxima 命令完成:</p>
<div class="sourceCode" id="cb19"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true"></a><span class="kw">for</span> <span class="cn">i</span>:<span class="dv">1</span> <span class="kw">thru</span> <span class="dv">10</span> <span class="kw">do</span> (</span>
<span id="cb19-2"><a href="#cb19-2" aria-hidden="true"></a>   <span class="fu">disp</span>(<span class="cn">i</span>),</span>
<span id="cb19-3"><a href="#cb19-3" aria-hidden="true"></a>   <span class="co">/* (sleep n) 是可接在字符&quot;?&quot;后使用的 Lisp 函数 */</span></span>
<span id="cb19-4"><a href="#cb19-4" aria-hidden="true"></a>   <span class="co">/* 它推迟了程序的运行,此处是 3 秒 */</span></span>
<span id="cb19-5"><a href="#cb19-5" aria-hidden="true"></a>   ?<span class="cn">sleep</span>(<span class="dv">3</span>)</span>
<span id="cb19-6"><a href="#cb19-6" aria-hidden="true"></a>)$</span></code></pre></div>
<h2 number="3.4" id="绘图结果是空的绘图框和错误信息"><span class="header-section-number">3.4</span> 绘图结果是空的绘图框和错误信息</h2>
<p>这意味着 wxMaxima 无法读取由 Maxima 指示 gnuplot 创建的文件。</p>
<p>这个错误的可能原因如下:</p>
<ul>
<li>绘图命令是第三方程序包(如 <code>implicit_plot</code>)的一部分,但在尝试绘图之前,没有调用 Maxima 的 <code>load()</code> 命令加载此包。</li>
<li><em>Maxima</em> tried to do something the currently installed version of <em>gnuplot</em> isn’t able to understand. In this case, a file ending in <code>.gnuplot</code> located in the directory, which <em>Maxima</em>’s variable <code>maxima_userdir</code> is pointing, contains the instructions from <em>Maxima</em> to <em>gnuplot</em>. Most of the time, this file’s contents therefore are helpful when debugging the problem.</li>
<li>Gnuplot 被设置为使用 pngcairo 库以提供抗锯齿功能和更多线条样式,但是在编译时没有开启此项功能支持。解决方案:取消选中设置对话框中的“使用 cairo 终端进行绘图”复选框,并且不要在 Maxima 中将 <code>wxplot_pngcairo</code> 设置为true。</li>
<li>Gnuplot didn’t output a valid <code>.png</code> file.</li>
</ul>
<h2 number="3.5" id="绘制动图时得到error-undefined-variable错误未定义的变量"><span class="header-section-number">3.5</span> 绘制动图时得到“error: undefined variable(错误:未定义的变量)”</h2>
<p>The value of the slider variable by default is only substituted into the expression that is to be plotted if it is visible there. Using a <code>subst</code> command that substitutes the slider variable into the equation to plot resolves this problem. At the end of section <a href="#embedding-animations-into-the-spreadsheet">Embedding animations into the spreadsheet</a> you can see an example.</p>
<h2 number="3.6" id="删除了一个单元格而撤销操作不起作用"><span class="header-section-number">3.6</span> 删除了一个单元格,而撤销操作不起作用</h2>
<p>对单元格的操作和单元格内部的更改均有单独的撤消函数,因此发生这种情况的可能性很低。如果确实是这样,有如下方法可以恢复数据:</p>
<ul>
<li>wxMaxima 实际上有两个撤消功能:全局撤消(如果未选择单元格)和单元格内撤消(如果光标在单元格内)。可以尝试使用这两个撤消选项,以查看是否可以恢复内容。</li>
<li>如果有办法确定 Maxima 分配给该单元格的标签,只需键入此标签,单元格的内容就会重新出现。</li>
<li>如果忘了单元格的标签,也无需惊慌。在“查看”菜单中,可以勾选显示“历史命令”侧边栏,其中显示了最近使用的所有 Maxima 命令。</li>
<li>如果以上都没有帮助,可以调用 Maxima 的回放功能:</li>
</ul>
<div class="sourceCode" id="cb20"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true"></a><span class="fu">playback</span>();</span></code></pre></div>
<h2 number="3.7" id="wxmaxima-启动时显示信息maxima-process-terminatedmaxima-进程已终止"><span class="header-section-number">3.7</span> wxMaxima 启动时显示信息“Maxima process terminated(Maxima 进程已终止)。”</h2>
<p>一个可能的原因是,在设置对话框的“Maxima”选项卡中设置的位置找不到 Maxima 程序,因此根本无法运行 Maxima。将路径设置为有效的 Maxima 二进制文件所在文件夹应该可以解决此问题。</p>
<h2 number="3.8" id="maxima-永远在计算中而不响应输入"><span class="header-section-number">3.8</span> Maxima 永远在计算中而不响应输入</h2>
<p>理论上讲,有可能是 wxMaxima 没有意识到 Maxima 已经完成了计算,因此没有得到通知,以告知它可以向 Maxima 发送新的数据。如果是这种情况,重新求值可能会使两个程序同步。</p>
<h2 number="3.9" id="基于-sbcl-的-maxima-耗尽内存"><span class="header-section-number">3.9</span> 基于 SBCL 的 Maxima 耗尽内存</h2>
<p>默认情况下,Lisp 编译器 SBCL 有一个内存限制,以使得它能在低端计算机上运行。当编译一个大型软件包(如 Lapack)或处理特别大的列表和方程时,该限制值可能太低。为了扩展内存限制,可以向 SBCL 提供命令行参数 <code>--dynamic-space-size</code>,该参数告诉 SBCL 应该使用多少兆字节的内存。32位 Windows 系统版本的 SBCL 最多可使用 999 兆字节,64位 Windows 系统版本的 SBCL 可以被设置为使用更大的内存(例如超过编译 Lapack 所需的约 1280 兆字节)。</p>
<p>为 Maxima(因此也为 SBCL)提供命令行参数的一种方法是利用 wxMaxima 设置对话框的“额外的 Maxima 参数(Additional parameters for Maxima)”字段。</p>
<div class="figure">
<img src="./sbclMemory.png" id="img_sbclMemory" alt="" />
<p class="caption">SBCL 内存</p>
</div>
<h2 number="3.10" id="在-ubuntu-系统上有时输入无响应或响应迟缓"><span class="header-section-number">3.10</span> 在 Ubuntu 系统上,有时输入无响应或响应迟缓</h2>
<p>安装软件包 <code>ibus-gtk</code> 应该可以解决此问题. 详情见 <a href="https://bugs.launchpad.net/ubuntu/+source/wxwidgets3.0/+bug/1421558">https://bugs.launchpad.net/ubuntu/+source/wxwidgets3.0/+bug/1421558</a>。</p>
<h2 number="3.11" id="wxmaxima-在处理希腊字符或元音变音符时停止"><span class="header-section-number">3.11</span> wxMaxima 在处理希腊字符或元音变音符时停止</h2>
<p>如果所使用的 Maxima 基于SBCL,则必须将以下行添加到 <code>.sbclrc</code> 文件中:</p>
<div class="sourceCode" id="cb21"><pre class="sourceCode commonlisp"><code class="sourceCode commonlisp"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true"></a>(<span class="kw">setf</span> sb-impl::*default-external-format* :utf<span class="dv">-8</span>)</span></code></pre></div>
<p><code>.sbclrc</code> 文件应放入特定的文件夹。任何基于 SBCL 的 Maxima 如果已经在当前会话中计算了一个单元格,那么在获得如下命令后,都会显示该文件的位置:</p>
<pre><code>:lisp (sb-impl::userinit-pathname)</code></pre>
<h2 number="3.12" id="绘图-1"><span class="header-section-number">3.12</span> 绘图</h2>
<h3 number="3.12.1" id="是否可以同时输出和嵌入绘图文件"><span class="header-section-number">3.12.1</span> 是否可以同时输出和嵌入绘图文件?</h3>
<p>工作簿可嵌入 <code>.png</code> 文件。wxMaxima 允许用户指定它们的生成位置:</p>
<div class="sourceCode" id="cb23"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true"></a><span class="cn">wxdraw2d</span>(</span>
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true"></a>    <span class="cn">file_name</span>=<span class="st">&quot;test&quot;</span>,</span>
<span id="cb23-3"><a href="#cb23-3" aria-hidden="true"></a>    <span class="cn">explicit</span>(<span class="fu">sin</span>(<span class="cn">x</span>),<span class="cn">x</span>,<span class="dv">1</span>,<span class="dv">10</span>)</span>
<span id="cb23-4"><a href="#cb23-4" aria-hidden="true"></a>);</span></code></pre></div>
<p>如果要使用不同的格式,则可以先生成图像,然后再将其导入工作簿:</p>
<div class="sourceCode" id="cb24"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true"></a><span class="fu">load</span>(<span class="st">&quot;draw&quot;</span>);</span>
<span id="cb24-2"><a href="#cb24-2" aria-hidden="true"></a><span class="cn">pngdraw</span>(<span class="cn">name</span>,[<span class="cn">contents</span>]):=</span>
<span id="cb24-3"><a href="#cb24-3" aria-hidden="true"></a>(</span>
<span id="cb24-4"><a href="#cb24-4" aria-hidden="true"></a>    <span class="fu">draw</span>(</span>
<span id="cb24-5"><a href="#cb24-5" aria-hidden="true"></a>        <span class="fu">append</span>(</span>
<span id="cb24-6"><a href="#cb24-6" aria-hidden="true"></a>            [</span>
<span id="cb24-7"><a href="#cb24-7" aria-hidden="true"></a>                <span class="cn">terminal</span>=<span class="cn">pngcairo</span>,</span>
<span id="cb24-8"><a href="#cb24-8" aria-hidden="true"></a>                <span class="cn">dimensions</span>=<span class="cn">wxplot_size</span>,</span>
<span id="cb24-9"><a href="#cb24-9" aria-hidden="true"></a>                <span class="cn">file_name</span>=<span class="cn">name</span></span>
<span id="cb24-10"><a href="#cb24-10" aria-hidden="true"></a>            ],</span>
<span id="cb24-11"><a href="#cb24-11" aria-hidden="true"></a>            <span class="cn">contents</span></span>
<span id="cb24-12"><a href="#cb24-12" aria-hidden="true"></a>        )</span>
<span id="cb24-13"><a href="#cb24-13" aria-hidden="true"></a>    ),</span>
<span id="cb24-14"><a href="#cb24-14" aria-hidden="true"></a>    <span class="cn">show_image</span>(<span class="fu">printf</span>(<span class="kw">false</span>,<span class="st">&quot;~a.png&quot;</span>,<span class="cn">name</span>))</span>
<span id="cb24-15"><a href="#cb24-15" aria-hidden="true"></a>);</span>
<span id="cb24-16"><a href="#cb24-16" aria-hidden="true"></a><span class="cn">pngdraw2d</span>(<span class="cn">name</span>,[<span class="cn">contents</span>]):=</span>
<span id="cb24-17"><a href="#cb24-17" aria-hidden="true"></a>    <span class="cn">pngdraw</span>(<span class="cn">name</span>,<span class="cn">gr2d</span>(<span class="cn">contents</span>));</span>
<span id="cb24-18"><a href="#cb24-18" aria-hidden="true"></a></span>
<span id="cb24-19"><a href="#cb24-19" aria-hidden="true"></a><span class="cn">pngdraw2d</span>(<span class="st">&quot;Test&quot;</span>,</span>
<span id="cb24-20"><a href="#cb24-20" aria-hidden="true"></a>        <span class="cn">explicit</span>(<span class="fu">sin</span>(<span class="cn">x</span>),<span class="cn">x</span>,<span class="dv">1</span>,<span class="dv">10</span>)</span>
<span id="cb24-21"><a href="#cb24-21" aria-hidden="true"></a>);</span></code></pre></div>
<h3 number="3.12.2" id="是否可以指定绘制图形的相对比例"><span class="header-section-number">3.12.2</span> 是否可以指定绘制图形的相对比例?</h3>
<p>直接使用 Maxima 无法完成此功能,但是可以利用 gnuplot 命令:</p>
<div class="sourceCode" id="cb25"><pre class="sourceCode maxima"><code class="sourceCode maxima"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true"></a><span class="cn">wxdraw2d</span>(</span>
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true"></a>    <span class="cn">proportional_axis</span>=<span class="cn">xy</span>,</span>
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true"></a>    <span class="cn">explicit</span>(<span class="fu">sin</span>(<span class="cn">x</span>),<span class="cn">x</span>,<span class="dv">1</span>,<span class="dv">10</span>)</span>
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true"></a>),<span class="cn">wxplot_size</span>=[<span class="dv">1000</span>,<span class="dv">1000</span>];</span></code></pre></div>
<hr />
<p>常见提问(FAQ)</p>
<h2 number="3.13" id="有没有办法在-latex-页面中显示更多的文字"><span class="header-section-number">3.13</span> 有没有办法在 LaTeX 页面中显示更多的文字?</h2>
<p>有,只需将以下文字添加到 LaTeX 文件的导言区,例如通过修改设置对话框中的相应字段(导出-&gt;在 TeX 导言区中添加额外的内容(Export-&gt;Additional lines for the TeX preamble)):</p>
<div class="sourceCode" id="cb26"><pre class="sourceCode latex"><code class="sourceCode latex"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true"></a><span class="bu">\usepackage</span>[left=1cm,right=1cm,top=1cm,bottom=1cm]{<span class="ex">geometry</span>}</span></code></pre></div>
<h2 number="3.14" id="是否有深色模式"><span class="header-section-number">3.14</span> 是否有深色模式?</h2>
<p>如果 wxWidgets 版本足够新,那么当系统设置了深色主题时,wxMaxima 将自动处于深色模式。在默认情况下,工作簿本身具有浅色背景。但也可以进行其他配置:利用菜单“查看-&gt;反转工作簿亮度”,可以快速将工作簿在浅色模式和深色模式中转换。</p>
<h2 number="3.15" id="wxmaxima-有时在启动后的一段时间内无响应"><span class="header-section-number">3.15</span> wxMaxima 有时在启动后的一段时间内无响应</h2>
<p>wxMaxima 将一些大型任务(如解析 Maxima 的超过 1000 页的手册)委托给后台任务,而这些任务通常不会被执行。然而,当需要执行这样一个任务时,可能需要等待几秒钟才能继续工作。</p>
<hr />
<h1 number="4" id="命令行参数"><span class="header-section-number">4</span> 命令行参数</h1>
<p>在大多数操作系统中,wxMaxima 都有比运行命令行更简单的启动方式,所以用到命令行参数的可能性很小。不过,wxMaxima 仍然提供了一些命令行选项。</p>
<ul>
<li><code>-v</code> 或 <code>--version</code>:输出版本信息。</li>
<li><code>-h</code> 或 <code>--help</code>: 输出简短的帮助文本。</li>
<li><code>-o</code> 或 <code>--open=&lt;str&gt;</code>:打开作为此命令行参数的文件名。</li>
<li><code>-e</code> 或 <code>--eval</code>:打开文件后对公式单元格求值。</li>
<li><code>-b</code> 或 <code>--batch</code>:如果用命令行打开一个文件,则计算该文件中的所有单元格,然后保存文件。例如,如果文件中描述的会话使 Maxima 生成输出文件,则这一参数会很有用。如果 wxMaxima 检测到 Maxima 输出了错误信息,则批处理将停止;如果检测到 Maxima 有疑问,则批处理将暂停。Maxima 的计算过程有一定的交互性,因此无法保证完全无交互的批处理。</li>
<li><code>--logtostdout</code>:将所有“调试信息”侧边栏里的信息也输出到标准错误文件(stderr)。</li>
<li><code>--pipe</code>:将 Maxima 的信息通过管道(pipe)输出到标准输出文件(stdout)。</li>
<li><code>--exit-on-error</code>:在遇到任何 Maxima 错误时关闭程序。</li>
<li><code>-f</code> 或 <code>--ini=&lt;str&gt;</code>: 指定要使用的初始设定文件。</li>
<li><code>-u</code> 或 <code>--use-version=&lt;str&gt;</code>:指定要使用的 Maxima 的版本。</li>
<li><code>-l</code> 或 <code>--lisp=&lt;str&gt;</code>:指定 Maxima 使用的 Lisp 解释器。</li>
<li><code>-X</code> 或 <code>--extra-args=&lt;str&gt;</code>:指定额外的 Maxima 参数。</li>
<li><code>-m</code> 或 <code>--maxima=&lt;str&gt;</code>:指定 Maxima 程序的位置。</li>
<li><code>--enableipc</code>:使 Maxima 通过内部进程通讯来控制 wxMaxima (应谨慎使用此选项)。</li>
</ul>
<p>一些操作系统可能在命令行选项前面使用连接号(dash),而不是减号。</p>
</body>
</html>