valentjn / vscode-ltex

LTeX: Grammar/spell checker :mag::heavy_check_mark: for VS Code using LanguageTool with support for LaTeX :mortar_board:, Markdown :pencil:, and others
https://valentjn.github.io/ltex
Mozilla Public License 2.0
800 stars 27 forks source link

False positive UPPERCASE_SENTENCE_START: \right. #831

Open fschnei opened 1 year ago

fschnei commented 1 year ago

Describe the bug Using the latex macro '\right.' is interpreted as end of sentence.

Steps to reproduce

  1. Create a latex.tex file with the content shown in 'Sample document'.
  2. Run 'Ltex: Check current Document'
  3. Notice the info 'This sentence does not start with an uppercase letter. LTex(UPPERCASE_SENTENCE_START)' in Problem Tab of VSCode.

Expected behavior The info UPPERCASE_SENTENCE_START should not appear

Sample document

``` \documentclass{article} \usepackage{amsmath} \begin{document} The system \begin{align} \Sigma^\mathrm{A} : \left\lbrace \begin{aligned} \dot{x}(t) &= - x(t) , \\ x(0) &= x_0 \end{aligned} \right. \end{align} is stable. The system \begin{align} \Sigma^\mathrm{A} : \begin{aligned} \dot{x}(t) &= - x(t) , \\ x(0) &= x_0 \end{aligned} \end{align} is stable. \end{document} ```

LTeX configuration

``` { "ltex.ltex-ls.logLevel": "finest", "ltex.trace.server": "verbose", "ltex.language": "en-GB", "ltex.latex.commands": { "\\label{}": "ignore", "\\documentclass[]{}": "ignore", "\\right." : "ignore", "\\right.{}" : "ignore", "\\right.[]{}" : "ignore" }, "ltex.latex.environments": { "lstlisting": "ignore", "verbatim": "ignore", "align": "ignore" } } ```

"LTeX Language Server" log file

``` org.bsplines.ltexls.server.DocumentChecker logTextToBeChecked FEINER: Checking the following text in language 'en-GB' via LanguageTool: " \n\nThe system Dummy0. is stable.\n\nThe system Dummy1 is stable.\n\n" org.bsplines.ltexls.server.DocumentChecker logTextToBeChecked AM FEINSTEN: annotatedTextParts = [MARKUP("\\documentclass{article}"), MARKUP("\r\n"), FAKE_CONTENT(" "), MARKUP("\\usepackage{amsmath}"), MARKUP("\r\n"), MARKUP("\\begin"), MARKUP("{document}"), MARKUP("\r\n\r\n"), FAKE_CONTENT("\n\n"), TEXT("T"), TEXT("h"), TEXT("e"), MARKUP(" "), FAKE_CONTENT(" "), TEXT("s"), TEXT("y"), TEXT("s"), TEXT("t"), TEXT("e"), TEXT("m"), MARKUP("\r\n"), FAKE_CONTENT(" "), MARKUP("\\begin"), MARKUP("{align}"), MARKUP("\r\n\t"), MARKUP("\\Sigma"), MARKUP("^"), MARKUP("\\mathrm"), MARKUP("{"), MARKUP("A"), MARKUP("}"), MARKUP("\r\n\t"), MARKUP(":"), MARKUP(" "), MARKUP("\\left"), MARKUP("\\lbrace"), MARKUP("\r\n\t"), MARKUP("\\begin"), MARKUP("{aligned}"), MARKUP("\r\n\t\t"), MARKUP("\\dot"), MARKUP("{"), MARKUP("x"), MARKUP("}"), MARKUP("("), MARKUP("t"), MARKUP(")"), MARKUP(" "), MARKUP("&"), MARKUP("="), MARKUP(" "), MARKUP("-"), MARKUP(" "), MARKUP("x"), MARKUP("("), MARKUP("t"), MARKUP(")"), MARKUP("\r\n\t\t"), MARKUP(","), MARKUP(" "), MARKUP("\\\\"), MARKUP("\r\n\t\t"), MARKUP("x"), MARKUP("("), MARKUP("0"), MARKUP(")"), MARKUP(" "), MARKUP("&"), MARKUP("="), MARKUP(" "), MARKUP("x"), MARKUP("_"), MARKUP("0"), MARKUP("\r\n\t"), MARKUP("\\end"), MARKUP("{aligned}"), MARKUP("\r\n\t"), MARKUP("\\right"), MARKUP("."), MARKUP("\r\n"), MARKUP("\\end"), MARKUP("{align}"), FAKE_CONTENT("Dummy0. "), MARKUP("\r\n"), TEXT("i"), TEXT("s"), MARKUP(" "), FAKE_CONTENT(" "), TEXT("s"), TEXT("t"), TEXT("a"), TEXT("b"), TEXT("l"), TEXT("e"), TEXT("."), MARKUP("\r\n\r\n"), FAKE_CONTENT("\n\n"), TEXT("T"), TEXT("h"), TEXT("e"), MARKUP(" "), FAKE_CONTENT(" "), TEXT("s"), TEXT("y"), TEXT("s"), TEXT("t"), TEXT("e"), TEXT("m"), MARKUP("\r\n"), FAKE_CONTENT(" "), MARKUP("\\begin"), MARKUP("{align}"), MARKUP("\r\n\t"), MARKUP("\\Sigma"), MARKUP("^"), MARKUP("\\mathrm"), MARKUP("{"), MARKUP("A"), MARKUP("}"), MARKUP("\r\n\t"), MARKUP(":"), MARKUP("\r\n\t"), MARKUP("\\begin"), MARKUP("{aligned}"), MARKUP("\r\n\t\t"), MARKUP("\\dot"), MARKUP("{"), MARKUP("x"), MARKUP("}"), MARKUP("("), MARKUP("t"), MARKUP(")"), MARKUP(" "), MARKUP("&"), MARKUP("="), MARKUP(" "), MARKUP("-"), MARKUP(" "), MARKUP("x"), MARKUP("("), MARKUP("t"), MARKUP(")"), MARKUP("\r\n\t\t"), MARKUP(","), MARKUP(" "), MARKUP("\\\\"), MARKUP("\r\n\t\t"), MARKUP("x"), MARKUP("("), MARKUP("0"), MARKUP(")"), MARKUP(" "), MARKUP("&"), MARKUP("="), MARKUP(" "), MARKUP("x"), MARKUP("_"), MARKUP("0"), MARKUP("\r\n\t"), MARKUP("\\end"), MARKUP("{aligned}"), MARKUP("\r\n"), MARKUP("\\end"), MARKUP("{align}"), FAKE_CONTENT("Dummy1 "), MARKUP("\r\n"), TEXT("i"), TEXT("s"), MARKUP(" "), FAKE_CONTENT(" "), TEXT("s"), TEXT("t"), TEXT("a"), TEXT("b"), TEXT("l"), TEXT("e"), TEXT("."), MARKUP("\r\n\r\n"), FAKE_CONTENT("\n\n"), MARKUP("\\end"), MARKUP("{document}")] ```

"LTeX Language Client" log file

omitted

Version information

Additional context/information It seems that the latex parser interprets the dot of the macro \right. as an dot (end of sentence). The latex parser should ignore the macro. I tried to ignore the macro \right with its argument '.' by ignoring \right. or the align environment. Both does not yield the expected result.

unknownnumbers commented 1 year ago

I changed the form. From \right. to \right.{} and it works well.