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

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[ ...

list manipulation - Selecting multiple columns from a matrix?

Sample data: data = { {{2013, 1, 1}, 24.13, 167.67, 231.82}, {{2013, 1, 2}, 32.15, 170.92, 225.99}, {{2013, 1, 3}, 35.43, 172.68, 221.67}, {{2013, 1, 4}, 36.73, 173.05, 218.32}, {{2013, 1, 5}, 58.19, 165.96, 197.05}, {{2013, 1, 6}, 69.99, 163.50, 187.52}, {{2013, 1, 7}, 71.37, 154.21, 175.58}, {{2013, 1, 8}, 72.51, 149.66, 163.25}}; I want a DateListPlot with three graphs, so for a matrix formed by columns 1 and 2, one for columns 1 and 3, and 1 for columns 1 and 4. At the moment I'm using this code: data2 = Transpose[{data[[All, 1]], data[[All, 2]]}]; data3 = Transpose[{data[[All, 1]], data[[All, 3]]}]; data4 = Transpose[{data[[All, 1]], data[[All, 4]]}]; DateListPlot[{data2, data3, data4}, Joined -> True, Filling -> {3 -> {1}}] but I have a hunch that this can be done more efficiently. I don't like the Transpose s in particular. Any ideas? edit (for extra credit) What if I need to multiply the second column by 2, which in my solution is simp...

calculus and analysis - Integral of the Sinc product

Let us consider the following integral $$ B_n = \int_0^\infty \prod_{k=1,3,5,\dots}^n\frac{\sin (x/k)}{x/k}dx $$ By definition, Sinc[x] == Sin[x]/x , therefore B[n_?OddQ] := Integrate[Product[Sinc[x/k], {k, 1, n, 2}], {x, 0, Infinity}] B /@ Range[1, 13, 2] {Pi/2, Pi/2, Pi/2, Pi/2, Pi/2, Pi/2, Pi/2} OK, everything is fine. But... B[15] 467807924713440738696537864469 Pi/935615849440640907310521750000 What's going on? Answer As Eckhard wrote in comments B[n] is the n-th Borwein integral . (The letter B was not accidental :) ) This funny properties of Borwein integrals is related to the Fourier transform of Sinc function FourierTransform[Sinc[x], x, k] 1/2 Sqrt[Pi/2] (Sign[1 - k] + Sign[1 + k]) Plot[%, {k, -2, 2}, Filling -> 0] which is the box function. The result is $\pi/2$ while the sum $$ 1/3+1/5+\dots+1/n $$ B_n = \frac{\pi}{2} - \pi \bigg(\sum_{k=3,5,\ldots}^n\frac{1}{k} -1\biggr)^\frac{n-1}{2}\prod_{k=3,5,\dots}^n\frac{k}{k-1}. $$ For $n=15$ it is equal to $$ \frac{46780...