• Something changed at v0.7.0, and I can describe it precisely: I stopped opening Xcode in the morning.

    For months, the routine was fixed. Coffee, Xcode, texspark’s source, chase whatever broke yesterday. The book — the entire reason texspark exists — got the leftovers: an evening hour here, a guilty weekend session there. The tool was eating the work it was built for.

    Somewhere around v0.7.0, the ratio flipped.

    Once the big architecture settled, my days became writing days. But here’s the part I didn’t expect: the writing became the QA department. Hours of real manuscript work put the editor into situations no test plan would have invented — and out came the bugs. Small ones. Strange ones. The kind you only meet at paragraph three hundred: a fold that misbehaves in one specific nesting, a scroll that drifts by a hair after a particular build sequence, an outline entry that’s right in every way except one. Each one small, each one irritating, each one findable only by actually living in the app.

    So the rhythm now is: write, hit something odd, note it, keep writing. Fix the batch when it’s worth a detour. The commit log shows it — June was a wall of commits at hours I’m not proud of; July is a steady trickle of small, weird, satisfying fixes. Meanwhile the manuscript’s word count, flat for weeks, has started climbing like it finally got permission.

    I won’t pretend texspark is finished. v0.7.0 is not v1.0; the roadmap still has real items on it. But there’s a threshold every tool-building detour eventually meets: the moment the tool recedes into the background and only the work remains — surfacing just often enough to hand you a bug report written in your own manuscript.

    Three chapters down, twelve to go. The editor works. Back to the book — which is, it turns out, also the test suite.


  • A random thought hit me the other day: if the information is identical, which human language requires the fewest LLM tokens? You’d think this is a linguistics question. It turns out to be an economics question wearing a linguistics costume.

    The intuition

    Chinese should win, right? 猫 is one character; “cat” is three. Classical information-density arguments say logographic scripts pack more meaning per glyph. If tokens tracked meaning, dense languages would be cheap.

    The reality

    Tokens don’t track meaning. They track what the tokenizer saw during training — and tokenizers grew up reading mostly English.

    Tokenizers don’t operate on characters; they operate on sub-word units, so character-level efficiency doesn’t automatically translate to token efficiency. A Chinese character can get fragmented into multiple tokens — sometimes one token per part of a character — because the byte-level vocabulary never merged it into a unit. Meanwhile “the” gets its own cozy token because English dominates the training corpus. arXivMedium

    The numbers bear it out. A study using 2 million professionally translated sentences found that every CJK language uses more tokens than English — no exceptions. On GPT’s cl100k_base tokenizer, Chinese pays roughly 15% more tokens for equivalent content, and low-resource languages fare far worse — Khmer, Lao, and Burmese show notably high length ratios on most open-source LLMs. arxivGitHub

    So English wins?

    On most Western tokenizers, yes — but for the least satisfying reason possible: home-field advantage. The proof: GLM’s Chinese-native tokenizer inverts the pattern, producing fewer tokens for Chinese than English (ratio 0.923). Same languages, opposite winner. The answer to “which language is most efficient” is: whichever one your tokenizer grew up speaking. GitHub

    (For fun: one recent paper asked whether Sanskrit — famously compact — beats everyone. With bias-controlled tokenizers trained at equal vocabulary sizes, Sanskrit does show superior density. The ancient grammarians would be pleased with their compression ratio.) Sicheng Ouyang

    Why a LaTeX person cares

    I write in Korean, English, and LaTeX daily, often through texspark’s AI panel — where the attach-document toggle ships my source to a model with a 60 KB cap and a token bill. My source files are trilingual: Korean prose, English terms, LaTeX markup. Every \begin{equation} is a flat tax in any language.

    The practical takeaway is almost embarrassing: prompting in English is usually cheapest, not because English is better, but because the meter was calibrated in it. Somewhere in that fact is a whole essay about soft power. This is not that essay. This was just a random thought that turned out to have a real answer.


  • I’ve noticed something about texspark’s bug reports lately — most of them filed by me, to me, at unreasonable hours: debugging keeps getting more complicated.

    Early on, bugs were honest. The app crashed on launch. The PDF didn’t load. Autocomplete inserted the wrong text, visibly, right in front of you. You could reproduce them in five seconds, fix them in an hour, and feel like a genius before lunch.

    The current crop is different.

    The recent specimen: code folding. Fold a section and, sometimes, the text below it drew on top of the folded region — two layers of document, overlapping like a double-exposed photograph. Ugly, obvious, clearly wrong.

    And it would not reproduce.

    That was the real problem. Not the glitch itself — the fact that I couldn’t summon it. Same file, same folds, same steps: clean. Then an hour later, doing nothing special, there it was again. A bug you can’t reproduce is a bug you can’t even begin to fix; you’re not debugging anymore, you’re waiting for a ghost to walk past.

    When it became clear the ghost lived somewhere deep in the text layout stack, the fix stopped being a fix and became a decision: I tore out the TextKit layer entirely and rebuilt on a different foundation. Not four lines. Not forty. The whole floor.

    Here’s the reframe that keeps me sane: this is what progress looks like. Easy bugs are a property of immature software — they’re everywhere, so you trip over them constantly. When the remaining bugs are non-deterministic rendering ghosts that force architectural surgery, it means the five-second bugs are gone. The floor got raised. The weird stuff is what’s left because everything normal already works.

    There’s a name for this in quality engineering — surviving bugs are survivors for a reason. They live in the corners, in timing and layout internals, precisely because everything in the open has been shot.

    So: the debugging is slower now, the git log less heroic, and one commit last week just says “replace text layout system.” And that’s the best evidence I have that texspark is becoming a real, grown-up piece of software.

    The bugs are getting harder. Good.


  • It starts innocently. Someone sends you a figure for the paper — a .png, 800×600, screenshot of a matplotlib window. You paste it in, compile, zoom to 400% the way you always do, and there it is: the blur. The soft, fuzzy edges of a rasterized line. And something in you dies a little.

    Congratulations. You have the condition. There’s no cure.

    Symptoms

    You know you have it when:

    • You can identify, from across a conference hall, which posters were made in PowerPoint. The pixelated axis labels call to you.
    • You’ve said the phrase “can you send me the PDF version?” more times than you’ve said “happy birthday.”
    • Your matplotlib scripts end in savefig('fig3.pdf') and have for a decade. You don’t remember choosing this. There was never a choice.
    • You’ve zoomed into your own compiled PDF to 6400% — not to check anything. Just to watch the curve stay perfect. Just to feel something.
    • TikZ has made you cry exactly twice: once learning it, once realizing you can never go back.

    The pathology

    Here’s the thing — the obsession is correct. That’s what makes it incurable. A raster image is a lie told at one resolution. A vector image is the truth: the actual curve, the actual glyph, described mathematically, rendered perfectly at any scale, printed at any DPI, forever.

    LaTeX people were always going to fall hard for this. The entire premise of TeX is that a document is a program, not a picture — so of course its users demand that figures be equations too. Pixels are someone else’s compromise.

    The suffering

    The condition has costs. You will spend forty minutes converting a collaborator’s .jpg chart into pgfplots — “it’s just cleaner this way” — for a figure that appears at 4cm wide. You will maintain strong opinions about PDF vs EPS. You will see a beautiful, useful diagram on the web and feel genuine grief that it’s a PNG.

    And journals will rasterize your perfect figures in production anyway, and you will never emotionally recover.

    For the record

    My entire book — every figure, every diagram — is vector. Some of those figures took longer than the sections they illustrate. I regret nothing. At 6400% zoom, the curves are perfect.

    Nobody will ever zoom to 6400%.

    They’re perfect anyway.


  • New Text Engine & Folding

    • Rebuilt the editor on TextKit 2. Layout and drawing now share the same geometry, eliminating the code-folding overlap bug where collapsing a large or deeply-nested section painted garbled text over the folded header.
    • Reworked code folding. Folds collapse cleanly to the last line — no leftover blank line, no stray fold chip through nested collapses.
    • Consistent line height for mixed Korean/Latin text, adaptive gutter width, and the minimap, all reimplemented on the new engine.
    • Leaner internals — the old TextKit 1 code paths were removed.

    Faster Typing

    • Noticeably snappier typing. Per-keystroke work in the editor was profiled and trimmed across the board — even short documents used to accumulate small stalls on every key press.
    • Instant autocompletion popup. The command palette is pre-built at launch and stays resident between uses, so typing \ no longer pays a window round-trip to reopen it. While you narrow a command, it updates only what actually changed instead of rebuilding on every letter.
    • No more hitch when you resume typing. The outline and label lists are now parsed in the background — they used to rescan on the main thread right after each typing pause, exactly when you were about to type again — and the sidebar skips redrawing when nothing changed.
    • Smoother Korean input. Fixed an intermittent lag while composing Hangul (the delay mid-syllable as a character formed).
    • Internal caret diagnostics were removed from the keystroke path (still available behind a hidden preference for debugging).

    AI Assistant

    • Renamed “AI Agent” → “AI Assistant” across the panel, tab, menus, and settings.
    • Refined look. The panel shares the editor’s background so the two feel like one workspace; replies sit in clean cards, and the input field has a rounded border.
    • File attachments. A new attach button adds files: text files (.tex, .bib, .cls, …) are inserted inline into your prompt, while images and PDFs are sent as real attachments to Claude, ChatGPT, and Gemini. Staged files show as removable chips.
    • Smoother streaming. Responses render in steady batches instead of stuttering as the message grows.
    • Auto-follow & “Jump to latest.” New content keeps the view pinned to the bottom while you’re there; a bottom-center button brings you back when you’ve scrolled up.
    • Errors as chat bubbles. API/network failures now appear inline as a distinct error bubble with a readable message, instead of a banner that scrolls away.
    • Faster to open with a long chat history — the transcript now renders lazily instead of building every past message up front.
    • Larger send/stop button.

    Editor & Files

    • Fixed a scroll jump while typing in long documents — the viewport no longer lurches and snaps back on each keystroke.
    • Large pastes stay in sync. Pasting a big block now highlights the whole thing right away, and the scrollbar and minimap match the real document length — no more bottoming out while text remains below, blank regions in the lower minimap, or a one-time scroll jump after the paste settles.
    • Stable editor width across monitors. Moving the mouse to another display could flip the scrollbar between overlay and classic styles, changing the editor’s width and re-wrapping the whole document. The scrollbar now always overlays the text, so line wrapping stays put.
    • Find & Replace persists across tabs — mode (Find vs Replace) and search string carry over on tab switches, and each match flashes a find indicator (even when off-screen).
    • Redesigned minimap. The overview strip now draws a syntax-colored silhouette of your document — commands, comments, and math show in their editor colors. While typing it repaints only what changed, and full re-renders happen in the background, so the minimap never delays a keystroke even in very long files.
    • Comment toggle keeps the caret aligned with the inserted/removed %.
    • Save All (⌥⌘S) writes every open document at once.
    • Steadier terminal text. The built-in terminal now uses a fixed font size (matching the AI Assistant) instead of scaling with the editor’s font-size setting.
    • Tighter spacing between the sidebar / bottom-panel toggle icons.

    Sessions

    • Your tabs survive a crash. The open-tab set is now saved as you work — on tab changes and whenever the app leaves the foreground — not just on quit, so an unexpected shutdown no longer loses your session.
    • Clear Session. A new File ▸ Clear Session command closes every tab and wipes the saved session, so the next launch starts fresh.

  • Let me establish my credentials for this comparison: my 2019 PhD dissertation was written in Texmaker. Every paper I’ve published — Texmaker. Every Beamer slide I’ve lectured from, for years of teaching — Texmaker. Ten-plus years, one editor. I didn’t evaluate alternatives annually like a responsible consumer. I just opened Texmaker every morning and wrote. That’s not usage; that’s a relationship.

    So this is not a competitor dunking on a rival. This is a decade-long user explaining, with some tenderness, why he eventually built his way out.

    What Texmaker got right

    Among editors that compile locally, Texmaker had no real rival for years. Free, stable, everything in one window: editor, PDF viewer, structure panel, Quick Build one keystroke away. It ran the same on the Mac in my office and the Windows machine in the lab — for a grad student moving between machines, cross-platform wasn’t a feature, it was oxygen.

    There’s a reason my entire academic output lives in .tex files shaped by its conventions. It never lost my work. It compiled what I told it to compile. For ten years, that was enough.

    The itch that never went away

    But a decade of daily use gives you a very specific list. Not of bugs — of almosts.

    On a Mac, Texmaker always felt like a visitor. It’s a Qt app: keyboard shortcuts that were near-standard but not quite, font rendering a half-step off from every native app beside it. The structure panel stopped at subsubsection — I once patched the source myself to make it show paragraphs. Multi-file projects meant manually declaring a master document and remembering you’d done so. The PDF viewer synced, but with the enthusiasm of an employee near retirement.

    None of these were dealbreakers. That’s precisely why they lasted ten years. Every single one was small enough to shrug off on any given day — and together they formed a low, permanent hum of friction I stopped consciously hearing.

    So what is texspark, really?

    The honest answer: texspark is my list of Texmaker itches, implemented one by one.

    Native macOS text engine, so shortcuts and rendering simply match the rest of the system. An outline that goes all the way down and follows \include chains recursively — no patch required this time. A build target you set once (or that sets itself when you build from a sub-file). SyncTeX that jumps both directions across a multi-file project like it means it. Plus the things 2026 makes possible: a minimap, an AI panel beside the PDF.

    Every headline feature traces back to a specific moment of “…almost” in my Texmaker years. It’s less a competitor and more a reply, ten years in the making.

    The honest ledger

    What Texmaker still has over texspark: it’s free, and it runs on Windows and Linux. If you live across platforms, or free is the requirement, Texmaker remains what it’s always been — the dependable answer. I’d never argue otherwise; I have a dissertation’s worth of reasons not to.

    But if you’re on a Mac, and you know that hum I’m describing — the accumulated almost of a great tool that was never quite of your platform — that’s the exact gap texspark was built to close.

    Fourteen-day trial at texspark.io. From one longtime Texmaker user to, quite possibly, another.


  • Dear stranger,

    At 5:33 this morning — my time, not yours; for you it was probably a reasonable evening hour — you downloaded texspark. Safari, macOS, an IP address somewhere in Poland. That’s everything I know about you, and I’ve already thought about you more than is probably healthy.

    You should understand the context. My download log so far reads like a directory of robots: Googlebot, AhrefsBot, OpenAI’s crawler, something called Dataprovider.com. My Telegram bot pings me for every download, and for weeks I’ve opened each notification the way you open junk mail — already knowing.

    Then you. A real browser. A real Mac. A real person, presumably, with a real reason to want a LaTeX editor at that hour.

    So now I’m wondering. Are you a PhD student with a deadline? A professor, like me, writing lecture notes? Did you find me through a search for something Texmaker-related, or did one of my tweets into the void actually land? Did the app launch fine? Did the trial banner make sense? Is it — and I ask this with my whole heart — working?

    You have fourteen days. Somewhere around July 25th, you’ll decide whether texspark is worth keeping. No pressure. But here’s a small confession: the Purchase button isn’t even live yet — the business registration paperwork is still winding its way through the system. So I’ll make you a deal: before your trial runs out, I’ll ship a new release with the checkout actually working. You hold up your end by compiling something; I’ll hold up mine.

    If anything breaks: support@texspark.io. It goes straight to me. There is, in the most literal sense, nobody else.

    Powodzenia,
    Jacob


  • Let’s get the honest part out of the way first: if you’re co-writing a paper with three collaborators who all need to edit the same file this week, use Overleaf. That’s what it’s for, it’s genuinely excellent at it, and no desktop app — mine included — replaces real-time collaboration in a browser.

    This post is about the other 80% of LaTeX writing: the part you do alone.

    What Overleaf is

    A browser-based LaTeX environment. Nothing to install, TeX Live lives on their servers, your collaborators see your keystrokes live. For shared papers, class assignments, and “I just need to compile this once,” it’s the obvious answer.

    Where the browser starts to pinch

    Write in Overleaf daily — alone — and small things accumulate.

    The connection. No wifi, no writing. Train, plane, café with hostile internet: your manuscript is a loading spinner.

    Compile queues. On the free plan your document compiles on someone else’s schedule, with a timeout. A book-length project with TikZ figures will meet that timeout personally.

    It’s a tab. Your editor lives between Gmail and forty other tabs, with browser shortcuts fighting editor shortcuts. ⌘W closes your chapter, not your document.

    Your files aren’t files. They live in Overleaf’s storage. Git integration exists behind a paywall, but your local Spotlight, backups, and scripts can’t see your manuscript.

    The subscription. Overleaf’s serious features — longer compile times, Git, track changes — are a recurring cost, forever.

    What a native editor changes

    texspark is the opposite set of trade-offs. Your files are on your disk — versioned, backed up, greppable. Compilation is your Mac’s TeX Live: no queue, no timeout, works on a plane. The editor is a real macOS app: system IME for Korean/Japanese/Chinese input, native Find bar, shortcuts that don’t collide with a browser. SyncTeX jumps both directions across multi-file projects, the outline follows your \include chain, and an AI panel sits where Overleaf has none meaningful. One-time license instead of a subscription.

    What texspark doesn’t do: real-time collaboration. There’s no shared cursor, no comment threads. If that’s your daily reality, see paragraph one.

    The actual decision

    It’s not “which is better” — it’s where does your writing happen:

    • Multiple people, one document, this week → Overleaf
    • You, your Mac, a long manuscript → a native editor wins every day you sit down

    Plenty of people use both: Overleaf for the shared paper, texspark for the thesis. Files move between them freely — it’s all just .tex.

    Try the local side of the argument: texspark.io, 14-day full trial, no signup.


  • One month into writing the book, I asked Claude a question I probably shouldn’t have: at this pace, when do I finish?

    It answered without hesitation, the way only something with no stake in the answer can. First draft: end of this year. Publication: early next year. On a bookstore shelf: next summer.

    Next summer.

    Here’s the strange part: I wasn’t discouraged. There’s something clarifying about a timeline with zero flattery in it. A friend would have said “it’ll be done before you know it.” Claude just ran the numbers.

    And the numbers are fine. Books take the time they take — the whole premise of Machine Learning from Scratch is building things properly from the ground up. It would be embarrassing if the book itself were an exception.

    Back to chapter 5. See you at the bookstore. Apparently.


  • Every LaTeX writer has one. You might not have chosen it consciously, but somewhere along your first hundred equations, your fingers picked a default — and now it’s less a technical decision than a personality trait.

    Quick comparison: equation vs align vs gather

    EnvironmentBest forNumberingAlignment
    equationA single displayed equationOne numberCentered by default
    alignMulti-line derivations or equations aligned at an equals signOne number per row; use align* for noneAligned at &
    gatherSeveral equations displayed together without shared alignmentOne number per row; use gather* for noneEach row centered independently
    \[ ... \]A displayed formula that needs no numberNoneCentered by default
    eqnarrayLegacy documents; prefer align for new workOne number per rowThree columns; spacing around relations can be excessive

    Load \usepackage{amsmath} to use align, gather, and their starred forms. In numbered rows, use \notag to suppress an individual number.

    That’s the practical difference. Now for what your default says about you.

    equation

    The institutional choice. Numbered, respectable, exactly one equation at a time. People who default to equation cite theorems by number, keep their references in order, and probably have a .bib file that doesn’t embarrass them. The paperwork of mathematics, filled out correctly.

    align

    The workhorse. Once you’ve derived anything across multiple lines — an & here, a \\ there — you never quite go back. align people are process people: they want you to see how they got there, step by step, aligned at the equals sign like a well-organized argument.

    The dark side: align users have all, at some point, used it for a single equation out of pure muscle memory.

    gather

    The rarest breed. Multiple equations, centered, no alignment — gather says “these belong together, but I refuse to impose a relationship on them.” Honestly, I respect it. Choosing gather means you know align exists and decided your equations deserve to stand on their own.

    \[ ... \]

    The minimalist. No number, no name, no ceremony — just math, displayed, gone. \[ people write quickly and don’t look back. They’ll tell you most equations don’t need numbers, and they’re right, and it’s still slightly unsettling how little they care.

    (If you write $$ ... $$ instead: I see you. TeX purists would like a word, but I see you.)

    eqnarray

    Ah. So you learned LaTeX from a thesis template last touched in 2003, passed down through your lab like an heirloom nobody examines too closely.

    Here’s the thing nobody in that lab told you: eqnarray has been considered obsolete for decades. The spacing around the equals sign is subtly, famously wrong — wide enough that amsmath’s documentation politely pretends it doesn’t exist. Every eqnarray in the wild is a small archaeological record of how LaTeX knowledge actually spreads: not through documentation, but through inherited templates and the phrase “just copy what the last student did.”

    Switch to align. It takes five minutes. Your equals signs will thank you.

    (If you knew all this and use eqnarray anyway: you are a chaos agent, and I’d love to know what else is in your preamble.)

    For the record

    I’m a gather person. I like my equations centered, independent, and free of imposed relationships — which, now that I write it down, may explain more about me than about my typesetting.

    What’s yours?