【问题标题】:2 column documents in mathematicaMathematica 中的 2 列文档
【发布时间】:2011-08-21 00:26:17
【问题描述】:

Mathematica 可用于编写非常好的文档。有谁知道是否可以编写包含 2 列的文档?如果是这样,您能否提供一些示例或指向其他显示这种风格的笔记本的链接。

【问题讨论】:

标签: layout formatting wolfram-mathematica


【解决方案1】:

我认为 Mathematica 不支持任何好的多列实现 - 它与笔记本界面的结构并不真正兼容。 publicon 不支持正确的多列这一事实可能很好地暗示了 Mathematica 不支持。

Q: Does Publicon support multi-column layout?

公共文件是 面向类似于 HTML 的垂直滚动范例,而不是 而不是在页面布局程序中找到的逐页配置。 可以在表中配置多个列,但不能保持为 流动。 Publicon 的重点是文档结构,允许干净 翻译成 LaTeX 或 XML 以提交给出版商。出版商 然后可以使用利用自己特定的页面布局工具 生成自己的单列或双列布局的格式 规格。

当然,像Bilateral Cells(Verbia 的回答中提到的 Author Tools 包的一部分)这样的黑客可以使用。

这里有一些代码会生成一个两列文本单元格,该单元格会将列的大小调整为窗口大小 - 但文本不会从一列流向另一列。生成单元格后,您可以正常输入。

Cell[BoxData[
   GridBox[{{Cell["Column One:\nsome text", "Text"], 
      Cell["Column Two:\nmore text", "Text"]}}, ColumnsEqual -> True, 
    ColumnSpacings -> 2, ColumnAlignments -> Left, 
    ColumnWidths -> Dynamic[First[WindowSize /. Options[EvaluationNotebook[]]]/(2*18)]]], 
  "Text"] // CellPrint

或者你可以在左边有文本,在右边输入/输出

Cell[BoxData[GridBox[{
     {Cell["Column One:\nsome text", "Text"], Cell[BoxData[RowBox[{"1", "+", "1"}]], "Input"]},
     {"\[SpanFromAbove]", Cell[BoxData["2"], "Output"]}}, 
    ColumnsEqual -> True, ColumnSpacings -> 2, ColumnAlignments -> Left, 
    ColumnWidths -> Dynamic[First[WindowSize /. Options[EvaluationNotebook[]]]/(2*18)]]], 
  "Text"] // CellPrint

请注意,我只是通过将前者除以 18 进行了从像素到 em 的巧妙转换。真正的转换将取决于系统和字体。此外,仅将CellLabels 添加到输入和输出单元格是行不通的。因此In[n]:=Out[n]= 可能需要使用中间的小列手动添加。

最后,应该可以构建类似作者工具包使用的双边单元格代码,该代码抓取一个 Text/MathCaption 单元格,然后是一个输入和输出单元格,并将它们组合成一个两列结构。

【讨论】:

  • 我想如果我可以导出到 Latex,然后使用 2 列样式就可以了。我没有想到这种可能性。不幸的是,我还没有弄清楚如何在mathematica中正确使用交叉引用,以便可以将其导出到乳胶。我按照你之前的建议给他们发了电子邮件,但他们没有回复。我想我只是要给 wolfram 的人发电子邮件。我希望有人回答。无论如何,我想在mathematica 中创建一个2 列文档是不可能的。谢谢。
【解决方案2】:

Graphics 和 Inset 可用于布局,例如:-

text = StringTake[ExampleData[{"Text", "Prufrock"}], {226, 931}];
columntext1 = StringTake[text, 350];
columntext2 = StringTake[text, {348, 706}];
column1 = Graphics[{White, Rectangle[{0, 0}, {150, 210}], Black,
    Inset[TextCell[columntext1,
      LineSpacing -> {0, 16}, TextJustification -> 1],
     {0, 210}, {Left, Top}, {150, Automatic}]},
   PlotRange -> {{0, 150}, {0, 210}},
   BaseStyle -> {FontFamily -> "Times", 
         FontWeight -> "Plain", FontSize -> 13}];
column2 = Graphics[{White, Rectangle[{0, 0}, {150, 210}], Black,
    Inset[TextCell[columntext2,
      LineSpacing -> {0, 16}, TextJustification -> 1],
     {0, 210}, {Left, Top}, {150, Automatic}]},
   PlotRange -> {{0, 150}, {0, 210}},
   BaseStyle -> {FontFamily -> "Times", 
         FontWeight -> "Plain", FontSize -> 13}];
image = ExampleData[{"TestImage", "House2"}];
clippedimage = Graphics[{Blue, Rectangle[{0, 0}, {500, 270}],
    Inset[image, {250, 170}, {Center, Center}, {512, 512}]},
   PlotRange -> {{0, 500}, {0, 270}}, ImageSize -> 500];
Graphics[{White, Rectangle[{0, 0}, {330, 400}],
  Inset[column1, {75, 295}, {Center, Center}, {150, 210}],
  Inset[column2, {255, 295}, {Center, Center}, {150, 210}],
  Inset[clippedimage, {165, 90}, {Center, Center}, {330, 179}]},
 PlotRange -> {{0, 330}, {0, 400}}, ImageSize -> 330]

【讨论】:

  • 克里斯,这看起来不错,但我认为编写文档效率不高。我想要的是一种使mathematica 打印具有2 列的文档的方法。在这种情况下,我们只关心添加内容。使用图形对象实在是太麻烦了。
  • @jmlopez - 是的,不如文字处理高效。使用 Graphics 使其分为两个阶段:1. 设置文本和 2. 运行页面布局。此外,很难计算在哪里打破两列的文本。但除此之外,这是一个可用的过程。
  • 自动化相关:measuring text box height.
【解决方案3】:

这显然曾经可以使用版本 5 的 AuthorTools 包(参见 this reference in the Mathematica users wiki)。

但是,版本 8 中没有这样的调色板,并且“写作助手”调色板和选项检查器似乎都没有相关选项。

也许可以使用 Grid 和其中的文本样式 Cells 来做某事,但我怀疑这会很简单。

【讨论】:

  • 这是一个带有Bilateral Cells 的链接,展示了过去的可能性......
  • 我考虑过使用Grid,但就像你说的那样,它可能不是直截了当的。我想做的就是获得与某些期刊相同的样式。我希望有一个 MMA8 示例,展示如何在其中创建包含文本、数学公式和示例代码的 2 列。
猜你喜欢
  • 2011-09-24
  • 2012-02-12
  • 2011-09-28
  • 2011-06-30
  • 2011-12-13
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多