2011-12-04 147 views
4

當我寫如何在Mathematica中將行[]的元素對齊到底部還是頂部?

Row[ {[email protected][{1,2}], [email protected]"123"}, Alignment->Top] 

Mathematica graphics

在兩種情況下

Row[ {[email protected][{1,2}], [email protected]"123"}, Alignment->{Left,Top}] 

Mathematica graphics

,什麼都不會發生。默認對齊方式是居中,並且元素列出對齊於對方的中線。

Grid[ {{[email protected][{1,2}], [email protected]"123"}}, Alignment->Top] 

Mathematica graphics

作品不錯,但Grid[]是當Row[]就足夠矯枉過正。

幫助系統說對齊應該起作用(列出{Left,Baseline}作爲示例),但它似乎不可更改。我正在使用v8.0.4。

+0

順便說一句,歡迎來到StackOverflow。 –

回答

3

中的Alignment選項不會對齊各個元素本身,而是將這些元素排列在外部邊界框內。由此可以看出有:

[email protected][{[email protected][{1, 2}], [email protected]"123"}, 
    ImageSize -> {150, 150}, Alignment -> {Left, Top}] 

enter image description here

[email protected][{[email protected][{1, 2}], [email protected]"123"}, 
    ImageSize -> {150, 150}, Alignment -> {Center, Bottom}] 

enter image description here

使用Grid代替。

+0

對齊的好解釋,謝謝。我猜它是網格。 :-( –

+0

@Gregory,你對Grid有什麼不滿?在你的例子中只有三個額外的字符,是否會導致更復雜的使用中的問題?可能還有其他的方法 –

+0

低層的網格框是如果我將成千上萬條記錄的格式化輸出創建爲CDF文件,那麼該文件將像消防龍頭上的大象一樣爆炸!它會變得非常快速 –

4

正如Mr.Wizard說Grid可能是你最好的選擇,但如果你想使用你可以做類似

Row[Pane[#, BaselinePosition -> Top] & /@ {[email protected][{1, 2}], [email protected]"123"}] 

aligning elements at the top

注意Framed也有一個選項BaselinePosition所以這個特殊的例子,你也可以做類似

Row[Framed[#, BaselinePosition -> Top] & /@ {Column[{1, 2}], "123"}] 

但是Pane在任何情況下都適用。

+0

不需要此窗格。 '[[...},BaselinePosition-> 1]'同樣適用。如果Pane不一定是Column,但是對於成千上萬個「卡片」(排版記錄的輸出很好),則Pane是一個很好的解決方法,結果文件就會爆炸並且行爲非常緩慢。我想我總是可以像使用C#一樣使用「虛擬化」,並且一次只能排版20-30條記錄,而不是滾動,使用我自己的向上/向下來移動底層數據集中的索引。增加渲染時間,但減少大小/內存使用/初始渲染複雜度。 –