Skip to main content

front end - The very bottom of CellMargins is missing


Bug introduced in 8 or earlier and persists through 12.0




Edit 16. IV 2016 I've received an answer from WRI Support:



[...] It does appear that CellMargins is not interacting correctly with WindowSize->All, and I have forwarded an incident report to our developers with the information you provided. I have also included your contact information so that you can be notified once this gets resolved. [...]




Which I believe confirms that this is a bug. I'd appreciate checking that in earlier versions of MMA.




DialogInput has by default those annoying margins settings (missing a bottom one):


DialogInput[Pane@RandomImage[]]


enter image description here



What is the best/shortest way to make them even.


Let's not touch stylesheets here.



It seems that the problem is more general. I was suspecting that somwhere deep in definitions of DialogInput some options are prepended but here I'm just using basic code to generate the issue:


NotebookPut @ Notebook[
List @ Cell @ BoxData @ ToBoxes @ Pane[
RandomImage[], ImageMargins -> 0, FrameMargins -> 0
],
WindowSize -> All,
WindowElements -> None,
"CellInsertionPointCell" -> None,
WindowFrameElements -> {"CloseBox"},
ShowCellBracket -> False,

CellMargins -> 10
]

enter image description here



Answer



There is a straightforward way to set CellMargins to be zero:


DialogInput[
DialogNotebook[{ExpressionCell[Pane[RandomImage[], ImageMargins -> 8],
CellMargins -> 0]}]]


screenshot


Instead of ImageMargins we can rely on CellFrameMargins:


DialogInput[
DialogNotebook[{ExpressionCell[RandomImage[], CellMargins -> 0, CellFrameMargins -> 8,
CellFrame -> True, CellFrameColor -> None]}]]

screenshot


On my system (Windows 7 x64) with Mathematica 10.4 the CellFrameMargins method gives more accurate results than ImageMargins (compare the screenshots):


DialogInput[
DialogNotebook[{ExpressionCell[Pane[RandomImage[], ImageMargins -> 1],

CellMargins -> 0]}]]

DialogInput[
DialogNotebook[{ExpressionCell[RandomImage[], CellMargins -> 0, CellFrameMargins -> 1,
CellFrame -> True, CellFrameColor -> None]}]]

screenshot with ImageMargins -> 1 screenshot with CellFrameMargins -> 1




From your second example in the question I believe that this behavior is determined by the WindowSize -> All Notebook option which makes the window




large enough to fit all visible contents



(emphasis mine).


It seems that FrontEnd crops CellMargins because they "aren't visible". But with this explanation the inconsistency is that it crops them only at the bottom but not on the right even if we switch off displaying of the cell bracket:


NotebookPut@
Notebook[{Cell@
BoxData@ToBoxes@Pane[RandomImage[], ImageMargins -> 0, FrameMargins -> 0]},
WindowSize -> All, WindowElements -> None, ShowCellBracket -> False,
WindowFrameElements -> {"CloseBox"}, CellMargins -> 10]


screenshot


If we add another cell we can see that CellMargins are actually respected:


NotebookPut@
Notebook[Table[
Cell@BoxData@ToBoxes@Pane[RandomImage[], ImageMargins -> 0, FrameMargins -> 0], {2}],
WindowSize -> All, WindowElements -> None, ShowCellBracket -> False,
WindowFrameElements -> {"CloseBox"}, CellMargins -> 10]

screenshot


So I'm inclined to think that we have a bug in handling of the WindowSize -> All option: the expected behavior for this option is to treat CellMargins as visible contents and make the window to be sufficiently large to include the whole CellMargins.



Comments

Popular posts from this blog

front end - keyboard shortcut to invoke Insert new matrix

I frequently need to type in some matrices, and the menu command Insert > Table/Matrix > New... allows matrices with lines drawn between columns and rows, which is very helpful. I would like to make a keyboard shortcut for it, but cannot find the relevant frontend token command (4209405) for it. Since the FullForm[] and InputForm[] of matrices with lines drawn between rows and columns is the same as those without lines, it's hard to do this via 3rd party system-wide text expanders (e.g. autohotkey or atext on mac). How does one assign a keyboard shortcut for the menu item Insert > Table/Matrix > New... , preferably using only mathematica? Thanks! Answer In the MenuSetup.tr (for linux located in the $InstallationDirectory/SystemFiles/FrontEnd/TextResources/X/ directory), I changed the line MenuItem["&New...", "CreateGridBoxDialog"] to read MenuItem["&New...", "CreateGridBoxDialog", MenuKey["m", Modifiers-...

How to thread a list

I have data in format data = {{a1, a2}, {b1, b2}, {c1, c2}, {d1, d2}} Tableform: I want to thread it to : tdata = {{{a1, b1}, {a2, b2}}, {{a1, c1}, {a2, c2}}, {{a1, d1}, {a2, d2}}} Tableform: And I would like to do better then pseudofunction[n_] := Transpose[{data2[[1]], data2[[n]]}]; SetAttributes[pseudofunction, Listable]; Range[2, 4] // pseudofunction Here is my benchmark data, where data3 is normal sample of real data. data3 = Drop[ExcelWorkBook[[Column1 ;; Column4]], None, 1]; data2 = {a #, b #, c #, d #} & /@ Range[1, 10^5]; data = RandomReal[{0, 1}, {10^6, 4}]; Here is my benchmark code kptnw[list_] := Transpose[{Table[First@#, {Length@# - 1}], Rest@#}, {3, 1, 2}] &@list kptnw2[list_] := Transpose[{ConstantArray[First@#, Length@# - 1], Rest@#}, {3, 1, 2}] &@list OleksandrR[list_] := Flatten[Outer[List, List@First[list], Rest[list], 1], {{2}, {1, 4}}] paradox2[list_] := Partition[Riffle[list[[1]], #], 2] & /@ Drop[list, 1] RM[list_] := FoldList[Transpose[{First@li...

plotting - How to draw lines between specified dots on ListPlot?

I would like to create a plot where I have unconnected dots and some connected. So far, I have figured out how to draw the dots. My code is the following: ListPlot[{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4,13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full] I have thought using ListLinePlot command, but I don't know how to specify to the command to draw only selected lines between the dots. Do have any suggestions/hints on how to do that? Thank you. Answer One possibility would be to use Epilog with Line : ListPlot[ {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4, 13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full, Epilog -> { Line[ ...