Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have a 2D matrix, such as:

d=2;
M=Array[a, {d^2,d^2}];

and I would like to print it in a way which emphasizes its dxd block matrix structure. If MatrixForm had a Dividers option like Grid, then this is what I would use. But it doesn't. The first thing I tried was:

With[
    {div={False, Join[Table[False, {n, d - 1}], {Dashed}], False}},
    {{Grid[M,Dividers->{div,div}]}}//MatrixForm
]

where the {{stuff}}//MatrixForm is simply to get the parentheses.

The problem with this is that if your matrix is big (d>2) and certain entries of your matrix are big expressions, then they do an ugly line wrap thing. To counter this, I call {{TableForm[#]}}& on each element of the matrix first:

With[
    {div = {False,Join[Table[False, {n, d - 1}], {Dashed}],False}}, 
    {{
        Grid[Map[TableForm[{{#}}] &, M, {2}],Dividers -> {div, div}]
    }} // MatrixForm
]

but this is a hack. So I suppose my questions are: What Form do TableForm and MatrixForm use on each of their elements, and can I use this here? I've tried StandardForm but that's not it. Next, is there in general some better way to do what I am trying to do?

Edit: As requested, here is an example that illustrates the "ugly line wrap thing":

d = 3;
M = Table[Expand[(a + b)^RandomInteger[4]], {i, d^2}, {j, d^2}];
share|improve this question
    
Related mathematica.stackexchange.com/questions/761/… –  Artes Oct 10 '12 at 21:30
add comment

1 Answer 1

up vote 3 down vote accepted

In the absence of a better example I am going to suppose that you just need ItemSize -> Full:

With[{div = {False, Append[Table[False, {d - 1}], Dashed], False}},
  {{Grid[M, Dividers -> {div, div}, ItemSize -> Full]}} // MatrixForm
]

Code for convenience that shows wrapping without that option:

ClearAll[a, x]

d = 3;
a[7, 2] = Expand[(1 + x)^10];
M = Array[a, {d^2, d^2}]
share|improve this answer
    
Awesome, thanks. I put my edit in before I saw your example, and I see we came up with similar examples. The matrix I actually want to print is too unwieldly to copy here. –  Ian Hincks Oct 12 '12 at 13:49
    
@Ian Glad I could help. If you want the items to all the be same size to make a nice regular table you can use ItemSize -> All. –  Mr.Wizard Oct 12 '12 at 14:51
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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