code to tell mlx or m files

조회 수: 30 (최근 30일)
feynman feynman
feynman feynman 2024년 12월 4일
댓글: feynman feynman 2024년 12월 30일
M and mlx files work slightly differently in outputting figures in separate windows or within the code file. I hope to have an m file that outputs figures in separate windows and another mlx file that outputs inline figures within the code file, so for various needs sometimes I use the m file and sometimes the mlx file. If there's an mlx code 'mymlx.mlx' that just runs 'myfunction' with a single line:
myfunction
There's a 'myfunction.m' in the same directory. The 'myfunction.m' is just regular code like:
function myfunction
...
end
I don't want to paste the same code of myfunction within 'mymlx.mlx'. Then in 'myfunction', is there a way to tell if the current code is in .m or .mlx? If it's in .m, I hope it runs a line that plots figures in separate windows but if it's in .mlx, I hope it runs a line that outputs inline figures within the code file. Without this extra control, both files output in separate windows.
  댓글 수: 4
Govind KM
Govind KM 2024년 12월 4일
mymlx.mlx with the single line
myfunction
plots inline for me in R2024b. Could you try going to the View tab when the live script is open, and in the View section, selecting Output Inline?
feynman feynman
feynman feynman 2024년 12월 4일
yes, sorry, for this sample code it does make no difference between .m and .mlx. But if there's push buttons in a figure, this makes a difference. When I run .mlx, I don't want push buttons to take effect so I need to deactivate them in the code. But in .m, I need them. This is why I need the code to tell by itself if it's in .m or .mlx.

댓글을 달려면 로그인하십시오.

채택된 답변

Les Beckham
Les Beckham 2024년 12월 4일
If you want your function to know if it was called from a .m file or a .mlx file you can do that using dbstack. However, I'm not aware of any way that the function could control where any plots that it made would appear. Here's an example of how your function could determine who called it.
function myfunction()
d = dbstack;
if contains(d(end-1).file, '.mlx')
% do something in '.mlx mode'
else
% do something in '.m mode'
end
end
  댓글 수: 9
Walter Roberson
Walter Roberson 2024년 12월 29일
Yes? That agrees with what I posted before,
  • .mlx being run from editor: dbstack filename ends in .m and filename lives within tempdir
feynman feynman
feynman feynman 2024년 12월 30일
it works thank you very much

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Scripts에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by