10

Estoy experimentando con diseños de logotipo en Mathematica (8 o superior) usando la interfaz del portátil y quiero cambiar MUCHO la fórmula generadora. El problema es que solo sé SHIFT + ENTER que me hace saltar fuera de mi celda actual y perder mi posición.Evaluar la celda actual sin dejar ni perder la posición en ella en Mathematica

¿Hay alguna forma de evaluar la celda actual sin abandonarla y perder su posición dentro de ella? Entonces: evalúe una celda y vuelva a aterrizar dentro de la misma celda en la posición exacta que presioné MAYÚSCULAS + ENTRAR al.

lo que una vez llegué a utilizar fue a lo largo de las líneas:

a = Exp[1.994 \[Pi]/(3 I)]; 

b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5]; 

{Re[#], Im[#]} & /@ 
    Accumulate[ 
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
    Line} & // Graphics 

NotebookFind[EvaluationNotebook[], "E" <> "xp", Previous]; 

pero espero no es más que otra combinación de teclas o algo. de lo que no estoy enterado

Editar:

a = Exp[(*1*)1.994 \[Pi]/(3 I)]; 

b = Nest[{#, a #, a\[Conjugate] #, #} &, (*2*)1, (*3*)5]; 

{Re[#], Im[#]} & /@ 
    Accumulate[ 
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
    Line} & // Graphics 

Do[NotebookFind[EvaluationNotebook[], "(*1*)", Previous], {2}]; 

es una pequeña mejora a mi solución como parte sugerido por Chris Dengen.

Editar 2:

NotebookFind[EvaluationNotebook[], "(*1*)", EvaluationCell] 

Esto resuelve:

  • estos sólo trabajo con células que producen una o un número conocido de células de salida

EvaluationCell está documentado escasamente tan difícil de encontrar, de hecho, me encontré con eso. Usando la EvaluationCell, la búsqueda comienza desde arriba (eliminando la construcción Do) dos veces porque no provienemos de una celda de salida más abajo de la pantalla.

Lo que queda por resolver:

  • uno tiene que hacer la célula de mantenimiento manual (contabilidad a nivel celular) para aterrizar en lugares de interés
  • usando basada en comentarios marcadores de aterrizaje estorba las celdas de entrada

Nota esta pregunta es de no perder la posición actual cuando se presiona SHIFT + ENTER dentro de una célula cuaderno de Mathematica. No se trata de contenido o Manipular. Perdón por no haberlo dejado claro al principio.

Nota Temporal

Ahora tratando los siguientes:

  1. utilice manejadores de eventos para definir una alternativa combinación de teclas evaluación
  2. cuando se activa, encontrar una manera de almacenar la posición del teclado exacta en el celda de entrada actual
  3. evaluar la celda de entrada actual
  4. restaurar la posición en t la celda de entrada actual

Espero internamente que alguna función pueda simplemente ocuparse de la tienda/restaurar por casualidad siendo optimista. Sin embargo, siendo realista, primero espero poder encontrar la manera de llegar a la posición actual del teclado. Seguiremos aquí si algo se materializa fuera de mi intento.

+0

Para cualquier persona que cierre: ¡Por favor, dense cuenta de que esta es una pregunta sobre Wolfram Mathematica, y no sobre Matemáticas! –

+0

@MikeBantegui bueno, gracias también me pareció extraño. Hay muchos usuarios/expertos de Mathematica en SO y espero que la respuesta sea interesante para todos. –

+0

¿Tiene un ejemplo más completo con el que podamos jugar, junto con los parámetros que va a ajustar? –

Respuesta

5

Puede ejecutar esta célula una y otra vez:

If[NumberQ[x], x++, x = 1]; 
Print[x] 
Do[SelectionMove[EvaluationNotebook[], Previous, Cell], {2}] 

Esta versión coloca el cursor después del Exp en la línea 1:

a = Exp[1.994 \[Pi]/(3 I)]; 
b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5]; 
{Re[#], Im[#]} & /@ 
    Accumulate[ 
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {# // 
    Line} & // Graphics 
Do[NotebookFind[EvaluationNotebook[], "Exp", Previous], {3}]; 
SelectionMove[EvaluationNotebook[], "Exp", After]; 
+0

Gracias, pero lo que realmente me gustaría es volver a aterrizar * dentro * de la celda * en la posición exacta que presioné MAYÚSCULAS + ENTRAR en *. –

+0

Su respuesta final es una mejora sobre la inicial. Uno podría combinar el suyo con un marcador en comentarios como (* AQUÍ *) para aterrizar muy cerca de donde uno está trabajando en ese momento con el beneficio adicional de no tener que dividir lo que usa en el segundo argumento de NotebookFind. –

+0

aceptado como si fueras la única persona que ha entendido la naturaleza de la pregunta :) y tu sugerencia de Do ayudó a mejorar la experiencia, aunque solo sea un poquito. ¡Muchas gracias! –

1

Hay una función llamada 'evaluar en su lugar' que permite usted para seleccionar una sección de una celda, y simplemente evaluar eso. En Mac, es comando: ingrese, en lugar de control, ingrese.

Mire el menú Evaluar, la entrada del menú debe estar allí junto con la combinación de teclas de acceso directo enlazado.

+1

Espera, eso reemplaza la selección actual con su expresión evaluada. Eso no es lo que querías, ¿verdad? –

2

Puede usar dynamic para hacer las cosas realmente agradables.

La celda para mostrar resultados en:

Dynamic[b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5];] 
Dynamic[{Re[#], Im[#]} & /@ 
    Accumulate[ 
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
     Line} & // Graphics] 

La celda para editar en:

k = 1.994; 
a = Exp[k \[Pi]/(2 I)]; 
NotebookFind[EvaluationNotebook[], ToString[k], Previous]; 

continuación, puede simplemente modificar la celda debajo de la pantalla de uno. Lo ubica automáticamente donde ingresó su valor. Si desea hacer las cosas aún más fácil en se puede utilizar Manipular:

Manipulate[a = Exp[k \[Pi]/(f I)]; 
b = Nest[{#, a #, a\[Conjugate] #, #} &, 1, 5]; 
{Re[#], Im[#]} & /@ 
    Accumulate[ 
    Flatten[{0, a b, a\[Conjugate] b, -b}]] // {\[Rho]\[Chi], # // 
     Line} & // Graphics, 
{{k, 1.994}, -3, 3}, 
{{f, 3}, -3, 3}] 
3

Cómo sobre el uso Manipulate? Algo así como

Manipulate[ 
c = a; 
b = Nest[[email protected], 1, 
    5]; {Re[#], Im[#]} & /@ 
    Accumulate[ 
    Flatten[{0, c b, c\[Conjugate] b, -b}]] // {Red, # // Line} & // 
    Graphics, {a, Exp[1.994 \[Pi]/(3 I)], 
    ControlType -> InputField}, {f, 
    HoldForm[{#, C#, c\[Conjugate] #, #} &], ImageSize -> Full, 
    ControlType -> InputField}] 

Puede simplemente editar los valores, y al presionar enter obtener una nueva versión de la trama. Puede guardar ejemplos que desee utilizando el botón '+' en la esquina superior derecha de Manipulate para establecer marcadores o pegar una instantánea.

enter image description here

+0

Esta es una idea clara y ciertamente recordaré usarla en algunos casos. Sin embargo, a veces tengo matrices y todo tipo de otras cosas y no obtienes ningún tipo de composición o buen formato de esas cosas en un Manipulate. Se siente extrañamente restrictivo, como si me arrojaran a la terminal donde solo puedo ingresar cadenas simples sin tipo. –

+0

Puede ingresar utilizando algunas formas compuestas tipográficas (radicales, potencias, etc.) pero no pude obtener matrices agradables en el campo de entrada. (Al menos no sin usar manualmente el elemento de menú ** Insertar ** Los accesos directos para agregar una fila/columna no funcionaron en el campo de entrada.) –

+0

Brett puede envolver MatrixForm alrededor de listas en InputFields y obtener un renderizado agradable pero de Por supuesto, debes probarlo y eliminarlo en tu código. Manipular [ If [Head [x] === MatrixForm, First [x], x], {x, MatrixForm [{{2, 3}, {1, 2}}], ControlType -> InputField} ] –

2

Puede utilizar la programación de bajo nivel portátil y una función llamada células atracados añadir una celda a la parte superior de su ordenador portátil que ejecutará la celda actual. Esto (en teoría, no lo he probado) no debe sacar la posición del cursor fuera de la celda.para crear programáticamente la celda acoplada, crear una celda que tenga el botón que hace lo que desea, luego ejecutar este código: SetOptions[SelectedNotebook[],"DockedCells"->{Cell[ BoxData[ToBoxes[...your code for execute button...]] , "DockedCell"]}];

Lo hago todo el tiempo con el logotipo corporativo como una celda fija o "Copiar como texto sin formato"/Botones "Copiar como mapa de bits". En los portátiles que arruinan mucho el kernel, agrego botones para la administración de la memoria o incluso reinicio del kernel. Solo una serie de atajos. Puede apilar más de un objeto Cell [] como células acopladas.

Cuestiones relacionadas