diff --git a/doc/en/Authoring/Options.md b/doc/en/Authoring/Options.md index d2354de241a0b09fb14736da7d41cecba3d298cb..4ee4ee92c0f01ea3077724eed298476d4e01d1db 100644 --- a/doc/en/Authoring/Options.md +++ b/doc/en/Authoring/Options.md @@ -75,9 +75,9 @@ The expression `(make_multsgn("cross"), a*b)` uses parentheses as an abbreviatio The value of this option `onum` will only put a multiplication sign between numbers. This means you will see \(3\times 5\, x\) and not \(3\, 5\, x\) as you would if you have "none". -There is a special atom which controls the multiplication symbol. If you would like a dot then define +There is a special atom which controls the multiplication symbol used with option `onum`. If you would like a dot then define - texput(multsgnonlyfornumberssym, "\\times"); + texput(multsgnonlyfornumberssym, "\\cdot"); in the question variables. diff --git a/doc/en/Developer/Development_track.md b/doc/en/Developer/Development_track.md index ec307f5eee2bdbdd3aa8374861982d0000e0be01..a4f1fb07f90c8a603d757e91dc5184c856fc248e 100644 --- a/doc/en/Developer/Development_track.md +++ b/doc/en/Developer/Development_track.md @@ -12,6 +12,7 @@ DONE 1. Fix [issue #1160](https://github.com/maths/moodle-qtype_stack/issues/879) Allow configuring the MathJax URL 2. Add in stack preamble via `%_stack_preamble_end;` in the question variables to allow some variables to be available in inputs. This fixes [issue #1207](https://github.com/maths/moodle-qtype_stack/issues/1207]) and [issue #1133](https://github.com/maths/moodle-qtype_stack/issues/1133). 3. Allow Maxima code in keyvals to terminate expressions with a `$` (as in Maxima) [issue #1019](https://github.com/maths/moodle-qtype_stack/issues/1019]). This will allow better copy/paste to and from desktop maxima. +4. Add in an option to fine-tune the multiplication sign used for scientific units: `multsgnstackunits`. See discussion in [issue #1080](https://github.com/maths/moodle-qtype_stack/issues/1080]). Issues with [github milestone 4.7.0](https://github.com/maths/moodle-qtype_stack/issues?q=is%3Aissue+milestone%3A4.7.0) include diff --git a/doc/en/Topics/Units.md b/doc/en/Topics/Units.md index 20d775e7a5770afb7e5d8399c46f5ae268d82b04..451eef9aa544a99251e627e86b9e7ecbf59d9ebd 100644 --- a/doc/en/Topics/Units.md +++ b/doc/en/Topics/Units.md @@ -159,6 +159,14 @@ try to split the expression into units and numbers, and the return the units and The function `stack_units_split` is deprecated. DO NOT USE. +## Fine-tuning the display ## + +By default STACK's TeX function prints out `stackunits(10,m/s)` as \( 10\, m/s\). That is, without any multiplication sign between the numerical part and the units. In some edge cases you might want to add this multiplication sign in. To do this, use + + texput(multsgnstackunits, "\\cdot"); + +in the question variables. In castext you can use, e.g. `{@(texput(multsgnstackunits, "\\cdot "), stackunits(1, s^-1))@}` to create output \({1\cdot s^ {- 1 }}\). + ## Custom units ## The teacher may want to use their own units. For example, the core `unit` package in Maxima does not include `mm` (millimetre), it is defined there as a word `millimetre`. This is one reason for creating our own custom units package. diff --git a/stack/maxima/stackunits.mac b/stack/maxima/stackunits.mac index 3ddb9cd4accee1f482454796e5e9511cd9c3cc39..f24075b6e4ba63015804d6dd5dcd2f9c2499f847 100644 --- a/stack/maxima/stackunits.mac +++ b/stack/maxima/stackunits.mac @@ -392,8 +392,10 @@ stack_validate_units(expr, LowestTerms, TAns, fracdisp) := block( [simp:false, e return(expr) )$ +texput(multsgnstackunits, "\\, "); + /* Finer control over display of units, separating out the number from the units. */ -stackunitstex(ex) := block ([a, b, c, astr, bstr], +stackunitstex(ex) := block([a, b, c, astr, bstr], a:first(args(ex)), b:second(args(ex)), if scientific_notationp(a) then make_multsgn("cross"), @@ -410,8 +412,9 @@ stackunitstex(ex) := block ([a, b, c, astr, bstr], bstr:tex1(b), if is(strim(" ", astr)="") then return(bstr), if is(strim(" ", bstr)="") then return(astr), - sconcat(astr,"\\, ", bstr) + sconcat(astr, tex1(multsgnstackunits), bstr) )$ + texput(stackunits, stackunitstex); texput(NULLUNITS, ""); texput(NULLNUM, ""); diff --git a/tests/castext_test.php b/tests/castext_test.php index 89c21cc4c1bbaa771e482baba218602cdae26268..f6f72a65f3ce9d42802e0176b475de735d606da5 100644 --- a/tests/castext_test.php +++ b/tests/castext_test.php @@ -2369,4 +2369,26 @@ class castext_test extends qtype_stack_testcase { $this->assertEquals('\({x-0}\), \({x-0.0}\), \({x\cdot \left(-0.0\right)}\), \({-27}\).', $at1->get_rendered()); } + + /** + * @covers \qtype_stack\stack_cas_castext2_latex + * @covers \qtype_stack\stack_cas_keyval + */ + public function test_make_mult_sgn_stackunits() { + $options = new stack_options(); + $options->set_option('simplify', false); + $cs2 = new stack_cas_session2([], $options, 123456); + + $textinput = '{@stackunits(10,m/s)@}, ' . + '{@(texput(multsgnstackunits, "\\\\cdot "), stackunits(1, s^-1))@}, ' . + '{@(texput(multsgnstackunits, "\\\\, "), stackunits(1, s^-1))@}. ' . + 'Multiplication unaffected: {@(texput(multsgnstackunits, "\\\\, "), a*b)@}.'; + $at1 = castext2_evaluatable::make_from_source($textinput, 'test-case'); + $this->assertTrue($at1->get_valid()); + $cs2->add_statement($at1); + $cs2->instantiate(); + + $this->assertEquals('\({10\, \frac{m}{s}}\), \({1\cdot s^ {- 1 }}\), \({1\, s^ {- 1 }}\). ' . + 'Multiplication unaffected: \({a\cdot b}\).', $at1->get_rendered()); + } }