Comments (13)
I think we eventually need more informative object than the raw string for expression codegen to implement this feature (and other stuff that rely on the LaTeX syntax rules). let me implement it later
from latexify_py.
Anyway, I will handle this issue today.
from latexify_py.
Anyway some simple heuristic can be applied without waiting for #82
from latexify_py.
Re-open this issue since it is actually not resolved yet.
from latexify_py.
Mind if I take a look into this?
from latexify_py.
Maybe it's good if we get a list of possible LHS-RHS pairs with/without the multiplication symbol, e.g.,
left | right | tex |
---|---|---|
3 |
x |
|
x |
y |
from latexify_py.
I can't think of a case where we would want to remove the \cdot
other than the case of constant * name
.
left | right | tex | why |
---|---|---|---|
3 |
x |
basic multiplication with constant (should work with floats and complex) | |
x |
3 |
should not reorder for user, if they want lack of \cdot , can change order themselves |
|
two |
names |
two variables should always have a \cdot
|
|
3 |
x * 4 * y |
should work in more complicated expression as well |
from latexify_py.
Some complete examples:
numeric | alphabet | math | word | function | bracket | |
---|---|---|---|---|---|---|
numeric | ||||||
alphabet | ||||||
math | ||||||
word | ||||||
function | ||||||
bracket |
In cases {alphabet,math,word}-{bracket}
it would make some confusion between them and function calls if we removed \cdot
.
EDIT(2023-10-16)
Added some consistent rules:
- Numeric should always keep the preceding
\cdot
. - Functions should always keep the following
\cdot
due to some ambiguity (e.g.,sin(x) * y
->$\sin xy$ ) - Numeric and brackets can remove the following
\cdot
without ambiguity, except the next operand is numeric.
from latexify_py.
I think alphabet-alphabet
would also cause confusion, because you could have a (arguably dumb) case like
def (x, y, xy):
return xy
In general though when user sees \cdot
.
edit: I'm realizing that word is stylized differently than alphabet, so it should be clear that
from latexify_py.
I'm realizing that word is stylized differently than alphabet
Yes this is intended in #139, but maybe the result is somewhat confusing for some users.
from latexify_py.
Looking through the code this seems like we'll have to utilize information from expr codegen to figure out what nodes are wrapped in parens , as well as information from identifier replacer to differentiate between math vs. alphabet vs. word.
from latexify_py.
Another situation, if we have a * b @ x @ y
, this should result in
from latexify_py.
Another situation, if we have a * b @ x @ y, this should result in .
It looks (a*b)@(x@y)
, but:
- Matrix multiplication is an associative operation: position of parenthesis is meaningless
- We get the AST
(((a*b)@x)@y)
for this expression.
from latexify_py.
Related Issues (20)
- Should `def(x): func(x)` generate `\func x` or `\func \mathopen{}\left( x \mathclose{}\right)`? HOT 2
- Fine-grained control over function name replacements
- Designing "plugin" interface HOT 3
- Use `latex.py` for to standardize codegen HOT 2
- Feedback From a User HOT 14
- Please add support for Python >3.11 HOT 2
- IPython extension to automatically use conversions on displayed objects HOT 1
- Better Identifier For Multi Index and RHS HOT 4
- Can you sub in values for show work? HOT 1
- Сonverting expressions or strings to latex format HOT 5
- Release New Version HOT 6
- Support for sqrt-like nth-roots when rendering x**(1/p)? HOT 2
- Support for log1p and expm1? HOT 4
- `if-elif` statements break if there's no `else` HOT 1
- Typo in \mathopen HOT 3
- Counterintuitive (wrong?) parenthesis when combining exp() and powers HOT 16
- Function docstring and reduce_assignments enabled does not play nice HOT 2
- Include .tex output examples in latexify_py/examples/examples.ipynb HOT 3
- math.pow not working properly on google colab HOT 2
- Non working link on the pypi page of the project HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from latexify_py.