Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove 'katex' from @khanacademy/perseus #1428

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Conversation

jeremywiebe
Copy link
Collaborator

@jeremywiebe jeremywiebe commented Jul 18, 2024

Summary:

KaTeX was retired from use in Perseus in 2023. Today, I noticed that we still reference the katex package in the perseus package.json, but we never import it anywhere in the code.

So I'm removing that dependency. I've also updated some code comments and storybook references to not mention KaTeX anymore. I've left some references to CSS classes and the KaTeX_Main font ref. I'm unsure if they might be important somewhere (especially if host applications may still set it outside of Perseus).

So this doesn't fully remove all references to katex, but it moves us another step closer.

Issue: "none"

Test plan:

yarn tsc
yarn lint

I ran storybook and opened the ZoomableTex stories and played with them.

I also went to the EditorPage story and pasted in the following Tex into the Question field (which uses the macro that we used to have to replace for KaTeX, but MathJax supports properly: switching \begin{align} to \begin{aligned}).

$$$
\begin{align*}
q       &=CV                                \\
        &=3e-20x1000  \\
        &=3e-17
\end{align*}
$$$
image

@jeremywiebe jeremywiebe self-assigned this Jul 18, 2024
@@ -1,7 +1,6 @@
import * as React from "react";

import Graph from "../graph";
// TODO(scottgrant): Katex is unavailable here. Fix!
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't even make sense of what was to be done here so I'm deleting this comment.

// support (yet) with \begin{aligned}...\end{aligned} which renders
// the same is supported by KaTeX. It does the same for align*.
// TODO(kevinb) update content to use aligned instead of align.
const tex = node.content.replace(/\{align[*]?\}/g, "{aligned}");
Copy link
Collaborator Author

@jeremywiebe jeremywiebe Jul 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MathJax supports the \begin{align} macro just fine (tested in Storybook).

Copy link
Member

@benchristel benchristel Jul 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing this code might break the exercise editor, which still uses KaTeX behind the scenes to validate that the input TeX can render with KaTeX. This gets complicated to reason about, because the reason the editor does that is to ensure that TeX written by content creators is compatible with old versions of the mobile app, which use KaTeX (and old versions of Perseus which have this replacement logic, so \begin{align} will work fine there).

I think we could move this logic to the exercise editor and it would be fine. But I'd lean toward keeping this code the same until we can remove KaTeX everywhere. If you agree, can you restore this code and add a TODO comment here referencing LEMS-1608?

Copy link
Contributor

github-actions bot commented Jul 18, 2024

Size Change: -292 B (-0.03%)

Total Size: 854 kB

Filename Size Change
packages/perseus/dist/es/index.js 414 kB -292 B (-0.07%)
ℹ️ View Unchanged
Filename Size
packages/kas/dist/es/index.js 38.2 kB
packages/kmath/dist/es/index.js 4.27 kB
packages/math-input/dist/es/index.js 80.8 kB
packages/math-input/dist/es/strings.js 1.73 kB
packages/perseus-core/dist/es/index.js 1.48 kB
packages/perseus-editor/dist/es/index.js 273 kB
packages/perseus-linter/dist/es/index.js 21.6 kB
packages/perseus/dist/es/strings.js 3.21 kB
packages/pure-markdown/dist/es/index.js 3.67 kB
packages/simple-markdown/dist/es/index.js 12.4 kB

compressed-size-action

@@ -318,7 +318,6 @@ export type APIOptions = Readonly<{

type TeXProps = {
children: string;
katexOptions?: any;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked and this prop/string is not used in webapp anywhere!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git(hub) doesn't seem to recognize that this is a rename.

@jeremywiebe jeremywiebe marked this pull request as ready for review July 18, 2024 23:45
@khan-actions-bot
Copy link
Contributor

Gerald

Required Reviewers
  • @Khan/perseus for changes to .changeset/mighty-news-repair.md, packages/perseus/package.json, packages/perseus/src/index.ts, packages/perseus/src/perseus-types.ts, packages/perseus/src/renderer.tsx, packages/perseus/src/types.ts, packages/perseus/src/__tests__/renderer.test.tsx, packages/perseus/src/interactive2/movable-point.tsx, packages/perseus/src/util/tex-preprocess.ts, packages/perseus/src/util/tex.ts, packages/perseus/src/components/__stories__/graph.stories.tsx, packages/perseus/src/components/__stories__/zoomable-tex.stories.tsx, packages/perseus/src/widgets/label-image/answer-choices.tsx

Don't want to be involved in this pull request? Comment #removeme and we won't notify you of further changes.

Copy link
Member

@benchristel benchristel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think removing the \begin{align} replacement will break the exercise editor. I left a note inline. So we either need to keep the replacement code, or move it to the exercise editor. Otherwise, this looks good!

* If the type of contents is string, the contents will be rendered with
* KaTeX. Otherwise, the content will be assumed to be a DOM node and will
* be appended inside the tooltip.
* If the type of contents is string, the contents will be rendered as TeX
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: TeX is the input language, so I think it would be more accurate to say that "the contents will be interpreted as TeX and rendered as DOM elements"

// support (yet) with \begin{aligned}...\end{aligned} which renders
// the same is supported by KaTeX. It does the same for align*.
// TODO(kevinb) update content to use aligned instead of align.
const tex = node.content.replace(/\{align[*]?\}/g, "{aligned}");
Copy link
Member

@benchristel benchristel Jul 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing this code might break the exercise editor, which still uses KaTeX behind the scenes to validate that the input TeX can render with KaTeX. This gets complicated to reason about, because the reason the editor does that is to ensure that TeX written by content creators is compatible with old versions of the mobile app, which use KaTeX (and old versions of Perseus which have this replacement logic, so \begin{align} will work fine there).

I think we could move this logic to the exercise editor and it would be fine. But I'd lean toward keeping this code the same until we can remove KaTeX everywhere. If you agree, can you restore this code and add a TODO comment here referencing LEMS-1608?

@@ -15,8 +15,8 @@ function findChildOrAdd(elem: any, className: string) {
}

export default {
// Process a node and add math inside of it. This attempts to use KaTeX to
// format the math, and if that fails it falls back to MathJax.
// Process a node and add math inside of it. This uses MathJax
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Process a node and add math inside of it. This uses MathJax
// Process a node and add math inside of it. This uses MathJax to

Copy link

codecov bot commented Jul 19, 2024

Codecov Report

Attention: Patch coverage is 88.23529% with 2 lines in your changes missing coverage. Please review.

Project coverage is 71.30%. Comparing base (8b128b5) to head (30a15d3).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1428      +/-   ##
==========================================
+ Coverage   69.62%   71.30%   +1.67%     
==========================================
  Files         504      508       +4     
  Lines      105597   105669      +72     
  Branches     7650    11489    +3839     
==========================================
+ Hits        73521    75345    +1824     
+ Misses      31960    30324    -1636     
+ Partials      116        0     -116     

Impacted file tree graph

Files Coverage Δ
packages/perseus/src/index.ts 100.00% <100.00%> (ø)
packages/perseus/src/renderer.tsx 93.92% <100.00%> (+1.45%) ⬆️
packages/perseus/src/util/tex-preprocess.ts 100.00% <100.00%> (ø)
packages/perseus/src/util/tex.ts 95.89% <100.00%> (ø)
...perseus/src/widgets/label-image/answer-choices.tsx 94.50% <100.00%> (ø)
...ackages/perseus/src/interactive2/movable-point.tsx 63.80% <33.33%> (+5.47%) ⬆️

... and 125 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8b128b5...30a15d3. Read the comment docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants