Я хотел бы создать блестящее приложение, в котором я отображал бы уравнения с помощью Mathjax. Но они выглядят не очень хорошо, потому что между членами уравнения нет пробелов. Вот мой код с уравнением внутри оператора renderText. Я использую уравнение в Shiny, но получаю код mathjax для рендеринга, помещая необработанное уравнение в документ R Markdown и используя функцию mathout библиотеки mathml для создания кода уравнения в функции. Возможно, это то, что я делаю неправильно.
library(shiny)
ui <- fluidPage(
title = 'MathJax Examples',
uiOutput('ex3'))
server <- function(input, output, session) {
output$ex3 <- renderUI({
withMathJax(
renderText("$${610.70}{\\cdot}{\\exp{\\left[{\\left({17.38}{{}}
{ta}\\right)}{/}{\\left({239.00}{+}{ta}\\right)}\\right]}}$$"))
})}
shinyApp(ui = ui, server = server)
Вывод выглядит следующим образом: 610,70⋅exp[(17,38ta)/(239,00+ta)]
Я понимаю, что на Stackoverflow есть подобные вопросы, но я не могу заставить их предложения работать. Я хотел бы получить вывод, который выглядит следующим образом:
610.70 * exp[(17.38 * ta)/(239.00 + ta)]
Я должен добавить, что получаю escape-ошибку, если использую одиночную обратную косую черту. Если я сделаю «\cdot» вместо «\cdot». например:
Error: '\c' is an unrecognized escape in character string
(<input>:4:31)
Ошибка escape при использовании одной обратной косой черты является нормальной. Однако почему, например? \\ \\cdot \\
не подходит?
Вы должны быть более конкретными и привести пример. Я не знаю, что ты имеешь в виду.
Я понимаю ваш вопрос так, что вы спрашиваете, как вставлять пробелы, например. между \\cdot
так, что это похоже на 610.70 * exp
, а не на 610.70*exp
. Команда для такого пробела — две обратные косые черты, за которыми следует один пробел, поэтому в таком случае можно использовать 610.70 \\ \\cdot \\ \\exp
.
Да я вижу. Есть ли какое-нибудь приложение или инструмент, который мог бы создать это для меня?
Давайте продолжим обсуждение в чате.
Я не понимаю. Вам нужно приложение или инструмент для вставки буквенного текста в середину другого буквенного текста в вашем коде? Вы можете просто поставить sub("\\\\cdot", "\\\\ \\\\cdot \\\\", your_existing_string)
или gsub
, если есть два или более cdot
.
Помимо "\\ "
(который создает обратную косую черту), в LaTeX есть несколько других команд пробелов для пробелов разного размера. Я думаю, что MathJax их поддерживает. Список см. в разделе «Команды пробелов» в разделе 7 на этой странице: latex-tutorial.com/latex-space
Это для более чем 250 уравнений (некоторые из которых в 20+ раз превышают размер примера, который я использовал), для гораздо большего количества строк, чем cdot, некоторые из которых показаны в моем примере, включая пробелы между всеми математическими символами и значениями и т. д. Я хотел бы создать приложение Shiny, которое отображало бы уравнения в удобном формате, а не просто текст.
Проблема в том, что вы заключаете все свои операторы в фигурные скобки, что говорит MathJax не применять к ним обычные правила пробелов. Не делайте этого, используйте "\\cdot"
вместо "{\\cdot}"
и т. д. Например, эта версия вашего примера выглядит нормально:
library(shiny)
ui <- fluidPage(
title = 'MathJax Examples',
uiOutput('ex3'))
server <- function(input, output, session) {
output$ex3 <- renderUI({
withMathJax(
renderText("$${610.70}\\cdot{\\exp{\\left[{\\left({17.38}*
{ta}\\right)}{/}{\\left({239.00}+{ta}\\right)}\\right]}}$$"))
})}
shinyApp(ui = ui, server = server)
Я понимаю это:
Я считаю, что скобки вокруг цифр и ta
не нужны, но безвредны.
В комментарии вы сказали, что у вас более 250 уравнений. Вносить эти изменения вручную было бы утомительно, но если они есть где-то в тексте, вы можете последовать совету @r2evans и использовать gsub()
в файле. Например, если уравнения находятся в символьной переменной lines
, это исправит все операторы \\cdot
, «+» и «*»:
lines <- gsub("{\\cdot}", "\\cdot", lines, fixed = TRUE)
lines <- gsub("{+}", "+", lines, fixed = TRUE)
lines <- gsub("{*}", "*", lines, fixed = TRUE)
Я настоятельно не советую вручную возиться с пробелами в математическом уравнении (если вы точно не знаете, что делаете): в общем, MathJax знает лучше вас.
Это означает: удалите все скобки из вашего уравнения: они говорят MathJax не применять обычные правила пробелов. Фигурные скобки необходимы только для группировки подвыражений, чтобы переопределить обычные правила приоритета операторов. В вашем случае это не применимо.
Кроме того, обычно рекомендуется использовать \middle/
вместо простого /
для отображения дроби солидуса — по той же причине, что и использование \left(…\right)
вместо простого (…)
(хотя в вашем случае это не имеет значения). Альтернативно, используйте \frac{…}{…}
для сложенной дроби.
Сравните (нажмите Run code snippet ниже, чтобы увидеть результат):
<script type = "text/javascript" async src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
Original:
$${610.70}{\cdot}{\exp{\left[{\left({17.38}{{}}
{ta}\right)}{/}{\left({239.00}{+}{ta}\right)}\right]}}$$
Corrected:
$$
610.70 \cdot \exp{\left[
\left( 17.38 ta \right) \middle/
\left( 239.00 + ta \right)
\right]}
$$
Using stacked fraction:
$$
610.70 \cdot \exp \frac{17.38 ta}{239.00 + ta}
$$
В версии со сложенной дробью я получаю следующее: Ошибка: неожиданный '$' в: " withMathJax(renderText($). Я использую это в Shiny, так что, возможно, есть разница в том, как это выполняется здесь. Я не не знаю - я учусь здесь.
\\
не подходит?