There are probably a lot of ways to do this, I will just demonstrate a simple, straight forward ways with which you might experiment. First we set up a global variable that assigns *aspect ratio functions*: $aspectRatioFunctions = Function[ func, Switch[ func, "ratio2", Function[ {p1,p2}, 2 p1/p2 ], "ratio3", Function[ {p1,p2}, p1 / (3 p2) ], _ , Function[ {p1, p2}, p1/p2 ] (* ratio1 as Default *) ] ]; We can now use this in a simple graphics function or whatever custom function you want to build upon: Options[ myGraphics ] = { "AspectRatioFunction" -> "ratio1" }; myGraphics[ graphics_List, aspectPars_ , opts : OptionsPattern[{ myGraphics, Graphics }] ] := With[ { aspectRatio = Apply[ $aspectRatioFunctions@OptionValue["AspectRatioFunction"], aspectPars ] }, Graphics[ graphics, Evaluate@FilterRules[ {opts}, Options[Graphics] ], (* more robust *) AspectRatio -> aspectRatio ] ] gr = { Red, Line[{{1, 1}, {2, 2}}] } myGraphics[ gr, { 1, 1 }, AspectRatioFunction -> "ratio2", Imagesize -> Tiny ] [![Ratio2][1]][1] [1]: https://i.sstatic.net/V2x3i.jpg