Ipython: Números de ecuación en el cuaderno.

Creado en 26 ago. 2013  ·  45Comentarios  ·  Fuente: ipython/ipython

El LaTeX en línea de IPython no incluye numeración de ecuaciones. Sería genial si las secuencias de LaTeX que normalmente están numeradas (es decir, bloques \begin{equation} ... \end{equation}) tuvieran números (¿opcional?). Sería un éxito si pudiéramos adjuntar referencias a las ecuaciones y hacer referencia a ellas de alguna manera más adelante en el texto.

notebook

Comentario más útil

¿Esto ya está resuelto o debería hacer +1 en esto?

Todos 45 comentarios

+1
Esta es una característica bastante importante para cualquier tipo de documento matemático.
Creo que MathJax ya tiene esta capacidad:

http://docs.mathjax.org/en/latest/tex.html#automatic -ecuación-numeración

En cuanto a las referencias, creo que es crucial desarrollar un sistema genérico de referencias cruzadas con una sintaxis unificada, y no uno que sea específico para las ecuaciones de LaTeX (y los backends de LaTeX).

Estoy de acuerdo en que debe haber un sistema genérico de referencias cruzadas, pero agregaría que también debería poder interactuar con el código python. Esto permitiría que el látex en la rebaja haga referencia a las figuras producidas en el código.

Esto probablemente tendría que esperar hasta que esté disponible un sistema para acceder a las variables de python desde las celdas de descuento, ya que probablemente usaría un sistema similar.

Esto también parece resolver el problema de manera más completa http://stackoverflow.com/questions/18823779/ipython-notebook-and-mathjax-labeled-equations

@ahmadia, ¿cuál es el problema de por qué las ecuaciones no se pueden numerar de forma predeterminada? No poder numerar y referenciar ecuaciones es algo bastante molesto actualmente.

+1. Parece que implementar #5921 permitiría esto fácilmente.

+1. Espero que esto se implemente muy pronto.

+1

+1.
Estoy usando ipython notebooks para complementar el material del curso para un curso universitario de electromagnetismo de nivel junior, y lo estoy haciendo como un caso de prueba para determinar si se debe impulsar una implementación amplia de ipython notebook a lo largo de nuestro plan de estudios de pregrado. La falta de una numeración consistente de las ecuaciones en un cuaderno, o dentro de las secciones de un cuaderno, es una seria limitación, junto con la capacidad de hacer referencia a números de ecuaciones en el texto. Estoy de acuerdo con que dicha numeración sea específica para las partes de LaTeX de una computadora portátil, especialmente si intentar un enfoque más general significa una espera más larga para obtener esta funcionalidad.

+1.
Lo mismo aquí, estoy escribiendo mis notas para un curso de cálculo numérico usando ipython y realmente falta la numeración de referencia.

+1

Esto es lo único que me impide usar iPython Notebooks como mi principal herramienta de escritura de documentos (salvo por la falta de colaboración en tiempo real, pero eso no es tan importante). En cambio, tengo que hacer borradores aquí y luego transferirlos a un editor LaTeX.

+1 :+1: ¡Estamos usando esto para dar conferencias y esta característica es absolutamente necesaria!

Ok, finalmente probé la "solución" descrita en esta publicación donde modificas mathjaxutils.js. Siempre que actualice la página web de ipython notebook después de realizar cambios en las celdas de descuento que contienen látex, aparecerán los números de ecuación y lo harán en el orden correcto. Actualizar la página también corrige las etiquetas, que quedan sin resolver cuando se vuelve a ejecutar la celda en la que están definidas (es decir, shift-enter). Sin embargo, cuando el cuaderno se representa en nbviewer.ipython.org, los números de ecuación faltan por completo y las etiquetas no están resueltas, por lo que se reemplazan con "???" donde se les hace referencia en las celdas de texto de descuento. La conclusión es que esta no es una gran solución para la mayoría de los casos de uso, aunque me alegro de que el autor original haya hecho la pregunta y haya descubierto tanto.

Quería numerar las ecuaciones devueltas por las celdas de código.
Eso es lo que usé: http://nbviewer.ipython.org/github/MalteJin/Manual-equation-numbering/blob/branch/Manual%20equation%20numbering.ipynb

^ ¿Es esta la solución recomendada actualmente?

Protuberancia. Estoy usando cuadernos Jupyter para mis notas del curso y este es un problema grave. ¿Sería una sintaxis conveniente para numerar ecuaciones manualmente un compromiso decente?

¿Sería una sintaxis conveniente para numerar ecuaciones manualmente un compromiso decente?

Esa es una buena idea @poulson y existe la sintaxis \tag en MathJaX que admite esto.
Manual MathJax Equation Tags en el ejemplo de Jupyter Notebook . Las mismas limitaciones (volver a ejecutar una celda de Markdown hará que MathJaX se rompa si no actualiza el navegador), pero al menos no tiene que volver a configurar la computadora portátil para hacerlo.

@ahmadia ¡Gracias! Volver a ejecutar romper la celda definitivamente es un poco frustrante, ¡pero este es un gran progreso desde \begin{equation} sin etiquetar!

@ahmadia ¿Se espera que las referencias de la ecuación no se resuelvan en su enlace o en el cuaderno en vivo (incluso después de actualizar)?

Intente actualizar y luego ejecute todas las celdas. No creo que los enlaces funcionen en GitHub
porque GH tira URLs.

El sábado 3 de octubre de 2015, Jack Poulson [email protected] escribió:

@ahmadia https://github.com/ahmadia ¿Se espera que la ecuación
las referencias no se resuelven en su enlace o en el cuaderno en vivo (incluso después de
refrescante)?


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/ipython/ipython/issues/4113#issuecomment-145305340 .

Eso no funcionó para mí, pero dado que todo está codificado, no veo ninguna razón para insistir en usar \ref . Por lo tanto, codifiqué los números de ecuación para las referencias y produje el producto final que se puede ver aquí: http://web.stanford.edu/class/math53/notebooks/Week2.html

Gracias @poulson por impulsar esto. Esto me golpea una y otra vez, y codificar números de ecuaciones es bastante malo, pero ¿qué se puede hacer? IPython debería tener soporte nativo para esto.

La mejor solución hasta ahora, ¡gracias chicos!

Si incluyes el código:

MathJax.Hub.Config({
  TeX: { equationNumbers: { autoNumber: "AMS" } }
});

en una extensión de javascript, o incluso en una salida de javascript en el cuaderno, se activará la numeración automática de ecuaciones. Tendrá todos los problemas que nos impiden hacerlo de manera predeterminada, principalmente porque los números de las ecuaciones de Mathjax están ordenados por tiempo de procesamiento, no por ubicación en la página, por lo que la numeración solo será correcta en la carga de la primera página.

En realidad, puede restablecer la numeración de ecuaciones y volver a representar las ecuaciones en el cuaderno.

Hice una extensión de cuaderno simple que hace esto:
https://github.com/ipython-contrib/IPython-notebook-extensions/pull/335

@juhasch genial! Dada la muy mala experiencia de los números de ecuación en la mayoría de las circunstancias, creo que la mejor opción es desactivarla por defecto. Pero convertir esto en una opción de configuración de frontend con la acción de volver a numerar sería genial (el botón de la barra de herramientas es probablemente un espacio demasiado valioso para dedicarle, pero una acción de menú estaría bien).

Me imagino usando el re-render/re-number con bastante frecuencia al crear cuadernos, así que votaría por un botón de la barra de herramientas o, si va al menú, al menos una tecla de acceso rápido en modo normal.

@lucasb-eyer Creo que es algo bueno para una extensión como la que ha proporcionado @juhasch , pero probablemente no lo haríamos de forma predeterminada, ya que tanto los atajos de teclado predeterminados como el espacio de la barra de herramientas son extremadamente valiosos. Pero sería posible agregar uno o ambos a través de custom.js o nbextension.

@minrk : las extensiones se pueden activar/desactivar fácilmente y volver a activar/desactivar mediante la extensión del servidor nbextensions:
clipboard01

Si presiona el botónbutton botón de la barra de herramientas, la numeración de la ecuación se reinicia/vuelve a renderizar.

@juhasch gracias por tu trabajo! Este es un gran paso adelante.

@minrk en su experiencia, ¿qué propondría como la solución adecuada a largo plazo para la numeración de ecuaciones? La extensión de @juhasch es solo una solución por ahora. No le estoy pidiendo que lo implemente, solo esboce cuál debería ser la solución. Creo que hay mucha gente realmente preocupada por esto, y si sabemos cuál es el camino correcto a seguir, podemos intentarlo.

¿Cuál propondría usted como la solución adecuada a largo plazo para la numeración de ecuaciones?

No puedes tenerlo. MathJax asume que tiene acceso a toda la página cuando realiza la numeración de ecuaciones, e IPython representa Markdown celda por celda, que es la única manera sensata de hacerlo para portátiles grandes. Requeriría trabajo/implementación en el lado MathJax de las cosas, no en el cuaderno.

La mayoría de las personas (incluyéndome a mí) solo quieren la numeración de ecuaciones. No creo que nos importe tanto cómo se implementa técnicamente. Entonces, puedo ver varias formas posibles de avanzar, por ejemplo, agregar algunos parches a MathJax que permitan que el cuaderno le diga el número de la ecuación sin tener acceso a toda la página, u otra solución es usar MathJax para representar la ecuación sin el número. , y luego represente el número por el propio cuaderno. Puede haber más opciones. Pero me gustaría tener alguna bendición oficial sobre cuál es la mejor manera, ya que no estoy muy versado en los aspectos internos.

¿Cuál propondría usted como la solución adecuada a largo plazo para la numeración de ecuaciones?

Por ahora, básicamente haría lo que @juhasch ha hecho con su extensión, con los siguientes cambios si se fusiona con el maestro:

  1. desactivarlo por defecto
  2. store toggle en frontend-config, por lo que solo necesita activarlo una vez
  3. agregue una acción de renumeración, para que pueda vincularse a un atajo de teclado
  4. coloque la interfaz de usuario predeterminada para volver a numerar en el menú en lugar de la barra de herramientas

Básicamente, lo haría un poco peor que la extensión para aquellos para quienes esto es una prioridad, ya que eso no tiene sentido como predeterminado. Sin embargo, una vez que la acción está disponible, agregar cosas como accesos directos y botones de la barra de herramientas se convierte en una personalización simple para aquellos que tienen diferentes prioridades.

No sé qué tan factible es la numeración siempre correcta, porque significaría que en _cualquier_ procesamiento de una celda de descuento o salida HTML, la numeración tendría que restablecerse, y _todas_ las celdas de descuento y los resultados HTML tendrían que volver a renderizarse, cada vez.

Dada la documentación, me parece un plan razonable como usuario. :+1:

@minrk : como usuario, yo también encontraría esta solución útil. ¿Qué tan oneroso sería volver a renderizar todas las salidas HTML y de descuento?

@gregnordin eso dependerá del tamaño del cuaderno y crecerá sin límites con el tamaño del cuaderno. Significaría que cada vez que edita una celda de descuento, podría tomar una cantidad de tiempo similar para renderizar como si cargara todo el cuaderno cuando lo abrió por primera vez. Definitivamente no está bien para un comportamiento predeterminado, pero si una extensión quisiera intentarlo, sería bienvenido a intentarlo.

+1

+1 para esta función. Estoy preparando conferencias sobre física para estudiantes y la numeración de ecuaciones es esencial.

Otra opción, que permite actualizar los números de la ecuación, sin volver a renderizar todo, es un javascript que busca en la salida HTML elementos con ecuaciones o referencias, y reemplaza su texto con el valor apropiado.

Para que sea completamente funcional, se requieren algunas modificaciones en MathJax, estableciendo atributos adicionales para los elementos que deben actualizarse, de modo que el script pueda reconocerlos.

Por el momento, ese soporte no está allí, pero las siguientes soluciones funcionarán.

  • use \tag{labelname} para crear un número de ecuación. Tenga en cuenta que aquí la etiqueta es la etiqueta
  • haga referencia a él en Markdown con código html sin formato <span class=reference data-target=labelname></span> Esto es necesario porque la salida HTML de \ref o \eqref no incluye el nombre de la etiqueta.

por ejemplo

$$
\begin{equation}
  A = 1 \tag{eq:sample}
\end{equation}
$$

The amazing result in <span class=reference data-target="eq:sample"></span> can ...blah..blah

El siguiente script actualiza los números de la ecuación. Debe ejecutarse después de que se hayan representado nuevos números de ecuación o referencias. Por ahora, puede colocar el script en una celda separada y ejecutarlo manualmente cuando sea necesario. Una solución completa necesita algún mecanismo para desencadenar una repetición en los momentos apropiados.

%%javascript

// find all equation numbers (tags) that have no data-label attribute and set
// it to the tag text
$("span.mtd[id|='mjx-eqn']").not("[data-label]").each(
    function (index)
    {
        $(this).attr("data-label", $(this).text().slice(1,-1));
    }
);

// loop over all equation numbers and set the text 
$("span.mtd[id|='mjx-eqn']").each(
    function (index)
    {
        $(this).text("(" + (index+1) + ")");
    }
);

// loop over all references and resolve them by finding the
// equation number with a matching data-label attribute
$("span.reference").each(
    function (index)
    {
        var target = $(this).attr("data-target");
        var eqn = $("span.mtd[id|='mjx-eqn'][data-label='" + target + "']").text()
        $(this).text(eqn)
    }
);

Tenga en cuenta que el script solo actualiza los números, dejando todo el diseño como está. Debería ser mucho más eficiente que dejar que MathJax vuelva a renderizar todo.

@basvandertol Gracias por la muestra, pero no veo cómo esto es útil ya que los resultados solo son visibles en la pantalla actual: no se guardan, no se pueden imprimir, no se pueden ver en nbviewer ni se ven en cualquier salida (PDF, HTML, etc.) no veo que esto sea una solución alternativa. ¿Te entendí mal? ¿O es solo parte de una solución?

Gracias por los comentarios @dsblank. De hecho, es solo una solución parcial, específicamente al problema de actualizar los números de la ecuación mientras se edita el cuaderno sin volver a renderizar todo. Estaba experimentando con atributos de datos HTML para lograr esto. Más tarde descubrí que nbconvert utiliza un enfoque similar para tratar las citas de Latex. http://nbconvert.readthedocs.io/en/latest/latex_citations.html

Por el momento, MathJax no agrega suficientes atributos a la salida HTML para resolver las referencias después de la representación. Es por eso que uso estas etiquetas y referencias hackish para obtener el resultado HTML que necesito. Con estas etiquetas se rompe la conversión normal a Latex ->pdf.

Ahora me estoy familiarizando con el código fuente de MathJax para ver si hay alguna manera fácil de agregar los atributos HTML a las etiquetas y referencias normales.

El siguiente paso sería agregar soporte en nbconvert para reconocer estos atributos HTML, tal como ya lo hace con las citas. Si nbconvert también pudiera escanear la salida de las secciones de código para HTML con estos atributos, entonces se puede agregar una leyenda/etiqueta HTML a las figuras generadas por código, y nbconvert
puede generar la salida Latex correcta. Luego se puede hacer referencia a las figuras en las celdas de marcado.

Es solo un resumen de un enfoque de soporte completo para referencias en cuadernos de ipython. Me parece factible, pero si alguien ya ve un showhopper ahora, por favor hágamelo saber. Sé muy poco sobre las partes internas del cuaderno ipython. Esto parece un proyecto divertido para aprender más, pero en este momento no puedo supervisar todas las implicaciones.

Acabo de encontrar este (largo) hilo...

Puede ser que esto pueda ser de interés: he intentado algo para admitir la representación de entornos LaTeX, incluida la _numeración y actualización automáticas_ de ecuaciones y entornos, en todo el documento.
Usó un botón para actualizar pero ahora usa una idea similar a la mencionada por @basvandertol arriba.

Por supuesto, todo esto agrega algo de sobrecarga, pero esto es bastante aceptable para mí, incluso para documentos bastante largos. La exportación de cuadernos a documentos html y LaTeX está disponible;

Puedes echar un vistazo a la extensión aquí o en Pypi . Mejor.

+1 por integrar alguna versión de las soluciones propuestas en el maestro.

¿Esto ya está resuelto o debería hacer +1 en esto?

¿Fue útil esta página
0 / 5 - 0 calificaciones