>>0,f;for(f=0;f 68?1900:2e3)};var mf=y("FullYear",!0);function Py(){return ei(this.year())}function Ty(o,s,c,f,p,b,A){var W;return o<100&&o>=0?(W=new Date(o+400,s,c,f,p,b,A),isFinite(W.getFullYear())&&W.setFullYear(o)):W=new Date(o,s,c,f,p,b,A),W}function ji(o){var s,c;return o<100&&o>=0?(c=Array.prototype.slice.call(arguments),c[0]=o+400,s=new Date(Date.UTC.apply(null,c)),isFinite(s.getUTCFullYear())&&s.setUTCFullYear(o)):s=new Date(Date.UTC.apply(null,arguments)),s}function sa(o,s,c){var f=7+s-c,p=(7+ji(o,0,f).getUTCDay()-s)%7;return-p+f-1}function gf(o,s,c,f,p){var b=(7+c-f)%7,A=sa(o,f,p),W=1+7*(s-1)+b+A,X,ve;return W<=0?(X=o-1,ve=Xi(X)+W):W>Xi(o)?(X=o+1,ve=W-Xi(o)):(X=o,ve=W),{year:X,dayOfYear:ve}}function Ui(o,s,c){var f=sa(o.year(),s,c),p=Math.floor((o.dayOfYear()-f-1)/7)+1,b,A;return p<1?(A=o.year()-1,b=p+Dn(A,s,c)):p>Dn(o.year(),s,c)?(b=p-Dn(o.year(),s,c),A=o.year()+1):(A=o.year(),b=p),{week:b,year:A}}function Dn(o,s,c){var f=sa(o,s,c),p=sa(o+1,s,c);return(Xi(o)-f+p)/7}G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),We("week","w"),We("isoWeek","W"),je("week",5),je("isoWeek",5),R("w",ee),R("ww",ee,Me),R("W",ee),R("WW",ee,Me),Zi(["w","ww","W","WW"],function(o,s,c,f){s[f.substr(0,1)]=Z(o)});function Fy(o){return Ui(o,this._week.dow,this._week.doy).week}var Oy={dow:0,doy:6};function _y(){return this._week.dow}function Ry(){return this._week.doy}function Dy(o){var s=this.localeData().week(this);return o==null?s:this.add((o-s)*7,"d")}function Gy(o){var s=Ui(this,1,4).week;return o==null?s:this.add((o-s)*7,"d")}G("d",0,"do","day"),G("dd",0,0,function(o){return this.localeData().weekdaysMin(this,o)}),G("ddd",0,0,function(o){return this.localeData().weekdaysShort(this,o)}),G("dddd",0,0,function(o){return this.localeData().weekdays(this,o)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),We("day","d"),We("weekday","e"),We("isoWeekday","E"),je("day",11),je("weekday",11),je("isoWeekday",11),R("d",ee),R("e",ee),R("E",ee),R("dd",function(o,s){return s.weekdaysMinRegex(o)}),R("ddd",function(o,s){return s.weekdaysShortRegex(o)}),R("dddd",function(o,s){return s.weekdaysRegex(o)}),Zi(["dd","ddd","dddd"],function(o,s,c,f){var p=c._locale.weekdaysParse(o,f,c._strict);p!=null?s.d=p:w(c).invalidWeekday=o}),Zi(["d","e","E"],function(o,s,c,f){s[f]=Z(o)});function Vy(o,s){return typeof o!="string"?o:isNaN(o)?(o=s.weekdaysParse(o),typeof o=="number"?o:null):parseInt(o,10)}function By(o,s){return typeof o=="string"?s.weekdaysParse(o)%7||7:isNaN(o)?null:o}function kl(o,s){return o.slice(s,7).concat(o.slice(0,s))}var Ly="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),vf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Wy="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Yy=Gt,zy=Gt,Hy=Gt;function Zy(o,s){var c=r(this._weekdays)?this._weekdays:this._weekdays[o&&o!==!0&&this._weekdays.isFormat.test(s)?"format":"standalone"];return o===!0?kl(c,this._week.dow):o?c[o.day()]:c}function Xy(o){return o===!0?kl(this._weekdaysShort,this._week.dow):o?this._weekdaysShort[o.day()]:this._weekdaysShort}function jy(o){return o===!0?kl(this._weekdaysMin,this._week.dow):o?this._weekdaysMin[o.day()]:this._weekdaysMin}function Uy(o,s,c){var f,p,b,A=o.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],f=0;f<7;++f)b=S([2e3,1]).day(f),this._minWeekdaysParse[f]=this.weekdaysMin(b,"").toLocaleLowerCase(),this._shortWeekdaysParse[f]=this.weekdaysShort(b,"").toLocaleLowerCase(),this._weekdaysParse[f]=this.weekdays(b,"").toLocaleLowerCase();return c?s==="dddd"?(p=Re.call(this._weekdaysParse,A),p!==-1?p:null):s==="ddd"?(p=Re.call(this._shortWeekdaysParse,A),p!==-1?p:null):(p=Re.call(this._minWeekdaysParse,A),p!==-1?p:null):s==="dddd"?(p=Re.call(this._weekdaysParse,A),p!==-1||(p=Re.call(this._shortWeekdaysParse,A),p!==-1)?p:(p=Re.call(this._minWeekdaysParse,A),p!==-1?p:null)):s==="ddd"?(p=Re.call(this._shortWeekdaysParse,A),p!==-1||(p=Re.call(this._weekdaysParse,A),p!==-1)?p:(p=Re.call(this._minWeekdaysParse,A),p!==-1?p:null)):(p=Re.call(this._minWeekdaysParse,A),p!==-1||(p=Re.call(this._weekdaysParse,A),p!==-1)?p:(p=Re.call(this._shortWeekdaysParse,A),p!==-1?p:null))}function Jy(o,s,c){var f,p,b;if(this._weekdaysParseExact)return Uy.call(this,o,s,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),f=0;f<7;f++){if(p=S([2e3,1]).day(f),c&&!this._fullWeekdaysParse[f]&&(this._fullWeekdaysParse[f]=new RegExp("^"+this.weekdays(p,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[f]=new RegExp("^"+this.weekdaysShort(p,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[f]=new RegExp("^"+this.weekdaysMin(p,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[f]||(b="^"+this.weekdays(p,"")+"|^"+this.weekdaysShort(p,"")+"|^"+this.weekdaysMin(p,""),this._weekdaysParse[f]=new RegExp(b.replace(".",""),"i")),c&&s==="dddd"&&this._fullWeekdaysParse[f].test(o))return f;if(c&&s==="ddd"&&this._shortWeekdaysParse[f].test(o))return f;if(c&&s==="dd"&&this._minWeekdaysParse[f].test(o))return f;if(!c&&this._weekdaysParse[f].test(o))return f}}function Qy(o){if(!this.isValid())return o!=null?this:NaN;var s=this._isUTC?this._d.getUTCDay():this._d.getDay();return o!=null?(o=Vy(o,this.localeData()),this.add(o-s,"d")):s}function $y(o){if(!this.isValid())return o!=null?this:NaN;var s=(this.day()+7-this.localeData()._week.dow)%7;return o==null?s:this.add(o-s,"d")}function Ky(o){if(!this.isValid())return o!=null?this:NaN;if(o!=null){var s=By(o,this.localeData());return this.day(this.day()%7?s:s-7)}else return this.day()||7}function qy(o){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Al.call(this),o?this._weekdaysStrictRegex:this._weekdaysRegex):(a(this,"_weekdaysRegex")||(this._weekdaysRegex=Yy),this._weekdaysStrictRegex&&o?this._weekdaysStrictRegex:this._weekdaysRegex)}function e1(o){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Al.call(this),o?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(a(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=zy),this._weekdaysShortStrictRegex&&o?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function t1(o){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Al.call(this),o?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(a(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Hy),this._weekdaysMinStrictRegex&&o?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Al(){function o(bt,Wn){return Wn.length-bt.length}var s=[],c=[],f=[],p=[],b,A,W,X,ve;for(b=0;b<7;b++)A=S([2e3,1]).day(b),W=Vt(this.weekdaysMin(A,"")),X=Vt(this.weekdaysShort(A,"")),ve=Vt(this.weekdays(A,"")),s.push(W),c.push(X),f.push(ve),p.push(W),p.push(X),p.push(ve);s.sort(o),c.sort(o),f.sort(o),p.sort(o),this._weekdaysRegex=new RegExp("^("+p.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+f.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Nl(){return this.hours()%12||12}function n1(){return this.hours()||24}G("H",["HH",2],0,"hour"),G("h",["hh",2],0,Nl),G("k",["kk",2],0,n1),G("hmm",0,0,function(){return""+Nl.apply(this)+me(this.minutes(),2)}),G("hmmss",0,0,function(){return""+Nl.apply(this)+me(this.minutes(),2)+me(this.seconds(),2)}),G("Hmm",0,0,function(){return""+this.hours()+me(this.minutes(),2)}),G("Hmmss",0,0,function(){return""+this.hours()+me(this.minutes(),2)+me(this.seconds(),2)});function yf(o,s){G(o,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),s)})}yf("a",!0),yf("A",!1),We("hour","h"),je("hour",13);function Cf(o,s){return s._meridiemParse}R("a",Cf),R("A",Cf),R("H",ee),R("h",ee),R("k",ee),R("HH",ee,Me),R("hh",ee,Me),R("kk",ee,Me),R("hmm",qe),R("hmmss",On),R("Hmm",qe),R("Hmmss",On),ge(["H","HH"],Ye),ge(["k","kk"],function(o,s,c){var f=Z(o);s[Ye]=f===24?0:f}),ge(["a","A"],function(o,s,c){c._isPm=c._locale.isPM(o),c._meridiem=o}),ge(["h","hh"],function(o,s,c){s[Ye]=Z(o),w(c).bigHour=!0}),ge("hmm",function(o,s,c){var f=o.length-2;s[Ye]=Z(o.substr(0,f)),s[on]=Z(o.substr(f)),w(c).bigHour=!0}),ge("hmmss",function(o,s,c){var f=o.length-4,p=o.length-2;s[Ye]=Z(o.substr(0,f)),s[on]=Z(o.substr(f,2)),s[Rn]=Z(o.substr(p)),w(c).bigHour=!0}),ge("Hmm",function(o,s,c){var f=o.length-2;s[Ye]=Z(o.substr(0,f)),s[on]=Z(o.substr(f))}),ge("Hmmss",function(o,s,c){var f=o.length-4,p=o.length-2;s[Ye]=Z(o.substr(0,f)),s[on]=Z(o.substr(f,2)),s[Rn]=Z(o.substr(p))});function r1(o){return(o+"").toLowerCase().charAt(0)==="p"}var i1=/[ap]\.?m?\.?/i,o1=y("Hours",!0);function a1(o,s,c){return o>11?c?"pm":"PM":c?"am":"AM"}var bf={calendar:Be,longDateFormat:Ot,invalidDate:qr,ordinal:Mr,dayOfMonthOrdinalParse:tr,relativeTime:Tr,months:by,monthsShort:cf,week:Oy,weekdays:Ly,weekdaysMin:Wy,weekdaysShort:vf,meridiemParse:i1},ke={},Ji={},Qi;function s1(o,s){var c,f=Math.min(o.length,s.length);for(c=0;c >>1;rt)||e&&!q());){var r,o=R.callback;"function"==typeof o?(R.callback=null,P=R.priorityLevel,r=o(R.expirationTime<=t),t=v(),"function"==typeof r?R.callback=r:R===i(C)&&l(C),y(t)):l(C),R=i(C)}var u,a=null!==R||(null!==(u=i(E))&&_(d,u.startTime-t),!1);return a}finally{R=null,P=n,$=!1}}function q(){return!(v()-de Click this link for the date and time format reference. \n To improve Obsidian's startup time and manage the large CJK font family, \n I've moved the CJK fonts out of the plugin's \n If you prefer to keep Obsidian 100% local or experience performance issues, you can download the font assets.\n \n Ensure Obsidian Sync is set to synchronize \"All other file types\" or download and unzip the file on all devices.\n \n If you find this process cumbersome, please submit a feature request to Obsidian.md for supporting assets in the plugin folder. \n Currently, only a single Нажмите на эту ссылку, чтобы получить справочник по формату даты и времени. 点击阅读日期和时间格式参考。 \n 为了提高 Obsidian 的启动时间并管理大型 CJK 字体系列,\n 我已将 CJK 字体移出插件的 \n 如果您希望 Obsidian 完全离线或遇到性能问题,可以下载字体资源。\n \n 确保 Obsidian Sync 设置为同步“所有其他文件类型”,或者在所有设备上下载并解压文件。\n \n 如果您觉得这个过程繁琐,请向 Obsidian.md 提交功能请求,以支持插件文件夹中的资源。\n 目前,仅支持(同步)单个 b&&(s=b),tb.call(this,o,s,c,f,p))}function tb(o,s,c,f,p){var b=gf(o,s,c,f,p),A=ji(b.year,0,b.dayOfYear);return this.year(A.getUTCFullYear()),this.month(A.getUTCMonth()),this.date(A.getUTCDate()),this}G("Q",0,"Qo","quarter"),We("quarter","Q"),je("quarter",7),R("Q",_t),ge("Q",function(o,s){s[_n]=(Z(o)-1)*3});function nb(o){return o==null?Math.ceil((this.month()+1)/3):this.month((o-1)*3+this.month()%3)}G("D",["DD",2],"Do","date"),We("date","D"),je("date",9),R("D",ee),R("DD",ee,Me),R("Do",function(o,s){return o?s._dayOfMonthOrdinalParse||s._ordinalParse:s._dayOfMonthOrdinalParseLenient}),ge(["D","DD"],Cn),ge("Do",function(o,s){s[Cn]=Z(o.match(ee)[0])});var Lf=y("Date",!0);G("DDD",["DDDD",3],"DDDo","dayOfYear"),We("dayOfYear","DDD"),je("dayOfYear",4),R("DDD",nn),R("DDDD",st),ge(["DDD","DDDD"],function(o,s,c){c._dayOfYear=Z(o)});function rb(o){var s=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return o==null?s:this.add(o-s,"d")}G("m",["mm",2],0,"minute"),We("minute","m"),je("minute",14),R("m",ee),R("mm",ee,Me),ge(["m","mm"],on);var ib=y("Minutes",!1);G("s",["ss",2],0,"second"),We("second","s"),je("second",15),R("s",ee),R("ss",ee,Me),ge(["s","ss"],Rn);var ob=y("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),G(0,["SSS",3],0,"millisecond"),G(0,["SSSS",4],0,function(){return this.millisecond()*10}),G(0,["SSSSS",5],0,function(){return this.millisecond()*100}),G(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),G(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),G(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),G(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),We("millisecond","ms"),je("millisecond",16),R("S",nn,_t),R("SS",nn,Me),R("SSS",nn,st);var rr,Wf;for(rr="SSSS";rr.length<=9;rr+="S")R(rr,rn);function ab(o,s){s[_r]=Z(("0."+o)*1e3)}for(rr="S";rr.length<=9;rr+="S")ge(rr,ab);Wf=y("Milliseconds",!1),G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");function sb(){return this._isUTC?"UTC":""}function lb(){return this._isUTC?"Coordinated Universal Time":""}var _=P.prototype;_.add=eC,_.calendar=sC,_.clone=lC,_.diff=mC,_.endOf=EC,_.format=CC,_.from=bC,_.fromNow=IC,_.to=SC,_.toNow=wC,_.get=J,_.invalidAt=_C,_.isAfter=uC,_.isBefore=cC,_.isBetween=dC,_.isSame=fC,_.isSameOrAfter=pC,_.isSameOrBefore=hC,_.isValid=FC,_.lang=_f,_.locale=Of,_.localeData=Rf,_.max=F1,_.min=T1,_.parsingFlags=OC,_.set=ne,_.startOf=xC,_.subtract=tC,_.toArray=MC,_.toObject=PC,_.toDate=NC,_.toISOString=vC,_.inspect=yC,typeof Symbol!="undefined"&&Symbol.for!=null&&(_[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),_.toJSON=TC,_.toString=gC,_.unix=AC,_.valueOf=kC,_.creationData=RC,_.eraName=BC,_.eraNarrow=LC,_.eraAbbr=WC,_.eraYear=YC,_.year=mf,_.isLeapYear=Py,_.weekYear=JC,_.isoWeekYear=QC,_.quarter=_.quarters=nb,_.month=pf,_.daysInMonth=Ay,_.week=_.weeks=Dy,_.isoWeek=_.isoWeeks=Gy,_.weeksInYear=qC,_.weeksInWeekYear=eb,_.isoWeeksInYear=$C,_.isoWeeksInISOWeekYear=KC,_.date=Lf,_.day=_.days=Qy,_.weekday=$y,_.isoWeekday=Ky,_.dayOfYear=rb,_.hour=_.hours=o1,_.minute=_.minutes=ib,_.second=_.seconds=ob,_.millisecond=_.milliseconds=Wf,_.utcOffset=W1,_.utc=z1,_.local=H1,_.parseZone=Z1,_.hasAlignedHourOffset=X1,_.isDST=j1,_.isLocal=J1,_.isUtcOffset=Q1,_.isUtc=Nf,_.isUTC=Nf,_.zoneAbbr=sb,_.zoneName=lb,_.dates=T("dates accessor is deprecated. Use date instead.",Lf),_.months=T("months accessor is deprecated. Use month instead",pf),_.years=T("years accessor is deprecated. Use year instead",mf),_.zone=T("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Y1),_.isDSTShifted=T("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",U1);function ub(o){return Se(o*1e3)}function cb(){return Se.apply(null,arguments).parseZone()}function Yf(o){return o}var oe=se.prototype;oe.calendar=_e,oe.longDateFormat=Mn,oe.invalidDate=Nr,oe.ordinal=Pr,oe.preparse=Yf,oe.postformat=Yf,oe.relativeTime=wl,oe.pastFuture=Fr,oe.set=ae,oe.eras=DC,oe.erasParse=GC,oe.erasConvertYear=VC,oe.erasAbbrRegex=HC,oe.erasNameRegex=zC,oe.erasNarrowRegex=ZC,oe.months=wy,oe.monthsShort=xy,oe.monthsParse=ky,oe.monthsRegex=My,oe.monthsShortRegex=Ny,oe.week=Fy,oe.firstDayOfYear=Ry,oe.firstDayOfWeek=_y,oe.weekdays=Zy,oe.weekdaysMin=jy,oe.weekdaysShort=Xy,oe.weekdaysParse=Jy,oe.weekdaysRegex=qy,oe.weekdaysShortRegex=e1,oe.weekdaysMinRegex=t1,oe.isPM=r1,oe.meridiem=a1;function ga(o,s,c,f){var p=Gn(),b=S().set(f,s);return p[c](b,o)}function zf(o,s,c){if(d(o)&&(s=o,o=void 0),o=o||"",s!=null)return ga(o,s,c,"month");var f,p=[];for(f=0;f<12;f++)p[f]=ga(o,f,c,"month");return p}function Ll(o,s,c,f){typeof o=="boolean"?(d(s)&&(c=s,s=void 0),s=s||""):(s=o,c=s,o=!1,d(s)&&(c=s,s=void 0),s=s||"");var p=Gn(),b=o?p._week.dow:0,A,W=[];if(c!=null)return ga(s,(c+b)%7,f,"day");for(A=0;A<7;A++)W[A]=ga(s,(A+b)%7,f,"day");return W}function db(o,s){return zf(o,s,"months")}function fb(o,s){return zf(o,s,"monthsShort")}function pb(o,s,c){return Ll(o,s,c,"weekdays")}function hb(o,s,c){return Ll(o,s,c,"weekdaysShort")}function mb(o,s,c){return Ll(o,s,c,"weekdaysMin")}nr("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(o){var s=o%10,c=Z(o%100/10)===1?"th":s===1?"st":s===2?"nd":s===3?"rd":"th";return o+c}}),t.lang=T("moment.lang is deprecated. Use moment.locale instead.",nr),t.langData=T("moment.langData is deprecated. Use moment.localeData instead.",Gn);var Vn=Math.abs;function gb(){var o=this._data;return this._milliseconds=Vn(this._milliseconds),this._days=Vn(this._days),this._months=Vn(this._months),o.milliseconds=Vn(o.milliseconds),o.seconds=Vn(o.seconds),o.minutes=Vn(o.minutes),o.hours=Vn(o.hours),o.months=Vn(o.months),o.years=Vn(o.years),this}function Hf(o,s,c,f){var p=an(s,c);return o._milliseconds+=f*p._milliseconds,o._days+=f*p._days,o._months+=f*p._months,o._bubble()}function vb(o,s){return Hf(this,o,s,1)}function yb(o,s){return Hf(this,o,s,-1)}function Zf(o){return o<0?Math.floor(o):Math.ceil(o)}function Cb(){var o=this._milliseconds,s=this._days,c=this._months,f=this._data,p,b,A,W,X;return o>=0&&s>=0&&c>=0||o<=0&&s<=0&&c<=0||(o+=Zf(Wl(c)+s)*864e5,s=0,c=0),f.milliseconds=o%1e3,p=kt(o/1e3),f.seconds=p%60,b=kt(p/60),f.minutes=b%60,A=kt(b/60),f.hours=A%24,s+=kt(A/24),X=kt(Xf(s)),c+=X,s-=Zf(Wl(X)),W=kt(c/12),c%=12,f.days=s,f.months=c,f.years=W,this}function Xf(o){return o*4800/146097}function Wl(o){return o*146097/4800}function bb(o){if(!this.isValid())return NaN;var s,c,f=this._milliseconds;if(o=at(o),o==="month"||o==="quarter"||o==="year")switch(s=this._days+f/864e5,c=this._months+Xf(s),o){case"month":return c;case"quarter":return c/3;case"year":return c/12}else switch(s=this._days+Math.round(Wl(this._months)),o){case"week":return s/7+f/6048e5;case"day":return s+f/864e5;case"hour":return s*24+f/36e5;case"minute":return s*1440+f/6e4;case"second":return s*86400+f/1e3;case"millisecond":return Math.floor(s*864e5)+f;default:throw new Error("Unknown unit "+o)}}function Ib(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+Z(this._months/12)*31536e6:NaN}function Bn(o){return function(){return this.as(o)}}var Sb=Bn("ms"),wb=Bn("s"),xb=Bn("m"),Eb=Bn("h"),kb=Bn("d"),Ab=Bn("w"),Nb=Bn("M"),Mb=Bn("Q"),Pb=Bn("y");function Tb(){return an(this)}function Fb(o){return o=at(o),this.isValid()?this[o+"s"]():NaN}function Dr(o){return function(){return this.isValid()?this._data[o]:NaN}}var Ob=Dr("milliseconds"),_b=Dr("seconds"),Rb=Dr("minutes"),Db=Dr("hours"),Gb=Dr("days"),Vb=Dr("months"),Bb=Dr("years");function Lb(){return kt(this.days()/7)}var Ln=Math.round,oi={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Wb(o,s,c,f,p){return p.relativeTime(s||1,!!c,o,f)}function Yb(o,s,c,f){var p=an(o).abs(),b=Ln(p.as("s")),A=Ln(p.as("m")),W=Ln(p.as("h")),X=Ln(p.as("d")),ve=Ln(p.as("M")),bt=Ln(p.as("w")),Wn=Ln(p.as("y")),ir=b<=c.ss&&["s",b]||b
For markdown-page images follow this format when editing your link: filename#^blockref|WIDTHxMAXHEIGHT
You can anchor Excalidraw images to 100% of their size by adding |100%
to the end of the link.
You can change the PDF page by changing #page=1
to #page=2
etc.
PDF rect crop values are: left, bottom, right, top
. Eg.: #rect=0,0,500,500
",FRAME_CLIPPING_ENABLED:"Frame Rendering: Enabled",FRAME_CLIPPING_DISABLED:"Frame Rendering: Disabled",ARROW_BINDING_INVERSE_MODE:"Inverted Mode: Default arrow binding is now disabled. Use CTRL/CMD to temporarily enable binding when needed.",ARROW_BINDING_NORMAL_MODE:"Normal Mode: Arrow binding is now enabled. Use CTRL/CMD to temporarily disable binding when needed.",EXPORT_FILENAME_PROMPT:"Please provide filename",EXPORT_FILENAME_PROMPT_PLACEHOLDER:"filename, leave blank to cancel action",WARNING_SERIOUS_ERROR:"WARNING: Excalidraw ran into an unknown problem!\n\nThere is a risk that your most recent changes cannot be saved.\n\nTo be on the safe side...\n1) Please select your drawing using CTRL/CMD+A and make a copy with CTRL/CMD+C.\n2) Then create an empty drawing in a new pane by CTRL/CMD+clicking the Excalidraw ribbon button,\n3) and paste your work to the new document with CTRL/CMD+V.",ARIA_LABEL_TRAY_MODE:"Tray-mode offers an alternative, more spacious canvas",MASK_FILE_NOTICE:"This is a mask file. It is used to crop images and mask out parts of the image. Press and hold notice to open the help video.",INSTALL_SCRIPT_BUTTON:"Install or update Excalidraw Scripts",OPEN_AS_MD:"Open as Markdown",EXPORT_IMAGE:"Export Image",OPEN_LINK:"Open selected text as link\n(SHIFT+CLICK to open in a new pane)",EXPORT_EXCALIDRAW:"Export to an .Excalidraw file",LINK_BUTTON_CLICK_NO_TEXT:"Select an element that contains an internal or external link.\n",LINEAR_ELEMENT_LINK_CLICK_ERROR:"Arrow- and Line-Element links cannot be navigated by "+labelCTRL()+" + CLICKing on the element because that also activates the line editor.\nUse the right-click context menu to open the link, or click the link indicator in the top right corner of the element.\n",FILENAME_INVALID_CHARS:'File name cannot contain any of the following characters: * " \\ < > : | ? #',FORCE_SAVE:"Save (will also update transclusions)",RAW:"Change to PREVIEW mode (only affects text-elements with links or transclusions)",PARSED:"Change to RAW mode (only affects text-elements with links or transclusions)",NOFILE:"Excalidraw (no file)",COMPATIBILITY_MODE:"*.excalidraw file opened in compatibility mode. Convert to new format for full plugin functionality.",CONVERT_FILE:"Convert to new format",BACKUP_AVAILABLE:"We encountered an error while loading your drawing. This might have occurred if Obsidian unexpectedly closed during a save operation. For example, if you accidentally closed Obsidian on your mobile device while saving.
GOOD NEWS: Fortunately, a local backup is available. However, please note that if you last modified this drawing on a different device (e.g., tablet) and you are now on your desktop, that other device likely has a more recent backup.
I recommend trying to open the drawing on your other device first and restore the backup from its local storage.
Would you like to load the backup?",BACKUP_RESTORED:"Backup restored",CACHE_NOT_READY:"I apologize for the inconvenience, but an error occurred while loading your file.
Having a little patience can save you a lot of time...
The plugin has a backup cache, but it appears that you have just started Obsidian. Initializing the Backup Cache may take some time, usually up to a minute or more depending on your device's performance. You will receive a notification in the top right corner when the cache initialization is complete.
Please press OK to attempt loading the file again and check if the cache has finished initializing. If you see a completely empty file behind this message, I recommend waiting until the backup cache is ready before proceeding. Alternatively, you can choose Cancel to manually correct your file.
",OBSIDIAN_TOOLS_PANEL:"Obsidian Tools Panel",ERROR_SAVING_IMAGE:"Unknown error occurred while fetching the image. It could be that for some reason the image is not available or rejected the fetch request from Obsidian",WARNING_PASTING_ELEMENT_AS_TEXT:"PASTING EXCALIDRAW ELEMENTS AS A TEXT ELEMENT IS NOT ALLOWED",USE_INSERT_FILE_MODAL:"Use 'Insert Any File' to embed a markdown note",RECURSIVE_INSERT_ERROR:"You may not recursively insert part of an image into the same image as it would create an infinite loop",CONVERT_TO_MARKDOWN:"Convert to file...",SELECT_TEXTELEMENT_ONLY:"Select text element only (not container)",REMOVE_LINK:"Remove text element link",LASER_ON:"Enable laser pointer",LASER_OFF:"Disable laser pointer",WELCOME_RANK_NEXT:"more drawings until the next rank!",WELCOME_RANK_LEGENDARY:"You're at the top. Keep on being legendary!",WELCOME_COMMAND_PALETTE:'Type "Excalidraw" in the Command Palette',WELCOME_OBSIDIAN_MENU:"Explore the Obsidian Menu in the top right",WELCOME_SCRIPT_LIBRARY:"Visit the Script Library",WELCOME_HELP_MENU:"Find help in the hamburger-menu",WELCOME_YOUTUBE_ARIA:"Visual PKM YouTube Channel",WELCOME_YOUTUBE_LINK:"Check out the Visual PKM YouTube channel.",WELCOME_DISCORD_ARIA:"Join the Discord Server",WELCOME_DISCORD_LINK:"Join the Discord Server",WELCOME_TWITTER_ARIA:"Follow me on Twitter",WELCOME_TWITTER_LINK:"Follow me on Twitter",WELCOME_LEARN_ARIA:"Learn Visual PKM",WELCOME_LEARN_LINK:"Sign up for the Visual Thinking Workshop",WELCOME_DONATE_ARIA:"Donate to support Excalidraw-Obsidian",WELCOME_DONATE_LINK:'Say "Thank You" & support the plugin.',SAVE_IS_TAKING_LONG:"Saving your previous file is taking a long time. Please wait...",SAVE_IS_TAKING_VERY_LONG:"For better performance, consider splitting large drawings into several smaller files.",RELEASE_NOTES_NAME:"Display Release Notes after update",RELEASE_NOTES_DESC:"Toggle ON: Display release notes each time you update Excalidraw to a newer version.
Toggle OFF: Silent mode. You can still read release notes on GitHub.",NEWVERSION_NOTIFICATION_NAME:"Plugin update notification",NEWVERSION_NOTIFICATION_DESC:"Toggle ON: Show a notification when a new version of the plugin is available.
Toggle OFF: Silent mode. You need to check for plugin updates in Community Plugins.",BASIC_HEAD:"Basic",BASIC_DESC:'In the "Basic" settings, you can configure options such as displaying release notes after updates, receiving plugin update notifications, setting the default location for new drawings, specifying the Excalidraw folder for embedding drawings into active documents, defining an Excalidraw template file, and designating an Excalidraw Automate script folder for managing automation scripts.',FOLDER_NAME:"Excalidraw folder (CAsE sEnsITive!)",FOLDER_DESC:"Default location for new drawings. If empty, drawings will be created in the Vault root.",CROP_PREFIX_NAME:"Crop file prefix",CROP_PREFIX_DESC:"The first part of the filename for new drawings created when cropping an image. If empty the default 'cropped_' will be used.",ANNOTATE_PREFIX_NAME:"Annotation file prefix",ANNOTATE_PREFIX_DESC:"The first part of the filename for new drawings created when annotating an image. If empty the default 'annotated_' will be used.",ANNOTATE_PRESERVE_SIZE_NAME:"Preserve image size when annotating",ANNOTATE_PRESERVE_SIZE_DESC:"When annotating an image in markdown the replacment image link will include the width of the original image.",CROP_FOLDER_NAME:"Crop file folder (CaSE senSItive!)",CROP_FOLDER_DESC:"Default location for new drawings created when cropping an image. If empty, drawings will be created following the Vault attachments settings.",ANNOTATE_FOLDER_NAME:"Image annotation file folder (CaSe SeNSitIVe!)",ANNOTATE_FOLDER_DESC:"Default location for new drawings created when annotating an image. If empty, drawings will be created following the Vault attachments settings.",FOLDER_EMBED_NAME:"Use Excalidraw folder when embedding a drawing into the active document",FOLDER_EMBED_DESC:"Define which folder to place the newly inserted drawing into when using the command palette action: 'Create a new drawing and embed into active document'.
Toggle ON: Use Excalidraw folder
Toggle OFF: Use the attachments folder defined in Obsidian settings.",TEMPLATE_NAME:"Excalidraw template file or folder (caSe SenSiTive!)",TEMPLATE_DESC:"Full filepath or folderpath to the Excalidraw template.
Template File:E.g.: If your template is in the default Excalidraw folder and its name is Template.md, the setting would be: Excalidraw/Template.md (or just Excalidraw/Template - you may omit the .md file extension). If you are using Excalidraw in compatibility mode, then your template must be a legacy Excalidraw file as well such as Excalidraw/Template.excalidraw.
Template Folder: You can also set a folder as your template. In this case you will be prompted which tempalte to use when creating a new drawing.
Pro Tip: If you are using the Obsidian Templater plugin, you can add Templater code to your different Excalidraw templates to automate configuration of your drawings.",SCRIPT_FOLDER_NAME:"Excalidraw Automate script folder (CASE SeNSitiVE!)",SCRIPT_FOLDER_DESC:"The files you place in this folder will be treated as Excalidraw Automate scripts. You can access your scripts from Excalidraw via the Obsidian Command Palette. Assign hotkeys to your favorite scripts just like to any other Obsidian command. The folder may not be the root folder of your Vault. ",AI_HEAD:"AI Settings - Experimental",AI_DESC:'In the "AI" settings, you can configure options for using OpenAI\'s GPT API. While the OpenAI API is in beta, its use is strictly limited — as such we require you use your own API key. You can create an OpenAI account, add a small credit (5 USD minimum), and generate your own API key. Once API key is set, you can use the AI tools in Excalidraw.',AI_OPENAI_TOKEN_NAME:"OpenAI API key",AI_OPENAI_TOKEN_DESC:"You can get your OpenAI API key from your OpenAI account.",AI_OPENAI_TOKEN_PLACEHOLDER:"Enter your OpenAI API key here",AI_OPENAI_DEFAULT_MODEL_NAME:"Default AI model",AI_OPENAI_DEFAULT_MODEL_DESC:"The default AI model to use when generating text. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_MODEL_PLACEHOLDER:"Enter your default AI model here. e.g.: gpt-3.5-turbo-1106",AI_OPENAI_DEFAULT_IMAGE_MODEL_NAME:"Default Image Generation AI model",AI_OPENAI_DEFAULT_IMAGE_MODEL_DESC:"The default AI model to use when generating images. Image editing and variations are only supported by dall-e-2 at this time by OpenAI, for this reason dall-e-2 will automatically be used in such cases regardless of this setting.
This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_IMAGE_MODEL_PLACEHOLDER:"Enter your default Image Generation AI model here e.g.: dall-e-3",AI_OPENAI_DEFAULT_VISION_MODEL_NAME:"Default AI vision model",AI_OPENAI_DEFAULT_VISION_MODEL_DESC:"The default AI vision model to use when generating text from images. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_API_URL_NAME:"OpenAI API URL",AI_OPENAI_DEFAULT_API_URL_DESC:"The default OpenAI API URL. This is a freetext field, so you can enter any valid OpenAI API compatible URL. Excalidraw will use this URL when posting API requests to OpenAI. I am not doing any error handling on this field, so make sure you enter a valid URL and only change this if you know what you are doing. ",AI_OPENAI_DEFAULT_IMAGE_API_URL_NAME:"OpenAI Image Generation API URL",AI_OPENAI_DEFAULT_VISION_MODEL_PLACEHOLDER:"Enter your default AI vision model here. e.g.: gpt-4o",SAVING_HEAD:"Saving",SAVING_DESC:"In the 'Saving' section of Excalidraw Settings, you can configure how your drawings are saved. This includes options for compressing Excalidraw JSON in Markdown, setting autosave intervals for both desktop and mobile, defining filename formats, and choosing whether to use the .excalidraw.md or .md file extension. ",COMPRESS_NAME:"Compress Excalidraw JSON in Markdown",COMPRESS_DESC:"By enabling this feature Excalidraw will store the drawing JSON in a Base64 compressed format using the LZ-String algorithm. This will reduce the chance of Excalidraw JSON cluttering your search results in Obsidian. As a side effect, this will also reduce the filesize of Excalidraw drawings. When you switch an Excalidraw drawing to Markdown view, using the options menu in Excalidraw, the file will be saved without compression, so that you can read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view. The setting only has effect 'point forward', meaning, existing drawings will not be affected by the setting until you open them and save them.
Toggle ON: Compress drawing JSON
Toggle OFF: Leave drawing JSON uncompressed",DECOMPRESS_FOR_MD_NAME:"Decompress Excalidraw JSON in Markdown View",DECOMPRESS_FOR_MD_DESC:"By enabling this feature Excalidraw will automatically decompress the drawing JSON when you switch to Markdown view. This will allow you to easily read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view and save the drawing (CTRL+S).
I recommend switching this feature off as it will result in smaller file sizes and avoiding unnecessary results in Obsidian search. You can always use the 'Excalidraw: Decompress current Excalidraw file' command from the command palette to manually decompress the drawing JSON when you need to read or edit it.",AUTOSAVE_INTERVAL_DESKTOP_NAME:"Interval for autosave on Desktop",AUTOSAVE_INTERVAL_DESKTOP_DESC:"The time interval between saves. Autosave will skip if there are no changes in the drawing. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. clicking on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly either by killing the Obsidian process, or clicking to close Obsidian altogether.",AUTOSAVE_INTERVAL_MOBILE_NAME:"Interval for autosave on Mobile",AUTOSAVE_INTERVAL_MOBILE_DESC:"I recommend a more frequent interval for Mobiles. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. tapping on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly (i.e. swiping it away). Also note, that when you switch apps on a Mobile device, sometimes Android and iOS closes Obsidian in the background to save system resources. In such a case Excalidraw will not be able to save the latest changes.",FILENAME_HEAD:"Filename",FILENAME_DESC:"Create a new drawing and embed into active document
?
Toggle ON: Yes, the filename of a new drawing should start with filename of the active document
Toggle OFF: No, filename of a new drawing should not include the filename of the active document",FILENAME_POSTFIX_NAME:"Custom text after markdown Note's name when embedding",FILENAME_POSTFIX_DESC:"Affects filename only when embedding into a markdown document. This text will be inserted after the note's name, but before the date.",FILENAME_DATE_NAME:"Filename Date",FILENAME_DATE_DESC:"The last part of the filename. Leave empty if you do not want a date.",FILENAME_EXCALIDRAW_EXTENSION_NAME:".excalidraw.md or .md",FILENAME_EXCALIDRAW_EXTENSION_DESC:"This setting does not apply if you use Excalidraw in compatibility mode, i.e. you are not using Excalidraw markdown files.
Toggle ON: filename ends with .excalidraw.md
Toggle OFF: filename ends with .md",DISPLAY_HEAD:"Excalidraw appearance and behavior",DISPLAY_DESC:"In the 'appearance and behavior' section of Excalidraw Settings, you can fine-tune how Excalidraw appears and behaves. This includes options for dynamic styling, left-handed mode, matching Excalidraw and Obsidian themes, default modes, and more.",OVERRIDE_OBSIDIAN_FONT_SIZE_NAME:"Limit Obsidian Font Size to Editor Text",OVERRIDE_OBSIDIAN_FONT_SIZE_DESC:"Obsidian's custom font size setting affects the entire interface, including Excalidraw and themes that depend on the default font size. Enabling this option restricts font size changes to editor text, which will improve the look of Excalidraw. If parts of the UI look incorrect after enabling, try turning this setting off.",DYNAMICSTYLE_NAME:"Dynamic styling",DYNAMICSTYLE_DESC:"Change Excalidraw UI colors to match the canvas color",LEFTHANDED_MODE_NAME:"Left-handed mode",LEFTHANDED_MODE_DESC:"Currently only has effect in tray-mode. If turned on, the tray will be on the right side.
Toggle ON: Left-handed mode.
Toggle OFF: Right-handed moded",IFRAME_MATCH_THEME_NAME:"Markdown embeds to match Excalidraw theme",IFRAME_MATCH_THEME_DESC:"Toggle ON: Set this to true if for example you are using Obsidian in dark-mode but use excalidraw with a light background. With this setting the embedded Obsidian markdown document will match the Excalidraw theme (i.e. light colors if Excalidraw is in light mode).
Toggle OFF: Set this to false if you want the embedded Obsidian markdown document to match the Obsidian theme (i.e. dark colors if Obsidian is in dark mode).",MATCH_THEME_NAME:"New drawing to match Obsidian theme",MATCH_THEME_DESC:"If theme is dark, new drawing will be created in dark mode. This does not apply when you use a template for new drawings. Also this will not affect when you open an existing drawing. Those will follow the theme of the template/drawing respectively.
Toggle ON: Follow Obsidian Theme
Toggle OFF: Follow theme defined in your template",MATCH_THEME_ALWAYS_NAME:"Existing drawings to match Obsidian theme",MATCH_THEME_ALWAYS_DESC:"If theme is dark, drawings will be opened in dark mode. If your theme is light, they will be opened in light mode.
Toggle ON: Match Obsidian theme
Toggle OFF: Open with the same theme as last saved",MATCH_THEME_TRIGGER_NAME:"Excalidraw to follow when Obsidian Theme changes",MATCH_THEME_TRIGGER_DESC:"If this option is enabled open Excalidraw pane will switch to light/dark mode when Obsidian theme changes.
Toggle ON: Follow theme changes
Toggle OFF: Drawings are not affected by Obsidian theme changes",DEFAULT_OPEN_MODE_NAME:"Default mode when opening Excalidraw",DEFAULT_OPEN_MODE_DESC:"Specifies the mode how Excalidraw opens: Normal, Zen, or View mode. You may also set this behavior on a file level by adding the excalidraw-default-mode frontmatter key with a value of: normal, view, or zen to your document.",DEFAULT_PEN_MODE_NAME:"Pen mode",DEFAULT_PEN_MODE_DESC:"Should pen mode be automatically enabled when opening Excalidraw?",DISABLE_DOUBLE_TAP_ERASER_NAME:"Enable double-tap eraser in pen mode",DISABLE_SINGLE_FINGER_PANNING_NAME:"Enable single-finger panning in pen mode",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_NAME:"Show (+) crosshair in pen mode",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_DESC:"Show crosshair in pen mode when using the freedraw tool. Toggle ON: SHOW Toggle OFF: HIDE
The effect depends on the device. Crosshair is typically visible on drawing tablets, MS Surface, but not on iOS.",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_NAME:"Render Excalidraw file as an image in hover preview...",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:"...even if the file has the excalidraw-open-md: true frontmatter key.
When this setting is off and the file is set to open in md by default, the hover preview will show the markdown side of the document.",SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME:"Render as image when in markdown reading mode of an Excalidraw file",SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:"When you are in markdown reading mode (aka. reading the back side of the drawing) should the Excalidraw drawing be rendered as an image? This setting will not affect the display of the drawing when you are in Excalidraw mode or when you embed the drawing into a markdown document or when rendering hover preview.
You must close the active excalidraw/markdown file and reopen it for this change to take effect.",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_NAME:"Render the file as an image when exporting an Excalidraw file to PDF",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_DESC:"This setting controls the behavior of Excalidraw when exporting an Excalidraw file to PDF in markdown view mode using Obsidian's Export to PDF feature.
See the other related setting for Markdown Reading Mode under 'Appearnace and Behavior' further above.
⚠️ Note, you must close the active excalidraw/markdown file and reopen for this change to take effect. ⚠️",HOTKEY_OVERRIDE_HEAD:"Hotkey overrides",HOTKEY_OVERRIDE_DESC:`Some of the Excalidraw hotkeys such as ${labelCTRL()}+Enter
to edit text or ${labelCTRL()}+K
to create an element link conflict with Obsidian hotkey settings. The hotkey combinations you add below will override Obsidian's hotkey settings while useing Excalidraw, thus you can add ${labelCTRL()}+G
if you want to default to Group Object in Excalidraw instead of opening Graph View.`,THEME_HEAD:"Theme and styling",ZOOM_HEAD:"Zoom",DEFAULT_PINCHZOOM_NAME:"Allow pinch zoom in pen mode",DEFAULT_PINCHZOOM_DESC:"Pinch zoom in pen mode when using the freedraw tool is disabled by default to prevent unwanted accidental zooming with your palm.
Toggle ON: Enable pinch zoom in pen mode
Toggle OFF:Disable pinch zoom in pen mode",DEFAULT_WHEELZOOM_NAME:"Mouse wheel to zoom by default",DEFAULT_WHEELZOOM_DESC:`Toggle ON: Mouse wheel to zoom; ${labelCTRL()} + mouse wheel to scrollToggle OFF:${labelCTRL()} + mouse wheel to zoom; Mouse wheel to scroll`,ZOOM_TO_FIT_NAME:"Zoom to fit on view resize",ZOOM_TO_FIT_DESC:"Zoom to fit drawing when the pane is resized
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled",ZOOM_TO_FIT_ONOPEN_NAME:"Zoom to fit on file open",ZOOM_TO_FIT_ONOPEN_DESC:"Zoom to fit drawing when the drawing is first opened
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled",ZOOM_TO_FIT_MAX_LEVEL_NAME:"Zoom to fit max ZOOM level",ZOOM_TO_FIT_MAX_LEVEL_DESC:"Set the maximum level to which zoom to fit will enlarge the drawing. Minimum is 0.5 (50%) and maximum is 10 (1000%).",GRID_HEAD:"Grid",GRID_DYNAMIC_COLOR_NAME:"Dynamic grid color",GRID_DYNAMIC_COLOR_DESC:"Toggle ON:Change grid color to match the canvas color
Toggle OFF:Use the color below as the grid color",GRID_COLOR_NAME:"Grid color",GRID_OPACITY_NAME:"Grid opacity",GRID_OPACITY_DESC:"Grid opacity will also control the opacity of the binding box when binding an arrow to an element.
Set the opacity of the grid. 0 is transparent, 100 is opaque.",LASER_HEAD:"Laser pointer",LASER_COLOR:"Laser pointer color",LASER_DECAY_TIME_NAME:"Laser pointer decay time",LASER_DECAY_TIME_DESC:"Laser pointer decay time in milliseconds. Default is 1000 (i.e. 1 second).",LASER_DECAY_LENGTH_NAME:"Laser pointer decay length.",LASER_DECAY_LENGTH_DESC:"Laser pointer decay length in line points. Default is 50.",LINKS_HEAD:"Links, transclusion and TODOs",LINKS_HEAD_DESC:"In the 'Links, transclusion and TODOs' section of Excalidraw Settings, you can configure how Excalidraw handles links, transclusions, and TODO items. This includes options for opening links, managing panes, displaying links with brackets, customizing link prefixes, handling TODO items, and more. ",LINKS_DESC:`${labelCTRL()}+CLICK on [[Text Elements]]
to open them as links. If the selected text has more than one [[valid Obsidian links]]
, only the first will be opened. If the text starts as a valid web link (i.e. https://
or http://
), then the plugin will open it in a browser. When Obsidian files change, the matching [[link]]
in your drawings will also change. If you don't want text accidentally changing in your drawings use [[links|with aliases]]
.`,DRAG_MODIFIER_NAME:"Link Click and Drag&Drop Modifier Keys",DRAG_MODIFIER_DESC:"Modifier key behavior when clicking links and dragging and dropping elements. Excalidraw will not validate your configuration... pay attention to avoid conflicting settings. These settings are different for Apple and non-Apple. If you use Obsidian on multiple platforms, you'll need to make the settings separately. The toggles follow the order of "+(DEVICE.isIOS||DEVICE.isMacOS?"SHIFT, CMD, OPT, CONTROL.":"SHIFT, CTRL, ALT, META (Windows key)."),LONG_PRESS_DESKTOP_NAME:"Long press to open desktop",LONG_PRESS_DESKTOP_DESC:"Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ",LONG_PRESS_MOBILE_NAME:"Long press to open mobile",LONG_PRESS_MOBILE_DESC:"Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ",DOUBLE_CLICK_LINK_OPEN_VIEW_MODE:"Allow double-click to open links in view mode",FOCUS_ON_EXISTING_TAB_NAME:"Focus on Existing Tab",FOCUS_ON_EXISTING_TAB_DESC:"When opening a link, Excalidraw will focus on the existing tab if the file is already open. Enabling this setting overrides 'Reuse Adjacent Pane' when the file is already open.",SECOND_ORDER_LINKS_NAME:"Show second-order links",SECOND_ORDER_LINKS_DESC:"Show links when clicking on a link in Excalidraw. Second-order link are backlinks pointing to the link being clicked. When using image icons to connect similar notes, second order links allow you to get to related notes in one click instead of two. See YT Short to understand.",ADJACENT_PANE_NAME:"Reuse adjacent pane",ADJACENT_PANE_DESC:`When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane. Turning this setting on, Excalidraw will first look for an existing pane, and try to open the link there. Excalidraw will look for the other workspace pane based on your focus/navigation history, i.e. the workpane that was active before you activated Excalidraw.`,MAINWORKSPACE_PANE_NAME:"Open in main workspace",MAINWORKSPACE_PANE_DESC:`When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane in the current active window. Turning this setting on, Excalidraw will open the link in an existing or new pane in the main workspace. `,LINK_BRACKETS_NAME:"Show [[brackets]]
around links",LINK_BRACKETS_DESC:`In PREVIEW mode, when parsing Text Elements, place brackets around links. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["link-brackets"].name}: true/false
to the file's frontmatter.`,LINK_PREFIX_NAME:"Link prefix",LINK_PREFIX_DESC:`In PREVIEW mode, if the Text Element contains a link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["link-prefix"].name}: "📍 "
to the file's frontmatter.`,URL_PREFIX_NAME:"URL prefix",URL_PREFIX_DESC:`In PREVIEW mode, if the Text Element contains a URL link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["url-prefix"].name}: "🌐 "
to the file's frontmatter.`,PARSE_TODO_NAME:"Parse todo",PARSE_TODO_DESC:"Convert '- [ ] ' and '- [x] ' to checkbox and tick in the box.",TODO_NAME:"Open TODO icon",TODO_DESC:"Icon to use for open TODO items",DONE_NAME:"Completed TODO icon",DONE_DESC:"Icon to use for completed TODO items",HOVERPREVIEW_NAME:`Hover preview without pressing the ${labelCTRL()} key`,HOVERPREVIEW_DESC:`Toggle ON: In Exalidraw view mode the hover preview for [[wiki links]] will be shown immediately, without the need to hold the ${labelCTRL()} key. In Excalidraw normal mode, the preview will be shown immediately only when hovering the blue link icon in the top right of the element.
Toggle OFF: Hover preview is shown only when you hold the ${labelCTRL()} key while hovering the link.`,LINKOPACITY_NAME:"Opacity of link icon",LINKOPACITY_DESC:"Opacity of the link indicator icon in the top right corner of an element. 1 is opaque, 0 is transparent.",LINK_CTRL_CLICK_NAME:`${labelCTRL()}+CLICK on text with [[links]] or [](links) to open them`,LINK_CTRL_CLICK_DESC:`You can turn this feature off if it interferes with default Excalidraw features you want to use. If this is turned off, you can either use ${labelCTRL()} + ${labelMETA()} or the link indicator in the top right of the element to open links.`,TRANSCLUSION_WRAP_NAME:"Overflow wrap behavior of transcluded text",TRANSCLUSION_WRAP_DESC:"Number specifies the character count where the text should be wrapped. Set the text wrapping behavior of transcluded text. Turn this ON to force-wrap text (i.e. no overflow), or OFF to soft-wrap text (at the nearest whitespace).",TRANSCLUSION_DEFAULT_WRAP_NAME:"Transclusion word wrap default",TRANSCLUSION_DEFAULT_WRAP_DESC:"You can manually set/override word wrapping length using the `![[page#^block]]{NUMBER}` format. Normally you will not want to set a default, because if you transclude text inside a sticky note, then Excalidraw will automatically take care of word wrapping. Set this value to `0` if you do not want to set a default. ",PAGE_TRANSCLUSION_CHARCOUNT_NAME:"Page transclusion max char count",PAGE_TRANSCLUSION_CHARCOUNT_DESC:"The maximum number of characters to display from the page when transcluding an entire page with the ![[markdown page]] format.",QUOTE_TRANSCLUSION_REMOVE_NAME:"Quote translusion: remove leading '> ' from each line",QUOTE_TRANSCLUSION_REMOVE_DESC:"Remove the leading '> ' from each line of the transclusion. This will improve readability of quotes in text only transclusions
Toggle ON: Remove leading '> '
Toggle OFF: Do not remove leading '> ' (note it will still be removed from the first row due to Obsidian API functionality)",GET_URL_TITLE_NAME:"Use iframely to resolve page title",GET_URL_TITLE_DESC:"Use the http://iframely.server.crestify.com/iframely?url=
to get title of page when dropping a link into Excalidraw",PDF_TO_IMAGE:"PDF to Image",PDF_TO_IMAGE_SCALE_NAME:"PDF to Image conversion scale",PDF_TO_IMAGE_SCALE_DESC:"Sets the resolution of the image that is generated from the PDF page. Higher resolution will result in bigger images in memory and consequently a higher load on your system (slower performance), but sharper imagee. Additionally, if you want to copy PDF pages (as images) to Excalidraw.com, the bigger image size may result in exceeding the 2MB limit on Excalidraw.com.",EMBED_TOEXCALIDRAW_HEAD:"Embed files into Excalidraw",EMBED_TOEXCALIDRAW_DESC:"In the Embed Files section of Excalidraw Settings, you can configure how various files are embedded into Excalidraw. This includes options for embedding interactive markdown files, PDFs, and markdown files as images.",MD_HEAD:"Embed markdown into Excalidraw as image",MD_EMBED_CUSTOMDATA_HEAD_NAME:"Interactive Markdown Files",MD_EMBED_CUSTOMDATA_HEAD_DESC:'The below settings will only effect future embeds. Current embeds remain unchanged. The theme setting of embedded frames is under the "Excalidraw appearance and behavior" section.',MD_EMBED_SINGLECLICK_EDIT_NAME:"Single click to edit embedded markdown",MD_EMBED_SINGLECLICK_EDIT_DESC:"Single click on an embedded markdown file to edit it. When turned off, the markdown file will first open in preview mode, then switch to edit mode when you click on it again.",MD_TRANSCLUDE_WIDTH_NAME:"Default width of a transcluded markdown document",MD_TRANSCLUDE_WIDTH_DESC:"The width of the markdown page. This affects the word wrapping when transcluding longer paragraphs, and the width of the image element. You can override the default width of an embedded file using the [[filename#heading|WIDTHxMAXHEIGHT]]
syntax in markdown view mode under embedded files.",MD_TRANSCLUDE_HEIGHT_NAME:"Default maximum height of a transcluded markdown document",MD_TRANSCLUDE_HEIGHT_DESC:"The embedded image will be as high as the markdown text requires, but not higher than this value. You can override this value by editing the embedded image link in markdown view mode with the following syntax [[filename#^blockref|WIDTHxMAXHEIGHT]]
.",MD_DEFAULT_FONT_NAME:"The default font typeface to use for embedded markdown files.",MD_DEFAULT_FONT_DESC:'Set this value to "Virgil" or "Cascadia" or the filename of a valid .ttf
, .woff
, or .woff2
font e.g. MyFont.woff2
You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font: font_or_filename
',MD_DEFAULT_COLOR_NAME:"The default font color to use for embedded markdown files.",MD_DEFAULT_COLOR_DESC:'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font-color: steelblue
',MD_DEFAULT_BORDER_COLOR_NAME:"The default border color to use for embedded markdown files.",MD_DEFAULT_BORDER_COLOR_DESC:'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-border-color: gray
. Leave empty if you don\'t want a border. ',MD_CSS_NAME:"CSS file",MD_CSS_DESC:`The filename of the CSS to apply to markdown embeds. Provide the filename with extension (e.g. 'md-embed.css'). The css file may also be a plain markdown file (e.g. 'md-embed-css.md'), just make sure the content is written using valid css syntax. If you need to look at the HTML code you are applying the CSS to, then open Obsidian Developer Console (${DEVICE.isIOS||DEVICE.isMacOS?"CMD+OPT+i":"CTRL+SHIFT+i"}) and type in the following command: "ExcalidrawAutomate.mostRecentMarkdownSVG". This will display the most recent SVG generated by Excalidraw. Setting the font-family in the css is has limitations. By default only your operating system's standard fonts are available (see README for details). You can add one custom font beyond that using the setting above. You can override this css setting by adding the following frontmatter-key to the embedded markdown file: "excalidraw-css: css_file_in_vault|css-snippet".`,EMBED_HEAD:"Embedding Excalidraw into your Notes and Exporting",EMBED_DESC:'In the "Embed & Export" settings, you can configure how images and Excalidraw drawings are embedded and exported within your documents. Key settings include choosing the image type for markdown preview (such as Native SVG or PNG), specifying the type of file to insert into the document (original Excalidraw, PNG, or SVG), and managing image caching for embedding in markdown. You can also control image sizing, whether to embed drawings using wiki links or markdown links, and adjust settings related to image themes, background colors, and Obsidian integration. \n Additionally, there are settings for auto-export, which automatically generates SVG and/or PNG files to match the title of your Excalidraw drawings, keeping them in sync with file renames and deletions.',EMBED_CANVAS:"Obsidian Canvas support",EMBED_CANVAS_NAME:"Immersive embedding",EMBED_CANVAS_DESC:"Hide canvas node border and background when embedding an Excalidraw drawing to Canvas. Note that for a full transparent background for your image, you will still need to configure Excalidraw to export images with transparent background.",EMBED_CACHING:"Image caching",EXPORT_SUBHEAD:"Export Settings",EMBED_SIZING:"Image sizing",EMBED_THEME_BACKGROUND:"Image theme and background color",EMBED_IMAGE_CACHE_NAME:"Cache images for embedding in markdown",EMBED_IMAGE_CACHE_DESC:"Cache images for embedding in markdown. This will speed up the embedding process, but in case you compose images of several sub-component drawings, the embedded image in Markdown won't update until you open the drawing and save it to trigger an update of the cache.",SCENE_IMAGE_CACHE_NAME:"Cache nested Excalidraws in Scene",SCENE_IMAGE_CACHE_DESC:"Cache nested Excalidraws in the Scene for faster scene rendering. This will speed up the rendering process, especially if you have deeply nested Excalidraws in your scene. Excalidraw will try to intelligently identify if any children of a nested Excalidraw have changed and will update the cache accordingly. You may want to turn this off, in case you are suspecting that the cache is not updating properly.",EMBED_IMAGE_CACHE_CLEAR:"Purge Cache",BACKUP_CACHE_CLEAR:"Purge Backups",BACKUP_CACHE_CLEAR_CONFIRMATION:"This action will delete all Excalidraw drawing backups. Backups are used as a safety measure in case your drawing file gets damaged. Each time you open Obsidian the plugin automatically deletes backups for files that no longer exist in your Vault. Are you sure you want to clear all backups?",EMBED_REUSE_EXPORTED_IMAGE_NAME:"If found, use the already exported image for preview",EMBED_REUSE_EXPORTED_IMAGE_DESC:"This setting works in conjunction with the Auto-export SVG/PNG setting. If an exported image that matches the file name of the drawing is available, use that image instead of generating a preview image on the fly. This will result in faster previews especially when you have many embedded objects in the drawing, however, it may happen that your latest changes are not displayed and that the image will not automatically match your Obsidian theme in case you have changed the Obsidian theme since the export was created. This setting only applies to embedding images into markdown documents. For a number of reasons, the same approach cannot be used to expedite the loading of drawings with many embedded objects. See demonstration here.",EMBED_PREVIEW_IMAGETYPE_NAME:"Image type in markdown preview",EMBED_PREVIEW_IMAGETYPE_DESC:"Native SVG: High Image Quality. Embedded Websites, YouTube videos, Obsidian Links, and external images embedded via a URL will all work. Embedded Obsidian pages will not
SVG Image: High Image Quality. Embedded elements and images embedded via URL only have placeholders, links don't work
PNG Image: Lower Image Quality, but in some cases better performance with large drawings. Embedded elements and images embedded via URL only have placeholders, links don't work. Also some of the image block referencing features do not work with PNG embeds.",PREVIEW_MATCH_OBSIDIAN_NAME:"Excalidraw preview to match Obsidian theme",PREVIEW_MATCH_OBSIDIAN_DESC:"Image preview in documents should match the Obsidian theme. If enabled, when Obsidian is in dark mode, Excalidraw images will render in dark mode. When Obsidian is in light mode, Excalidraw will render light mode as well. You may want to switch 'Export image with background' off for a more Obsidian-integrated look and feel.",EMBED_WIDTH_NAME:"Default width of embedded (transcluded) image",EMBED_WIDTH_DESC:"The default width of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom width when embedding an image using the ![[drawing.excalidraw|100]]
or [[drawing.excalidraw|100x100]]
format.",EMBED_HEIGHT_NAME:"Default height of embedded (transcluded) image",EMBED_HEIGHT_DESC:"The default height of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom height when embedding an image using the ![[drawing.excalidraw|100]]
or [[drawing.excalidraw|100x100]]
format.",EMBED_TYPE_NAME:"Type of file to insert into the document",EMBED_TYPE_DESC:"When you embed an image into a document using the command palette this setting will specify if Excalidraw should embed the original Excalidraw file or a PNG or an SVG copy. You need to enable auto-export PNG / SVG (see below under Export Settings) for those image types to be available in the dropdown. For drawings that do not have a a corresponding PNG or SVG readily available the command palette action will insert a broken link. You need to open the original drawing and initiate export manually. This option will not autogenerate PNG/SVG files, but will simply reference the already existing files.",EMBED_MARKDOWN_COMMENT_NAME:"Embed link to drawing as comment",EMBED_MARKDOWN_COMMENT_DESC:"Embed the link to the original Excalidraw file as a markdown link under the image, e.g.:%%[[drawing.excalidraw]]%%
.
Instead of adding a markdown comment you may also select the embedded SVG or PNG line and use the command palette action: 'Excalidraw: Open Excalidraw drawing
' to open the drawing.",EMBED_WIKILINK_NAME:"Embed Drawing using Wiki link",EMBED_WIKILINK_DESC:"Toggle ON: Excalidraw will embed a [[wiki link]].
Toggle OFF: Excalidraw will embed a [markdown](link).",EXPORT_PNG_SCALE_NAME:"PNG export image scale",EXPORT_PNG_SCALE_DESC:"The size-scale of the exported PNG image",EXPORT_BACKGROUND_NAME:"Export image with background",EXPORT_BACKGROUND_DESC:"If turned off, the exported image will be transparent.",EXPORT_PADDING_NAME:"Image Padding",EXPORT_PADDING_DESC:"The padding (in pixels) around the exported SVG or PNG image. Padding is set to 0 for clippedFrame references.If you have curved lines close to the edge of the image they might get cropped during image export. You can increase this value to avoid cropping. You can also override this setting at a file level by adding the excalidraw-export-padding: 5
frontmatter key.",EXPORT_THEME_NAME:"Export image with theme",EXPORT_THEME_DESC:"Export the image matching the dark/light theme of your drawing. If turned off, drawings created in dark mode will appear as they would in light mode.",EXPORT_EMBED_SCENE_NAME:"Embed scene in exported image",EXPORT_EMBED_SCENE_DESC:"Embed Excalidraw scene in exported image. Can be overridden at a file level by adding the
excalidraw-export-embed-scene: true/false
frontmatter key. The setting only takes effect the next time you (re)open drawings.",EXPORT_HEAD:"Auto-export Settings",EXPORT_SYNC_NAME:"Keep the .SVG and/or .PNG filenames in sync with the drawing file",EXPORT_SYNC_DESC:"When turned on, the plugin will automatically update the filename of the .SVG and/or .PNG files when the drawing in the same folder (and same name) is renamed. The plugin will also automatically delete the .SVG and/or .PNG files when the drawing in the same folder (and same name) is deleted. ",EXPORT_SVG_NAME:"Auto-export SVG",EXPORT_SVG_DESC:"Automatically create an SVG export of your drawing matching the title of your file. The plugin will save the *.SVG file in the same folder as the drawing. Embed the .svg file into your documents instead of Excalidraw making you embeds platform independent. While the auto-export switch is on, this file will get updated every time you edit the Excalidraw drawing with the matching name. You can override this setting on a file level by adding the
excalidraw-autoexport
frontmatter key. Valid values for this key are none
,both
,svg
, and png
.",EXPORT_PNG_NAME:"Auto-export PNG",EXPORT_PNG_DESC:"Same as the auto-export SVG, but for *.PNG",EXPORT_BOTH_DARK_AND_LIGHT_NAME:"Export both dark- and light-themed image",EXPORT_BOTH_DARK_AND_LIGHT_DESC:"When enabled, Excalidraw will export two files instead of one: filename.dark.png, filename.light.png and/or filename.dark.svg and filename.light.svg
Double files will be exported both if auto-export SVG or PNG (or both) are enabled, as well as when clicking export on a single image.",COMPATIBILITY_HEAD:"Compatibility features",COMPATIBILITY_DESC:"You should only enable these features if you have a strong reason for wanting to work with excalidraw.com files instead of markdown files. Many of the plugin features are not supported on legacy files. Typical usecase would be if you use set your vault up on top of a Visual Studio Code project folder and you have .excalidraw drawings you want to access from Visual Studio Code as well. Another usecase might be using Excalidraw in Logseq and Obsidian in parallel.",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME:"Linter compatibility",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC:"Excalidraw is sensitive to the file structure below # Excalidraw Data
. Automatic linting of documents can create errors in Excalidraw Data. While I've made some effort to make the data loading resilient to lint changes, this solution is not foolproof.
The best is to avoid liniting or otherwise automatically changing Excalidraw documents using different plugins.
Use this setting if for good reasons you have decided to ignore my recommendation and configured linting of Excalidraw files.
The ## Text Elements
section is sensitive to empty lines. A common linting approach is to add an empty line after section headings. In case of Excalidraw this will break/change the first text element in your drawing. To overcome this, you can enable this setting. When enabled, Excalidraw will add a dummy element to the beginning of ## Text Elements
that the linter can safely modify.",PRESERVE_TEXT_AFTER_DRAWING_NAME:"Zotero and Footnotes compatibility",PRESERVE_TEXT_AFTER_DRAWING_DESC:"Preserve text after the ## Drawing section of the markdown file. This may have a very slight performance impact when saving very large drawings.",DEBUGMODE_NAME:"Enable debug messages",DEBUGMODE_DESC:"I recommend restarting Obsidian after enabling/disabling this setting. This enable debug messages in the console. This is useful for troubleshooting issues. If you are experiencing problems with the plugin, please enable this setting, reproduce the issue, and include the console log in the issue you raise on GitHub",SLIDING_PANES_NAME:"Sliding panes plugin support",SLIDING_PANES_DESC:"Need to restart Obsidian for this change to take effect.
If you use the Sliding Panes plugin you can enable this setting to make Excalidraw drawings work with the Sliding Panes plugin.
Note, that Excalidraw Sliding Panes support causes compatibility issues with Obsidian Workspaces.
Note also, that the 'Stack Tabs' feature is now available in Obsidian, providing native support for most of the Sliding Panes functionality.",EXPORT_EXCALIDRAW_NAME:"Auto-export Excalidraw",EXPORT_EXCALIDRAW_DESC:"Same as the auto-export SVG, but for *.Excalidraw",SYNC_EXCALIDRAW_NAME:"Sync *.excalidraw with *.md version of the same drawing",SYNC_EXCALIDRAW_DESC:"If the modified date of the *.excalidraw file is more recent than the modified date of the *.md file then update the drawing in the .md file based on the .excalidraw file",COMPATIBILITY_MODE_NAME:"New drawings as legacy files",COMPATIBILITY_MODE_DESC:"⚠️ Enable this only if you know what you are doing. In 99.9% of the cases you DO NOT want this on. By enabling this feature drawings you create with the ribbon icon, the command palette actions, and the file explorer are going to be all legacy *.excalidraw files. This setting will also turn off the reminder message when you open a legacy file for editing.",MATHJAX_NAME:"MathJax (LaTeX) javascript library host",MATHJAX_DESC:"If you are using LaTeX equations in Excalidraw, then the plugin needs to load a javascript library for that. Some users are unable to access certain host servers. If you are experiencing issues, try changing the host here. You may need to restart Obsidian after closing settings, for this change to take effect.",LATEX_DEFAULT_NAME:"Default LaTeX formula for new equations",LATEX_DEFAULT_DESC:"Leave empty if you don't want a default formula. You can add default formatting here such as \\color{white}
.",NONSTANDARD_HEAD:"Non-Excalidraw.com supported features",NONSTANDARD_DESC:'These settings in the "Non-Excalidraw.com Supported Features" section provide customization options beyond the default Excalidraw.com features. These features are not available on excalidraw.com. When exporting the drawing to Excalidraw.com these features will appear different.\n You can configure the number of custom pens displayed next to the Obsidian Menu on the canvas, allowing you to choose from a range of options. Additionally, you can enable a local font option, which adds a local font to the list of fonts on the element properties panel for text elements. ',RENDER_TWEAK_HEAD:"Rendering tweaks",MAX_IMAGE_ZOOM_IN_NAME:"Maximum image zoom in resolution",MAX_IMAGE_ZOOM_IN_DESC:"To save on memory and because Apple Safari (Obsidian on iOS) has some hard-coded limitations, Excalidraw.com limits the max resolution of images and large objects when zooming in. You can override this limitation using a multiplicator. This means you are multiplying the limit set by default in Excalidraw, the larger the multiplier the better the image zoom in resolution will be, and the more memory it will consume. I recommend playing with multiple values for this setting. You know you've hit the wall, when zooming in to a larger PNG image suddenly the image disappears from view. The default value is 1. The setting has no effect on iOS.",CUSTOM_PEN_HEAD:"Custom pens",CUSTOM_PEN_NAME:"Number of custom pens",CUSTOM_PEN_DESC:"You will see these pens next to the Obsidian Menu on the canvas. You can customize the pens on the canvas by long-pressing the pen button.",EXPERIMENTAL_HEAD:"Miscellaneous features",EXPERIMENTAL_DESC:"These miscellaneous features in Excalidraw include options for setting default LaTeX formulas for new equations, enabling a Field Suggester for autocompletion, displaying type indicators for Excalidraw files, enabling immersive image embedding in live preview editing mode, and experimenting with Taskbone Optical Character Recognition for text extraction from images and drawings. Users can also enter a Taskbone API key for extended usage of the OCR service.",EA_HEAD:"Excalidraw Automate",EA_DESC:"ExcalidrawAutomate is a scripting and automation API for Excalidraw. Unfortunately, the documentation of the API is sparse. I recommend reading the ExcalidrawAutomate.d.ts file, visiting the ExcalidrawAutomate How-to page - though the information here has not been updated for a long while -, and finally to enable the field suggester below. The field suggester will show you the available functions, their parameters and short description as you type. The field suggester is the most up-to-date documentation of the API.",FIELD_SUGGESTER_NAME:"Enable Field Suggester",FIELD_SUGGESTER_DESC:"Field Suggester borrowed from Breadcrumbs and Templater plugins. The Field Suggester will show an autocomplete menu when you type excalidraw-
or ea.
with function description as hints on the individual items in the list.",STARTUP_SCRIPT_NAME:"Startup script",STARTUP_SCRIPT_DESC:"If set, excalidraw will execute the script at plugin startup. This is useful if you want to set any of the Excalidraw Automate hooks. The startup script is a markdown file that should contain the javascript code you want to execute when Excalidraw starts.",STARTUP_SCRIPT_BUTTON_CREATE:"Create startup script",STARTUP_SCRIPT_BUTTON_OPEN:"Open startup script",STARTUP_SCRIPT_EXISTS:"Startup script file already exists",FILETYPE_NAME:"Display type (✏️) for excalidraw.md files in File Explorer",FILETYPE_DESC:"Excalidraw files will receive an indicator using the emoji or text defined in the next setting.",FILETAG_NAME:"Set the type indicator for excalidraw.md files",FILETAG_DESC:"The text or emoji to display as type indicator.",INSERT_EMOJI:"Insert an emoji",LIVEPREVIEW_NAME:"Immersive image embedding in live preview editing mode",LIVEPREVIEW_DESC:"Turn this on to support image embedding styles such as ![[drawing|width|style]] in live preview editing mode. The setting will not affect the currently open documents. You need close the open documents and re-open them for the change to take effect.",FADE_OUT_EXCALIDRAW_MARKUP_NAME:"Fade out Excalidraw markup",FADE_OUT_EXCALIDRAW_MARKUP_DESC:"In Markdown view mode, the section after the markdown comment %% fades out. The text is still there, but the visual clutter is reduced. Note, you can place the %% in the line right above # Text Elements, in this case the entire drawing markdown will fade out including # Text Elements. The side effect is you won't be able to block reference text in other markdown notes, that is after the %% comment section. This is seldom an issue. Should you want to edit the Excalidraw markdown script, simply switch to markdown view mode and temporarily remove the %% comment.",EXCALIDRAW_PROPERTIES_NAME:"Load Excalidraw Properties into Obsidian Suggester",EXCALIDRAW_PROPERTIES_DESC:"Toggle this setting to load Excalidraw document properties into Obsidian's property suggester at plugin startup. Enabling this feature simplifies the use of Excalidraw front matter properties, allowing you to leverage many powerful settings. If you prefer not to load these properties automatically, you can disable this feature, but you will need to manually remove any unwanted properties from the suggester. Note that turning on this setting requires restarting the plugin as properties are loaded at startup.",FONTS_HEAD:"Fonts",FONTS_DESC:"Configure local fontfaces and downloaded CJK fonts for Excalidraw.",CUSTOM_FONT_HEAD:"Local font",ENABLE_FOURTH_FONT_NAME:"Enable local font option",ENABLE_FOURTH_FONT_DESC:"Enabling this option will add a local font to the font list in the properties panel for text elements. Be aware that using this local font may compromise platform independence. Files using the custom font might render differently when opened in a different vault or at a later time, depending on the font settings. Additionally, the 4th font will default to the system font on excalidraw.com or other Excalidraw versions.",FOURTH_FONT_NAME:"Local font file",FOURTH_FONT_DESC:"Select a .otf, .ttf, .woff, or .woff2 font file from your vault to use as the local font. If no file is selected, Excalidraw will default to the Virgil font. For optimal performance, it is recommended to use a .woff2 file, as Excalidraw will encode only the necessary glyphs when exporting images to SVG. Other font formats will embed the entire font in the exported file, potentially resulting in significantly larger file sizes.",OFFLINE_CJK_NAME:"Offline CJK font support",OFFLINE_CJK_DESC:'Changes you make here will only take effect after restarting Obsidian.
\n Excalidraw.com offers handwritten CJK fonts. By default these fonts are not included in the plugin locally, but are served from the Internet. \n If you prefer to keep Excalidraw fully local, allowing it to work without Internet access you can download the necessary font files from GitHub.\n After downloading, unzip the contents into a folder within your Vault.
\n Pre-loading fonts will impact startup performance. For this reason you can select which fonts to load.',CJK_ASSETS_FOLDER_NAME:"CJK Font Folder (cAsE sENsiTIvE!)",CJK_ASSETS_FOLDER_DESC:'You can set the location of the CJK fonts folder here. For example, you may choose to place it under Excalidraw/CJK Fonts
.
\n Important: Do not set this folder to the Vault root! Do not put other fonts in this folder.
\n Note: If you\'re using Obsidian Sync and want to synchronize these font files across your devices, ensure that Obsidian Sync is set to synchronize "All other file types".',LOAD_CHINESE_FONTS_NAME:"Load Chinese fonts from file at startup",LOAD_JAPANESE_FONTS_NAME:"Load Japanese fonts from file at startup",LOAD_KOREAN_FONTS_NAME:"Load Korean fonts frome file at startup",SCRIPT_SETTINGS_HEAD:"Settings for installed Scripts",SCRIPT_SETTINGS_DESC:"Some of the Excalidraw Automate Scripts include settings. Settings are organized by script. Settings will only become visible in this list after you have executed the newly downloaded script once.",TASKBONE_HEAD:"Taskbone Optical Character Recogntion",TASKBONE_DESC:"This is an experimental integration of optical character recognition into Excalidraw. Please note, that taskbone is an independent external service not provided by Excalidraw, nor the Excalidraw-Obsidian plugin project. The OCR service will grab legible text from freedraw lines and embedded pictures on your canvas and place the recognized text in the frontmatter of your drawing as well as onto clipboard. Having the text in the frontmatter will enable you to search in Obsidian for the text contents of these. Note, that the process of extracting the text from the image is not done locally, but via an online API. The taskbone service stores the image on its servers only as long as necessary for the text extraction. However, if this is a dealbreaker, then please don't use this feature.",TASKBONE_ENABLE_NAME:"Enable Taskbone",TASKBONE_ENABLE_DESC:"By enabling this service your agree to the Taskbone Terms and Conditions and the Privacy Policy.",TASKBONE_APIKEY_NAME:"Taskbone API Key",TASKBONE_APIKEY_DESC:"Taskbone offers a free service with a reasonable number of scans per month. If you want to use this feature more frequently, or you want to supoprt the developer of Taskbone (as you can imagine, there is no such thing as 'free', providing this awesome OCR service costs some money to the developer of Taskbone), you can purchase a paid API key from taskbone.com. In case you have purchased a key, simply overwrite this auto generated free-tier API-key with your paid key.",HOTKEY_PRESS_COMBO_NANE:"Press your hotkey combination",HOTKEY_PRESS_COMBO_DESC:"Please press the desired key combination",HOTKEY_BUTTON_ADD_OVERRIDE:"Add New Override",HOTKEY_BUTTON_REMOVE:"Remove",SELECT_FILE:"Select a file then press enter.",SELECT_COMMAND:"Select a command then press enter.",SELECT_FILE_WITH_OPTION_TO_SCALE:`Select a file then press ENTER, or SHIFT+${labelMETA()}+ENTER to insert at 100% scale.`,NO_MATCH:"No file matches your query.",NO_MATCHING_COMMAND:"No command matches your query.",SELECT_FILE_TO_LINK:"Select the file you want to insert the link for.",SELECT_COMMAND_PLACEHOLDER:"Select the command you want to insert the link for.",SELECT_DRAWING:"Select the image or drawing you want to insert",TYPE_FILENAME:"Type name of drawing to select.",SELECT_FILE_OR_TYPE_NEW:"Select existing drawing or type name of a new drawing then press Enter.",SELECT_TO_EMBED:"Select the drawing to insert into active document.",SELECT_MD:"Select the markdown document you want to insert",SELECT_PDF:"Select the PDF document you want to insert",PDF_PAGES_HEADER:"Pages to load?",PDF_PAGES_DESC:"Format: 1, 3-5, 7, 9-11",TYPE_SECTION:"Type section name to select.",SELECT_SECTION_OR_TYPE_NEW:"Select existing section or type name of a new section then press Enter.",INVALID_SECTION_NAME:"Invalid section name.",EMPTY_SECTION_MESSAGE:"Type the Section Name and hit enter to create a new Section",INFINITE_LOOP_WARNING:"EXCALIDRAW WARNING\nAborted loading embedded images due to infinite loop in file:\n",SCRIPT_EXECUTION_ERROR:"Script execution error. Please find error message on the developer console.",LOAD_FROM_BACKUP:"Excalidraw file was corrupted. Loading from backup file.",FONT_LOAD_SLOW:"Loading Fonts...\n\n This is taking longer than expected. If this delay occurs regulary then you may download the fonts locally to your Vault. \n\n(click=dismiss, right-click=Info)",FONT_INFO_TITLE:"Starting v2.5.3 fonts load from the Internet",FONT_INFO_DETAILED:"\n main.js
. CJK fonts will be loaded from the internet by default.\n This typically shouldn't cause issues as Obsidian caches these files after first use.\n Instructions:
\n \n
\n Excalidraw/CJK Fonts
; folder names are cAse-senSITive).For Obsidian Sync Users:
\n Note:
\n main.js
is supported, which leads to large files and slow startup times for complex plugins like Excalidraw. \n I apologize for the inconvenience.\n
При редактировании ссылок на изображения в формате markdown-страниц следуйте этому формату: filename#^blockref|WIDTHxMAXHEIGHT
Вы можете привязать изображения Excalidraw к 100% их размера, добавив |100%
в конец ссылки.
Вы можете изменить страницу PDF, изменив #page=1
на #page=2
и т.д.
Значения обрезки прямоугольника PDF: left, bottom, right, top
. Например: #rect=0,0,500,500
",FRAME_CLIPPING_ENABLED:"Рендеринг кадров: Включено",FRAME_CLIPPING_DISABLED:"Рендеринг кадров: Отключено",ARROW_BINDING_INVERSE_MODE:"Инвертированный режим: Привязка стрелок по умолчанию теперь отключена. Используйте CTRL/CMD, чтобы временно включить привязку, когда это необходимо.",ARROW_BINDING_NORMAL_MODE:"Обычный режим: Привязка стрелок теперь включена. Используйте CTRL/CMD, чтобы временно отключить привязку при необходимости.",EXPORT_FILENAME_PROMPT:"Пожалуйста, укажите имя файла",EXPORT_FILENAME_PROMPT_PLACEHOLDER:"имя файла, оставьте пустым, чтобы отменить действие",WARNING_SERIOUS_ERROR:"ПРЕДУПРЕЖДЕНИЕ: Excalidraw столкнулся с неизвестной проблемой!\n\nЕсть риск, что последние изменения не будут сохранены.\n\nНа всякий случай...\n1) Выберите рисунок с помощью CTRL/CMD+A и создайте копию с помощью CTRL/CMD+C.\n2) Затем создайте пустой чертеж в новой панели, нажав CTRL/CMD+кнопку ленты Excalidraw,\n3) и вставьте свою работу в новый документ с помощью CTRL/CMD+V.",ARIA_LABEL_TRAY_MODE:"Трей-Режим предлагает альтернативный, более просторный холст",MASK_FILE_NOTICE:"Это файл маски. Он используется для кадрирования изображений и маскирования частей изображения. Нажмите и удерживайте уведомление, чтобы открытьe help video.",INSTALL_SCRIPT_BUTTON:"Установка или обновление скриптов Excalidraw",OPEN_AS_MD:"Открыть как Markdown",EXPORT_IMAGE:"Экспорт изображения",OPEN_LINK:"Открыть выделенный текст как ссылку\n(SHIFT+CLICK для открытия в новой панели)",EXPORT_EXCALIDRAW:"Экспорт в файл .Excalidraw",LINK_BUTTON_CLICK_NO_TEXT:"Выберите элемент, содержащий внутреннюю или внешнюю ссылку.\n",LINEAR_ELEMENT_LINK_CLICK_ERROR:"Ссылки на элементы со стрелками и линиями нельзя перемещать с помощью "+labelCTRL()+" + КЛИКА по элементу, поскольку при этом также активируется редактор строк.\nЧтобы открыть ссылку, воспользуйтесь контекстным меню правой кнопки мыши или щелкните индикатор ссылки в правом верхнем углу элемента.\n",FILENAME_INVALID_CHARS:'Имя файла не может содержать ни одного из следующих символов: * " \\ < > : | ? #',FORCE_SAVE:"Сохранить (также будут обновлены включения)",RAW:"Переход в режим PREVIEW (влияет только на текстовые элементы со ссылками или включениями)",PARSED:"Переход в режим RAW (влияет только на текстовые элементы со ссылками или включениями)",NOFILE:"Excalidraw (без файла)",COMPATIBILITY_MODE:"Файл *.excalidraw открыт в режиме совместимости. Конвертируйте в новый формат для полной функциональности плагина.",CONVERT_FILE:"Преобразование в новый формат",BACKUP_AVAILABLE:"Мы столкнулись с ошибкой при загрузке вашего рисунка. Это могло произойти, если Obsidian неожиданно закрылся во время операции сохранения. Например, если вы случайно закрыли Obsidian на своем мобильном устройстве во время сохранения.
ХОРОШАЯ НОВОСТЬ: К счастью, доступна локальная резервная копия. Однако учтите, что если вы последний раз изменяли этот рисунок на другом устройстве (например, на планшете), а сейчас находитесь на рабочем столе, то на другом устройстве, скорее всего, имеется более свежая резервная копия.
Я рекомендую сначала попробовать открыть рисунок на другом устройстве и восстановить резервную копию из его локального хранилища.
Хотите загрузить резервную копию?",BACKUP_RESTORED:"Резервная копия восстановлена",CACHE_NOT_READY:"Приношу извинения за неудобства, но при загрузке вашего файла произошла ошибка.
Немного терпения может сэкономить вам массу времени...
Плагин имеет резервный кэш, но похоже, что вы только что запустили Obsidian. Инициализация резервного кэша может занять некоторое время, обычно до минуты или больше, в зависимости от производительности вашего устройства. Вы получите уведомление в правом верхнем углу, когда инициализация кэша будет завершена.
Нажмите OK, чтобы попытаться загрузить файл снова и проверить, завершилась ли инициализация кэша. Если за этим сообщением вы видите абсолютно пустой файл, я рекомендую подождать, пока кэш резервного копирования будет готов, прежде чем продолжать. Кроме того, вы можете выбрать «Отмена», чтобы вручную исправить файл.
",OBSIDIAN_TOOLS_PANEL:"Панель инструментов Obsidian",ERROR_SAVING_IMAGE:"При получении изображения произошла неизвестная ошибка. Возможно, по какой-то причине изображение недоступно или отклонен запрос на получение от Obsidian",WARNING_PASTING_ELEMENT_AS_TEXT:"ВСТАВКА ЭЛЕМЕНТОВ EXCALIDRAW В КАЧЕСТВЕ ТЕКСТОВОГО ЭЛЕМЕНТА ЗАПРЕЩЕНА",USE_INSERT_FILE_MODAL:"Используйте 'Вставить любой файл', чтобы вставить заметку в формате markdown",RECURSIVE_INSERT_ERROR:"Нельзя рекурсивно вставлять часть изображения в одно и то же изображение, так как это приведет к созданию бесконечного цикла",CONVERT_TO_MARKDOWN:"Преобразовать в файл...",SELECT_TEXTELEMENT_ONLY:"Выбрать только текстовый элемент (не контейнер)",REMOVE_LINK:"Удалить ссылку на текстовый элемент",LASER_ON:"Включить лазерный указатель",LASER_OFF:"Отключить лазерный указатель",WELCOME_RANK_NEXT:"Больше рисунков до следующего ранга!",WELCOME_RANK_LEGENDARY:"Вы на вершине. Продолжайте быть легендарным!",WELCOME_COMMAND_PALETTE:"Введите «Excalidraw» в палитре коман",WELCOME_OBSIDIAN_MENU:"Изучите меню Обсидиана в правом верхнем углу",WELCOME_SCRIPT_LIBRARY:"Посетите библиотеку сценариев",WELCOME_HELP_MENU:"Найдите помощь в гамбургер-меню",WELCOME_YOUTUBE_ARIA:"Канал Visual PKM на YouTube",WELCOME_YOUTUBE_LINK:"Загляните на YouTube-канал Visual PKM.",WELCOME_DISCORD_ARIA:"Присоединяйтесь к серверу Discord",WELCOME_DISCORD_LINK:"Присоединяйтесь к серверу Discord",WELCOME_TWITTER_ARIA:"Следите за мной в Twitter",WELCOME_TWITTER_LINK:"Следите за мной в Twitter",WELCOME_LEARN_ARIA:"Изучение Visual PKM",WELCOME_LEARN_LINK:"Запишитесь на семинар по визуальному мышлению",WELCOME_DONATE_ARIA:"Пожертвовать на поддержку Excalidraw-Obsidian",WELCOME_DONATE_LINK:"Скажите «Спасибо» и поддержите плагин.",SAVE_IS_TAKING_LONG:"Сохранение предыдущего файла занимает много времени. Пожалуйста, подождите...",SAVE_IS_TAKING_VERY_LONG:"Для повышения производительности рассмотрите возможность разделения больших рисунков на несколько файлов меньшего размера.",RELEASE_NOTES_NAME:"Отображение информации о выпуске после обновления",RELEASE_NOTES_DESC:"Переключатель ВКЛ: Отображение информации о выпуске при каждом обновлении Excalidraw до новой версии.
Переключатель ВЫКЛ: Тихий режим. Вы все еще можете прочитать заметки о выпуске на GitHub.",NEWVERSION_NOTIFICATION_NAME:"Уведомление об обновлении плагина",NEWVERSION_NOTIFICATION_DESC:"Переключатель ВКЛ: Показывайте уведомление о появлении новой версии плагина.
Переключатель ВЫКЛ: Тихий режим. Вам необходимо проверить обновления плагинов в разделе Community Plugins.",BASIC_HEAD:"Основные",BASIC_DESC:'В настройках "Основные" можно настроить такие параметры, как отображение заметок о выпуске после обновлений, получение уведомлений об обновлении плагинов, установка местоположения по умолчанию для новых чертежей, указание папки Excalidraw для вставки чертежей в активные документы, определение файла шаблона Excalidraw и указание папки сценария Excalidraw Automate для управления сценариями автоматизации.',FOLDER_NAME:"Папка Excalidraw",FOLDER_DESC:"Место по умолчанию для новых чертежей. Если пусто, чертежи будут создаваться в корне хранилища.",CROP_PREFIX_NAME:"Префикс файла обрезки",CROP_PREFIX_DESC:"Первая часть имени файла для новых чертежей, созданных при обрезке изображения. Если пусто, то по умолчанию будет использоваться значение 'cropped_'.",ANNOTATE_PREFIX_NAME:"Префикс файла аннотации",ANNOTATE_PREFIX_DESC:"Первая часть имени файла для новых чертежей, созданных при аннотировании изображения. Если пусто, то по умолчанию будет использоваться 'annotated_'.",ANNOTATE_PRESERVE_SIZE_NAME:"Preserve image size when annotating",ANNOTATE_PRESERVE_SIZE_DESC:"When annotating an image in markdown the replacment image link will include the width of the original image.",CROP_FOLDER_NAME:"Папка с файлами обрезки",CROP_FOLDER_DESC:"Место по умолчанию для новых чертежей, созданных при обрезке изображения. Если папка пуста, рисунки будут создаваться в соответствии с настройками вложений Хранилища.",ANNOTATE_FOLDER_NAME:"Папка с файлами аннотаций изображений",ANNOTATE_FOLDER_DESC:"Место по умолчанию для новых рисунков, создаваемых при аннотировании изображения. Если пусто, рисунки будут создаваться в соответствии с настройками вложений Хранилища.",FOLDER_EMBED_NAME:"Использовать папку Excalidraw при встраивании рисунка в активный документ",FOLDER_EMBED_DESC:"Определите, в какую папку поместить новый вставленный рисунок при использовании действия палитры команд: 'Создать новый рисунок и вставить в активный документ'.
Переключатель ВКЛ: Используйте папку Excalidraw
Переключатель ВЫКЛ: Используйте папку вложений, определенную в настройках Obsidian.",TEMPLATE_NAME:"Файл или папка шаблона Excalidraw",TEMPLATE_DESC:"Полный путь к файлу или папке с шаблоном Excalidraw.
Файл шаблона:Например: Если ваш шаблон находится в папке Excalidraw по умолчанию и его имя Template.md, настройка должна быть: Excalidraw/Template.md (или только Excalidraw/Template - вы можете опустить .md расширение файла). Если вы используете Excalidraw в режиме совместимости, то ваш шаблон также должен быть устаревшим файлом Excalidraw такие как Excalidraw/Template.excalidraw.
Папка с шаблонами: Вы также можете задать папку в качестве шаблона. В этом случае вам будет предложено выбрать шаблон при создании нового чертежа.
Совет профи: Если вы используете плагин Obsidian Templater, вы можете добавить код Templater в различные Excalidraw шаблоны для автоматизации настройки чертежей.",SCRIPT_FOLDER_NAME:"Папка скриптов Excalidraw Automate (РеГИстРозависимЫЙ!)",SCRIPT_FOLDER_DESC:"Файлы, которые вы поместите в эту папку, будут рассматриваться как сценарии Excalidraw Automate. Вы можете получить доступ к своим скриптам из Excalidraw через палитру команд Obsidian. Назначьте горячие клавиши для ваших любимых скриптов, как и для любой другой команды Obsidian. Эта папка может не быть корневой папкой вашего хранилища. ",AI_HEAD:"Настройки ИИ - Экспериментальные",AI_DESC:'В настройках "ИИ" вы можете настроить параметры использования GPT API OpenAI. Пока API OpenAI находится в бета-версии, его использование строго ограничено - поэтому мы требуем, чтобы вы использовали свой собственный ключ API. Вы можете создать аккаунт OpenAI, добавить небольшой кредит (минимум 5 долларов) и сгенерировать свой собственный ключ API. После установки API-ключа вы сможете использовать инструменты искусственного интеллекта в Excalidraw.',AI_OPENAI_TOKEN_NAME:"Ключ API OpenAI",AI_OPENAI_TOKEN_DESC:"Вы можете получить свой ключ API OpenAI из вашего OpenAI аккаунта.",AI_OPENAI_TOKEN_PLACEHOLDER:"Введите свой ключ API OpenAI здесь",AI_OPENAI_DEFAULT_MODEL_NAME:"Модель ИИ по умолчанию",AI_OPENAI_DEFAULT_MODEL_DESC:"Модель ИИ по умолчанию, используемая при генерации текста. Это поле свободного текста, поэтому вы можете ввести любое действительное имя модели OpenAI. Узнайте больше о доступных моделях на OpenAI сайте.",AI_OPENAI_DEFAULT_MODEL_PLACEHOLDER:"Введите здесь модель искусственного интеллекта по умолчанию, например: gpt-3.5-turbo-1106.",AI_OPENAI_DEFAULT_IMAGE_MODEL_NAME:"Модель ИИ для генерации изображений по умолчанию",AI_OPENAI_DEFAULT_IMAGE_MODEL_DESC:"Модель ИИ по умолчанию, используемая при генерации изображений. Редактирование и изменение изображений поддерживается OpenAI только в dall-e-2, поэтому dall-e-2 будет автоматически использоваться в таких случаях независимо от этой настройки.
Это поле свободного текста, поэтому вы можете ввести любое действительное имя модели OpenAI. Узнайте больше о доступных моделях на OpenAI сайте.",AI_OPENAI_DEFAULT_IMAGE_MODEL_PLACEHOLDER:"Введите здесь модель ИИ Image Generation по умолчанию, например: dall-e-3.",AI_OPENAI_DEFAULT_VISION_MODEL_NAME:"Модель видения ИИ по умолчанию",AI_OPENAI_DEFAULT_VISION_MODEL_DESC:"Модель зрения ИИ по умолчанию, используемая при генерации текста из изображений. Это поле свободного текста, поэтому вы можете ввести любое действительное имя модели OpenAI. Узнайте больше о доступных моделях на OpenAI сайте.",AI_OPENAI_DEFAULT_API_URL_NAME:"URL-адрес API OpenAI",AI_OPENAI_DEFAULT_API_URL_DESC:"URL-адрес OpenAI API по умолчанию. Это поле свободного текста, поэтому вы можете ввести любой действительный URL, совместимый с OpenAI API. Excalidraw будет использовать этот URL при отправке API-запросов в OpenAI. Я не делаю никакой обработки ошибок в этом поле, поэтому убедитесь, что вы вводите правильный URL и изменяйте его только в том случае, если вы знаете, что делаете. ",AI_OPENAI_DEFAULT_IMAGE_API_URL_NAME:"URL-адрес API генерации изображений OpenAI",AI_OPENAI_DEFAULT_VISION_MODEL_PLACEHOLDER:"Введите здесь модель зрения ИИ по умолчанию. Например: gpt-4o",SAVING_HEAD:"Сохранение",SAVING_DESC:"В разделе 'Сохранение' раздела Настройки Excalidraw вы можете настроить способ сохранения ваших чертежей. Сюда входят опции сжатия Excalidraw JSON в Markdown, установки интервалов автосохранения для настольных и мобильных компьютеров, определения форматов имен файлов, а также выбора расширения файла .excalidraw.md или .md. ",COMPRESS_NAME:"Сжатие Excalidraw JSON в формате Markdown",COMPRESS_DESC:"При включении этой функции Excalidraw будет хранить JSON рисунка в формате Base64. формат с использованием алгоритма LZ-String. Это уменьшит вероятность того, что Excalidraw JSON загромоздит результаты поиска в Obsidian. Как побочный эффект, это также уменьшит размер файлов чертежей Excalidraw. При переключении чертежа Excalidraw в режим Markdown с помощью меню опций Excalidraw файл будет сохранен без сжатия, чтобы вы могли читать и редактировать строку JSON. Чертеж будет снова сжат как только вы переключитесь обратно в вид Excalidraw. Настройка имеет силу только 'на перспективу', то есть существующие чертежи не будут затронуты настройкой пока вы не откроете и не сохраните их.
Переключатель ВКЛ: Сжать чертеж JSON
Переключатель ВЫКЛ: Оставьте JSON для рисования без сжатия",DECOMPRESS_FOR_MD_NAME:"Декомпрессия Excalidraw JSON в Markdown Режим",DECOMPRESS_FOR_MD_DESC:"При включении этой функции Excalidraw будет автоматически распаковывать JSON чертежа при переключении в режим Markdown.Это позволит вам легко читать и редактировать строку JSON. Чертеж будет снова сжат как только вы переключитесь обратно в режим Excalidraw и сохраните чертеж (CTRL+S).
Я рекомендую отключить эту функцию, так как это приведет к уменьшению размера файлов и избавит от ненужных результатов в поиске Obsidian. Вы всегда можете воспользоваться командой 'Excalidraw: Распаковать текущий файл Excalidraw' из палитры команд. чтобы вручную распаковывать JSON чертежа, когда вам нужно его прочитать или отредактировать.",AUTOSAVE_INTERVAL_DESKTOP_NAME:"Интервал для автосохранения на рабочем столе",AUTOSAVE_INTERVAL_DESKTOP_DESC:"Интервал времени между сохранениями. Автосохранение будет пропущено, если в чертеже нет изменений. Excalidraw также сохранит файл при закрытии вкладки рабочей области или при навигации в Obsidian, но вне активной вкладки Excalidraw (например, при нажатии на ленту Obsidian, проверке обратных ссылок и т. д.). Excalidraw не сможет сохранить вашу работу при завершении работы Obsidian напрямую, либо убив процесс Obsidian, либо нажав кнопку закрытия Obsidian вообще.",AUTOSAVE_INTERVAL_MOBILE_NAME:"Интервал для автосохранения на мобильном телефоне",AUTOSAVE_INTERVAL_MOBILE_DESC:"Для мобильников я рекомендую более частый интервал. Excalidraw также сохранит файл при закрытии вкладки рабочей области или при навигации в Obsidian, но вне активной вкладки Excalidraw (например, при нажатии на ленту Obsidian, проверке обратных ссылок и т. д.). Excalidraw не сможет сохранить вашу работу при прямом завершении работы Obsidian (т.е. смахнув ее). Также обратите внимание, что при переключении приложений на мобильном устройстве, иногда Android и iOS закрываются Obsidian в фоновом режиме для экономии системных ресурсов. В этом случае Excalidraw не сможет сохранить последние изменения.",FILENAME_HEAD:"Имя файла",FILENAME_DESC:"Создать новый чертеж и вставить его в активный документ
?
Переключатель ВКЛ: Да, имя файла нового чертежа должно начинаться с имени файла активного документа
Переключатель ВЫКЛ: Нет, имя файла нового чертежа не должно включать имя файла активного документа",FILENAME_POSTFIX_NAME:"Пользовательский текст после имени заметки в формате markdown при вставке",FILENAME_POSTFIX_DESC:"Влияет на имя файла только при вставке в документ markdown. Этот текст будет вставлен после имени заметки, но перед датой.",FILENAME_DATE_NAME:"Дата имени файла",FILENAME_DATE_DESC:"Последняя часть имени файла. Оставьте пустой, если дата не нужна.",FILENAME_EXCALIDRAW_EXTENSION_NAME:".excalidraw.md или .md",FILENAME_EXCALIDRAW_EXTENSION_DESC:"Эта настройка не применяется, если вы используете Excalidraw в режиме совместимости, т.е. вы не используете файлы разметки Excalidraw.
Переключатель ВКЛ: Имя файла заканчивается на .excalidraw.md
Переключатель ВЫКЛ: Имя файла заканчивается на .md",DISPLAY_HEAD:"Внешний вид и поведение Excalidraw",DISPLAY_DESC:"В разделе 'Внешний вид и поведение' раздела Настройки Excalidraw вы можете настроить внешний вид и поведение Excalidraw. Сюда входят опции динамической стилизации, режима для левой руки, соответствия тем Excalidraw и Obsidian, режимов по умолчанию и многое другое.",DYNAMICSTYLE_NAME:"Динамическая стилизация",DYNAMICSTYLE_DESC:"Изменение цветов пользовательского интерфейса Excalidraw в соответствии с цветом холста",LEFTHANDED_MODE_NAME:"Левосторонний режим",LEFTHANDED_MODE_DESC:"В настоящее время действует только в трей режиме. Если включить этот режим, трей будет находиться с правой стороны.
Переключатель ВКЛ: Левосторонний режим.
Переключатель ВЫКЛ: Правосторонний режим",IFRAME_MATCH_THEME_NAME:"Вставки Markdown для соответствия теме Excalidraw",IFRAME_MATCH_THEME_DESC:"Переключатель ВКЛ: Установите значение true, если, например, вы используете Obsidian в темном режиме, но применяете excalidraw со светлым фоном. С этой настройкой встроенный документ разметки Obsidian будет соответствовать теме Excalidraw (т.е. светлые цвета, если Excalidraw находится в светлом режиме).
Переключатель ВЫКЛ: Установите значение false, если хотите, чтобы встроенный в Obsidian документ разметки соответствовал теме Obsidian (т.е. темные цвета, если Obsidian находится в темном режиме).",MATCH_THEME_NAME:"Новый чертеж в соответствии с темой Obsidian",MATCH_THEME_DESC:"Если тема темная, новый рисунок будет создан в темном режиме. Это не относится к случаям, когда вы используете шаблон для новых рисунков. Также это не повлияет на открытие существующего чертежа. Они будут соответствовать теме шаблона/чертежа соответственно.
Переключатель ВКЛ: Следуйте за Obsidian Theme
Переключатель ВЫКЛ: Следовать теме, заданной в вашем шаблоне",MATCH_THEME_ALWAYS_NAME:"Существующие чертежи должны соответствовать теме Obsidian",MATCH_THEME_ALWAYS_DESC:"Если тема темная, чертежи будут открываться в темном режиме. Если тема светлая, они будут открываться в светлом режиме.
Переключатель ВКЛ: Соответствовать теме Obsidian
Переключатель ВЫКЛ: Открывать ту же тему, что и при последнем сохранении",MATCH_THEME_TRIGGER_NAME:"Excalidraw будет следовать за изменениями Темы Obsidian",MATCH_THEME_TRIGGER_DESC:"Если эта опция включена, открытая панель Excalidraw будет переключаться в светлый/темный режим при смене темы Obsidian.
Переключатель ВКЛ: Следить за изменениями темы
Переключатель ВЫКЛ: Чертежи не подвержены изменениям темы Obsidian",DEFAULT_OPEN_MODE_NAME:"Режим по умолчанию при открытии Excalidraw",DEFAULT_OPEN_MODE_DESC:"Указывает режим, в котором открывается Excalidraw: Обычный, Zen или режим просмотра. Вы также можете задать это поведение на уровне файла добавив в документ ключ excalidraw-default-mode frontmatter со значением: normal, view или zen.",DEFAULT_PEN_MODE_NAME:"Режим пера",DEFAULT_PEN_MODE_DESC:"Должен ли режим пера автоматически включаться при открытии Excalidraw?",DISABLE_DOUBLE_TAP_ERASER_NAME:"Включение двойного нажатия ластика в режиме пера",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_NAME:"Показать (+) перекрестие в режиме пера",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_DESC:"Показывайте перекрестие в режиме пера при использовании инструмента freedraw. Toggle Переключатель ВКЛ Показывать Toggle Переключатель ВЫКЛ Скрывать
Эффект зависит от устройства. Перекрестие обычно видно на планшетах для рисования, MS Surface, но не на iOS.",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_NAME:"Передача файла Excalidraw в виде изображения в предварительном просмотре при наведении...",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:"...даже если файл имеет ключ excalidraw-open-md: true frontmatter.
Если этот параметр выключен и файл по умолчанию открывается в формате md, при наведении на предварительный просмотрбудет показана часть документа, содержащая разметку.",SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME:"Рендеринг в виде изображения при чтении файла Excalidraw в режиме разметки",SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:"Когда вы находитесь в режиме чтения разметки (а именно, читаете обратную сторону рисунка), должен ли рисунок Excalidraw отображаться как изображение? Этот параметр не влияет на отображение чертежа в режиме Excalidraw, а также при встраивании чертежа в документ с пометками или при предварительном просмотре при наведении.
Вы должны закрыть активный файл excalidraw/markdown и снова открыть его, чтобы это изменение вступило в силу.",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_NAME:"При экспорте файла Excalidraw в PDF файл отображается как изображение.",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_DESC:"Этот параметр управляет поведением Excalidraw при экспорте файла Excalidraw в PDF в режиме просмотра разметки с помощью функции Obsidian Экспорт в PDF
См. другие связанные настройки для режима чтения разметки в разделе 'Внешний вид и поведение' выше.
⚠️ Обратите внимание, что необходимо закрыть активный файл excalidraw/markdown и открыть его снова, чтобы изменения вступили в силу. ⚠️",HOTKEY_OVERRIDE_HEAD:"Переопределение горячих клавиш",HOTKEY_OVERRIDE_DESC:`Некоторые горячие клавиши Excalidraw, такие как ${labelCTRL()}+Enter
для редактирования текста или ${labelCTRL()}+K
создания ссылки на элемент конфликтуют с настройками горячих клавиш Obsidian. Комбинации горячих клавиш, которые вы добавите ниже, отменят настройки горячих клавиш Obsidian при использовании Excalidraw, таким образом Вы можете добавить ${labelCTRL()}+G
, если хотите по умолчанию перейти к Группе Объектов в Excalidraw вместо открытия Режима просмотра Графиков.`,THEME_HEAD:"Тема и стиль",ZOOM_HEAD:"Масштабирование",DEFAULT_PINCHZOOM_NAME:"Разрешить масштабирование в режиме пера",DEFAULT_PINCHZOOM_DESC:"По умолчанию зуммирование в режиме пера при использовании инструмента «Свободное рисование» отключено, чтобы предотвратить нежелательное случайное масштабирование с помощью ладони.
Переключатель ВКЛ:Включение щипкового масштабирования в режиме пера
Переключатель ВЫКЛ:Выключение щипкового масштабирования в режиме пера",DEFAULT_WHEELZOOM_NAME:"Колесо мыши для масштабирования по умолчанию",DEFAULT_WHEELZOOM_DESC:`Переключатель ВКЛ: Колесо мыши для масштабирования; ${labelCTRL()} + Колесо мыши для прокруткиПереключатель ВЫКЛ:${labelCTRL()} + Колесико мыши для масштабирования; Колесико мыши для прокрутки`,ZOOM_TO_FIT_NAME:"Изменение масштаба при изменении размера просмотра",ZOOM_TO_FIT_DESC:"Изменение масштаба чертежа при изменении размера панели
Переключатель ВКЛ: Увеличить масштаб
Переключатель ВЫКЛ: Автоматическое масштабирование отключено",ZOOM_TO_FIT_ONOPEN_NAME:"Увеличение масштаба при открытии файла",ZOOM_TO_FIT_ONOPEN_DESC:"Изменение масштаба чертежа при его первом открытии
Переключатель ВКЛ: Увеличить масштаб
Переключатель ВЫКЛ: Автоматическое масштабирование отключено",ZOOM_TO_FIT_MAX_LEVEL_NAME:"Увеличение до максимального уровня масштабирования",ZOOM_TO_FIT_MAX_LEVEL_DESC:"Установите максимальный уровень, до которого масштабирование будет увеличивать чертеж. Минимальное значение - 0,5 (50 %), максимальное - 10 (1000 %).",GRID_HEAD:"Сетка",GRID_DYNAMIC_COLOR_NAME:"Динамический цвет сетки",GRID_DYNAMIC_COLOR_DESC:"Переключатель ВКЛ:Измените цвет сетки, чтобы он соответствовал цвету холста
Переключатель ВЫКЛ:Используйте цвет, указанный ниже, в качестве цвета сетки",GRID_COLOR_NAME:"Цвет сетки",GRID_OPACITY_NAME:"Прозрачность сетки",GRID_OPACITY_DESC:"Прозрачность сетки также будет управлять прозрачностью поля привязки при привязке стрелки к элементу.
Установите прозрачность сетки. 0 - прозрачная, 100 - непрозрачная.",LASER_HEAD:"Лазерный указатель",LASER_COLOR:"Цвет лазерного указателя",LASER_DECAY_TIME_NAME:"Время затухания лазерного указателя",LASER_DECAY_TIME_DESC:"Время затухания лазерного указателя в миллисекундах. По умолчанию - 1000 (т. е. 1 секунда).",LASER_DECAY_LENGTH_NAME:"Длительность затухания лазерного указателя.",LASER_DECAY_LENGTH_DESC:"Длина затухания лазерного указателя в точках линии. По умолчанию 50.",LINKS_HEAD:"Ссылки, включение и задачи TODO",LINKS_HEAD_DESC:"В разделе 'Ссылки, включения и TODO' раздела Настройки Excalidraw вы можете настроить, как Excalidraw обрабатывает ссылки, включения и элементы TODO. Сюда входят опции для открытия ссылок, управления панелями, отображения ссылок со скобками, настройки префиксов ссылок, обработки элементов TODO и т. д. ",LINKS_DESC:`${labelCTRL()}+КЛИКНИТЕ на [[Text Elements]]
чтобы открыть их как ссылки. Если выделенный текст имеет более одного [[valid Obsidian links]]
, только первый будет открыт. Если текст начинается как правильная веб-ссылка (то есть https://
или http://
), потом плагин откроет его в браузере. Когда файлы Obsidian изменяются, соответствующие [[link]]
в ваших чертежах также изменится. Если вы не хотите, чтобы текст случайно менялся в ваших чертежах, используйте [[links|with aliases]]
.`,DRAG_MODIFIER_NAME:"Щелкните ссылку и перетащите клавиши-модификаторы",DRAG_MODIFIER_DESC:"Поведение клавиши-модификатора при нажатии на ссылки и перетаскивании элементов. Excalidraw не будет проверять вашу конфигурацию... обратите внимание, чтобы избежать конфликтов настроек. Эти настройки отличаются для Apple и не-Apple. Если вы используете Obsidian на нескольких платформах, вам нужно будет сделать настройки отдельно. Переключатели расположены в порядке"+(DEVICE.isIOS||DEVICE.isMacOS?"SHIFT, CMD, OPT, CONTROL.":"SHIFT, CTRL, ALT, META (Клавишы Windows)."),LONG_PRESS_DESKTOP_NAME:"Длительное нажатие открывает рабочий стол",LONG_PRESS_DESKTOP_DESC:"Задержка нажатия в миллисекундах для открытия чертежа Excalidraw, встроенного в файл Markdown.",LONG_PRESS_MOBILE_NAME:"Длительное нажатие открывает мобильную версию",LONG_PRESS_MOBILE_DESC:"Задержка нажатия в миллисекундах для открытия чертежа Excalidraw, встроенного в файл Markdown.",FOCUS_ON_EXISTING_TAB_NAME:"Фокус на существующей вкладке",FOCUS_ON_EXISTING_TAB_DESC:"При открытии ссылки Excalidraw будет фокусироваться на существующей вкладке, если файл уже открыт. Включение этого параметра отменяет 'Повторное использование соседней панели', если файл уже открыт.",SECOND_ORDER_LINKS_NAME:"Показать ссылки второго порядка",SECOND_ORDER_LINKS_DESC:"Показывать ссылки при нажатии на ссылку в Excalidraw. Ссылки второго порядка - это обратные ссылки, указывающие на ссылку, по которой переходят. При использовании значков изображений для соединения похожих заметок ссылки второго порядка позволяют перейти к связанным заметкам одним щелчком мыши, а не двумя. Для понимания смотрите YT Short.",ADJACENT_PANE_NAME:"Повторное использование соседней панели",ADJACENT_PANE_DESC:`Когда ${labelCTRL()}+${labelALT()} нажимает на ссылку в Excalidraw, по умолчанию плагин открывает ссылку в новой панели. Если включить этот параметр, Excalidraw сначала будет искать существующую панель и пытаться открыть ссылку в ней. Excalidraw будет искать другую панель рабочего пространства, основываясь на истории фокуса/навигации, то есть на той панели, которая была активна до того, как вы активировали Excalidraw.`,MAINWORKSPACE_PANE_NAME:"Открыть в основном рабочем пространстве",MAINWORKSPACE_PANE_DESC:`Когда ${labelCTRL()}+${labelALT()} нажимает на ссылку в Excalidraw, по умолчанию плагин открывает ссылку в новой панели в текущем активном окне. Если включить этот параметр, Excalidraw откроет ссылку в существующей или новой панели в основном рабочем пространстве. `,LINK_BRACKETS_NAME:"Показать [[brackets]]
вокруг ссылок",LINK_BRACKETS_DESC:`В режиме ПРЕДВАРИТЕЛЬНОГО ПРОСМОТРА при разборе элементов текста ставьте скобки вокруг ссылок. Вы можете переопределить эту настройку для конкретного чертежа, добавив ${FRONTMATTER_KEYS["link-brackets"].name}: true/false
в frontmatter файла.`,LINK_PREFIX_NAME:"Префикс ссылки",LINK_PREFIX_DESC:`В режиме ПРЕДВАРИТЕЛЬНОГО ПРОСМОТРА, если элемент 'Текст' содержит ссылку, перед текстом должны стоять эти символы. Вы можете переопределить эту настройку для конкретного чертежа, добавив ${FRONTMATTER_KEYS["link-prefix"].name}: "📍 "
в frontmatter файла.`,URL_PREFIX_NAME:"Префикс URL-адреса",URL_PREFIX_DESC:`В режиме ПРЕДВАРИТЕЛЬНОГО ПРОСМОТРА, если элемент 'Текст' содержит ссылку URL, перед текстом должны стоять эти символы. Вы можете переопределить эту настройку для конкретного чертежа, добавив ${FRONTMATTER_KEYS["url-prefix"].name}: "🌐 "
в frontmatter файла.`,PARSE_TODO_NAME:"Парсинг TODO",PARSE_TODO_DESC:"Преобразуйте '- [ ] ' и '- [x] ' в чекбокс и поставьте галочку.",TODO_NAME:"Открыть иконку TODO",TODO_DESC:"Иконка для открытых пунктов TODO",DONE_NAME:"Иконка завершенного TODO",DONE_DESC:"Иконка для завершенных элементов TODO",HOVERPREVIEW_NAME:`Предварительный просмотр наведением без нажатия клавиши ${labelCTRL()}`,HOVERPREVIEW_DESC:`Переключатель ВКЛ: В режиме просмотра Exalidraw предварительный просмотр при наведении на [[вики-ссылки]] будет показан сразу, без необходимости удерживать клавишу ${labelCTRL()}. В Excalidraw нормальный режим, предварительный просмотр будет показан сразу только при наведении на синий значок ссылки в правом верхнем углу элемента.
Переключатель ВЫКЛ: Предварительный просмотр при наведении отображается только в том случае, если при наведении на ссылку вы удерживаете клавишу ${labelCTRL()}.`,LINKOPACITY_NAME:"Прозрачность значка ссылки",LINKOPACITY_DESC:"Прозрачность значка индикатора ссылки в правом верхнем углу элемента. 1 - непрозрачный, 0 - прозрачный.",LINK_CTRL_CLICK_NAME:`${labelCTRL()}+КЛИК на текст с [[links]] или [](links), чтобы открыть их`,LINK_CTRL_CLICK_DESC:`Вы можете отключить эту функцию, если она мешает работе стандартных функций Excalidraw, которые вы хотите использовать. Если эта функция отключена, для открытия ссылок можно использовать либо ${labelCTRL()} + ${labelMETA()}, либо индикатор ссылок в правом верхнем углу элемента.`,TRANSCLUSION_WRAP_NAME:"Поведение переноса при переполненнии включенного текста",TRANSCLUSION_WRAP_DESC:"Число задает количество символов, через которое должен быть перенесен текст. Устанавливает поведение переноса текста. Включите этот параметр, чтобы принудительно перенести текст (т. е. без переполнения), или выключите, чтобы мягко перенести текст (по ближайшему пробелу).",TRANSCLUSION_DEFAULT_WRAP_NAME:"Перенос по словам включения по умолчанию",TRANSCLUSION_DEFAULT_WRAP_DESC:"Вы можете вручную задать/переопределить длину переноса слов, используя формат `![[page#^block]]{NUMBER}`. Обычно вам не нужно устанавливать значение по умолчанию, поскольку если вы вставите текст внутрь стикера, то Excalidraw автоматически позаботится о переносе слов. Установите это значение на '0', если вы не хотите устанавливать значение по умолчанию. ",PAGE_TRANSCLUSION_CHARCOUNT_NAME:"Максимальное количество символов при включении страниц (трансклюзии)",PAGE_TRANSCLUSION_CHARCOUNT_DESC:"Максимальное количество символов, отображаемых на странице при включении всей страницыв формате ![[markdown page]].",QUOTE_TRANSCLUSION_REMOVE_NAME:"Включение (Трансклюзия) цитат: удалите ведущие '> ' из каждой строки",QUOTE_TRANSCLUSION_REMOVE_DESC:"Удалите начальный '>' из каждой строки включения. Это улучшит читаемость цитат в текстовых включениях
Переключатель ВКЛ: Удалить ведущие '> '
Переключатель ВЫКЛ: Не удалить ведущие '> ' (обратите внимание, что он все равно будет удален из первой строки из-за функциональности API Obsidian.)",GET_URL_TITLE_NAME:"Используйте iframely для преобразования заголовка страницы",GET_URL_TITLE_DESC:"Используйте http://iframely.server.crestify.com/iframely?url=
для получения заголовка страницы при переходе по ссылке в Excalidraw",PDF_TO_IMAGE:"PDF в изображение",PDF_TO_IMAGE_SCALE_NAME:"Шкала преобразования PDF в изображения",PDF_TO_IMAGE_SCALE_DESC:"Устанавливает разрешение изображения, которое генерируется из PDF-страницы. Более высокое разрешение приведет к увеличению размера изображений в памяти и, как следствие, к увеличению нагрузки на систему (замедлению производительности), но при этом изображение будет более четким. Кроме того, если вы хотите скопировать страницы PDF (как изображения) на Excalidraw.com, больший размер изображения может привести к превышению лимита в 2 МБ на Excalidraw.com.",EMBED_TOEXCALIDRAW_HEAD:"Встраивание файлов в Excalidraw",EMBED_TOEXCALIDRAW_DESC:"В разделе Встраивание файлов раздела Настройки Excalidraw вы можете настроить, как различные файлы будут встраиваться в Excalidraw. Сюда входят опции для встраивания интерактивных файлов разметки (Markdown), PDF-файлов и файлов разметки (Markdown) в виде изображений.",MD_HEAD:"Встраивать разметку в Excalidraw в виде изображения",MD_EMBED_CUSTOMDATA_HEAD_NAME:"Интерактивные файлы Markdown",MD_EMBED_CUSTOMDATA_HEAD_DESC:'Приведенные ниже настройки будут влиять только на будущие вставки. Текущие вставки остаются неизменными. Настройки темы для встроенных фреймов находятся в разделе "Внешний вид и поведение Excalidraw".',MD_EMBED_SINGLECLICK_EDIT_NAME:"Редактирование встроенной разметки (Markdown) одним щелчком мыши",MD_EMBED_SINGLECLICK_EDIT_DESC:"Однократный щелчок на встроенном файле разметки (Markdown) для его редактирования. Если отключить эту функцию, файл с пометками сначала откроется в режиме предварительного просмотра, а затем переключится в режим редактирования, когда вы снова нажмете на него.",MD_TRANSCLUDE_WIDTH_NAME:"Ширина по умолчанию для включенного документа с разметкой",MD_TRANSCLUDE_WIDTH_DESC:"Ширина страницы разметки (Markdown). Это влияет на обертку слов при встраивание длинных абзацев, а также на ширину элемента изображения Вы можете изменить ширину встроенного файла по умолчанию, используя синтаксис [[filename#heading|WIDTHxMAXHEIGHT]]
в режиме просмотра markdown в разделе встроенных файлов.",MD_TRANSCLUDE_HEIGHT_NAME:"Максимальная высота по умолчанию для документа с пометкой встраиваемый",MD_TRANSCLUDE_HEIGHT_DESC:"Встроенное изображение будет настолько высоким, насколько этого требует текст разметки (Markdown), но не выше этого значения. Вы можете переопределить это значение, отредактировав ссылку на встроенное изображение в режиме просмотра markdown со следующим синтаксисом [[filename#^blockref|WIDTHxMAXHEIGHT]]
.",MD_DEFAULT_FONT_NAME:"Шрифт по умолчанию, используемый для встроенных файлов разметки (Markdown).",MD_DEFAULT_FONT_DESC:'Установите это значение на "Virgil" или "Cascadia" или на имя файла .ttf
, .woff
, или .woff2
шрифта, например. MyFont.woff2
Вы можете отменить эту настройку, добавив следующий frontmatter-ключ во встроенный файл разметки (markdown): excalidraw-font: font_or_filename
',MD_DEFAULT_COLOR_NAME:"Цвет шрифта по умолчанию, используемый для встроенных файлов разметки (markdown).",MD_DEFAULT_COLOR_DESC:'Установите это значение в любое допустимое имя цвета css, например, "steelblue" (имена цветов), или допустимый шестнадцатеричный цвет, например "#e67700", или на любую другую допустимую строку цвета css. Вы можете отменить эту настройку, добавив следующий frontmatter-ключ во встроенный файл разметки (markdown): excalidraw-font-color: steelblue
',MD_DEFAULT_BORDER_COLOR_NAME:"Цвет границы, используемый по умолчанию для встроенных файлов разметки (markdown).",MD_DEFAULT_BORDER_COLOR_DESC:'Установите это значение на любое допустимое имя цвета css, например "steelblue" (имена цветов), или на допустимый шестнадцатеричный цвет, например "#e67700", или на любую другую допустимую строку цвета css. Вы можете отменить эту настройку, добавив следующий frontmatter-key во встроенный файл разметки (markdown): excalidraw-border-color: gray
. Оставьте пустым, если вам не нужна граница. ',MD_CSS_NAME:"CSS файл",MD_CSS_DESC:`Имя файла CSS для применения к вставкам markdown. Укажите имя файла с расширением (например, 'md-embed.css'). Файл css также может быть обычным файлом markdow (e.g. 'md-embed-css.md'), просто убедитесь, что содержимое написано с использованием правильного синтаксиса css. Если вам нужно просмотреть HTML-код, к которому вы применяете CSS, откройте Obsidian Developer Console (${DEVICE.isIOS||DEVICE.isMacOS?"CMD+OPT+i":"CTRL+SHIFT+i"}) и введите следующую команду: "ExcalidrawAutomate.mostRecentMarkdownSVG". Это отобразит последний SVG, сгенерированный Excalidraw. Установка font-family в css имеет свои ограничения. По умолчанию доступны только стандартные шрифты вашей операционной системы (подробнее см. в README). Вы можете добавить еще один пользовательский шрифт, используя настройки выше. Вы можете переопределить эту настройку css, добавив следующий frontmatter-ключ во встроенный файл разметки: "excalidraw-css: css_file_in_vault|css-snippet".`,EMBED_HEAD:"Встраивание Excalidraw в заметки и экспорт",EMBED_DESC:'В настройках "Вставка и экспорт" можно настроить вставку и экспорт изображений и рисунков Excalidraw в документы. Основные настройки включают выбор типа изображения для предварительного просмотра в формате разметки (например, Native SVG или PNG), указание типа файла для вставки в документ (оригинальный Excalidraw, PNG или SVG) и управление кэшированием изображений для вставки в разметку. Вы также можете управлять размерами изображений, вставлять рисунки с помощью ссылок на вики или ссылок на разметку, а также настраивать темы изображений, цвета фона и интеграцию с Obsidian. \n Кроме того, есть настройки автоэкспорта, который автоматически генерирует файлы SVG и/или PNG, соответствующие названию ваших рисунков Excalidraw, сохраняя их синхронизацию при переименовании и удалении файлов.',EMBED_CANVAS:"Поддержка Obsidian Canvas",EMBED_CANVAS_NAME:"Иммерсивное встраивание",EMBED_CANVAS_DESC:"Скрывайте границы и фон узлов холста при встраивании чертежа Excalidraw в холст. Обратите внимание, что для создания полностью прозрачного фона изображения вам все равно придется настроить Excalidraw на экспорт изображений с прозрачным фоном.",EMBED_CACHING:"Кэширование изображений",EXPORT_SUBHEAD:"Настройки экспорта",EMBED_SIZING:"Размер изображения",EMBED_THEME_BACKGROUND:"Тема изображения и цвет фона",EMBED_IMAGE_CACHE_NAME:"Кэширование изображений для вставки в markdown",EMBED_IMAGE_CACHE_DESC:"Кэшируйте изображения для вставки в markdown. Это ускорит процесс встраивания, но в случае, если вы составите изображения из нескольких чертежей-субкомпонентов, встроенное изображение в Markdown не будет обновляться, пока вы не откроете рисунок и не сохраните его, чтобы вызвать обновление кэша.",SCENE_IMAGE_CACHE_NAME:"Кэширование вложенных Excalidraws в Cцене",SCENE_IMAGE_CACHE_DESC:"Кэшируйте вложенные Excalidraws в сцене для ускорения рендеринга сцены. Это ускорит процесс рендеринга, особенно если в сцене есть глубоко вложенные Excalidraw. Excalidraw попытается интеллектуально определить, изменились ли дочерние элементы вложенного Excalidraw, и соответствующим образом обновит кэш. Вы можете отключить эту функцию, если у вас есть подозрения, что кэш обновляется неправильно.",EMBED_IMAGE_CACHE_CLEAR:"Очистка кэша",BACKUP_CACHE_CLEAR:"Очистка резервных копий",BACKUP_CACHE_CLEAR_CONFIRMATION:"Это действие удалит все резервные копии чертежей Excalidraw. Резервные копии используются в качестве меры безопасности на случай повреждения файла рисунка. Каждый раз, когда вы открываете Obsidian, плагин автоматически удаляет резервные копии файлов, которые больше не существуют в вашем хранилище. Вы уверены, что хотите удалить все резервные копии?",EMBED_REUSE_EXPORTED_IMAGE_NAME:"Если найдено, используйте уже экспортированное изображение для предварительного просмотра",EMBED_REUSE_EXPORTED_IMAGE_DESC:"Эта настройка работает в сочетании с настройкой Автоэкспорт SVG/PNG. Если имеется экспортированное изображение, соответствующее имени файла чертежа, используйте это изображение вместо того, чтобы генерировать изображение предварительного просмотра на лету. Однако это позволит ускорить предварительный просмотр, особенно если в чертеже много встроенных объектов, может случиться так, что последние изменения не будут отображаться, а изображение не будет автоматически соответствовать вашей теме Obsidian, если вы изменили тему Obsidian с момента создания экспорта. Эта настройка применяется только для вставки изображений в документы markdown. По ряду причин этот же подход не может быть использован для ускорения загрузки чертежей с большим количеством встроенных объектов. Смотрите демонстрацию здесь.",EMBED_PREVIEW_IMAGETYPE_NAME:"Тип изображения в предварительном просмотре разметки (markdown)",EMBED_PREVIEW_IMAGETYPE_DESC:"Родной SVG: Высокое качество изображения. Встраиваемые веб-сайты, видео с YouTube, ссылки на Obsidian и внешние изображения, вставленные через URL-адрес, будут работать. Встроенные страницы Obsidian не будут
SVG-изображение: Высокое качество изображений. Встроенные элементы и изображения, вставленные по URL, имеют только заполнители, ссылки не работают
PNG-изображение: Более низкое качество изображения, но в некоторых случаях лучшая производительность при работе с большими рисунками. Встроенные элементы и изображения, вставленные по URL, имеют только заполнители, ссылки не работают. Также некоторые функции ссылки на блок изображений не работают с PNG-вставками.",PREVIEW_MATCH_OBSIDIAN_NAME:"Предварительный просмотр Excalidraw в соответствии с темой Obsidian",PREVIEW_MATCH_OBSIDIAN_DESC:"Предварительный просмотр изображений в документах должен соответствовать теме Obsidian. Если эта функция включена, то когда Obsidian находится в темном режиме, изображения Excalidraw будут отображаться в темном режиме. Когда Obsidian находится в режиме освещения, Excalidraw также будет рендерить в режиме освещения. Вы можете отключить функцию 'Экспортировать изображение с фоном', чтобы получить более интегрированный в Obsidian вид и ощущение.",EMBED_WIDTH_NAME:"Ширина по умолчанию для встроенного ('включенного') изображения",EMBED_WIDTH_DESC:"Ширина по умолчанию для встроенного рисунка. Это относится к режиму редактирования и чтения, а также к предварительным просмотрам при наведении. При вставке изображения можно указать его ширину используя ![[drawing.excalidraw|100]]
или [[drawing.excalidraw|100x100]]
формат.",EMBED_HEIGHT_NAME:"Высота по умолчанию для встроенного ('включенного') изображения",EMBED_HEIGHT_DESC:"Высота по умолчанию для встроенного рисунка. Это относится к режиму редактирования и чтения, а также к предварительным просмотрам при наведении. При вставке изображения можно указать его высоту используя ![[drawing.excalidraw|100]]
или [[drawing.excalidraw|100x100]]
формат.",EMBED_TYPE_NAME:"Тип файла для вставки в документ",EMBED_TYPE_DESC:"Когда вы вставляете изображение в документ с помощью командной палитры, этот параметр определяет, должен ли Excalidraw вставлять оригинальный файл Excalidraw или копию PNG или SVG. Чтобы эти типы изображений были доступны в раскрывающемся списке, их необходимо включить auto-export PNG / SVG (см. ниже в разделе 'Настройки экспорта'). Для чертежей, не имеющих соответствующего PNG или SVG, действие из палитры команд вставит неработающую ссылку. Необходимо открыть исходный чертеж и инициировать экспорт вручную. Эта опция не будет автоматически генерировать файлы PNG/SVG, а просто будет ссылаться на уже существующие файлы.",EMBED_MARKDOWN_COMMENT_NAME:"Вставить ссылку на чертеж как комментари",EMBED_MARKDOWN_COMMENT_DESC:"Вставьте ссылку на исходный файл Excalidraw в виде ссылки в формате markdown под изображением, например: %%[[drawing.excalidraw]]%%
.
Вместо добавления комментария можно также выделить встроенную строку SVG или PNG и использовать действие из палитры команд: 'Excalidraw: Open Excalidraw drawing
' чтобы открыть чертеж.",EMBED_WIKILINK_NAME:"Встраивание рисунка с помощью ссылки Wiki",EMBED_WIKILINK_DESC:"Переключатель ВКЛ: Excalidraw будет встраивать [[wiki link]].
Переключатель ВЫКЛ: Excalidraw будет встраивать [markdown](link).",EXPORT_PNG_SCALE_NAME:"Масштаб экспортируемого изображения PNG",EXPORT_PNG_SCALE_DESC:"Масштаб экспортируемого PNG-изображения",EXPORT_BACKGROUND_NAME:"Экспорт изображения с фоном",EXPORT_BACKGROUND_DESC:"Если отключить эту функцию, экспортируемое изображение будет прозрачным.",EXPORT_PADDING_NAME:"Отступы изображений",EXPORT_PADDING_DESC:"Размер (в пикселях) вокруг экспортируемого изображения SVG или PNG. Для ссылок на clippedFrame значение Отступов равно 0.Если кривые линии расположены близко к краю изображения, они могут быть обрезаны при экспорте. Вы можете увеличить это значение, чтобы избежать обрезки. Вы также можете отменить эту настройку на уровне файла, добавив ключ frontmatter excalidraw-export-padding: 5
.",EXPORT_THEME_NAME:"Экспорт изображения с темой",EXPORT_THEME_DESC:"Экспортируйте изображение, соответствующее темной/светлой теме вашего рисунка. Если отключить эту функцию, рисунки, созданные в темном режиме, будут отображаться так же, как и в светлом режиме. ",EXPORT_EMBED_SCENE_NAME:"Встроить сцену в экспортированное изображение",EXPORT_EMBED_SCENE_DESC:"Вставка сцены Excalidraw в экспортируемое изображение. Можно переопределить на уровне файла, добавив ключ frontmatter.
excalidraw-export-embed-scene: true/false
. Настройка вступит в силу только при следующем (повторном) открытии чертежей.",EXPORT_HEAD:"Настройки автоэкспорта",EXPORT_SYNC_NAME:"Поддерживайте синхронизацию имен файлов .SVG и/или .PNG с файлом чертежа",EXPORT_SYNC_DESC:"Если плагин включен, он будет автоматически обновлять имена файлов .SVG и/или .PNG при переименовании чертежа в той же папке (и с тем же именем). Плагин также автоматически удалит файлы .SVG и/или .PNG при удалении рисунка в той же папке (и с тем же именем). ",EXPORT_SVG_NAME:"Автоэкспорт SVG",EXPORT_SVG_DESC:"Автоматическое создание SVG-экспорта вашего чертежа, соответствующего названию файла. Плагин сохранит файл *.SVG в той же папке, что и чертеж. Встраивайте .svg-файл в документы вместо Excalidraw, делая вставки независимыми от платформы. Если переключатель автоэкспорта включен, этот файл будет обновляться каждый раз, когда вы редактируете чертеж Excalidraw с соответствующим именем. Вы можете отменить эту настройку на уровне файла, добавив ключ frontmatter
excalidraw-autoexport
.Допустимыми значениями для этого ключа являютсяnone
,both
,svg
, и png
.",EXPORT_PNG_NAME:"Автоэкспорт PNG",EXPORT_PNG_DESC:"То же самое, что и автоэкспорт SVG, но для *.PNG",EXPORT_BOTH_DARK_AND_LIGHT_NAME:"Экспорт изображения с темной и светлой тематикой",EXPORT_BOTH_DARK_AND_LIGHT_DESC:"Если включить эту функцию, Excalidraw будет экспортировать два файла вместо одного: filename.dark.png, filename.light.png и/или filename.dark.svg и filename.light.svg.
Двойные файлы будут экспортированы как при включенном автоэкспорте SVG или PNG (или обоих), так и при нажатии кнопки экспорта на одном изображении.",COMPATIBILITY_HEAD:"Особенности совместимости",COMPATIBILITY_DESC:"Включать эти функции следует только в том случае, если у вас есть веские причины работать с файлами excalidraw.com, а не с файлами markdown. Многие функции плагина не поддерживаются в старых файлах. Типичным случаем может быть использование хранилища поверх папки проекта Visual Studio Code, а также наличие чертежей .excalidraw, к которым вы хотите получить доступ из Visual Studio Code. Другим примером может быть параллельное использование Excalidraw в Logseq и Obsidian.",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME:"Совместимость с линтерами",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC:"Excalidraw чувствителен к структуре файлов ниже # Excalidraw Data
. Автоматическая линтинговая обработка документов может создавать ошибки в Excalidraw Data. Хотя я приложил некоторые усилия, чтобы сделать загрузку данных устойчивой к изменениям линта,это решение не является надежным.
Лучше всего избегать линтинга или других автоматических изменений документов Excalidraw с помощью различных плагинов.
Используйте эту настройку, если по уважительным причинам вы решили проигнорировать мою рекомендацию и настроили линтинг файлов Excalidraw.
Раздел ## Текстовые элементы
чувствителен к пустым строкам. Обычный подход к линтингу заключается в добавлении пустой строки после заголовков разделов. В случае Excalidraw это приведет к поломке/изменению первого текстового элемента в чертеже. Чтобы решить эту проблему, можно включить эту настройку. WhenЕсли она включена, Excalidraw добавит в начало фиктивный элемент, ## Текстовые элементы
который линтер может безопасно модифицировать.",PRESERVE_TEXT_AFTER_DRAWING_NAME:"Совместимость Zotero и Footnotes",PRESERVE_TEXT_AFTER_DRAWING_DESC:"Сохраните текст после раздела ## Чертеж в файле Markdown. Это может незначительно повлиять на производительность при сохранении очень больших рисунков.",DEBUGMODE_NAME:"Включить отладочные сообщения",DEBUGMODE_DESC:"Я рекомендую перезапустить Obsidian после включения/выключения этой настройки. Это позволяет выводить отладочные сообщения в консоль. Это полезно для устранения неполадок. Если у вас возникли проблемы с плагином, пожалуйста, включите эту настройку, воспроизведите проблему и включите журнал консоли в проблему, которую вы поднимаете на GitHub",SLIDING_PANES_NAME:"Поддержка плагина раздвижных областей окна (Sliding Panes plugin)",SLIDING_PANES_DESC:"Чтобы это изменение вступило в силу, необходимо перезапустить Obsidian.
Если вы используете Sliding Panes plugin Вы можете включить эту настройку, чтобы чертежи Excalidraw работали с плагином Sliding Panes.
Обратите внимание, что поддержка раздвижных областей окна (Sliding Panes plugin) Excalidraw вызывает проблемы совместимости с рабочими пространствами Obsidian.
Обратите внимание, что функция 'Stack Tabs' теперь доступна в Obsidian, обеспечивая встроенную поддержку большинства функций раздвижных областей окна (Sliding Panes plugin)",EXPORT_EXCALIDRAW_NAME:"Автоэкспорт Excalidraw",EXPORT_EXCALIDRAW_DESC:"Аналогично автоэкспорту SVG, но для *.Excalidraw",SYNC_EXCALIDRAW_NAME:"Синхронизация *.excalidraw с *.md-версией одного и того же чертежа",SYNC_EXCALIDRAW_DESC:"Если дата изменения файла *.excalidraw более поздняя, чем дата изменения файла *.md то обновите чертеж в файле .md на основе файла .excalidraw",COMPATIBILITY_MODE_NAME:"Новые чертежи в виде устаревших файлов",COMPATIBILITY_MODE_DESC:"⚠️ Включайте эту функцию, только если вы знаете, что делаете. В 99,9% случаев включать эту функцию НЕ нужно. При включении этой функции рисунки, которые вы создаете с помощью значка ленты, действий палитры команд, и в файловом проводнике, будут все старые файлы *.excalidraw. Эта настройка также отключит напоминаниепри открытии устаревшего файла для редактирования.",MATHJAX_NAME:"Хост библиотеки javascript MathJax (LaTeX)",MATHJAX_DESC:"Если вы используете уравнения LaTeX в Excalidraw, то плагину необходимо загрузить библиотеку javascript для этого. Некоторые пользователи не могут получить доступ к определенным хост-серверам. Если у вас возникли проблемы, попробуйте сменить хост здесь. Возможно, вам придется перезапустить Obsidian после закрытия настроек, чтобы это изменение вступило в силу.",LATEX_DEFAULT_NAME:"Формула LaTeX по умолчанию для новых уравнений",LATEX_DEFAULT_DESC:"Оставьте пустым, если вам не нужна формула по умолчанию. Здесь можно добавить форматирование по умолчанию, например \\color{white}
.",NONSTANDARD_HEAD:"Поддерживаемые функции, не с Excalidraw.com",NONSTANDARD_DESC:'Эти настройки в разделе "Поддерживаемые функции, не относящиеся к Excalidraw.com" предоставляют возможности настройки, выходящие за рамки стандартных функций Excalidraw.com. Эти функции недоступны на сайте excalidraw.com. При экспорте чертежа в Excalidraw.com эти функции будут выглядеть иначе.\n Вы можете настроить количество пользовательских ручек, отображаемых рядом с меню Obsidian на холсте, что позволит вам выбирать из множества вариантов. Кроме того, можно включить опцию локального шрифта, которая добавляет локальный шрифт в список шрифтов на панели свойств элементов для текстовых элементов. ',RENDER_TWEAK_HEAD:"Улучшения рендеринга",MAX_IMAGE_ZOOM_IN_NAME:"Максимальное разрешение увеличения изображения",MAX_IMAGE_ZOOM_IN_DESC:"В целях экономии памяти и из-за того, что Apple Safari (Obsidian на iOS) имеет некоторые жестко закодированные ограничения, Excalidraw.com ограничивает максимальное разрешение изображений и крупных объектов при увеличении. Вы можете обойти это ограничение с помощью мультипликатора. Это означает, что вы умножаете предел, установленный по умолчанию в Excalidraw. Чем больше множитель, тем лучше будет разрешение увеличения изображения, и тем больше памяти оно будет потреблять. Я рекомендую поиграть с несколькими значениями этой настройки. Вы знаете, что натолкнулись на стену, когда при увеличении масштаба PNG-изображения оно вдруг исчезает из поля зрения. Значение по умолчанию - 1. Настройка не влияет на iOS.",CUSTOM_PEN_HEAD:"Пользовательские Ручки",CUSTOM_PEN_NAME:"Количество пользовательских ручек",CUSTOM_PEN_DESC:"Вы увидите эти ручки рядом с меню Obsidian на холсте. Вы можете настроить ручки на холсте, долго нажимая на кнопку ручки.",EXPERIMENTAL_HEAD:"Разные возможности",EXPERIMENTAL_DESC:"Среди прочих возможностей Excalidraw - установка формул LaTeX по умолчанию для новых уравнений, включение Предложение полей (Suggester) для автозаполнения, отображение индикаторов типов файлов Excalidraw, включение иммерсивного встраивания изображений в режиме предварительного просмотра и эксперименты с оптическим распознаванием символов Taskbone для извлечения текста из изображений и чертежей. Пользователи также могут ввести API-ключ Taskbone для расширенного использования сервиса OCR.",EA_HEAD:"Автоматизация Excalidraw",EA_DESC:"Excalidraw Автоматизация - это скриптовый и автоматизированный API для Excalidraw. К сожалению, документация по API скудна. Рекомендую прочитать ExcalidrawAutomate.d.ts файл, посетить ExcalidrawAutomate How-to страницу - хотя информация здесь давно не обновлялся, - и, наконец, включите расположенный ниже Предложитель полей. Предложитель полей покажет вам доступные функции, их параметры и краткое описание по мере ввода. Предложитель полей - это самая актуальная документация по API.",FIELD_SUGGESTER_NAME:"Включить Предложение полей (Suggester)",FIELD_SUGGESTER_DESC:"Предложение полей (Suggester) позаимствован у плагинов Breadcrumbs и Templater. Предложение полей (Suggester) полей будет показывать меню автозаполнения при вводе текста с описанием функций excalidraw-
или ea.
в качестве подсказок для отдельных элементов в списке.",STARTUP_SCRIPT_NAME:"Сценарий запуска",STARTUP_SCRIPT_DESC:"Если этот параметр установлен, excalidraw будет выполнять скрипт при запуске плагина. Это полезно, если вы хотите установить какой-либо из крючков Excalidraw Automate. Скрипт запуска - это файл в формате markdown, который должен содержать код javascript, который вы хотите выполнять при запуске Excalidraw.",STARTUP_SCRIPT_BUTTON_CREATE:"Создание сценария запуска",STARTUP_SCRIPT_BUTTON_OPEN:"Открыть сценарий запуска",STARTUP_SCRIPT_EXISTS:"Файл сценария запуска уже существует",FILETYPE_NAME:"Тип отображения (✏️) для файлов excalidraw.md в Файловом Проводнике",FILETYPE_DESC:"Файлы Excalidraw получат индикатор с помощью эмодзи или текста, заданного в следующей настройке.",FILETAG_NAME:"Установка типа индикатора для файлов excalidraw.md",FILETAG_DESC:"Текст или эмодзи для отображения в качестве типа индикатора.",INSERT_EMOJI:"Вставьте эмодзи",LIVEPREVIEW_NAME:"Встраивание изображений в режиме предварительного просмотра в реальном времени",LIVEPREVIEW_DESC:"Включите этот параметр для поддержки стилей вставки изображений, таких как ![[drawing|width|style]], в режиме редактирования живого предварительного просмотра. Настройка не повлияет на открытые в данный момент документы. Чтобы изменения вступили в силу, необходимо закрыть открытые документы иоткрыть их снова.",FADE_OUT_EXCALIDRAW_MARKUP_NAME:"Затухание разметки Excalidraw",FADE_OUT_EXCALIDRAW_MARKUP_DESC:"В режиме просмотра Markdown раздел после комментария %% исчезает. Текст остается на месте, но визуальный беспорядок уменьшается. Обратите внимание, вы можете поместить %% в строку прямо над #Элементы текста, в этом случае вся разметка рисунка исчезнет, включая #Элементы текста. Побочным эффектом будет то, что вы не сможете блокировать текст ссылок в других примечаниях, то есть после секции комментариев %%. Это редко является проблемой. Если вы захотите отредактировать сценарий разметки Excalidraw, просто переключитесь в режим просмотра разметки и временно удалите комментарий %%.",EXCALIDRAW_PROPERTIES_NAME:"Загрузка свойств Excalidraw в Obsidian Suggester",EXCALIDRAW_PROPERTIES_DESC:"Отключите этот параметр, чтобы при запуске плагина свойства документа Excalidraw загружались в предложение свойств Obsidian. Включение этой функции упрощает использование свойств титульного листа Excalidraw, позволяя использовать множество мощных настроек. Если вы предпочитаете не загружать эти свойства автоматически, Вы можете отключить эту функцию, но при этом вам придется вручную удалить все ненужные свойства из предложения. Обратите внимание, что включение этой настройки требует перезапуска плагина, так как свойства загружаются при запуске.",CUSTOM_FONT_HEAD:"Локальный шрифт",ENABLE_FOURTH_FONT_NAME:"Включите опцию локального шрифта",ENABLE_FOURTH_FONT_DESC:"Включение этой опции добавит локальный шрифт в список шрифтов на панели свойств для текстовых элементов. Имейте в виду, что использование локального шрифта может нарушить независимость от платформы. Файлы, использующие пользовательский шрифт, могут отображаться по-разному при открытии в другом хранилище или в более позднее время, в зависимости от настроек шрифта. Кроме того, на сайте excalidraw.com или других версиях Excalidraw 4-й шрифт по умолчанию будет соответствовать системному шрифту.",FOURTH_FONT_NAME:"Локальный файл шрифта",FOURTH_FONT_DESC:"Выберите файл шрифта .otf, .ttf, .woff или .woff2 из своего хранилища, чтобы использовать его в качестве локального шрифта. Если файл не выбран, Excalidraw по умолчанию использует шрифт Virgil. Для оптимальной производительности рекомендуется использовать файл .woff2, так как Excalidraw закодирует только необходимые глифы при экспорте изображений в SVG. Другие форматы шрифтов будут встраивать весь шрифт в экспортируемый файл, что может привести к значительному увеличению размера файла.",SCRIPT_SETTINGS_HEAD:"Настройки для установленных сценариев",SCRIPT_SETTINGS_DESC:"Некоторые сценарии Excalidraw Automate Scripts включают в себя настройки. Настройки упорядочены по сценариям. Настройки станут видны в этом списке только после того, как вы один раз выполните загруженный скрипт.",TASKBONE_HEAD:"Taskbone Оптический распознаватель символов",TASKBONE_DESC:"Это экспериментальная интеграция оптического распознавания символов в Excalidraw. Обратите внимание, что taskbone - это независимый внешний сервис, не предоставляемый ни Excalidraw, ни проектом плагинов Excalidraw-Obsidian. Сервис OCR выхватывает разборчивый текст из произвольных линий и встроенных изображений на вашем холсте и помещает распознанный текст на передний план вашего рисунка, а также в буфер обмена. Наличие текста во frontmatter позволит вам искать в Obsidian их текстовое содержание. Обратите внимание, что процесс извлечения текста из изображения происходит не локально, а через онлайн API. Сервис taskbone хранит изображение на своих серверах только до тех пор, пока это необходимо для извлечения текста. Однако если вас это не устраивает, не используйте эту функцию.",TASKBONE_ENABLE_NAME:"Включить Taskbone",TASKBONE_ENABLE_DESC:"Включая эту услугу, вы соглашаетесь с Условиями использования Taskbone и политикой конфиденциальности.",TASKBONE_APIKEY_NAME:"Taskbone API Ключ",TASKBONE_APIKEY_DESC:"Taskbone предлагает бесплатную услугу с разумным количеством сканирований в месяц. Если вы хотите использовать эту функцию чаще, или вам необходимо повысить разработчика Taskbone (как вы можете себе представить, не существует такого понятия, как «бесплатно», предоставление этого потрясающего сервиса OCR стоит разработчику Taskbone определенных денег), вы можете приобрести платный API-ключ на сайте taskbone.com. Если вы уже приобрели ключ, просто перезапишите этот автоматически сгенерированный бесплатный API-ключ своим платным ключом.",HOTKEY_PRESS_COMBO_NANE:"Нажмите комбинацию горячих клавиш",HOTKEY_PRESS_COMBO_DESC:"Пожалуйста, нажмите нужную комбинацию клавиш",HOTKEY_BUTTON_ADD_OVERRIDE:"Добавить новое переопределение",HOTKEY_BUTTON_REMOVE:"Удалить",SELECT_FILE:"Выберите файл и нажмите Enter.",SELECT_COMMAND:"Выберите команду и нажмите Enter.",SELECT_FILE_WITH_OPTION_TO_SCALE:`Выберите файл и нажмите ENTER, или SHIFT+${labelMETA()}+ENTER для вставки в масштабе 100%.`,NO_MATCH:"Ни один файл не соответствует вашему запросу.",NO_MATCHING_COMMAND:"Ни одна команда не соответствует вашему запросу.",SELECT_FILE_TO_LINK:"Выберите файл, для которого нужно вставить ссылку.",SELECT_COMMAND_PLACEHOLDER:"Выберите команду, для которой нужно вставить ссылку.",SELECT_DRAWING:"Выберите изображение или рисунок, который необходимо вставить.",TYPE_FILENAME:"Введите название чертежа для выбора.",SELECT_FILE_OR_TYPE_NEW:"Выберите существующий чертеж или введите имя нового чертежа, затем нажмите Enter.",SELECT_TO_EMBED:"Выберите чертеж для вставки в активный документ.",SELECT_MD:"Выберите документ в формате markdown для вставки.",SELECT_PDF:"Выберите документ PDF для вставки.",PDF_PAGES_HEADER:"Страницы для загрузки?",PDF_PAGES_DESC:"Формат: 1, 3-5, 7, 9-11",TYPE_SECTION:"Введите название раздела для выбора.",SELECT_SECTION_OR_TYPE_NEW:"Выберите существующий раздел или введите название нового раздела, затем нажмите Enter.",INVALID_SECTION_NAME:"Недопустимое название раздела.",EMPTY_SECTION_MESSAGE:"Введите название раздела и нажмите Enter, чтобы создать новый раздел.",INFINITE_LOOP_WARNING:"ПРЕДУПРЕЖДЕНИЕ EXCALIDRAW\nОшибка при загрузке встроенных изображений из-за бесконечного цикла в файле:\n",SCRIPT_EXECUTION_ERROR:"Ошибка выполнения сценария. Пожалуйста, найдите сообщение об ошибке в консоли разработчика.",LOAD_FROM_BACKUP:"Файл Excalidraw был поврежден. Загрузка из резервного файла.",GOTO_FULLSCREEN:"Переход в полноэкранный режим",EXIT_FULLSCREEN:"Выход из полноэкранного режима",TOGGLE_FULLSCREEN:"Переключить полноэкранный режим",TOGGLE_DISABLEBINDING:"Переключить инвертирование поведения привязки по умолчанию",TOGGLE_FRAME_RENDERING:"Переключить рендеринг кадра",TOGGLE_FRAME_CLIPPING:"Переключить обрезку кадра",OPEN_LINK_CLICK:"Открыть ссылку",OPEN_LINK_PROPS:"Открыть ссылку на изображение или редактор формул LaTeX",NARROW_TO_HEADING:"Узкий к заголовку...",NARROW_TO_BLOCK:"Сузить до блока...",SHOW_ENTIRE_FILE:"Показать весь файл",ZOOM_TO_FIT:"Увеличить до нужного размера",RELOAD:"Перезагрузить исходную ссылку",OPEN_IN_BROWSER:"Открыть текущую ссылку в браузере",PROPERTIES:"Свойства",COPYCODE:"Копировать источник в буфер обмена",ES_TITLE:"Настройки встраиваемых элементов",ES_RENAME:"Переименовать файл",ES_ZOOM:"Масштабирование встраиваемого контента",ES_YOUTUBE_START:"Время начала YouTube",ES_YOUTUBE_START_DESC:"ss, mm:ss, hh:mm:ss",ES_YOUTUBE_START_INVALID:"Время начала YouTube недействительно. Проверьте формат и повторите попытку.",ES_FILENAME_VISIBLE:"Видимое имя файла",ES_BACKGROUND_HEAD:"Цвет фона встроенной заметки",ES_BACKGROUND_MATCH_ELEMENT:"Соответствие фонового цвета элемента",ES_BACKGROUND_MATCH_CANVAS:"Соответствие цвета фона холста",ES_BACKGROUND_COLOR:"Цвет фона",ES_BORDER_HEAD:"Цвет границы встроенной заметки",ES_BORDER_COLOR:"Цвет границы",ES_BORDER_MATCH_ELEMENT:"Цвет границы элемента",ES_BACKGROUND_OPACITY:"Непрозрачность фона",ES_BORDER_OPACITY:"Непрозрачность границы",ES_EMBEDDABLE_SETTINGS:"Настройки встраиваемой разметки",ES_USE_OBSIDIAN_DEFAULTS:"Использовать настройки Obsidian по умолчанию",ES_ZOOM_100_RELATIVE_DESC:"Кнопка настроит масштаб элемента так, чтобы он отображал содержимое на 100% относительно текущего уровня масштабирования холста",ES_ZOOM_100:"Относительный 100%",PROMPT_FILE_DOES_NOT_EXIST:"Файл не существует. Вы хотите его создать?",PROMPT_ERROR_NO_FILENAME:"Ошибка: Имя нового файла не может быть пустым",PROMPT_ERROR_DRAWING_CLOSED:"Неизвестная ошибка. Похоже, что ваш чертеж был закрыт или файл чертежа отсутствует",PROMPT_TITLE_NEW_FILE:"Новый файл",PROMPT_TITLE_CONFIRMATION:"Подтверждение",PROMPT_BUTTON_CREATE_EXCALIDRAW:"Создать EX",PROMPT_BUTTON_CREATE_EXCALIDRAW_ARIA:"Создать чертеж Excalidraw и открыть его в новой вкладке",PROMPT_BUTTON_CREATE_MARKDOWN:"Создать MD",PROMPT_BUTTON_CREATE_MARKDOWN_ARIA:"Создать документ в формате markdown и открыть его в новой вкладке",PROMPT_BUTTON_EMBED_MARKDOWN:"Встроить MD",PROMPT_BUTTON_EMBED_MARKDOWN_ARIA:"Замена выбранного элемента встроенным документом с разметкой",PROMPT_BUTTON_NEVERMIND:"Неважно",PROMPT_BUTTON_OK:"OK",PROMPT_BUTTON_CANCEL:"Отменить",PROMPT_BUTTON_INSERT_LINE:"Вставить новую строку",PROMPT_BUTTON_INSERT_SPACE:"Вставить пробел",PROMPT_BUTTON_INSERT_LINK:"Вставить ссылку на файл в формате markdown",PROMPT_BUTTON_UPPERCASE:"Прописные буквы",PROMPT_SELECT_TEMPLATE:"Выберите шаблон",WEB_BROWSER_DRAG_ACTION:"Действие перетаскивания веб-браузера",LOCAL_FILE_DRAG_ACTION:"Действие перетаскивания локального файла ОС",INTERNAL_DRAG_ACTION:"Внутреннее действие перетаскивания в Obsidian",PANE_TARGET:"Поведение при нажатии на ссылку",DEFAULT_ACTION_DESC:"Если ни одна из комбинаций не применяется, для этой группы будет действовать действие по умолчанию: ",FRAME_SETTINGS_TITLE:"Настройки кадров",FRAME_SETTINGS_ENABLE:"Включить кадры",FRAME_SETTIGNS_NAME:"Отображение имени кадра",FRAME_SETTINGS_OUTLINE:"Отображение контура кадра",FRAME_SETTINGS_CLIP:"Включить обрезку кадра",IPM_PAGES_TO_IMPORT_NAME:"Страницы для импорта",IPM_SELECT_PAGES_TO_IMPORT:"Пожалуйста, выберите страницы для импорта",IPM_ADD_BORDER_BOX_NAME:"Добавить рамку",IPM_ADD_FRAME_NAME:"Добавить страницу в кадр",IPM_ADD_FRAME_DESC:"Для удобства работы я рекомендую зафиксировать страницу внутри кадра. Однако если вы заблокировали страницу внутри кадра, то единственный способ разблокировать ее - щелкнуть правой кнопкой мыши кадр, выбрать пункт «Удалить элементы из кадра», а затем разблокировать страницу.",IPM_GROUP_PAGES_NAME:"Страницы группы",IPM_GROUP_PAGES_DESC:"Это позволит объединить все страницы в одну группу. Это рекомендуется делать, если вы блокируете страницы после импорта, потому что группу будет легче разблокировать позже, чем разблокировать каждую по отдельности.",IPM_SELECT_PDF:"Пожалуйста, выберите файл PDF"},tr={};const CJK_FONTS="CJK Fonts";var zhCN={CONVERT_URL_TO_FILE:"从 URL 下载图像到本地",UNZIP_CURRENT_FILE:"解压当前 Excalidraw 文件",ZIP_CURRENT_FILE:"压缩当前 Excalidraw 文件",PUBLISH_SVG_CHECK:"Obsidian Publish:搜索过期的 SVG 和 PNG 导出文件",EMBEDDABLE_PROPERTIES:"Embeddable 元素设置",EMBEDDABLE_RELATIVE_ZOOM:"使元素的缩放等级等于当前画布的缩放等级",OPEN_IMAGE_SOURCE:"打开 Excalidraw 绘图文件",INSTALL_SCRIPT:"安装此脚本",UPDATE_SCRIPT:"有可用更新 - 点击安装",CHECKING_SCRIPT:"检查更新中 - 点击重新安装",UNABLETOCHECK_SCRIPT:"检查更新失败 - 点击重新安装",UPTODATE_SCRIPT:"脚本已是最新 - 点击重新安装",OPEN_AS_EXCALIDRAW:"打开为 Excalidraw 绘图",TOGGLE_MODE:"在 Excalidraw 和 Markdown 模式之间切换",CONVERT_NOTE_TO_EXCALIDRAW:"转换:空白 Markdown 文档 => Excalidraw 绘图文件",CONVERT_EXCALIDRAW:"转换: *.excalidraw => *.md",CREATE_NEW:"新建绘图文件",CONVERT_FILE_KEEP_EXT:"转换:*.excalidraw => *.excalidraw.md",CONVERT_FILE_REPLACE_EXT:"转换:*.excalidraw => *.md (兼容 Logseq)",DOWNLOAD_LIBRARY:"导出 stencil 库为 *.excalidrawlib 文件",OPEN_EXISTING_NEW_PANE:"打开已有的绘图 - 于新面板",OPEN_EXISTING_ACTIVE_PANE:"打开已有的绘图 - 于当前面板",TRANSCLUDE:"嵌入绘图(形如 ![[drawing]])到当前 Markdown 文档中",TRANSCLUDE_MOST_RECENT:"嵌入最近编辑过的绘图(形如 ![[drawing]])到当前 Markdown 文档中",TOGGLE_LEFTHANDED_MODE:"切换为左手模式",TOGGLE_SPLASHSCREEN:"在新绘图中显示启动画面",FLIP_IMAGE:"打开当前所选 excalidraw 图像的“背景笔记”",NEW_IN_NEW_PANE:"新建绘图 - 于新面板",NEW_IN_NEW_TAB:"新建绘图 - 于新页签",NEW_IN_ACTIVE_PANE:"新建绘图 - 于当前面板",NEW_IN_POPOUT_WINDOW:"新建绘图 - 于新窗口",NEW_IN_NEW_PANE_EMBED:"新建绘图 - 于新面板 - 并将其嵌入(形如 ![[drawing]])到当前 Markdown 文档中",NEW_IN_NEW_TAB_EMBED:"新建绘图 - 于新页签 - 并将其嵌入(形如 ![[drawing]])到当前 Markdown 文档中",NEW_IN_ACTIVE_PANE_EMBED:"新建绘图 - 于当前面板 - 并将其嵌入(形如 ![[drawing]])到当前 Markdown 文档中",NEW_IN_POPOUT_WINDOW_EMBED:"新建绘图 - 于新窗口 - 并将其嵌入(形如 ![[drawing]])到当前 Markdown 文档中",TOGGLE_LOCK:"文本元素:原文模式(RAW)⟺ 预览模式(PREVIEW)",DELETE_FILE:"从库中删除所选图像(或以图像形式嵌入绘图中的 Markdown)的源文件",COPY_ELEMENT_LINK:"复制所选元素的链接(形如 [[file#^id]]])",COPY_DRAWING_LINK:"复制绘图的嵌入链接(形如 ![[darwing]])",INSERT_LINK_TO_ELEMENT:`复制所选元素为内部链接(形如 [[file#^id]] )。\n按住 ${labelCTRL()} 可复制元素所在分组为内部链接(形如 [[file#^group=id]] )。\n按住 SHIFT 可复制所选元素所在区域为内部链接(形如 [[file#^area=id]] )。`,INSERT_LINK_TO_ELEMENT_GROUP:"复制所选元素所在分组为嵌入链接(形如 ![[file#^group=id]] )",INSERT_LINK_TO_ELEMENT_AREA:"复制所选元素所在区域为嵌入链接(形如 ![[file#^area=id]] )",INSERT_LINK_TO_ELEMENT_FRAME:"复制所选框架为嵌入链接(形如 ![[file#^frame=id]] )",INSERT_LINK_TO_ELEMENT_FRAME_CLIPPED:"复制所选框架(内容)为嵌入链接(形如 ![[file#^clippedframe=id]] )",INSERT_LINK_TO_ELEMENT_NORMAL:"复制所选元素为内部链接(形如 [[file#^id]] )",INSERT_LINK_TO_ELEMENT_ERROR:"未选择画布里的单个元素",INSERT_LINK_TO_ELEMENT_READY:"链接已生成并复制到剪贴板",INSERT_LINK:"插入任意文件(以内部链接形式嵌入,形如 [[drawing]] )到当前绘图中",INSERT_COMMAND:"插入 Obsidian 命令(以内部链接形式嵌入)到当前绘图中",INSERT_IMAGE:"插入图像或 Excalidraw 绘图(以图像形式嵌入)到当前绘图中",IMPORT_SVG:"从 SVG 文件导入图形元素到当前绘图中(暂不支持文本元素)",IMPORT_SVG_CONTEXTMENU:"转换 SVG 到线条 - 有限制",INSERT_MD:"插入 Markdown 文档(以图像形式嵌入)到当前绘图中",INSERT_PDF:"插入 PDF 文档(以图像形式嵌入)到当前绘图中",INSERT_LAST_ACTIVE_PDF_PAGE_AS_IMAGE:"将最后激活的 PDF 页面插入为图片",UNIVERSAL_ADD_FILE:"插入任意文件(以交互形式嵌入,或者以图像形式嵌入)到当前绘图中",INSERT_CARD:"插入“背景笔记”卡片",CONVERT_CARD_TO_FILE:"将“背景笔记”卡片保存到文件",ERROR_TRY_AGAIN:"请重试。",PASTE_CODEBLOCK:"粘贴代码块",INSERT_LATEX:"插入 LaTeX 公式(例如:\\binom{n}{k} = \\frac{n!}{k!(n-k)!})。",ENTER_LATEX:"输入 LaTeX 表达式",READ_RELEASE_NOTES:"阅读本插件的更新说明",RUN_OCR:"OCR 完整画布:识别涂鸦和图片里的文本并复制到剪贴板和文档属性中",RERUN_OCR:"重新运行 OCR 完整画笔:识别涂鸦和图片里的文本并复制到剪贴板和文档属性中",RUN_OCR_ELEMENTS:"OCR 选中的元素:识别涂鸦和图片里的文本并复制到剪贴板",TRAY_MODE:"绘图工具属性页:面板模式 ⟺ 托盘模式",SEARCH:"搜索文本",CROP_PAGE:"对所选页面裁剪并添加蒙版",CROP_IMAGE:"对图片裁剪并添加蒙版",ANNOTATE_IMAGE:"在 Excalidraw 中标注图像",INSERT_ACTIVE_PDF_PAGE_AS_IMAGE:"将当前激活的的 PDF 页面作为图片插入",RESET_IMG_TO_100:"重置图像元素的尺寸为 100%",RESET_IMG_ASPECT_RATIO:"重置所选图像元素的纵横比",TEMPORARY_DISABLE_AUTOSAVE:"临时禁用自动保存功能,直到本次 Obsidian 退出(小白慎用!)",TEMPORARY_ENABLE_AUTOSAVE:"启用自动保存功能",FONTS_LOADED:"Excalidraw: CJK 字体已加载",FONTS_LOAD_ERROR:"Excalidraw: 在资源文件夹下找不到 CJK 字体\n",SELECT_LINK_TO_OPEN:"选择要打开的链接",NO_SEARCH_RESULT:"在绘图中未找到匹配的元素",FORCE_SAVE_ABORTED:"自动保存被中止,因为文件正在保存中",LINKLIST_SECOND_ORDER_LINK:"二级链接",MARKDOWN_EMBED_CUSTOMIZE_LINK_PROMPT_TITLE:"自定义嵌入文件链接",MARKDOWN_EMBED_CUSTOMIZE_LINK_PROMPT:"请不要在文件名周围添加 [[方括号]]!
对于 markdown 图像,在编辑链接时请遵循以下格式:文件名#^块引用|宽度x最大高度
您可以通过在链接末尾添加 |100%
来将 Excalidraw 图像锚定为 100% 的大小。
您可以通过将 #page=1
更改为 #page=2
等来更改 PDF 页码。
PDF 矩形裁剪值为:左, 下, 右, 上
。例如:#rect=0,0,500,500
",FRAME_CLIPPING_ENABLED:"渲染框架:已启用",FRAME_CLIPPING_DISABLED:"渲染框架:已禁用",ARROW_BINDING_INVERSE_MODE:"反转模式:默认方向按键已禁用。需要时请使用 Ctrl/CMD 临时启用。",ARROW_BINDING_NORMAL_MODE:"正常模式:方向键已启用。需要时请使用 Ctrl/CMD 临时禁用。",EXPORT_FILENAME_PROMPT:"请提供文件名",EXPORT_FILENAME_PROMPT_PLACEHOLDER:"请输入文件名,留空以取消操作",WARNING_SERIOUS_ERROR:"警告:Excalidraw 遇到了未知的问题!\n\n您最近的更改可能无法保存。\n\n为了安全起见,请按以下步骤操作:\n1) 使用 Ctrl/CMD+A 选择您的绘图,然后使用 Ctrl/CMD+C 进行复制。\n2) 然后在新窗格中,通过 Ctrl/CMD 点击 Excalidraw 功能区按钮创建一个空白绘图。\n3) 最后,使用 Ctrl/CMD+V 将您的作品粘贴到新文档中。",ARIA_LABEL_TRAY_MODE:"托盘模式提供了一个更宽敞的画布空间",MASK_FILE_NOTICE:"这是一个蒙版图像。长按本提示来观看视频讲解。",INSTALL_SCRIPT_BUTTON:"安装或更新 Excalidraw 脚本",OPEN_AS_MD:"打开为 Markdown 文档",EXPORT_IMAGE:"导出为图像",OPEN_LINK:"打开所选元素里的链接 \n(按住 Shift 在新面板打开)",EXPORT_EXCALIDRAW:"导出为 .excalidraw 文件(旧版绘图文件格式)",LINK_BUTTON_CLICK_NO_TEXT:"请选择一个包含内部或外部链接的元素。\n",LINEAR_ELEMENT_LINK_CLICK_ERROR:"箭头和线元素的链接无法通过 "+labelCTRL()+" + 点击元素来导航,因为这也会激活线编辑器。\n请使用右键上下文菜单打开链接,或点击元素右上角的链接指示器。\n",FILENAME_INVALID_CHARS:'文件名不能含有以下符号: * " \\ < > : | ? #',FORCE_SAVE:"保存(同时更新嵌入了该绘图的 Markdown 文档)",RAW:"文本元素正以原文(RAW)模式显示链接。\n点击切换到预览(PREVIEW)模式",PARSED:"文本元素正以预览(PREVIEW)模式显示链接。\n点击切换到原文(RAW)模式",NOFILE:"Excalidraw(没有文件)",COMPATIBILITY_MODE:"*.excalidraw 是兼容旧版的绘图文件格式。需要转换为新格式才能解锁本插件的全部功能。",CONVERT_FILE:"转换为新格式",BACKUP_AVAILABLE:"加载绘图文件时出错,可能是由于 Obsidian 在上次保存时意外退出了(手机上更容易发生这种意外)。
好消息:这台设备上存在备份。您是否想要恢复本设备上的备份?
(我建议您先尝试在最近使用过的其他设备上打开该绘图,以检查是否有更新的备份。)",BACKUP_RESTORED:"已恢复备份",CACHE_NOT_READY:"抱歉,加载绘图文件时出错。
现在有耐心,将来更省心。
该插件有备份机制,但您似乎刚刚打开 Obsidian,需要等待一分钟或更长的时间来读取缓存。缓存读取完毕时,您将会在右上角收到提示。
请点击 OK 并耐心等待缓存,或者选择点击取消后手动修复你的文件。
",OBSIDIAN_TOOLS_PANEL:"Obsidian 工具面板",ERROR_SAVING_IMAGE:"获取图像时发生未知错误。可能是由于某种原因,图像不可用或拒绝了 Obsidian 的获取请求。",WARNING_PASTING_ELEMENT_AS_TEXT:"你不能将 Excalidraw 元素粘贴为文本元素!",USE_INSERT_FILE_MODAL:"使用“插入任意文件”功能来嵌入 Markdown 文档",RECURSIVE_INSERT_ERROR:"你不能将图像的一部分嵌入到此图像中,因为这可能导致无限循环。",CONVERT_TO_MARKDOWN:"转存为 Markdown 文档(并嵌入为 MD-Embeddable)",SELECT_TEXTELEMENT_ONLY:"只选择文本元素(非容器)",REMOVE_LINK:"移除文字元素链接",LASER_ON:"启用激光笔",LASER_OFF:"关闭激光笔",WELCOME_RANK_NEXT:"张绘图之后,可以到达下一等级!",WELCOME_RANK_LEGENDARY:"您已是绘图大师,请续写传奇~",WELCOME_COMMAND_PALETTE:'在命令面板中输入 "Excalidraw"',WELCOME_OBSIDIAN_MENU:"探索右上角的 Obsidian 菜单",WELCOME_SCRIPT_LIBRARY:"访问脚本库",WELCOME_HELP_MENU:"在汉堡菜单(三横线)中寻找帮助",WELCOME_YOUTUBE_ARIA:"可视化个人知识管理的 YouTube 频道",WELCOME_YOUTUBE_LINK:"查看可视化个人知识管理的 YouTube 频道",WELCOME_DISCORD_ARIA:"加入 Discord 服务器",WELCOME_DISCORD_LINK:"加入 Discord 服务器",WELCOME_TWITTER_ARIA:"在 Twitter 上关注我",WELCOME_TWITTER_LINK:"在 Twitter 上关注我",WELCOME_LEARN_ARIA:"学习“可视化个人知识管理”(Visual PKM)",WELCOME_LEARN_LINK:"报名加入视觉思维工作坊",WELCOME_DONATE_ARIA:"捐赠以支持 Excalidraw-Obsidian",WELCOME_DONATE_LINK:"感谢并支持此插件。",SAVE_IS_TAKING_LONG:"保存您之前的文件花费的时间较长,请稍候...",SAVE_IS_TAKING_VERY_LONG:"为了更好的性能,请考虑将大型绘图拆分成几个较小的文件。",RELEASE_NOTES_NAME:"显示更新说明",RELEASE_NOTES_DESC:"开启:每次更新本插件后,显示最新发行版本的说明。
关闭:您仍可以在 GitHub 上阅读更新说明。",NEWVERSION_NOTIFICATION_NAME:"通知插件更新",NEWVERSION_NOTIFICATION_DESC:"开启:当本插件存在可用更新时,显示通知。
关闭:您需要手动检查本插件的更新(设置 - 第三方插件 - 检查更新)。",BASIC_HEAD:"基本",BASIC_DESC:"包括:更新说明,更新提示,新绘图文件、模板文件、脚本文件的存储路径等的设置。",FOLDER_NAME:"Excalidraw 文件夹(區分大小寫!)",FOLDER_DESC:"新绘图的默认存储路径。若为空,将在库的根目录中创建新绘图。",CROP_PREFIX_NAME:"剪贴文件的前缀",CROP_PREFIX_DESC:"当剪贴图片进来时保存的文件名的前缀。 留空则使用 'cropped_'",ANNOTATE_PREFIX_NAME:"标注文件的前缀",ANNOTATE_PREFIX_DESC:"在标注图像时创建新绘图的文件名的第一部分。留空则使用'annotated_'",ANNOTATE_PRESERVE_SIZE_NAME:"在标注时保留图像尺寸",ANNOTATE_PRESERVE_SIZE_DESC:"当在 Markdown 中标注图像时,替换后的图像链接将包含原始图像的宽度。",CROP_FOLDER_NAME:"剪贴文件文件夹(區分大小寫!)",CROP_FOLDER_DESC:"剪贴图像时创建新绘图的默认存储路径。如果留空,将按照 Vault 附件设置创建。",ANNOTATE_FOLDER_NAME:"图片标注文件文件夹(區分大小寫!)",ANNOTATE_FOLDER_DESC:"创建图片标注是的默认存储路径。如果留空,将按照 Vault 附件设置创建。",FOLDER_EMBED_NAME:"将 Excalidraw 文件夹用于“新建绘图”系列命令",FOLDER_EMBED_DESC:"在命令面板中执行“新建绘图”系列命令时,新建的绘图文件的存储路径。
开启:使用上面的 Excalidraw 文件夹。
关闭:使用 Obsidian 设置的新附件默认位置。",TEMPLATE_NAME:"Excalidraw 模板文件(區分大小寫!)",TEMPLATE_DESC:"Excalidraw 模板文件(文件夹)的存储路径。
模板文件:比如:如果您的模板在默认的 Excalidraw 文件夹中且文件名是 Template.md,则此项应设为 Excalidraw/Template.md(也可省略 .md 扩展名,即 Excalidraw/Template)。如果您在兼容模式下使用 Excalidraw,那么您的模板文件也必须是旧的 *.excalidraw 格式,例如 Excalidraw/Template.excalidraw。
模板文件夹: 你还可以将文件夹设置为模板。 在这种情况下,创建新绘图时将提示您选择使用哪个模板。
专业提示: 如果您正在使用 Obsidian Templater 插件,您可以将 Templater 代码添加到不同的Excalidraw 模板中,以自动配置您的绘图",SCRIPT_FOLDER_NAME:"Excalidraw 自动化脚本的文件夹(大小写敏感!)",SCRIPT_FOLDER_DESC:"此文件夹用于存放 Excalidraw 自动化脚本。您可以在 Obsidian 命令面板中执行这些脚本,还可以为喜欢的脚本分配快捷键,就像为其他 Obsidian 命令分配快捷键一样。
该项不能设为库的根目录。",AI_HEAD:"AI(实验性)",AI_DESC:"OpenAI GPT API 的设置。 目前 OpenAI API 还处于测试中,您需要在自己的。OpenAI 账户中充值至少 5 美元后才能生成 API key,然后就可以在 Excalidraw 中配置并使用 AI。",AI_OPENAI_TOKEN_NAME:"OpenAI API key",AI_OPENAI_TOKEN_DESC:"您可以访问您的 OpenAI 账户来获取自己的 OpenAI API key。",AI_OPENAI_TOKEN_PLACEHOLDER:"OpenAI API key",AI_OPENAI_DEFAULT_MODEL_NAME:"默认的文本 AI 模型",AI_OPENAI_DEFAULT_MODEL_DESC:"使用哪个 AI 模型来生成文本。请填写有效的 OpenAI 模型名称。您可访问 OpenAI 网站了解更多模型信息。",AI_OPENAI_DEFAULT_MODEL_PLACEHOLDER:"gpt-3.5-turbo-1106",AI_OPENAI_DEFAULT_IMAGE_MODEL_NAME:"默认的图像 AI 模型",AI_OPENAI_DEFAULT_IMAGE_MODEL_DESC:"使用哪个 AI 模型来生成图像(在编辑和调整图像时会强制使用 dall-e-2 模型,因为目前只有该模型支持编辑和调整图像)。请填写有效的 OpenAI 模型名称。您可访问OpenAI 网站了解更多模型信息。",AI_OPENAI_DEFAULT_IMAGE_MODEL_PLACEHOLDER:"dall-e-3",AI_OPENAI_DEFAULT_VISION_MODEL_NAME:"默认的 AI 视觉模型",AI_OPENAI_DEFAULT_VISION_MODEL_DESC:"根据文本生成图像时,使用哪个 AI 视觉模型。请填写有效的 OpenAI 模型名称。您可访问 OpenAI 网站了解更多模型信息。",AI_OPENAI_DEFAULT_API_URL_NAME:"OpenAI API URL",AI_OPENAI_DEFAULT_API_URL_DESC:"默认的 OpenAI API URL。请填写有效的 OpenAI API URL。Excalidraw 会通过该 URL 发送 API 请求给 OpenAI。我没有对此选项做任何错误处理,请谨慎修改。",AI_OPENAI_DEFAULT_IMAGE_API_URL_NAME:"OpenAI 图像生成 API URL",AI_OPENAI_DEFAULT_VISION_MODEL_PLACEHOLDER:"输入你的默认 AI 模型名称,例如:gpt-4o",SAVING_HEAD:"保存",SAVING_DESC:"包括:压缩,自动保存的时间间隔,文件的命名格式和扩展名等的设置。",COMPRESS_NAME:"压缩 Excalidraw JSON",COMPRESS_DESC:"Excalidraw 绘图文件默认将元素记录为 JSON 格式。开启此项,可将元素的 JSON 数据以 BASE64 编码(使用 LZ-String 算法)。这样做的好处是:一方面可以避免原来的明文 JSON 数据干扰 Obsidian 的文本搜索结果,另一方面减小了绘图文件的体积。
当您通过功能区按钮或命令将绘图切换成 Markdown 模式时,数据将被解码回 JSON 格式以便阅读和编辑;而当您切换回 Excalidraw 模式时,数据就会被再次编码。
开启此项后,对于之前已存在但未压缩的绘图文件,需要重新打开并保存才能生效。",DECOMPRESS_FOR_MD_NAME:"在 Markdown 视图中解压缩 Excalidraw JSON",DECOMPRESS_FOR_MD_DESC:"通过启用此功能,Excalidraw 将在切换到 Markdown 视图时自动解压缩绘图 JSON。这将使您能够轻松阅读和编辑 JSON 字符串。一旦您切换回 Excalidraw 视图并保存绘图(Ctrl+S),绘图将再次被压缩。
我建议关闭此功能,因为这可以获得更小的文件尺寸,并避免在 Obsidian 搜索中出现不必要的结果。 您始终可以使用命令面板中的“Excalidraw: 解压缩当前 Excalidraw 文件”命令在需要阅读或编辑时手动解压缩绘图 JSON。",AUTOSAVE_INTERVAL_DESKTOP_NAME:"桌面端自动保存时间间隔",AUTOSAVE_INTERVAL_DESKTOP_DESC:"每隔多长时间自动保存一次(如果绘图文件没有发生改变,将不会保存)。当 Obsidian 应用内的焦点离开活动文档(如关闭工作空间、点击菜单栏、切换到其他页签或面板等)的时候,也会触发自动保存。直接退出 Obsidian 应用(不管是终结进程还是点关闭按钮)不会触发自动保存。",AUTOSAVE_INTERVAL_MOBILE_NAME:"移动端自动保存时间间隔",AUTOSAVE_INTERVAL_MOBILE_DESC:"建议在移动端设置更短的时间间隔。当 Obsidian 应用内的焦点离开活动文档(如关闭工作空间、点击菜单栏、切换到其他页签或面板等)的时候,也会触发自动保存。直接退出 Obsidian 应用(在应用切换器中划掉)不会触发自动保存。此外,当您切换到其他应用时,有时候系统会自动清理 Obsidian 后台以释放资源。这种情况下,自动保存会失效。",FILENAME_HEAD:"文件名",FILENAME_DESC:"
开启:是
关闭:否",FILENAME_POSTFIX_NAME:"“新建绘图并嵌入到当前 Markdown 文档中”系列命令创建的文件名的中间部分",FILENAME_POSTFIX_DESC:"介于文件名前缀和日期时间之间的文本。仅对“新建绘图并嵌入到当前 Markdown 文档中”系列命令创建的绘图生效。",FILENAME_DATE_NAME:"文件名里的日期时间",FILENAME_DATE_DESC:"文件名的最后一部分。允许留空。",FILENAME_EXCALIDRAW_EXTENSION_NAME:"文件扩展名(.excalidraw.md 或 .md)",FILENAME_EXCALIDRAW_EXTENSION_DESC:"该选项在兼容模式(即非 Excalidraw 专用 Markdown 文件)下不会生效。
开启:使用 .excalidraw.md 作为扩展名。
关闭:使用 .md 作为扩展名。",DISPLAY_HEAD:"界面 & 行为",DISPLAY_DESC:"在 Excalidraw 设置的 '外观和行为' 部分,您可以微调 Excalidraw 的外观和行为。这包括动态样式、左手模式、匹配 Excalidraw 和 Obsidian 主题、默认模式等选项。",OVERRIDE_OBSIDIAN_FONT_SIZE_NAME:"限制 Obsidian 字体大小为编辑器文本",OVERRIDE_OBSIDIAN_FONT_SIZE_DESC:"Obsidian 的自定义字体大小设置会影响整个界面,包括 Excalidraw 和依赖默认字体大小的主题。启用此选项将限制字体大小更改为编辑器文本,这将改善 Excalidraw 的外观。如果启用后发现界面的某些部分看起来不正确,请尝试关闭此设置。",DYNAMICSTYLE_NAME:"动态样式",DYNAMICSTYLE_DESC:"根据画布颜色自动调节 Excalidraw 界面颜色",LEFTHANDED_MODE_NAME:"左手模式",LEFTHANDED_MODE_DESC:"目前只在托盘模式下生效。若开启此项,则托盘(绘图工具属性页)将位于右侧。
开启:左手模式。
关闭:右手模式。",IFRAME_MATCH_THEME_NAME:"使 Embeddable 匹配 Excalidraw 主题",IFRAME_MATCH_THEME_DESC:"开启:当 Obsidian 和 Excalidraw 一个使用黑暗主题、一个使用明亮主题时,开启此项后,以交互形式嵌入到绘图中的元素(Embeddable) 将会匹配 Excalidraw 主题。
关闭:如果您想要 Embeddable 匹配 Obsidian 主题,请关闭此项。",MATCH_THEME_NAME:"使新建的绘图匹配 Obsidian 主题",MATCH_THEME_DESC:"如果 Obsidian 使用黑暗主题,新建的绘图文件也将使用黑暗主题。
但是若设置了模板,新建的绘图文件将跟随模板主题;另外,此功能不会作用于已有的绘图。
开启:跟随 Obsidian 主题风格。
关闭:跟随模板主题风格。",MATCH_THEME_ALWAYS_NAME:"使已有的绘图匹配 Obsidian 主题",MATCH_THEME_ALWAYS_DESC:"如果 Obsidian 使用黑暗主题,则绘图文件也将以黑暗主题打开;反之亦然。
开启:匹配 Obsidian 主题风格。
关闭:采用上次保存时的主题风格。",MATCH_THEME_TRIGGER_NAME:"Excalidraw 主题跟随 Obsidian 主题变化",MATCH_THEME_TRIGGER_DESC:"开启此项,则切换 Obsidian 的黑暗/明亮主题时,已打开的 Excalidraw 面板的主题会随之改变。
开启:跟随主题变化。
关闭:不跟随主题变化。",DEFAULT_OPEN_MODE_NAME:"Excalidraw 的默认运行模式",DEFAULT_OPEN_MODE_DESC:"设置 Excalidraw 的运行模式:普通模式(Normal)/禅模式(Zen)/阅读模式(View)。
您可为某个绘图单独设置此项,方法是在其 frontmatter 中添加形如 excalidraw-default-mode: normal/zen/view
的键值对。",DEFAULT_PEN_MODE_NAME:"触控笔模式(Pen mode)",DEFAULT_PEN_MODE_DESC:"打开绘图时,是否自动开启触控笔模式?",DISABLE_DOUBLE_TAP_ERASER_NAME:"启用手写模式下的双击橡皮擦功能",DISABLE_SINGLE_FINGER_PANNING_NAME:"启用手写模式下的单指平移功能",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_NAME:"在触控笔模式下显示十字准星(+)",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_DESC:"在触控笔模式下使用涂鸦功能会显示十字准星 打开: 显示 关闭: 隐藏
效果取决于设备。十字准星通常在绘图板、MS Surface 上可见。但在 iOS 上不可见。",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_NAME:"在鼠标悬停预览时将 Excalidraw 文件渲染文图片",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:"...即使文件具有 `excalidraw-open-md: true` frontmatter 属性。
当此设置关闭且文件默认设置为以 md 格式打开时,悬停预览将显示文档的 Markdown 部分(背景笔记)。",SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME:"Excalidraw 文件在 Markdown 阅读模式下渲染为图片",SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:"当您处于 Markdown 阅读模式(即查看绘图的背景笔记)时,Excalidraw 绘图是否应该渲染为图像?此设置不会影响您在 Excalidraw 模式下的绘图显示,或者在将绘图嵌入 Markdown 文档时,或在渲染悬停预览时。
您必须关闭当前的 Excalidraw/Markdown 文件并重新打开,以使此更改生效。",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_NAME:"在将 Excalidraw 文件导出为 PDF 时将文件渲染为图像",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_DESC:"处于 Markdown 视图模式时,此设置控制 Excalidraw 在使用 Obsidian 的 导出为 PDF 功能时,将 Excalidraw 文件导出为 PDF 的行为。
请参阅上面‘外观和行为’部分的 <>Markdown 阅读模式 相关设置。⚠️ 注意,您必须关闭当前的 Excalidraw/Markdown 文件并重新打开,以使此更改生效。⚠️",HOTKEY_OVERRIDE_HEAD:"热键覆盖",HOTKEY_OVERRIDE_DESC:`一些 Excalidraw 的热键,例如 ${labelCTRL()}+Enter 用于编辑文本,或 ${labelCTRL()}+K 用于创建元素链接。与 Obsidian 的热键设置发生冲突。您在下面添加的热键组合将在使用 Excalidraw 时覆盖 Obsidian 的热键设置,因此如果您希望在 Excalidraw 中默认选择“组合对象”,而不是打开“图形视图”,您可以添加 ${labelCTRL()}+G。`,THEME_HEAD:"主题和样式",ZOOM_HEAD:"缩放",DEFAULT_PINCHZOOM_NAME:"允许在触控笔模式下进行双指缩放",DEFAULT_PINCHZOOM_DESC:"在触控笔模式下使用自由画笔工具时,双指缩放可能造成干扰。
开启::允许在触控笔模式下进行双指缩放
关闭: 禁止在触控笔模式下进行双指缩放",DEFAULT_WHEELZOOM_NAME:"鼠标滚轮缩放页面",DEFAULT_WHEELZOOM_DESC:`开启:鼠标滚轮为缩放页面,${labelCTRL()}+鼠标滚轮为滚动页面关闭:鼠标滚轮为滚动页面,${labelCTRL()}+鼠标滚轮为缩放页面`,ZOOM_TO_FIT_NAME:"调节面板尺寸后自动缩放页面",ZOOM_TO_FIT_DESC:"调节面板尺寸后,自适应地缩放页面
开启:自动缩放。
关闭:禁用自动缩放。",ZOOM_TO_FIT_ONOPEN_NAME:"打开绘图时自动缩放页面",ZOOM_TO_FIT_ONOPEN_DESC:"打开绘图文件时,自适应地缩放页面
开启:自动缩放。
关闭:禁用自动缩放。",ZOOM_TO_FIT_MAX_LEVEL_NAME:"自动缩放的最高级别",ZOOM_TO_FIT_MAX_LEVEL_DESC:"自动缩放画布时,允许放大的最高级别。该值不能低于 0.5(50%)且不能超过 10(1000%)。",GRID_HEAD:"网格",GRID_DYNAMIC_COLOR_NAME:"动态网格颜色",GRID_DYNAMIC_COLOR_DESC:"开启:更改网格颜色以匹配画布颜色
关闭:将以下颜色用作网格颜色",GRID_COLOR_NAME:"网格颜色",GRID_OPACITY_NAME:"网格透明度",GRID_OPACITY_DESC:"网格透明度还将控制将箭头绑定到元素时绑定框的透明度。
设置网格的不透明度。 0 表示完全透明,100 表示完全不透明。",LASER_HEAD:"激光笔工具(更多工具 > 激光笔)",LASER_COLOR:"激光笔颜色",LASER_DECAY_TIME_NAME:"激光笔消失时间",LASER_DECAY_TIME_DESC:"单位是毫秒,默认是 1000(即 1 秒)。",LASER_DECAY_LENGTH_NAME:"激光笔轨迹长度",LASER_DECAY_LENGTH_DESC:"默认是 50。",LINKS_HEAD:"链接 & 以内部链接形式嵌入到绘图中的 Markdown 文档(MD-Transclusion)& 待办任务(Todo)",LINKS_HEAD_DESC:"包括:链接的打开和显示,MD-Transclusion 的显示,Todo 的显示等设置。",LINKS_DESC:`按住 ${labelCTRL()} 并点击包含 [[链接]]
的文本元素可以打开其中的链接。如果所选文本元素包含多个 [[有效的内部链接]]
,只会打开第一个链接;如果所选文本元素包含有效的 URL 链接(如 https://
或 http://
),插件会在浏览器中打开链接。
链接的源文件被重命名时,绘图中相应的 [[内部链接]]
也会同步更新。若您不愿绘图中的链接外观因此而变化,可使用 [[内部链接|别名]]
。`,DRAG_MODIFIER_NAME:"修饰键",DRAG_MODIFIER_DESC:"在您按住点击链接或拖放元素时,可以触发某些行为。您可以为这些行为添加修饰键。Excalidraw 不会检查您的设置是否合理,因此请谨慎设置,避免冲突。以下选项在苹果和非苹果设备上区别很大,如果您在多个硬件平台上使用 Obsidian,需要分别进行设置。选项里的 4 个开关依次代表 "+(DEVICE.isIOS||DEVICE.isMacOS?"Shift, CMD, OPT, CONTROL.":"Shift, Ctrl, Alt, META (Win 键)。"),LONG_PRESS_DESKTOP_NAME:"长按打开(电脑端)",LONG_PRESS_DESKTOP_DESC:"长按(以毫秒为单位)打开在 Markdown 文件中嵌入的 Excalidraw 绘图。",LONG_PRESS_MOBILE_NAME:"长按打开(移动端)",LONG_PRESS_MOBILE_DESC:"长按(以毫秒为单位)打开在 Markdown 文件中嵌入的 Excalidraw 绘图。",DOUBLE_CLICK_LINK_OPEN_VIEW_MODE:"在查看模式下允许双击打开链接",FOCUS_ON_EXISTING_TAB_NAME:"聚焦于当前标签页",FOCUS_ON_EXISTING_TAB_DESC:"当打开一个链接时,如果该文件已经打开,Excalidraw 将会聚焦到现有的标签页上 启用这个设置会在文件已经打开的情况下覆盖“重用相邻窗格”的设置。",SECOND_ORDER_LINKS_NAME:"显示二级链接",SECOND_ORDER_LINKS_DESC:"在 Excalidraw 中点击链接时显示链接。二级链接是指指向被点击链接的反向链接当使用图标连接相似的笔记时,二级链接可以让你直接到达相关笔记,而不需要两次点击。请观看 这个 YouTube Shorts 视频 以了解更多信息。",ADJACENT_PANE_NAME:"在相邻面板中打开",ADJACENT_PANE_DESC:`按住 ${labelCTRL()}+SHIFT 并点击绘图里的内部链接时,插件默认会在新面板中打开该链接。
若开启此项,Excalidraw 会先尝试寻找已有的相邻面板(按照右侧、左侧、上方、下方的顺序),并在其中打开该链接。如果找不到,再在新面板中打开。`,MAINWORKSPACE_PANE_NAME:"在主工作区中打开",MAINWORKSPACE_PANE_DESC:`按住 ${labelCTRL()}+SHIFT 并点击绘图里的内部链接时,插件默认会在当前窗口的新面板中打开该链接。
若开启此项,Excalidraw 会在主工作区的面板中打开该链接。`,LINK_BRACKETS_NAME:"在链接的两侧显示 [[中括号]]
",LINK_BRACKETS_DESC:`文本元素处于预览(PREVIEW)模式时,在内部链接的两侧显示中括号。
您可为某个绘图单独设置此项,方法是在其 frontmatter 中添加形如 ${FRONTMATTER_KEYS["link-brackets"].name}: true/false
的键值对。`,LINK_PREFIX_NAME:"内部链接的前缀",LINK_PREFIX_DESC:`文本元素处于预览(PREVIEW)模式时,如果其中包含链接,则添加此前缀。
您可为某个绘图单独设置此项,方法是在其 frontmatter 中添加形如 ${FRONTMATTER_KEYS["link-prefix"].name}: "📍 "
的键值对。`,URL_PREFIX_NAME:"外部链接的前缀",URL_PREFIX_DESC:`文本元素处于预览(PREVIEW)模式时,如果其中包含外部链接,则添加此前缀。
您可为某个绘图单独设置此项,方法是在其 frontmatter 中添加形如 ${FRONTMATTER_KEYS["url-prefix"].name}: "🌐 "
的键值对。`,PARSE_TODO_NAME:"待办任务(Todo)",PARSE_TODO_DESC:"将文本元素中的 - [ ]
和 - [x]
前缀显示为方框。",TODO_NAME:"未完成项目",TODO_DESC:"未完成的待办项目的符号",DONE_NAME:"已完成项目",DONE_DESC:"已完成的待办项目的符号",HOVERPREVIEW_NAME:"鼠标悬停预览内部链接",HOVERPREVIEW_DESC:`开启:在 Excalidraw 阅读模式(View)下,鼠标悬停在 [[内部链接]]
上即可预览;而在普通模式(Normal)下,鼠标悬停在内部链接右上角的蓝色标识上即可预览。
关闭:鼠标悬停在 [[内部链接]]
上,并且按住 ${labelCTRL()} 才能预览。`,LINKOPACITY_NAME:"链接标识的透明度",LINKOPACITY_DESC:"含有链接的元素,其右上角的链接标识的透明度。介于 0(全透明)到 1(不透明)之间。",LINK_CTRL_CLICK_NAME:`按住 ${labelCTRL()} 并点击含有 [[链接]] 或 [别名](链接) 的文本来打开链接`,LINK_CTRL_CLICK_DESC:"如果此功能影响到您使用某些原版 Excalidraw 功能,可将其关闭。关闭后,您可以使用 ${labelCTRL()} + ${labelMETA()} 或者元素右上角的链接指示器来打开链接。",TRANSCLUSION_WRAP_NAME:"MD-Transclusion 的折行方式",TRANSCLUSION_WRAP_DESC:"中的 number 表示嵌入的文本溢出时,在第几个字符处进行折行。
此开关控制具体的折行方式。若开启,则严格在 number 处折行,禁止溢出;若关闭,则允许在 number 位置后最近的空格处折行。",TRANSCLUSION_DEFAULT_WRAP_NAME:"MD-Transclusion 的默认折行位置",TRANSCLUSION_DEFAULT_WRAP_DESC:"除了通过 ![[doc#^block]]{number}
中的 number 来控制折行位置,您也可以在此设置 number 的默认值。
一般设为 0 即可,表示不设置固定的默认值,这样当您需要嵌入文档到便签中时,Excalidraw 能更好地帮您自动处理。",PAGE_TRANSCLUSION_CHARCOUNT_NAME:"MD-Transclusion 的最大显示字符数",PAGE_TRANSCLUSION_CHARCOUNT_DESC:"以 ![[内部链接]]
或 
的形式将文档以文本形式嵌入到绘图中时,该文档在绘图中可显示的最大字符数量。",QUOTE_TRANSCLUSION_REMOVE_NAME:"隐藏 MD-Transclusion 行首的引用符号",QUOTE_TRANSCLUSION_REMOVE_DESC:"不显示 MD-Transclusion 中每一行行首的 > 符号,以提高纯文本 MD-Transclusion 的可读性。
开启:隐藏 > 符号
关闭:不隐藏 > 符号(注意,由于 Obsidian API 的原因,首行行首的 > 符号不会被隐藏)",GET_URL_TITLE_NAME:"使用 iframly 获取页面标题",GET_URL_TITLE_DESC:"拖放链接到 Excalidraw 时,使用 http://iframely.server.crestify.com/iframely?url=
来获取页面的标题。",PDF_TO_IMAGE:"以图像形式嵌入到绘图中的 PDF 文档",PDF_TO_IMAGE_SCALE_NAME:"分辨率",PDF_TO_IMAGE_SCALE_DESC:"分辨率越高,图像越清晰,但内存占用也越大。此外,如果您想要复制这些图像到 Excalidraw.com,可能会超出其 2MB 大小的限制。",EMBED_TOEXCALIDRAW_HEAD:"嵌入到绘图中的文件",EMBED_TOEXCALIDRAW_DESC:"包括:以图像形式嵌入到绘图中的 PDF 文档、以交互形式嵌入到绘图中的 Markdown 文档(MD-Embeddable)、以图像形式嵌入的 Markdown 文档(MD-Embed)等。",MD_HEAD:"以图像形式嵌入到绘图中的 Markdown 文档(MD-Embed)",MD_EMBED_CUSTOMDATA_HEAD_NAME:"以交互形式嵌入到绘图中的 Markdown 文档(MD-Embeddable)",MD_EMBED_CUSTOMDATA_HEAD_DESC:"以下设置只会影响以后的嵌入。已存在的嵌入保持不变。嵌入框的主题设置位于 “Excalidraw 外观和行为” 部分。",MD_EMBED_SINGLECLICK_EDIT_NAME:"单击以编辑嵌入的 markdown。",MD_EMBED_SINGLECLICK_EDIT_DESC:"单击嵌入的 markdown 文件以进行编辑。 当此功能关闭时,markdown 文件将首先以预览模式打开,然后在您再次单击时切换到编辑模式。",MD_TRANSCLUDE_WIDTH_NAME:"MD-Embed 的默认宽度",MD_TRANSCLUDE_WIDTH_DESC:"MD-Embed 的宽度。该选项会影响到折行,以及图像元素的宽度。
您可为绘图中的某个 MD-Embed 单独设置此项,方法是将绘图切换至 Markdown 模式,并修改相应的 [[Embed 文件名#标题|宽度x最大高度]]
。",MD_TRANSCLUDE_HEIGHT_NAME:"MD-Embed 的默认最大高度",MD_TRANSCLUDE_HEIGHT_DESC:"MD-Embed 的高度取决于 Markdown 文档内容的多少,但最大不会超过该值。
您可为绘图中的某个 MD-Embed 单独设置此项,方法是将绘图切换至 Markdown 模式,并修改相应的 [[Embed 文件名#^块引ID|宽度x最大高度]]
。",MD_DEFAULT_FONT_NAME:"MD-Embed 的默认字体",MD_DEFAULT_FONT_DESC:"可以设为 Virgil
,Casadia
或其他有效的 .ttf/.woff/.woff2 字体文件(如 我的字体.woff2
)。
您可为某个 MD-Embed 单独设置此项,方法是在其源文件的 frontmatter 中添加形如 excalidraw-font: 字体名或文件名
的键值对。",MD_DEFAULT_COLOR_NAME:"MD-Embed 的默认文本颜色",MD_DEFAULT_COLOR_DESC:"可以填写 HTML 颜色名,如 steelblue(参考 HTML Color Names),或者有效的 16 进制颜色值,例如 #e67700,或者任何其他有效的 CSS 颜色。
您可为某个 MD-Embed 单独设置此项,方法是在其源文件的 frontmatter 中添加形如 excalidraw-font-color: steelblue
的键值对。",MD_DEFAULT_BORDER_COLOR_NAME:"MD-Embed 的默认边框颜色",MD_DEFAULT_BORDER_COLOR_DESC:"可以填写 HTML 颜色名,如 steelblue(参考 HTML Color Names),或者有效的 16 进制颜色值,例如 #e67700,或者任何其他有效的 CSS 颜色。
您可为某个 MD-Embed 单独设置此项,方法是在其源文件的 frontmatter 中添加形如 excalidraw-border-color: gray
的键值对。
如果您不想要边框,请留空。",MD_CSS_NAME:"MD-Embed 的默认 CSS 样式表",MD_CSS_DESC:"MD-Embed 图像所采用的 CSS 样式表文件名。需包含扩展名,例如 md-embed.css。允许使用 Markdown 文件(如 md-embed-css.md),但其内容应符合 CSS 语法。
如果您要查询 CSS 所作用的 HTML 节点,请在 Obsidian 开发者控制台(Ctrl+Shift+I)中键入命令:ExcalidrawAutomate.mostRecentMarkdownSVG
—— 这将显示 Excalidraw 最近生成的 SVG。
此外,在 CSS 中不能任意地设置字体,您一般只能使用系统默认的标准字体(详见 README),但可以通过上面的设置来额外添加一个自定义字体。
您可为某个 MD-Embed 单独设置此项,方法是在其源文件的 frontmatter 中添加形如 excalidraw-css: 库中的 CSS 文件或 CSS 片段
的键值对。",EMBED_HEAD:"嵌入到 Markdown 文档中的绘图",EMBED_DESC:"包括:嵌入到 Markdown 文档中的绘图的预览图类型(SVG、PNG)、源文件类型(Excalidraw 绘图文件、SVG、PNG)、缓存、图像大小、图像主题,以及嵌入的语法等。\n 此外,还有自动导出 SVG 或 PNG 文件并保持与绘图文件状态同步的设置。",EMBED_CANVAS:"Obsidian 白板支持",EMBED_CANVAS_NAME:"沉浸式嵌入",EMBED_CANVAS_DESC:"当嵌入绘图到 Obsidian 白板中时,隐藏元素的边界和背景。注意:如果想要背景完全透明,您依然需要在 Excalidraw 中设置“导出的图像不包含背景”。",EMBED_CACHING:"预览图缓存",EXPORT_SUBHEAD:"导出",EMBED_SIZING:"图像尺寸",EMBED_THEME_BACKGROUND:"图像的主题和背景色",EMBED_IMAGE_CACHE_NAME:"为嵌入到 Markdown 文档中的绘图创建预览图缓存",EMBED_IMAGE_CACHE_DESC:"可提高下次嵌入的速度。但如果绘图中又嵌入了子绘图,当子绘图改变时,您需要打开子绘图并手动保存,才能够更新父绘图的预览图。",SCENE_IMAGE_CACHE_NAME:"缓存场景中嵌套的 Excalidraw",SCENE_IMAGE_CACHE_DESC:"缓存场景中嵌套的 Excalidraw 以加快场景渲染速度。这将加快渲染过程,特别是在您的场景中有深度嵌套的 Excalidraw 时。Excalidraw 将智能地尝试识别嵌套 Excalidraw 的子元素是否发生变化,并更新缓存。 如果您怀疑缓存未能正确更新,您可能需要关闭此功能。",EMBED_IMAGE_CACHE_CLEAR:"清除缓存",BACKUP_CACHE_CLEAR:"清除备份",BACKUP_CACHE_CLEAR_CONFIRMATION:"该操作将删除所有绘图文件的备份。备份是绘图文件损坏时的一种补救手段。每次您打开 Obsidian 时,本插件会自动清理无用的备份。您确定要现在删除所有备份吗?",EMBED_REUSE_EXPORTED_IMAGE_NAME:"将之前已导出的图像作为预览图",EMBED_REUSE_EXPORTED_IMAGE_DESC:"该选项与自动导出 SVG/PNG 副本选项配合使用。如果嵌入到 Markdown 文档中的绘图文件存在同名的 SVG/PNG 副本,则将其作为预览图,而不再重新生成。
该选项能够提高 Markdown 文档的打开速度,尤其是当嵌入到 Markdown 文档中的绘图文件中含有大量图像或 MD-Embed 时。但是,该选项也可能导致预览图无法立即响应你对绘图文件或者 Obsidian 主题风格的修改。
该选项仅作用于嵌入到 Markdown 文档中的绘图。该选项无法提升绘图文件的打开速度。详见此说明。",EMBED_PREVIEW_IMAGETYPE_NAME:"预览图的格式",EMBED_PREVIEW_IMAGETYPE_DESC:"Native SVG:高品质、可交互。
SVG:高品质、不可交互。
PNG:高性能、不可交互。",PREVIEW_MATCH_OBSIDIAN_NAME:"预览图匹配 Obsidian 主题",PREVIEW_MATCH_OBSIDIAN_DESC:"开启此项,则当 Obsidian 处于黑暗模式时,嵌入到 Markdown 文档中的绘图的预览图也会以黑暗模式渲染;当 Obsidian 处于明亮模式时,预览图也会以明亮模式渲染。
您可能还需要关闭“导出的图像包含背景”开关,来获得与 Obsidian 更加协调的观感。",EMBED_WIDTH_NAME:"预览图的默认宽度",EMBED_WIDTH_DESC:"嵌入到 Markdown 文档中的绘图的预览图的默认宽度。该选项也适用于鼠标悬停时浮现的预览图。
您可为某个要嵌入到 Markdown 文档中的绘图文件单独设置此项,方法是修改相应的内部链接格式为形如 ![[drawing.excalidraw|100]]
或 [[drawing.excalidraw|100x100]]
。",EMBED_HEIGHT_NAME:"预览图的默认高度",EMBED_HEIGHT_DESC:"嵌入到 Markdown 文档中的绘图的预览图得默认高度。该选项也适用于实时预览编辑和阅读模式,以及悬停预览。您可以在使用 ![[drawing.excalidraw|100]]
或者 [[drawing.excalidraw|100x100]]
格式在嵌入图像时指定自定义高度。",EMBED_TYPE_NAME:"“嵌入绘图到当前 Markdown 文档中”系列命令的源文件类型",EMBED_TYPE_DESC:"在命令面板中执行“嵌入绘图到当前 Markdown 文档中”系列命令时,要嵌入绘图文件本身,还是嵌入其 PNG 或 SVG 副本。
如果您想选择 PNG 或 SVG 副本,需要先开启下方的自动导出 PNG / SVG 副本。
如果您选择了 PNG 或 SVG 副本,当副本不存在时,该命令将会插入一条损坏的链接,您需要打开绘图文件并手动导出副本才能修复 —— 也就是说,该选项不会自动帮您生成 PNG/SVG 副本,而只会引用已有的 PNG/SVG 副本。",EMBED_MARKDOWN_COMMENT_NAME:"将链接作为注释嵌入",EMBED_MARKDOWN_COMMENT_DESC:"在图像下方以 Markdown 链接的形式嵌入原始 Excalidraw 文件的链接,例如:%%[[drawing.excalidraw]]%%
。
除了添加 Markdown 注释之外,您还可以选择嵌入的 SVG 或 PNG,并使用命令面板:'Excalidraw: 打开 Excalidraw 绘图
'来打开该绘图",EMBED_WIKILINK_NAME:"“嵌入绘图到当前 Markdown 文档中”系列命令产生的内部链接类型",EMBED_WIKILINK_DESC:"开启:将产生 ![[Wiki 链接]]
。关闭:将产生 
。",EXPORT_PNG_SCALE_NAME:"导出的 PNG 图像的比例",EXPORT_PNG_SCALE_DESC:"导出的 PNG 图像的大小比例",EXPORT_BACKGROUND_NAME:"导出的图像包含背景",EXPORT_BACKGROUND_DESC:"如果关闭,将导出透明背景的图像。",EXPORT_PADDING_NAME:"导出的图像的空白边距",EXPORT_PADDING_DESC:"导出的 SVG/PNG 图像四周的空白边距(单位:像素)。对于裁剪框架引用,间距被设置为 0。
增加该值,可以避免在导出图像时,靠近图像边缘的图形被裁掉。
您可为某个绘图单独设置此项,方法是在其 frontmatter 中添加形如 excalidraw-export-padding: 5
的键值对。",EXPORT_THEME_NAME:"导出的图像匹配主题",EXPORT_THEME_DESC:"导出与绘图的黑暗/明亮主题匹配的图像。如果关闭,在黑暗主题下导出的图像将和明亮主题一样。",EXPORT_EMBED_SCENE_NAME:"在导出的图片中嵌入场景",EXPORT_EMBED_SCENE_DESC:"在导出的图像中嵌入 Excalidraw 场景。可以通过在文件级别添加
excalidraw-export-embed-scene: true/false
frontmatter 元数据键来覆盖此设置。此设置仅在您下次(重新)打开绘图时生效。",EXPORT_HEAD:"导出设置",EXPORT_SYNC_NAME:"保持 SVG/PNG 文件名与绘图文件同步",EXPORT_SYNC_DESC:"打开后,当绘图文件被重命名时,插件将同步更新同文件夹下的同名 .SVG 和 .PNG 文件。当绘图文件被删除时,插件将自动删除同文件夹下的同名 .SVG 和 .PNG 文件。",EXPORT_SVG_NAME:"自动导出 SVG 副本",EXPORT_SVG_DESC:"自动导出和绘图文件同名的 SVG 副本。插件会将副本保存到绘图文件所在的文件夹中。在文档中嵌入这个 SVG 文件,相比直接嵌入绘图文件,具有更强的跨平台能力。
此开关开启时,每次您编辑 Excalidraw 绘图,其 SVG 文件副本都会同步更新。
您可为某个绘图单独设置此项,方法是在其 frontmatter 中添加形如 excalidraw-autoexport: none/both/svg/png
的键值对",EXPORT_PNG_NAME:"自动导出 PNG 副本",EXPORT_PNG_DESC:"和“自动导出 SVG 副本”类似,但是导出格式为 *.PNG。",EXPORT_BOTH_DARK_AND_LIGHT_NAME:"同时导出黑暗和明亮主题风格的图像",EXPORT_BOTH_DARK_AND_LIGHT_DESC:"若开启,Excalidraw 将导出两个文件:filename.dark.png(或 filename.dark.svg)和 filename.light.png(或 filename.light.svg)。
该选项可作用于“自动导出 SVG 副本”、“自动导出 PNG 副本”,以及其他的手动的导出命令。",COMPATIBILITY_HEAD:"兼容性设置",COMPATIBILITY_DESC:"如果没有特殊原因(例如您想同时在 VSCode / Logseq 和 Obsidian 中使用 Excalidraw),建议您使用 Markdown 格式的绘图文件,而不是旧的 excalidraw.com 格式,因为本插件的很多功能在旧格式中无法使用。",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME:"代码格式化(Linting)兼容性",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC:"Excalidraw 对 # Excalidraw Data
下的文件结构非常敏感。文档的自动代码格式化(linting)可能会在 Excalidraw 数据中造成错误。虽然我已经努力使数据加载对自动代码格式化(linting)变更具有一定的抗性,但这种解决方案并非万无一失。
最好的方法是避免使用不同的插件对 Excalidraw 文档进行自动更改。
如果出于某些合理的原因,您决定忽略我的建议并配置了 Excalidraw 文件的自动代码格式化,那么可以使用这个设置
## Text Elements
部分对空行很敏感。一种常见的代码格式化是在章节标题后添加一个空行。但对于 Excalidraw 来说,这将破坏/改变您绘图中的第一个文本元素。为了解决这个问题,您可以启用这个设置。启用后 Excalidraw 将在 ## Text Elements
的开头添加一个虚拟元素,供自动代码格式化工具修改。",PRESERVE_TEXT_AFTER_DRAWING_NAME:"Zotero 和脚注(footnotes)的兼容性",PRESERVE_TEXT_AFTER_DRAWING_DESC:"保留 Markdown 文件中 ## Drawing
部分之后的文本内容。保存非常大的绘图时,这可能会造成微小的性能影响。",DEBUGMODE_NAME:"开启 debug 信息",DEBUGMODE_DESC:"我建议在启用/禁用此设置后重新启动 Obsidian。这将在控制台中启用调试消息。这对于排查问题很有帮助。如果您在使用插件时遇到问题,请启用此设置,重现问题,并在 GitHub 上提出的问题中包含控制台日志。",SLIDING_PANES_NAME:"Sliding panes 插件支持",SLIDING_PANES_DESC:"设置此项后需要重启 Obsidian 才能生效。
如果您使用 Sliding Panes 插件,您可以开启此项来使 Excalidraw 绘图兼容此插件。
注意,开启后会产生一些与 Obsidian 工作空间的兼容性问题。
另外,Obsidian 现在已经原生支持 Stack Tabs(堆叠标签),基本实现了 Sliding Panes 插件的功能。",EXPORT_EXCALIDRAW_NAME:"自动导出 Excalidraw 旧格式副本",EXPORT_EXCALIDRAW_DESC:"和“自动导出 SVG 副本”类似,但是导出格式为 *.excalidraw。",SYNC_EXCALIDRAW_NAME:"新旧格式绘图文件的内容保持同步",SYNC_EXCALIDRAW_DESC:"如果旧格式(*.excalidraw)绘图文件的修改日期比新格式(*.md)更新,则根据旧格式文件的内容来更新新格式文件。",COMPATIBILITY_MODE_NAME:"以旧格式创建新绘图",COMPATIBILITY_MODE_DESC:"⚠️ 慎用!99.9% 的情况下您不需要开启此项。开启此功能后,您通过功能区按钮、命令面板、文件浏览器等创建的绘图都将是旧格式(*.excalidraw)。此外,您打开旧格式绘图文件时将不再收到警告消息。",MATHJAX_NAME:"MathJax (LaTeX) 的 javascript 库服务器",MATHJAX_DESC:"如果您在绘图中使用 LaTeX,插件需要从服务器获取并加载一个 javascript 库。如果您的网络无法访问某些库服务器,可以尝试通过此选项更换库服务器。更改此选项后,您可能需要重启 Obsidian 来使其生效。",LATEX_DEFAULT_NAME:"插入 LaTeX 时的默认表达式",LATEX_DEFAULT_DESC:"允许留空。允许使用类似 \\color{white}
的格式化表达式。",NONSTANDARD_HEAD:"非 Excalidraw.com 官方支持的特性",NONSTANDARD_DESC:"这些特性不受 Excalidraw.com 官方支持。如果在 Excalidraw.com 导入绘图,这些特性将会发生不可预知的变化。\n 包括:自定义画笔工具的数量,自定义字体等。",RENDER_TWEAK_HEAD:"渲染优化",MAX_IMAGE_ZOOM_IN_NAME:"最大图像放大倍数",MAX_IMAGE_ZOOM_IN_DESC:"为了节省内存,并且因为 Apple Safari (Obsidian on iOS) 有一些硬编码的限制,Excalidraw.com 在放大时会限制图像和大型对象的最大分辨率。您可以使用乘数来覆盖这个限制。这意味着将乘以 Excalidraw 默认设置的限制,乘数越大,图像放大分辨率就越高,但也会消耗更多内存。我建议尝试多个值来设置这个参数。当您放大一个较大的 PNG 图像时,如果图像突然从视图中消失,那就说明您已经达到了极限。默认值为 1。此设置对 iOS 无效。",CUSTOM_PEN_HEAD:"自定义画笔",CUSTOM_PEN_NAME:"自定义画笔工具的数量",CUSTOM_PEN_DESC:"在画布上的 Obsidian 菜单按钮旁边切换自定义画笔。长按(双击)画笔按钮可以修改其样式。",EXPERIMENTAL_HEAD:"杂项",EXPERIMENTAL_DESC:"包括:默认的 LaTeX 公式,字段建议,绘图文件的类型标识符,OCR 等设置。",EA_HEAD:"Excalidraw 自动化",EA_DESC:"ExcalidrawAutomate 是用于 Excalidraw 自动化脚本的 API,但是目前说明文档还不够完善,建议阅读 ExcalidrawAutomate.d.ts 文件源码,参考 ExcalidrawAutomate How-to 网页(不过该网页有一段时间未更新了),并开启下方的字段建议。字段建议功能能够在您键入时提示可用的函数及相应的参数,而且附带描述,相当于最新的“文档”。",FIELD_SUGGESTER_NAME:"开启字段建议",FIELD_SUGGESTER_DESC:"开启后,当您在编辑器中输入 excalidraw-
或者 ea.
时,会弹出一个带有函数说明的自动补全提示菜单。
该功能借鉴了 Breadcrumbs 和 Templater 插件。",STARTUP_SCRIPT_NAME:"起动脚本",STARTUP_SCRIPT_DESC:"插件启动时将自动执行该脚本。可用于为您的 Excalidraw 自动化脚本设置钩子。起动脚本请用 javascript 代码编写,并保存为 Markdown 格式。",STARTUP_SCRIPT_BUTTON_CREATE:"创建起动脚本",STARTUP_SCRIPT_BUTTON_OPEN:"打开起动脚本",STARTUP_SCRIPT_EXISTS:"起动脚本已存在",FILETYPE_NAME:"在文件浏览器中为 excalidraw.md 文件添加类型标识符(如 ✏️)",FILETYPE_DESC:"可通过下一项设置来自定义类型标识符。",FILETAG_NAME:"excalidraw.md 文件的类型标识符",FILETAG_DESC:"要显示为类型标识符的 emoji 或文本。",INSERT_EMOJI:"插入 emoji",LIVEPREVIEW_NAME:"嵌入绘图到文档时,模拟嵌入图像的语法",LIVEPREVIEW_DESC:"开启此项,则可在 Obsidian 实时预览模式的编辑视图下,用形如 ![[绘图|宽度|样式]]
的语法来嵌入绘图。
该选项不会在已打开的文档中立刻生效 —— 你需要重新打开此文档来使其生效。",FADE_OUT_EXCALIDRAW_MARKUP_NAME:"淡化 Excalidraw 标记",FADE_OUT_EXCALIDRAW_MARKUP_DESC:"在 Markdown 视图模式下,在 Markdown 注释 %% 之后的部分会淡化。文本仍然存在,但视觉杂乱感会减少。请注意,您可以将 %% 放在 # Text Elements 行的上一行,这样,整个 Excalidraw Markdown 都会淡化,包括 # Text Elements。 副作用是您将无法在其他 Markdown 笔记中引用文本块,即 %% 注释部分之后的内容。这应该不是大问题。如果您想编辑 Excalidraw Markdown 脚本,只需切换到 Markdown 视图模式并暂时删除 %% 注释。",EXCALIDRAW_PROPERTIES_NAME:"将 Excalidraw 属性加载到 Obsidian 的自动提示中",EXCALIDRAW_PROPERTIES_DESC:"切换此设置以在插件启动时将 Excalidraw 文档属性加载到 Obsidian 的属性自动提示中。启用此功能简化了 Excalidraw 前置属性的使用,使您能够利用许多强大的设置。如果您不希望自动加载这些属性,您可以禁用此功能,但您将需要手动从自动提示中移除任何不需要的属性。请注意,启用此设置需要重启插件,因为属性是在启动时加载的。",FONTS_HEAD:"字体",FONTS_DESC:"配置本地字体并下载的 CJK 字体以供 Excalidraw 使用。",CUSTOM_FONT_HEAD:"本地字体",ENABLE_FOURTH_FONT_NAME:"为文本元素启用本地字体",ENABLE_FOURTH_FONT_DESC:"启用此选项将在文本元素的属性面板的字体列表中添加一个本地字体。请注意,使用这个本地字体可能会破坏平台的独立性。使用自定义字体的文件在不同的库中打开或在以后打开时,根据字体设置,可能会以不同的方式呈现。此外,在excalidraw.com 或其他 Excalidraw 版本中,默认的本地字体字体将使用系统字体。",FOURTH_FONT_NAME:"本地字体文件",FOURTH_FONT_DESC:"从您的库中选择一个 .otf、.ttf、.woff 或 .woff2 字体文件作为本地字体使用。如果没有选择文件,Excalidraw 将默认使用 Virgil 字体。为了获得最佳性能,建议使用 .woff2 文件,因为当导出到 SVG 格式的图像时,Excalidraw 只会编码必要的字形。其他字体格式将在导出文件中嵌入整个字体,可能会导致文件大小显著增加。译者注:您可以在Free Font获取免费商用中文手写字体。",OFFLINE_CJK_NAME:"离线 CJK 字体支持",OFFLINE_CJK_DESC:'您在这里所做的更改将在重启 Obsidian 后生效。
\n Excalidraw.com 提供手写风格的 CJK 字体。默认情况下,这些字体并未在插件中本地包含,而是从互联网获取。\n 如果您希望 Excalidraw 完全本地化,以便在没有互联网连接的情况下使用,可以从 GitHub 下载所需的字体文件。\n 下载后,将内容解压到您的 Vault 中的一个文件夹内。
\n 预加载字体会影响启动性能。因此,您可以选择加载哪些字体。',CJK_ASSETS_FOLDER_NAME:"CJK 字体文件夹(區分大小寫!)",CJK_ASSETS_FOLDER_DESC:"您可以在此设置 CJK 字体文件夹的位置。例如,您可以选择将其放置在 Excalidraw/CJK Fonts
下。
\n 重要: 请勿将此文件夹设置为 Vault 根目录!请勿在此文件夹中放置其他字体。
\n 注意: 如果您使用 Obsidian Sync 并希望在设备之间同步这些字体文件,请确保 Obsidian Sync 设置为同步“所有其他文件类型”。",LOAD_CHINESE_FONTS_NAME:"启动时从文件加载中文字体",LOAD_JAPANESE_FONTS_NAME:"启动时从文件加载日文字体",LOAD_KOREAN_FONTS_NAME:"启动时从文件加载韩文字体",SCRIPT_SETTINGS_HEAD:"已安装脚本的设置",SCRIPT_SETTINGS_DESC:"有些 Excalidraw 自动化脚本包含设置项,当执行这些脚本时,它们会在该列表下添加设置项。",TASKBONE_HEAD:"Taskbone OCR(光学符号识别)",TASKBONE_DESC:"这是一个将 OCR 融入 Excalidraw 的实验性功能。请注意,Taskbone 是一项独立的外部服务,而不是由 Excalidraw 或 Obsidian-excalidraw-plugin 项目提供的。OCR 能够对画布上用自由画笔工具写下的涂鸦或者嵌入的图像进行文本识别,并将识别出来的文本写入绘图文件的 frontmatter,同时复制到剪贴板。之所以要写入 frontmatter 是为了便于您在 Obsidian 中能够搜索到这些文本。注意,识别的过程不是在本地进行的,而是通过在线 API,图像会被上传到 taskbone 的服务器(仅用于识别目的)。如果您介意,请不要使用这个功能。",TASKBONE_ENABLE_NAME:"启用 Taskbone",TASKBONE_ENABLE_DESC:"启用意味着您同意 Taskbone 条款及细则 以及 隐私政策。",TASKBONE_APIKEY_NAME:"Taskbone API Key",TASKBONE_APIKEY_DESC:"Taskbone 的免费 API key 提供了一定数量的每月识别次数。如果您非常频繁地使用此功能,或者想要支持 Taskbone 的开发者(您懂的,没有人能用爱发电,Taskbone 开发者也需要投入资金来维持这项 OCR 服务)您可以到 taskbone.com 购买一个商用 API key。购买后请将它填写到旁边这个文本框里,替换掉原本自动生成的免费 API key。",HOTKEY_PRESS_COMBO_NANE:"按下您的组合键",HOTKEY_PRESS_COMBO_DESC:"请按下所需的组合键",HOTKEY_BUTTON_ADD_OVERRIDE:"添加新的(热键)覆写",HOTKEY_BUTTON_REMOVE:"移除",SELECT_FILE:"选择一个文件后按回车。",SELECT_COMMAND:"选择一个命令后按回车。",SELECT_FILE_WITH_OPTION_TO_SCALE:`选择一个文件后按回车,或者 SHIFT+${labelMETA()}+Enter 以 100% 尺寸插入。`,NO_MATCH:"查询不到匹配的文件。",NO_MATCHING_COMMAND:"查询不到匹配的命令。",SELECT_FILE_TO_LINK:"选择要插入(以内部链接形式嵌入)到当前绘图中的文件。",SELECT_COMMAND_PLACEHOLDER:"选择要插入到当前绘图中的命令。",SELECT_DRAWING:"选择要插入(以图像形式嵌入)到当前绘图中的图像或绘图文件。",TYPE_FILENAME:"键入要选择的绘图名称。",SELECT_FILE_OR_TYPE_NEW:"选择已有绘图,或者键入新绘图文件的名称,然后按回车。",SELECT_TO_EMBED:"选择要插入(嵌入)到当前 Markdown 文档中的绘图。",SELECT_MD:"选择要插入(以图像形式嵌入)到当前绘图中的 Markdown 文档。",SELECT_PDF:"选择要插入(以图像形式嵌入)到当前绘图中的 PDF 文档。",PDF_PAGES_HEADER:"页码范围",PDF_PAGES_DESC:"示例:1, 3-5, 7, 9-11",TYPE_SECTION:"输入章节名称(标题)进行选择",SELECT_SECTION_OR_TYPE_NEW:"选择现有章节(标题)或输入新章节(标题)的名称,然后按 Enter。",INVALID_SECTION_NAME:"无效的章节名称(标题)",EMPTY_SECTION_MESSAGE:"输入章节(标题)名称以创建",INFINITE_LOOP_WARNING:"EXCALIDRAW 警告\n停止加载嵌入的图像,因为此文件中存在死循环:\n",SCRIPT_EXECUTION_ERROR:"脚本运行错误。请在开发者控制台中查看错误信息。",LOAD_FROM_BACKUP:"Excalidraw 文件已损坏。尝试从备份文件中加载。",FONT_LOAD_SLOW:"正在加载字体...\n\n 这比预期花费的时间更长。如果这种延迟经常发生,您可以将字体下载到您的 Vault 中。\n\n(点击=忽略提示,右键=更多信息)",FONT_INFO_TITLE:"从互联网加载 v2.5.3 字体",FONT_INFO_DETAILED:`\n main.js
。默认情况下,CJK 字体将从互联网加载。\n 这通常不会造成问题,因为 Obsidian 在首次使用后会缓存这些文件。\n 说明:
\n \n
\n Excalidraw/${CJK_FONTS}
; 文件夹名称區分大小寫!)。对于 Obsidian Sync 用户:
\n 注意:
\n main.js
,这导致大型文件和复杂插件(如 Excalidraw)启动时间较慢。\n 对此带来的不便,我深表歉意。\n 0;this.bbox.L=i.isSet("lspace")?Math.max(0,this.length2em(i.get("lspace"))):MathMLSpace(r,e.lspace),this.bbox.R=i.isSet("rspace")?Math.max(0,this.length2em(i.get("rspace"))):MathMLSpace(r,e.rspace);var a=n.childIndex(t);if(0!==a){var o=n.childNodes[a-1];if(o.isEmbellished){var s=this.jax.nodeMap.get(o).getBBox();s.R&&(this.bbox.L=Math.max(0,this.bbox.L-s.R))}}}},t.prototype.getTeXSpacing=function(e,t){if(!t){var n=this.node.texSpacing();n&&(this.bbox.L=this.length2em(n))}if(e||t){var i=this.node.coreMO().attributes;i.isSet("lspace")&&(this.bbox.L=Math.max(0,this.length2em(i.get("lspace")))),i.isSet("rspace")&&(this.bbox.R=Math.max(0,this.length2em(i.get("rspace"))))}},t.prototype.isTopEmbellished=function(){return this.node.isEmbellished&&!(this.node.parent&&this.node.parent.isEmbellished)},t.prototype.core=function(){return this.jax.nodeMap.get(this.node.core())},t.prototype.coreMO=function(){return this.jax.nodeMap.get(this.node.coreMO())},t.prototype.getText=function(){var e,t,n="";if(this.node.isToken)try{for(var i=__values$p(this.node.childNodes),r=i.next();!r.done;r=i.next()){var a=r.value;a instanceof MmlNode_js_1$D.TextNode&&(n+=a.getText())}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return n},t.prototype.canStretch=function(e){if(this.stretch=FontData_js_1$n.NOSTRETCH,this.node.isEmbellished){var t=this.core();t&&t.node!==this.node&&t.canStretch(e)&&(this.stretch=t.stretch)}return 0!==this.stretch.dir},t.prototype.getAlignShift=function(){var e,t=(e=this.node.attributes).getList.apply(e,__spreadArray$i([],__read$p(MmlNode_js_1$D.indentAttributes),!1)),n=t.indentalign,i=t.indentshift,r=t.indentalignfirst,a=t.indentshiftfirst;return"indentalign"!==r&&(n=r),"auto"===n&&(n=this.jax.options.displayAlign),"indentshift"!==a&&(i=a),"auto"===i&&(i=this.jax.options.displayIndent,"right"!==n||i.match(/^\s*0[a-z]*\s*$/)||(i=("-"+i.trim()).replace(/^--/,""))),[n,this.length2em(i,this.metrics.containerWidth)]},t.prototype.getAlignX=function(e,t,n){return"right"===n?e-(t.w+t.R)*t.rscale:"left"===n?t.L*t.rscale:(e-t.w*t.rscale)/2},t.prototype.getAlignY=function(e,t,n,i,r){return"top"===r?e-n:"bottom"===r?i-t:"center"===r?(e-n-(t-i))/2:0},t.prototype.getWrapWidth=function(e){return this.childNodes[e].getBBox().w},t.prototype.getChildAlign=function(e){return"left"},t.prototype.percent=function(e){return LENGTHS.percent(e)},t.prototype.em=function(e){return LENGTHS.em(e)},t.prototype.px=function(e,t){return void 0===t&&(t=-LENGTHS.BIGDIMEN),LENGTHS.px(e,t,this.metrics.em)},t.prototype.length2em=function(e,t,n){return void 0===t&&(t=1),void 0===n&&(n=null),null===n&&(n=this.bbox.scale),LENGTHS.length2em(e,t,n,this.jax.pxPerEm)},t.prototype.unicodeChars=function(e,t){void 0===t&&(t=this.variant);var n=(0,string_js_1$5.unicodeChars)(e),i=this.font.getVariant(t);if(i&&i.chars){var r=i.chars;n=n.map((function(e){return((r[e]||[])[3]||{}).smp||e}))}return n},t.prototype.remapChars=function(e){return e},t.prototype.mmlText=function(e){return this.node.factory.create("text").setText(e)},t.prototype.mmlNode=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n=[]),this.node.factory.create(e,t,n)},t.prototype.createMo=function(e){var t=this.node.factory,n=t.create("text").setText(e),i=t.create("mo",{stretchy:!0},[n]);i.inheritAttributesFrom(this.node);var r=this.wrap(i);return r.parent=this,r},t.prototype.getVariantChar=function(e,t){var n=this.font.getChar(e,t)||[0,0,0,{unknown:!0}];return 3===n.length&&(n[3]={}),n},t.kind="unknown",t.styles={},t.removeStyles=["fontSize","fontFamily","fontWeight","fontStyle","fontVariant","font"],t.skipAttributes={fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,class:!0,href:!0,style:!0,xmlns:!0},t.BOLDVARIANTS={bold:{normal:"bold",italic:"bold-italic",fraktur:"bold-fraktur",script:"bold-script","sans-serif":"bold-sans-serif","sans-serif-italic":"sans-serif-bold-italic"},normal:{bold:"normal","bold-italic":"italic","bold-fraktur":"fraktur","bold-script":"script","bold-sans-serif":"sans-serif","sans-serif-bold-italic":"sans-serif-italic"}},t.ITALICVARIANTS={italic:{normal:"italic",bold:"bold-italic","sans-serif":"sans-serif-italic","bold-sans-serif":"sans-serif-bold-italic"},normal:{italic:"normal","bold-italic":"bold","sans-serif-italic":"sans-serif","sans-serif-bold-italic":"bold-sans-serif"}},t}(Wrapper_js_1.AbstractWrapper);function requireWrapper(){if(hasRequiredWrapper)return Wrapper$2;hasRequiredWrapper=1;var e,t=commonjsGlobal&&commonjsGlobal.__extends||(e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)},function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}),n=commonjsGlobal&&commonjsGlobal.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=commonjsGlobal&&commonjsGlobal.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(i=a.next()).done;)o.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o};Object.defineProperty(Wrapper$2,"__esModule",{value:!0}),Wrapper$2.SVGWrapper=void 0;var r=BBox$1,a=Wrapper$1,o=requireSvg(),s=function(e){function a(){var t=null!==e&&e.apply(this,arguments)||this;return t.element=null,t.dx=0,t}return t(a,e),a.prototype.toSVG=function(e){this.addChildren(this.standardSVGnode(e))},a.prototype.addChildren=function(e){var t,i,r=0;try{for(var a=n(this.childNodes),o=a.next();!o.done;o=a.next()){var s=o.value;s.toSVG(e);var l=s.getOuterBBox();s.element&&s.place(r+l.L*l.rscale,0),r+=(l.L+l.w+l.R)*l.rscale}}catch(e){t={error:e}}finally{try{o&&!o.done&&(i=a.return)&&i.call(a)}finally{if(t)throw t.error}}},a.prototype.standardSVGnode=function(e){var t=this.createSVGnode(e);return this.handleStyles(),this.handleScale(),this.handleBorder(),this.handleColor(),this.handleAttributes(),t},a.prototype.createSVGnode=function(e){this.element=this.svg("g",{"data-mml-node":this.node.kind});var t=this.node.attributes.get("href");if(t){e=this.adaptor.append(e,this.svg("a",{href:t}));var n=this.getOuterBBox(),i=n.h,r=n.d,a=n.w;this.adaptor.append(this.element,this.svg("rect",{"data-hitbox":!0,fill:"none",stroke:"none","pointer-events":"all",width:this.fixed(a),height:this.fixed(i+r),y:this.fixed(-r)}))}return this.adaptor.append(e,this.element),this.element},a.prototype.handleStyles=function(){var e=this;if(this.styles){var t=this.styles.cssText;t&&this.adaptor.setAttribute(this.element,"style",t),r.BBox.StyleAdjust.forEach((function(t){var n=i(t,3),r=n[0];if(0===n[2]){var a=e.styles.get(r);a&&(e.dx+=e.length2em(a,1,e.bbox.rscale))}}))}},a.prototype.handleScale=function(){if(1!==this.bbox.rscale){var e="scale("+this.fixed(this.bbox.rscale/1e3,3)+")";this.adaptor.setAttribute(this.element,"transform",e)}},a.prototype.handleColor=function(){var e,t=this.adaptor,n=this.node.attributes,i=n.getExplicit("mathcolor"),r=n.getExplicit("color"),a=n.getExplicit("mathbackground"),o=n.getExplicit("background"),s=(null===(e=this.styles)||void 0===e?void 0:e.get("background-color"))||"";if((i||r)&&(t.setAttribute(this.element,"fill",i||r),t.setAttribute(this.element,"stroke",i||r)),a||o||s){var l=this.getOuterBBox(),c=l.h,d=l.d,T=l.w,u=this.svg("rect",{fill:a||o||s,x:this.fixed(-this.dx),y:this.fixed(-d),width:this.fixed(T),height:this.fixed(c+d),"data-bgcolor":!0}),Q=t.firstChild(this.element);Q?t.insert(u,Q):t.append(this.element,u)}},a.prototype.handleBorder=function(){var e,t,r,o;if(this.styles){var s=Array(4).fill(0),l=Array(4),c=Array(4);try{for(var d=n([["Top",0],["Right",1],["Bottom",2],["Left",3]]),T=d.next();!T.done;T=d.next()){var u=i(T.value,2),Q=u[0],p=u[1],h="border"+Q,m=this.styles.get(h+"Width");m&&(s[p]=Math.max(0,this.length2em(m,1,this.bbox.rscale)),l[p]=this.styles.get(h+"Style")||"solid",c[p]=this.styles.get(h+"Color")||"currentColor")}}catch(t){e={error:t}}finally{try{T&&!T.done&&(t=d.return)&&t.call(d)}finally{if(e)throw e.error}}var f=a.borderFuzz,g=this.getOuterBBox(),b=i([g.h+f,g.d+f,g.w+f],3),_=b[0],y=b[1],E=b[2],L=[E,_],v=[-f,_],w=[E,-y],U=[-f,-y],x=[E-s[1],_-s[0]],M=[-f+s[3],_-s[0]],S=[E-s[1],-y+s[2]],C=[-f+s[3],-y+s[2]],O=[[v,L,x,M],[w,L,x,S],[U,w,S,C],[U,v,M,C]],H=this.adaptor.firstChild(this.element);try{for(var A=n([0,1,2,3]),I=A.next();!I.done;I=A.next())if(s[p=I.value]){var k=O[p];"dashed"===l[p]||"dotted"===l[p]?this.addBorderBroken(k,c[p],l[p],s[p],p):this.addBorderSolid(k,c[p],H)}}catch(e){r={error:e}}finally{try{I&&!I.done&&(o=A.return)&&o.call(A)}finally{if(r)throw r.error}}}},a.prototype.addBorderSolid=function(e,t,n){var r=this,a=this.svg("polygon",{points:e.map((function(e){var t=i(e,2),n=t[0],a=t[1];return"".concat(r.fixed(n-r.dx),",").concat(r.fixed(a))})).join(" "),stroke:"none",fill:t});n?this.adaptor.insert(a,n):this.adaptor.append(this.element,a)},a.prototype.addBorderBroken=function(e,t,n,r,a){var o="dotted"===n,s=r/2,l=i([[s,-s,-s,-s],[-s,s,-s,-s],[s,s,-s,s],[s,s,s,-s]][a],4),c=l[0],d=l[1],T=l[2],u=l[3],Q=i(e,2),p=Q[0],h=Q[1],m=p[0]+c-this.dx,f=p[1]+d,g=h[0]+T-this.dx,b=h[1]+u,_=Math.abs(a%2?b-f:g-m),y=o?Math.ceil(_/(2*r)):Math.ceil((_-r)/(4*r)),E=_/(4*y+1),L=this.svg("line",{x1:this.fixed(m),y1:this.fixed(f),x2:this.fixed(g),y2:this.fixed(b),"stroke-width":this.fixed(r),stroke:t,"stroke-linecap":o?"round":"square","stroke-dasharray":o?[1,this.fixed(_/y-.002)].join(" "):[this.fixed(E),this.fixed(3*E)].join(" ")}),v=this.adaptor,w=v.firstChild(this.element);w?v.insert(L,w):v.append(this.element,L)},a.prototype.handleAttributes=function(){var e,t,i,r,o=this.node.attributes,s=o.getAllDefaults(),l=a.skipAttributes;try{for(var c=n(o.getExplicitNames()),d=c.next();!d.done;d=c.next()){var T=d.value;!1!==l[T]&&(T in s||l[T]||this.adaptor.hasAttribute(this.element,T))||this.adaptor.setAttribute(this.element,T,o.getExplicit(T))}}catch(t){e={error:t}}finally{try{d&&!d.done&&(t=c.return)&&t.call(c)}finally{if(e)throw e.error}}if(o.get("class")){var u=o.get("class").trim().split(/ +/);try{for(var Q=n(u),p=Q.next();!p.done;p=Q.next()){var h=p.value;this.adaptor.addClass(this.element,h)}}catch(e){i={error:e}}finally{try{p&&!p.done&&(r=Q.return)&&r.call(Q)}finally{if(i)throw i.error}}}},a.prototype.place=function(e,t,n){if(void 0===n&&(n=null),(e+=this.dx)||t){n||(n=this.element,t=this.handleId(t));var i="translate(".concat(this.fixed(e),",").concat(this.fixed(t),")"),r=this.adaptor.getAttribute(n,"transform")||"";this.adaptor.setAttribute(n,"transform",i+(r?" "+r:""))}},a.prototype.handleId=function(e){if(!this.node.attributes||!this.node.attributes.get("id"))return e;var t=this.adaptor,n=this.getBBox().h,i=t.childNodes(this.element);i.forEach((function(e){return t.remove(e)}));var r=this.svg("g",{"data-idbox":!0,transform:"translate(0,".concat(this.fixed(-n),")")},i);return t.append(this.element,this.svg("text",{"data-id-align":!0},[this.text("")])),t.append(this.element,r),e+n},a.prototype.firstChild=function(){var e=this.adaptor,t=e.firstChild(this.element);return t&&"text"===e.kind(t)&&e.getAttribute(t,"data-id-align")&&(t=e.firstChild(e.next(t))),t&&"rect"===e.kind(t)&&e.getAttribute(t,"data-hitbox")&&(t=e.next(t)),t},a.prototype.placeChar=function(e,t,r,a,o){var s,l;void 0===o&&(o=null),null===o&&(o=this.variant);var c=e.toString(16).toUpperCase(),d=i(this.getVariantChar(o,e),4),T=d[2],u=d[3];if("p"in u){var Q=u.p?"M"+u.p+"Z":"";this.place(t,r,this.adaptor.append(a,this.charNode(o,c,Q)))}else if("c"in u){var p=this.adaptor.append(a,this.svg("g",{"data-c":c}));this.place(t,r,p),t=0;try{for(var h=n(this.unicodeChars(u.c,o)),m=h.next();!m.done;m=h.next()){var f=m.value;t+=this.placeChar(f,t,r,p,o)}}catch(e){s={error:e}}finally{try{m&&!m.done&&(l=h.return)&&l.call(h)}finally{if(s)throw s.error}}}else if(u.unknown){var g=String.fromCodePoint(e),b=this.adaptor.append(a,this.jax.unknownText(g,o));return this.place(t,r,b),this.jax.measureTextNodeWithCache(b,g,o).w}return T},a.prototype.charNode=function(e,t,n){return"none"!==this.jax.options.fontCache?this.useNode(e,t,n):this.pathNode(t,n)},a.prototype.pathNode=function(e,t){return this.svg("path",{"data-c":e,d:t})},a.prototype.useNode=function(e,t,n){var i=this.svg("use",{"data-c":t}),r="#"+this.jax.fontCache.cachePath(e,t,n);return this.adaptor.setAttribute(i,"href",r,o.XLINKNS),i},a.prototype.drawBBox=function(){var e=this.getBBox(),t=e.w,n=e.h,i=e.d,r=this.svg("g",{style:{opacity:.25}},[this.svg("rect",{fill:"red",height:this.fixed(n),width:this.fixed(t)}),this.svg("rect",{fill:"green",height:this.fixed(i),width:this.fixed(t),y:this.fixed(-i)})]),a=this.element||this.parent.element;this.adaptor.append(a,r)},a.prototype.html=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n=[]),this.jax.html(e,t,n)},a.prototype.svg=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n=[]),this.jax.svg(e,t,n)},a.prototype.text=function(e){return this.jax.text(e)},a.prototype.fixed=function(e,t){return void 0===t&&(t=1),this.jax.fixed(1e3*e,t)},a.kind="unknown",a.borderFuzz=.005,a}(a.CommonWrapper);return Wrapper$2.SVGWrapper=s,Wrapper$2}Wrapper$1.CommonWrapper=CommonWrapper;var math$2={},math$1={},__extends$1c=commonjsGlobal&&commonjsGlobal.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function CommonMathMixin(e){return function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends$1c(t,e),t.prototype.getWrapWidth=function(e){return this.parent?this.getBBox().w:this.metrics.containerWidth/this.jax.pxPerEm},t}(e)}Object.defineProperty(math$1,"__esModule",{value:!0}),math$1.CommonMathMixin=void 0,math$1.CommonMathMixin=CommonMathMixin;var math={},__extends$1b=commonjsGlobal&&commonjsGlobal.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),__assign$y=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$y=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0)&&!(i=a.next()).done;)o.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},i=commonjsGlobal&&commonjsGlobal.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(math$2,"__esModule",{value:!0}),math$2.SVGmath=void 0;var r=requireWrapper(),a=math,o=BBox$1,s=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),r.prototype.toSVG=function(t){e.prototype.toSVG.call(this,t);var n=this.adaptor;"block"===this.node.attributes.get("display")&&(n.setAttribute(this.jax.container,"display","true"),this.handleDisplay()),this.jax.document.options.internalSpeechTitles&&this.handleSpeech()},r.prototype.handleDisplay=function(){var e=n(this.getAlignShift(),2),t=e[0],i=e[1];if("center"!==t&&this.adaptor.setAttribute(this.jax.container,"justify",t),this.bbox.pwidth===o.BBox.fullWidth){if(this.adaptor.setAttribute(this.jax.container,"width","full"),this.jax.table){var r=this.jax.table.getOuterBBox(),a=r.L,s=r.w,l=r.R;"right"===t?l=Math.max(l||-i,-i):"left"===t?a=Math.max(a||i,i):"center"===t&&(s+=2*Math.abs(i)),this.jax.minwidth=Math.max(0,a+s+l)}}else this.jax.shift=i},r.prototype.handleSpeech=function(){var e,t,n=this.adaptor,r=this.node.attributes,a=r.get("aria-label")||r.get("data-semantic-speech");if(a){var o=this.getTitleID(),s=this.svg("title",{id:o},[this.text(a)]);n.insert(s,n.firstChild(this.element)),n.setAttribute(this.element,"aria-labeledby",o),n.removeAttribute(this.element,"aria-label");try{for(var l=i(this.childNodes[0].childNodes),c=l.next();!c.done;c=l.next()){var d=c.value;n.setAttribute(d.element,"aria-hidden","true")}}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=l.return)&&t.call(l)}finally{if(e)throw e.error}}}},r.prototype.getTitleID=function(){return"mjx-svg-title-"+String(this.jax.options.titleID++)},r.prototype.setChildPWidths=function(t,n,i){return void 0===n&&(n=null),e.prototype.setChildPWidths.call(this,t,this.parent?n:this.metrics.containerWidth/this.jax.pxPerEm,!1)},r.kind=a.MmlMath.prototype.kind,r.styles={'mjx-container[jax="SVG"][display="true"]':{display:"block","text-align":"center",margin:"1em 0"},'mjx-container[jax="SVG"][display="true"][width="full"]':{display:"flex"},'mjx-container[jax="SVG"][justify="left"]':{"text-align":"left"},'mjx-container[jax="SVG"][justify="right"]':{"text-align":"right"}},r}((0,math$1.CommonMathMixin)(r.SVGWrapper));return math$2.SVGmath=s,math$2}math.MmlMath=MmlMath;var mrow$2={},mrow$1={},__extends$1a=commonjsGlobal&&commonjsGlobal.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),__read$o=commonjsGlobal&&commonjsGlobal.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(i=a.next()).done;)o.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},__spreadArray$h=commonjsGlobal&&commonjsGlobal.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var i,r=0,a=t.length;r=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(mrow$1,"__esModule",{value:!0}),mrow$1.CommonInferredMrowMixin=mrow$1.CommonMrowMixin=void 0;var BBox_js_1$3=BBox$1;function CommonMrowMixin(e){return function(e){function t(){for(var t,n,i=[],r=0;r=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},__read$2=commonjsGlobal&&commonjsGlobal.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(i=a.next()).done;)o.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},__importDefault$9=commonjsGlobal&&commonjsGlobal.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(MathtoolsTags,"__esModule",{value:!0}),MathtoolsTags.MathtoolsTagFormat=void 0;var TexError_js_1$3=__importDefault$9(TexError$1),Tags_js_1$2=Tags,tagID$1=0;function MathtoolsTagFormat(e,t){var n=t.parseOptions.options.tags;"base"!==n&&e.tags.hasOwnProperty(n)&&Tags_js_1$2.TagsFactory.add(n,e.tags[n]);var i=function(e){function n(){var n,i,r=e.call(this)||this;r.mtFormats=new Map,r.mtCurrent=null;var a=t.parseOptions.options.mathtools.tagforms;try{for(var o=__values$2(Object.keys(a)),s=o.next();!s.done;s=o.next()){var l=s.value;if(!Array.isArray(a[l])||3!==a[l].length)throw new TexError_js_1$3.default("InvalidTagFormDef",'The tag form definition for "%1" should be an array fo three strings',l);r.mtFormats.set(l,a[l])}}catch(e){n={error:e}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}return r}return __extends$4(n,e),n.prototype.formatTag=function(t){if(this.mtCurrent){var n=__read$2(this.mtCurrent,3),i=n[0],r=n[1],a=n[2];return a?"".concat(i).concat(a,"{").concat(t,"}").concat(r):"".concat(i).concat(t).concat(r)}return e.prototype.formatTag.call(this,t)},n}(Tags_js_1$2.TagsFactory.create(t.parseOptions.options.tags).constructor),r="MathtoolsTags-"+ ++tagID$1;Tags_js_1$2.TagsFactory.add(r,i),t.parseOptions.options.tags=r}MathtoolsTags.MathtoolsTagFormat=MathtoolsTagFormat;var MathtoolsItems={},__extends$3=commonjsGlobal&&commonjsGlobal.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),__importDefault$8=commonjsGlobal&&commonjsGlobal.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(MathtoolsItems,"__esModule",{value:!0}),MathtoolsItems.MultlinedItem=void 0;var hasRequiredMathtoolsConfiguration,AmsItems_js_1=AmsItems,NodeUtil_js_1$3=__importDefault$8(NodeUtil$1),TexConstants_js_1$4=TexConstants,MultlinedItem=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends$3(t,e),Object.defineProperty(t.prototype,"kind",{get:function(){return"multlined"},enumerable:!1,configurable:!0}),t.prototype.EndTable=function(){if((this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.table.length>1){var t=this.factory.configuration.options.mathtools,n=t.multlinegap,i=t["firstline-afterskip"]||n,r=t["lastline-preskip"]||n,a=NodeUtil_js_1$3.default.getChildren(this.table[0])[0];NodeUtil_js_1$3.default.getAttribute(a,"columnalign")!==TexConstants_js_1$4.TexConstant.Align.RIGHT&&a.appendChild(this.create("node","mspace",[],{width:i}));var o=NodeUtil_js_1$3.default.getChildren(this.table[this.table.length-1])[0];if(NodeUtil_js_1$3.default.getAttribute(o,"columnalign")!==TexConstants_js_1$4.TexConstant.Align.LEFT){var s=NodeUtil_js_1$3.default.getChildren(o)[0];s.childNodes.unshift(null);var l=this.create("node","mspace",[],{width:r});NodeUtil_js_1$3.default.setChild(s,0,l)}}e.prototype.EndTable.call(this)},t}(AmsItems_js_1.MultlineItem);function requireMathtoolsConfiguration(){return hasRequiredMathtoolsConfiguration||(hasRequiredMathtoolsConfiguration=1,function(e){var t,n=commonjsGlobal&&commonjsGlobal.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=commonjsGlobal&&commonjsGlobal.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.MathtoolsConfiguration=e.fixPrescripts=e.PAIREDDELIMS=void 0;var r=Configuration,a=SymbolMap,o=i(NodeUtil$1),s=Options;requireMathtoolsMappings();var l=requireMathtoolsUtil(),c=MathtoolsTags,d=MathtoolsItems;function T(e){var t,i,r,a,s,l,c=e.data;try{for(var d=n(c.getList("mmultiscripts")),T=d.next();!T.done;T=d.next()){var u=T.value;if(u.getProperty("fixPrescript")){var Q=o.default.getChildren(u),p=0;try{for(var h=(r=void 0,n([1,2])),m=h.next();!m.done;m=h.next())Q[b=m.value]||(o.default.setChild(u,b,c.nodeFactory.create("node","none")),p++)}catch(e){r={error:e}}finally{try{m&&!m.done&&(a=h.return)&&a.call(h)}finally{if(r)throw r.error}}try{for(var f=(s=void 0,n([4,5])),g=f.next();!g.done;g=f.next()){var b=g.value;o.default.isType(Q[b],"mrow")&&0===o.default.getChildren(Q[b]).length&&o.default.setChild(u,b,c.nodeFactory.create("node","none"))}}catch(e){s={error:e}}finally{try{g&&!g.done&&(l=f.return)&&l.call(f)}finally{if(s)throw s.error}}2===p&&Q.splice(1,2)}}}catch(e){t={error:e}}finally{try{T&&!T.done&&(i=d.return)&&i.call(d)}finally{if(t)throw t.error}}}e.PAIREDDELIMS="mathtools-paired-delims",e.fixPrescripts=T,e.MathtoolsConfiguration=r.Configuration.create("mathtools",{handler:{macro:["mathtools-macros","mathtools-delimiters"],environment:["mathtools-environments"],delimiter:["mathtools-delimiters"],character:["mathtools-characters"]},items:(t={},t[d.MultlinedItem.prototype.kind]=d.MultlinedItem,t),init:function(t){new a.CommandMap(e.PAIREDDELIMS,{},{}),t.append(r.Configuration.local({handler:{macro:[e.PAIREDDELIMS]},priority:-5}))},config:function(e,t){var i,r,a=t.parseOptions,o=a.options.mathtools.pairedDelimiters;try{for(var s=n(Object.keys(o)),d=s.next();!d.done;d=s.next()){var T=d.value;l.MathtoolsUtil.addPairedDelims(a,T,o[T])}}catch(e){i={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(i)throw i.error}}(0,c.MathtoolsTagFormat)(e,t)},postprocessors:[[T,-6]],options:{mathtools:{multlinegap:"1em","multlined-pos":"c","firstline-afterskip":"","lastline-preskip":"","smallmatrix-align":"c",shortvdotsadjustabove:".2em",shortvdotsadjustbelow:".2em",centercolon:!1,"centercolon-offset":".04em","thincolon-dx":"-.04em","thincolon-dw":"-.08em","use-unicode":!1,"prescript-sub-format":"","prescript-sup-format":"","prescript-arg-format":"","allow-mathtoolsset":!0,pairedDelimiters:(0,s.expandable)({}),tagforms:(0,s.expandable)({})}}})}(MathtoolsConfiguration)),MathtoolsConfiguration}MathtoolsItems.MultlinedItem=MultlinedItem;var MhchemConfiguration={},mhchemParser$1={};Object.defineProperty(mhchemParser$1,"__esModule",{value:!0}),mhchemParser$1.mhchemParser=void 0;var mhchemParser=function(){function e(){}return e.toTex=function(e,t){return _mhchemTexify.go(_mhchemParser.go(e,t),"tex"!==t)},e}();function _mhchemCreateTransitions(e){var t,n,i={};for(t in e)for(n in e[t]){var r=n.split("|");e[t][n].stateArray=r;for(var a=0;a