公众号:理念世界的影子
文不可无观点,观点不可无论据。
转载请注明出处
结果简单,重在过程
有时将彩色Matlab代码拷贝到Word中,可能出现彩色消失、中文乱码、没有行号、字体不佳等问题。已有的措施包括但不限于:
先将代码拷贝到Word,手动修改乱码,适用于中文字符不多的场合。
先将代码拷贝到PowerPoint,然后再拷贝回Word。
在Word中增加行号,但有时颜色会消失。
将代码拷贝到notepad++或某网站,调整好格式后再拷贝到Word。
…
拷贝彩色代码本就是编程问题。对于强大的编程语言Matlab,如采用以上措施,无异于衣锦夜行。
但怎么编程实现一键彩色代码拷贝,还真是个问题。直至有次笔者发现在主菜单中,点击File/Publish,弹出了Matlab浏览器,并显示了彩色代码,于是有了思路,并一步一步地形成了最终的方法。
方法为:在Matlab中选中代码,按Alt+Z键,切换到Word,按Ctrl+V,即可拷贝带行号的彩色代码。参见如下视频:
图 拷贝代码示意图
下面是方法研究过程。
第一步:点击菜单发布.m文件+手动操作IE
+
点击File/Publish,直接从弹出的Matlab浏览器选中文字,拷贝到Word,但没有颜色信息。具体如下图
:
图 直接从MATLAB浏览器拷贝后黏贴,没有颜色信息
看来是浏览器问题,好在浏览器中有网址,用IE/Edge/Chrome打开再复制,可在Word中黏贴彩色文本。如下图:
图 用其它浏览器打开复制后黏贴,有颜色信息,无乱码
第二步:编程发布.m文件+手动操作IE
+
在第一步中,每次复制代码,都要点击Publish再切换到浏览器,非常麻烦。
笔者坚信,任何Matlab的界面操作,都能找到指令代替。
譬如菜单的Publish操作就有publish函数,再加上调用IE的命令,形成如下两条命令:
editorhtml2clipboard.m
file=publish(
'test.m'
,
'html'
);
eval(['!"c:\\ProgramFiles\\Internet Explorer\\iexplore.exe" "' file '"'])
这次可以直接弹出IE供拷贝了。(Win10中可能没有安装iexplorer,可以将打开程序更换为Edge,或打开控制面板/程序/启用或关闭Windows功能, 勾选Internet Explorer 11,然后重启计算机)。
图 在Windows功能中启用Internet Explorer 11
第三步:编程发布.m文件+COM操作IE
+
第二步中需要切换到浏览器再复制比较麻烦,可以利用COM接口调用浏览器。代码如下:
editorhtml2clipboard.m
file=publish('test.m', struct('format', 'html', 'useNewFigure', false)); % 发布,不弹出figure界面
app=actxserver('internetexplorer.application'); % 打开ie组件
app.Navigate(file); % 打开文件
while(~strcmpi(app.ReadyState,'READYSTATE_COMPLETE')) end
%OLECMDID_COPY = 12, OLECMDID_SELECTALL = 17,见docobj.h
app.ExecWB(17, 0); % 全选
app.ExecWB(12, 0); % 拷贝
app.Quit; %退出
这里为了使用COM,需要关闭IE的保护模式。