15

I'm putting together a Demonstration which utilizes a function which operates on a (manipulated) String, and I'd like the InputField to be of the form InputField[col,String,FieldSize->3]. Using the default format gives something like this:

Manipulate[col, {{col, "AB"}}]

Mathematica graphics

which requires use of quotation marks.

I'm able to hack the function to take expressions and convert them to strings

f[column_String] := column
f[column_] := ToString@HoldForm@column

but then the InputField looks strange for I or E:

Mathematica graphics

I found another possible workaround on MathGroup:

col="AB"
Manipulate[Grid[{{InputField[Dynamic[col], String, FieldSize -> 3], f@col}}]]

Mathematica graphics

However, this requires pre-initializing col and messes up multiple Manipulate instances.

Is there a way to have Manipulate assume that what's entered in an InputField is a String?

Eli Lansey
  • 7,499
  • 3
  • 36
  • 73

1 Answers1

19

I thought this was undocumented, but actually it just seems to be obscure. The documentation for ControlType mentions, under the "More Information" section,

Arbitrary controls can be set up in Manipulate by giving control specifications of the form {u, func}.

So,

Manipulate[InputForm[col], {col, "AB", InputField[#, String] &}]

gives (with a different string entered for demonstrative purposes):

picture of a Manipulate with a string-type InputField

Oleksandr R.
  • 23,023
  • 4
  • 87
  • 125