Show HN: CalcuLaTeX, a pretty-printing calculator language

(mkhan45.github.io)

230 points | by fish45 1150 days ago

19 comments

  • fish45 1149 days ago
    Hey HN, I created CalcuLaTeX because I was frustrated with my workflow for chemistry and physics homework. Generally, I'd use the Python REPL as a calculator and type each problem into LaTeX to turn it in. CalcuLaTeX merges these two steps and makes it easier to reason about calculations by real time visual feedback.

    I've posted on r/rust as well (https://www.reddit.com/r/rust/comments/lqn5aa/calculatex_a_p...), and there seems to be interest in using it for scientific papers and such.

    The only alternative I know of is PTC MathCAD, which is quite powerful and definitely worth looking into. However, it's quite expensive and Windows only.

    The main repo (a Rust library and basic CLI) can be found here: https://github.com/mkhan45/CalcuLaTeX

    The website repo using WASM and very hacky JS can be found here: https://github.com/mkhan45/CalcuLaTeX-Web

  • formerly_proven 1149 days ago
    FYI you might find the GNU units(1) tool useful, which has a huge catalog of units and understands about the same set of math operations as a scientific calculators. From the demo I actually thought this was using GNU units in the background.
    • fish45 1149 days ago
      That's pretty cool. I did search for a unit calculation library before starting this but since WASM is a priority I wanted to use a Rust one.
  • FabHK 1149 days ago
    This is awesome!

    Is there a way to get the LaTeX source with the completed calculation (so that you can copy/paste the whole thing in your local LaTeX installation and, well, hand in your homework)? (sort of a "middle" tab)

    • fish45 1149 days ago
      The main export of the Rust/WASM library is just a function which outputs LaTeX; it should be pretty doable to add a button to the website which does what you're asking. I think I'll just add a checkbox to set whether it actually renders or not.
  • a0-prw 1149 days ago
    Wordmat is a free, open source extension to MS Word which gives you access to a full CAS from Word.

    http://www.eduap.com/wordmat/

    https://github.com/Eduap-com/WordMat

  • kccqzy 1149 days ago
    That's wonderful! When I used to do my math and physics homework, I used Mathematica as a calculator. It has built-in LaTeX formatting available (right click, Copy As > LaTeX). But likewise Mathematica is expensive and proprietary software so it doesn't appeal to everyone.
    • hvna 1148 days ago
      I use MiktTeX integrated with Spyder to work on homework and export the equations to LaTeX format. Works well, although some preliminary searching has led me to see that other people have had many issues with it. I guess I just got lucky.
  • RandomWorker 1149 days ago
    This is awesome! Does it do other conversions than weight? mol/lengths/surface/volume/energy?
    • fish45 1149 days ago
      It supports every SI unit and many derived units. It doesn't yet support fractional units, e.g. km^3/2 though. AFAIK there aren't any fractional units that have physical meaning but they might appear in intermediate steps sometimes.
      • tobmlt 1149 days ago
        Imagine you are G.I.Taylor and its the start of The Cold War. Life magazine has just published an amazing high speed photographic sequence of the detonation of an atom bomb. The nation is enthralled by these images, but you see a bit further into the imagery.

        The pictures give you the radius of the blast as a function of time.

        All that could be important In determining the radius R as a function of time are the initial energy released, E, and the density of the undisturbed medium, Rho.

        Thanks to your natural curiosity, you know the value of dimensional analysis and reason that the radius, with dimensions of length, must depend only on E, rho, and t, for which the correct expression can only be:

        R(t) = (E/Rho t^2)^(1/5)

        Since E/Rho has dimensions of (length)^5/time^2

        A log-log plot of r vs t (imagine measuring the radius of the blast and carefully noting time stamps given in the picture captions) gives a slope of 2/5, checking the theory, and E/Rho could be obtained from extrapolation to the value of log R when log t= 0. Rho is known For air and thus E was determined to within a factor of order 1.

        For the practitioner of dimensional analysis, the nations deepest secret had been published in Life magazine. (Goldstein States of Matter, chapter 6)

        Ah, but how best to convey the findings? Surely the best way is to use a mathcad like, But open source tool which prints straight to latex!

        Ah ...if only it could express fractional units...

        GI Taylor prepares a letter to John wheeler, requesting a closed time like networked computing device so that the feature request can be made.

        In all seriousness though, This project is awesome! Just kick in fractional unit support and it will surely be unstoppable.

        • fish45 1149 days ago
          Haha if only.

          GI Taylor should be able to publish his findings by the end next week

          • tobmlt 1149 days ago
            Yeah they managed to find their way into circulation somehow. ;)

            Not sure what I really had to add with that whole bit up there. I suppose it’s that sometimes intermediary units are a fun part of the story!

            Anyway, very cool project.

      • FabHK 1149 days ago
        The unit of volatility is conceptually [time^{-1/2}], most commonly 1/sqrt(year), but that is rarely written. (People speak of a stock with 30% annual vol, not with a sigma = 0.3 a^-0.5 :-)
        • fish45 1149 days ago
          Weird units are cool. I was pretty mindblown when I realized that radians are basically meters/meters and steradians are meters^2/meters^2
          • thaumasiotes 1149 days ago
            > I was pretty mindblown when I realized that radians are basically meters/meters

            This is true in a dimensional analysis way, where e.g. arclength around a circle is equal to the subtended angle times the radius and, since the arclength and the radius have the same dimension, the angle must be dimensionless.

            But units are more than that. You can't do anything in chemistry without running into quantities like molarity or ppm that appear to be dimensionless but make no sense if you think about them as coefficients rather than as combinations of semantically-distinct units that happen to have the same name.

            Imagine some subtance that is 5% salt by mass and 8% salt by volume. ppm by mass is just kg / kg, right? And ppm by volume is m^3 / m^3. Those are the same unit -- in fact, no unit at all. Except that the implication of that non-fact is that ppm by volume and ppm by mass are the same thing, which they aren't.

            Similarly, radians are best conceived of as percentages of a rotation, not as dimensionless coefficients. Then we calculate an arclength around a circle by saying that the ratio between the arclength and the full perimeter is equal to the ratio between the subtended angle and the full rotation. Characterized so, we have both units present twice, canceling each other out on each side of the equation, and we don't need to clean up by saying that the angle has no unit at all. We divided part of a perimeter by all of a perimeter -- producing a dimensionless quantity -- and we divided part of a rotation by all of a rotation -- also producing a dimensionless quantity -- and then we correctly compared two dimensionless quantities to each other.

            (On this analysis, the equation s = rθ is actually incorrect; it should be written s = rθ/1 . You can extend this -- we all know the area under sin(x) from 0 to pi is 2. 2 whats? Well, the x axis is radians and the y axis is sine values. Sine values are computed by dividing the length of a line segment by the length of another line segment; they are legitimately dimensionless. So the area under sin(x) must be 2 radians.)

            • QuesnayJr 1148 days ago
              This has always bothered me, that there were dimensionless units that a dimension-like quality, like radians.
              • thaumasiotes 1148 days ago
                Seriously, radians aren't dimensionless. If you calculate arclengths using angles measured in degrees, the whole problem disappears: a 60° arc around a circle of radius 3cm has length equal to (2·pi·3cm·60°)/(360°) = (2·pi·3cm)/6 = pi centimeters. Looking at it that way makes it very plain that the angles have units attached, and those units don't appear in the result of "pi centimeters" because they canceled out during the computation.

                This is overt when calculating in degrees because they are an inconvenient size. The size of a radian is chosen so that the constant terms (2·pi) in the numerator and (2·pi radians) in the denominator appear to cancel out, giving a (1 radian) in the denominator which is omitted from the formula because dividing by 1 is numerically pointless. But dividing by 1 radian is not dimensionally pointless; omitting the 1 from the formula leads to the illusion that θ has no unit attached.

  • Jakobeha 1149 days ago
    This is cool! I think it can be really useful.

    My main suggestion is better error handling: make it so that when a calculation is invalid, it shows the error where the result would be (e.g. red text with the error message) instead of failing to compile the whole script.

    • fish45 1149 days ago
      I definitely agree that error handling should be improved. I'm trying to keep the LaTeX output as portable/minimal as possible though so I'm not sure if highlights are doable. My current plan is to output more diagnostic info and let the JS interface figure it out.
  • SamBam 1149 days ago
    Very cool!

    What made you choose LaTeX for the tool?

    It seems like it wouldn't be too hard (maybe?) to get a proper algebra engine to assign variables. Currently you can do `x = 10` but you can't do `x / 2 = 5`. I feel like this would be very helpful since you're using this for scientific calculations.

    It could then be possible to extend that further and leave the variable undefined if it doesn't (yet) have enough information to solve it. Then it could theoretically be used to solve simultaneous equations.

    • fish45 1149 days ago
      > What made you choose LaTeX for the tool?

      I was originally planning to use MathJax and HTML or Markdown but honestly it wasn't a completely conscious decision.

      About proper algebraic stuff, it is a long term goal to have at least a basic polynomial solver, but I've no experience in the area and I'm not sure how far it can go.

  • irgeek 1149 days ago
    This is very cool. It looks much easier to use than the collection of Makefiles and build scripts I cobbled together in college.

    One thing that’d make this even more awesome is the ability to drop in a data table and have it show up as a graph. The scripts I built in college allowed me to drop a CSV file into a directory and have it automatically turned into an EPS graph that I could use in LaTeX. It made for pretty easy, but very good looking reports.

  • croddin 1149 days ago
    This is awesome. It reminds me of the iOS app Calca[1], which is similar.

    [1] http://calca.io/

    • nielsbot 1149 days ago
      I like Calca, and this looks like a cool project. Could be cool to combine the 2 in an editor similar to Typora.

      Typora is my favorite Mac Markdown editor: It looks like a plain word processor file, hiding the markdown annotations, but they're still there and can be edited. I think it's ideal.

    • fish45 1149 days ago
      That's really cool. I'll definitely look to it for inspiration
  • hamaluik 1149 days ago
    I'm so glad you made this! I'm also very upset that this didn't exist 10 years ago when I really needed it. Well done!
    • macintux 1149 days ago
      I used to do my calc and some CS homework in LaTeX. Seemed easier than trying to write slowly enough to make my handwriting legible.
    • fish45 1149 days ago
      Haha I don't think I understood the concept of units 10 years ago
  • hardmath123 1149 days ago
    You might like Frink! https://frinklang.org
  • ducttapecrown 1149 days ago
    I think an alternative would be Sympy in a Jupyter notebook.
  • 8note 1149 days ago
    Ti-89 is a great option, since you can also get the nice formatting while you're doing exams
  • breck 1148 days ago
    This is really fun. Nicely done! I love the output of LaTeX but never liked writing it.
  • prezjordan 1149 days ago
    Very cool! The output looks nice, will definitely give this a whirl for some blog posts.
    • fish45 1149 days ago
      I'm glad to hear it! Feel free to open an issue if you'd like anything added
  • frankenst1 1149 days ago
    Very cool, auto-conversion is really awesome, I think I found a bug though:

    5 kg + 5 kg = 10 kg

    but

    5 kg + 6 kg = 11.000 kg

    • fish45 1149 days ago
      Yeah that's not intended, although it's a pretty low priority bug since it's still correct. Thanks for letting me know!
    • statstutor 1149 days ago
      100m/s = 0km/s (an integer division issue? km/h does not appear to work)
      • fish45 1149 days ago
        > 100m/s = 0km/s

        yeah that's not supposed to happen. I'm not completely sure what's up there but thanks for the report

        km/h doesn't work but km/hour does. I haven't added h as an alias for hour since it's also the SI prefix for hecto.

  • drran 1149 days ago
    I use Marker markdown editor + MathJax + embedded JavaScript to achieve similar results.
  • celebrimbor7 1149 days ago
    Hey, definitely check out Blockpad (https://blockpad.net). It does calculations with units, integrated with documents, spreadsheets, and drawing. Speaking from the Blockpad team here, would love to hear your experience.

    We have Windows app and beta web app. Also Mac app coming soon. It's free for students and otherwise still inexpensive.

    • fish45 1148 days ago
      Blockpad looks quite nice but personally I prefer a text based interface. I'm sure most university students would disagree though.
    • riedel 1148 days ago
      Is there any pricing information (somehow requires login).

      Currently happily using smath studio which is free.