gpt4 book ai didi

wolfram-mathematica - 如何以编程方式获取有关 Mathematica 中字体选择的信息

转载 作者:行者123 更新时间:2023-12-03 14:38:57 26 4
gpt4 key购买 nike

如果我评估例如SystemDialogInput["Color"]并选择一种颜色,比如说红色,输出单元格显示 RGBColor[1,0,0] .

要查看字体面板,我可以评估 FrontEndTokenExecute["FontPanel"] .如果我在某处突出显示了一些文本,我可以从 FrontEndTokenExecute 显示的系统面板中更改突出显示文本(或单元格)的字体样式。 .我想知道的是是否有办法以编程方式返回所选字体设置,类似于 SystemDialogInput["Color"]返回选择的颜色。例如,评估一些包括在系统字体面板中选择字体设置的代码,假设在字体面板中手动选择 Arial 12pt 粗体,

enter image description here

并返回例如

{FontFamily->"Arial",FontSize->12,FontWeight->Bold}

只是为了让我们清楚我正在谈论在笔记本中没有任何突出显示的文本或单元格的情况下执行此操作。问题之一似乎是——至少在 Mac 上——只有当您在笔记本中突出显示某些内容时才会选择字体。文档中有一些这样的例子( ref/CurrentValue ):
Style["xxxx", FontFamily :> CurrentValue["ControlsFontFamily"], 
FontSize :> CurrentValue["ControlsFontSize"]]

这表明如果对 CurrentValue 有适当的论据,答案是可能的。存在但“ControlsFontFamily”和“PanelFontFamily”在这种情况下不是正确的参数。

是否可以以编程方式列出特定计算机上可用的所有字体?

编辑

@kguler 提供了我问题的最后一句和第二部分的答案——这可用于构建我自己的字体面板。我已经运行@Heike 的代码并在 Mac OS X 10.6.8 和 Mma 8.0.4 上得到了这个(屏幕抓取)。注意 PropertyValue 的阴影与 ref/PropertyValue .

enter image description here
enter image description here

最佳答案

我很久以前在 MathGroup 中发现了这个(但现在我在那里找不到确切的链接)。

fontlist = FE`Evaluate[FEPrivate`GetPopupList["MenuListFonts"]]

fontlist /. Rule[x_, y_] -> Style[x, 20, FontFamily -> y]

Mma Fonts

编辑:来源是 Wolfram 的 John Fultz。这是 MathGroup 的链接: V7 FrontEndTokens

编辑 2:在 Windows 上,如果您没有突出显示的选择,则默认值似乎是命令 FrontEndExecute[FrontEndToken["FontPanel"]] 后光标移动的任何位置。被执行。默认情况下,它是下一个单元格。您在对话框返回后键入的第一个键盘条目的样式是您在字体对话框中所做的字体选择。所以,如果你执行
SelectionMove[InputNotebook[], After, Notebook]; 
FrontEndExecute[FrontEndToken["FontPanel"]]

并开始输入您的字体对话框设置将适用。但是,在键盘输入之前任何鼠标移动都会破坏字体设置。

编辑 3:使用 Silvia 关于使用隐形笔记本的想法,但写入当前笔记本中的新单元也有效。步骤:将选择移动到一个新关闭的单元格,写点东西,调用字体面板,捕获单元格的字体选项,删除单元格,并返回捕获的字体选项:
 fontPanelReturn[] := {SelectionMove[EvaluationNotebook[], After, Notebook]; 
NotebookWrite[EvaluationNotebook[], Cell["text", ShowCellBracket -> False,
CellOpen -> False, Magnification -> 0]];
SelectionMove[EvaluationNotebook[], Before, CellContents];
SelectionMove[EvaluationNotebook[], All, Word];
FrontEndExecute[FrontEndToken["FontPanel"]];
fontops =
AbsoluteOptions[
NotebookSelection[EvaluationNotebook[]], {FontColor, FontFamily,
FontProperties, FontSize, FontSlant, FontTracking,
FontVariations, FontWeight, Background}];
NotebookDelete[EvaluationNotebook[]];
SelectionMove[EvaluationNotebook[], Next, Cell]; fontops}

用作
 fontPanelReturn[]

给,(例如)
 {{Background -> None, FontColor -> Automatic, 
FontFamily -> "Trebuchet MS",
FontProperties -> {"FontMonospaced" -> Automatic,
"FontSerifed" -> Automatic, "ScreenResolution" -> 72},
FontSize -> 24, FontSlant -> "Italic", FontTracking -> "Plain",
FontVariations -> {"CapsType" -> Normal,
"CompatibilityType" -> Normal, "Masked" -> False,
"Outline" -> False, "RotationAngle" -> 0, "Shadow" -> False,
"StrikeThrough" -> False, "Underline" -> False},
FontWeight -> "Bold"}}

编辑 4:如果您更改 Silvia 的代码,以便在调用字体面板对话框之前选择单元格,然后捕获单元格的字体选项(而不是笔记本的),则会得到相同的结果:
 inputFontSettings[] := 
Module[{doc, opt},
doc = CreateDocument[TextCell["text"], WindowSelected -> False, Visible -> False];
SelectionMove[doc, Next, Cell];
FrontEndTokenExecute[doc, "FontPanel"];
opt = AbsoluteOptions[
NotebookSelection[doc], {FontColor, FontFamily, FontProperties,
FontSize, FontSlant, FontTracking, FontVariations, FontWeight,
Background}]; NotebookClose[doc]; opt]

关于wolfram-mathematica - 如何以编程方式获取有关 Mathematica 中字体选择的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com