18
$\begingroup$

I have very strong desire to use superscript as the index of the variable.

However, it looks like that the Mathematica automatically recognize the superscript as the power and I got message that my variable with superscript is 'protected'.

Could you help me to make the superscript used as the index of the variable instead of power?

UPDATE (16-June-2015):

This question is being reopened and a bounty is being awarded on this. Previous answers are very good, however the bounty is to be awarded on an answer which solve this specific problem:

How to change the behaviour of Ctrl+^ keybinding so that it produces Superscript instead of Power.

$\endgroup$
14
  • $\begingroup$ I'm not sure if it's possible to do, although somebody else might have an answer. I've had this problem before, and just use subscripts instead. For example: $$v_{k\_,j\_}:=\mbox{Sin}[k^2+j^3];$$ Is there a reason why subscripts are not as good for your application? $\endgroup$ Oct 8, 2013 at 18:38
  • 1
    $\begingroup$ @shivams, these seem related to your update of this question: mathematica.stackexchange.com/q/68864, mathematica.stackexchange.com/q/85823 $\endgroup$
    – Michael E2
    Jun 16, 2015 at 19:15
  • $\begingroup$ @MichaelE2 Incidentally I believe one will need to edit the Menu items rather than the KeyEvent items if one is to override this particular combination. If you can show me otherwise please do so. $\endgroup$
    – Mr.Wizard
    Jun 17, 2015 at 8:23
  • $\begingroup$ I was wondering about that, because I noticed the difference in the other answers and yours. It makes sense that Menu key combinations are intercepted before they become a KeyEvent in a particular notebook. But I assume one could get a superscript with a different combination using KeyEvent, which would be my preferred solution, since I use Ctrl-6 so often -- I want Power! ;-) $\endgroup$
    – Michael E2
    Jun 17, 2015 at 12:39
  • $\begingroup$ @Michael I added that to my answer too. I still don't like the fact that the typesetting menu says Superscript when it means Power however. $\endgroup$
    – Mr.Wizard
    Jun 17, 2015 at 16:24

5 Answers 5

29
+50
$\begingroup$

Superscript is not interpreted as Power:

enter image description here

Presumably you are referring to what happens when you enter a power in superscript notation using the key combination Ctrl+6. Mathematica is capable of representing both this power notation and a formatted plain Superscript. In my opinion it is a failing that the power notation appears in the Typesetting menu while the latter is missing; if anything it should be the other way around I think. Since there is no key combination for raw Superscript I propose using a palette or input alias:

Palette

You may enter a formatting template using a palette button which may be created with:

CreatePalette @ PasteButton @ Superscript[\[SelectionPlaceholder], \[Placeholder]]

enter image description here

Click that palette button to insert a template for plain superscript in the current Notebook. Use Tab to move between fields.

Input alias

Either open the Option Inspector, select Global Preferences, type "InputAliases" to find the appropriate entry, and add this to the list of rules:

"sps" -> TemplateBox[{"\[SelectionPlaceholder]", "\[Placeholder]"}, "Superscript"]

Or add it programmatically (run this only once):

AppendTo[
 CurrentValue[$FrontEnd, "InputAliases"],
 "sps" -> TemplateBox[{"\[SelectionPlaceholder]", "\[Placeholder]"}, "Superscript"]
]

Now type: EscspsEsc to enter a template for plain Superscript.

(In version 10.0.0 the first field will not be automatically selected due to a bug; see Input Aliases in Mathematica 10.)


Bounty

A bounty was added for:

[A] solution to map the Ctrl+^ keybinding to produce superscript instead of power.

To accomplish this first copy MenuSetup.tr from the installation directory to the matching path in your user directory and open the user copy for editing:

os = $OperatingSystem /. "Unix" -> "X";

CopyFile @@ (
  FileNameJoin[{#, "SystemFiles", "FrontEnd", "TextResources", os, "MenuSetup.tr"}] & /@
    {$InstallationDirectory, $UserBaseDirectory})

% // SystemOpen

Then within the user copy edit the appropriate MenuItem to read:

MenuItem["&Superscript", 
 FrontEndExecute[{
   FrontEnd`SelectionMove[FrontEnd`InputNotebook[], All, Word], 
   FrontEnd`NotebookApply[FrontEnd`InputNotebook[], 
    TemplateBox[{"\[SelectionPlaceholder]", "\[Placeholder]"}, "Superscript"], 
    Placeholder]
 }],
 MenuKey["6", Modifiers -> {"Control"}]
]

Restart Mathematica.

You may now enter raw Superscript by using Ctrl+6 where 6 is the number-line six above the alphabetic keyboard.

You can still enter Power notation by using Ctrl+Shift+6 or Ctrl+Keypad-6, the latter assuming that Num Lock is on.


For those you prefer the reverse behavior you can instead copy and edit KeyEventTranslations.tr and change the Item:

Item[KeyEvent["^", Modifiers -> {Control}], "Superscript"]

to:

Item[KeyEvent["^", Modifiers -> {Control}], 
  FrontEndExecute[{
     FrontEnd`SelectionMove[FrontEnd`InputNotebook[], All, Word], 
     FrontEnd`NotebookApply[FrontEnd`InputNotebook[], 
      TemplateBox[{"\[SelectionPlaceholder]", "\[Placeholder]"}, "Superscript"], 
      Placeholder]
  }]
]

Now Ctrl+6 is Power and Ctrl+Shift+6 is raw Superscript. However the Typesetting menu item remains misleadingly named Superscript so I would personally change that to Power if adopting this binding.

Also see:

$\endgroup$
5
  • $\begingroup$ Glad that you updated your bounty answer to match Linux systems as well. This should now work for Windows and Linux. However, perhaps if you get your hands around a Mac, then check if this works on that as well. $\endgroup$
    – shivams
    Jun 23, 2015 at 7:54
  • $\begingroup$ How do you name \Sigma^2 i.e. variance? I try both \Sigma CTRL-^ + 2 and superscript[\Sigma,2] unsuccessfully. $\endgroup$ Sep 23, 2016 at 10:42
  • $\begingroup$ Note that this superscript gives problems when used in a string. The FullForm still contains TemplateBox and TeXForm gives an error when applied to it. (While it functions normally when applied to the old "Power" superscript in a string.) If I try to evaluate the box first by doing something like TeXForm@ToString[ a (Ctrl + ^) b] I also get a very weird result \text{ b$\backslash $na}. (Sorry for the formatting. I meant if I use your key combination above to create a superscript a^b.) $\endgroup$
    – Kvothe
    Apr 9, 2019 at 8:21
  • $\begingroup$ @Kvothe Thank you, I was not aware of that TeXForm bug. I shall open a new Question on this as I don't know a good solution. (One could convert strings to held expressions, then replace Hold with Defer, but this seems like something that should be patched at the level of TeXForm.) $\endgroup$
    – Mr.Wizard
    Apr 10, 2019 at 6:52
  • $\begingroup$ @Kvothe It turns out that is a known TeXForm bug, and there is a patch: mathematica.stackexchange.com/q/76801/121 $\endgroup$
    – Mr.Wizard
    Apr 10, 2019 at 10:37
10
$\begingroup$

For internal representation, I prefer avoiding subscripts and superscripts, so I'll give a way for using superscripts for input and output formatting, while the internal expression is of the form x[i].

For output formatting, something like this:

Format[x[i_]] := Superscript[x, i]

Example

Table[x[i], {i, 3}]

Mathematica graphics

For input, this works, but I would wonder whether it is safe:

Power[x, i_] ^:= x[i];
Unprotect[Power];
Power /: Set[Power[x, i_], val_] := x[i] = val;
Protect[Power];

x^i // InputForm
(* x[i] *)

It also works with keyboard input of superscripts.

(x^1 + x^2)^3 // Expand

Mathematica graphics

Mathematica graphics

Mathematica graphics

$\endgroup$
7
$\begingroup$

If you want to use superscripts so as to follow some textbook symbols then use Symbolize

Needs["Notation`"]

I'm going to paste an image because pasting Symbolize gives you this:

Symbolize[ParsedBoxWrapper[SuperscriptBox["y", "1"]]]

enter image description here

$\endgroup$
0
$\begingroup$

When I asked people about this before, they wrote up: Displaying index as subscript on output: e.g. C[i] -> C_i with Notation[...] or Interpretation[..]? As with the other answers, this focuses on only output. But uses an Interpretation instead of just changing the functions themselves. You should just be able to copy/paste the code to try it out. To change from subscripts to superscripts for your code, it should just be a copy/replace.

As for why you shouldn't use subscripts/superscripts, it took me a while to figure it out, but basically it is because $x_i$ is not a symbol. Try to call FullForm on $x_i$ to get Subscript[x,i] which is tough to work with.

$\endgroup$
0
$\begingroup$

Yes, use Mathematica's Notation package to define what your particular form means. Here I create a datatype G[] from sub- and superscripted letter e. Note in the final example that regular superscripting still means raise to a power.

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.