كيف يمكنك الحصول على ارتفاع متري من سلسلة في حاشية?
-
21-08-2019 - |
سؤال
يمكنك الحصول على عرض سلسلة في الخط الحالي مع stringwidth
وعلى الرغم من أن هذا الواقع يدفع تعويض الإحداثيات على المكدس ، قيمة y يبدو دائما أن تكون عديمة الفائدة.هل هناك طريقة لتحديد ارتفاع سلسلة ، التي قد أو قد لا تتضمن والأسلة?
المحلول
stringwidth
, كما يقول: لا عودة سلسلة ارتفاع.(في جميع الحالات نظرت الثاني صحيح على المكدس بعد تنفيذ stringwidth
كان 0
- على سلاسل التي تعمل في الاتجاه الأفقي.) stringwidth
يعطي إحداثيات النسبية من currentpoint بعد تنفيذ (string) show
.
على PLRM هذا القول عن stringwidth
:
نلاحظ أن عرض إرجاعها من قبل stringwidth بأنها حركة الحالي نقطة.فإنه لا علاقة له مع أبعاد الصورة الرمزية الخطوط العريضة.
لذلك ما من شأنه العمل على أن تأخذ في الاعتبار سلسلة هذا الارتفاع ؟ الكلمات السحرية أن تقرأ عنها في PRLM هي charpath
و pathbbox
.جرب هذا:
%!
/Helvetica findfont 60 scalefont setfont
200 700 4 0 360 arc fill
200 700 moveto (test test) dup
true charpath pathbbox
3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch
1 0 0 setrgbcolor
200 700 moveto rmoveto show showpage
فإنه يحسب السلسلة (المطبوعة باللون الأحمر) ارتفاع يستخدم تلك المعلومات في محاولة مدينة صغيرة مليئة دائرة (مطبوعة باللون الأسود) في مركز المربع المحيط:
نصائح أخرى
لقد أجبت على هذا في كيفية تحديد سلسلة ارتفاع في حاشية?, لكن من المفيد هنا أيضا.
فقط إضافة إلى pipitas الجواب:
/textheight {
gsave % save graphic context
{
100 100 moveto % move to some point
(HÍpg) true charpath pathbbox % gets text path bounding box (LLx LLy URx URy)
exch pop 3 -1 roll pop % keeps LLy and URy
exch sub % URy - LLy
}
stopped % did the last block fail?
{
pop pop % get rid of "stopped" junk
currentfont /FontMatrix get 3 get % gets alternative text height
}
if
grestore % restore graphic context
} bind def
/jumpTextLine {
textheight 1.25 mul % gets textheight and adds 1/4
0 exch neg rmoveto % move down only in Y axis
} bind def
طريقة تتوقع أن بعض الخط بالفعل.يعمل على الخط المحدد (setfont
) وحجمه (scalefont
).
يمكنني استخدام (HÍpg) للحصول على أكبر المربع المحيط ممكن ، وذلك باستخدام حدته الأحرف الكبيرة "تحت الخط" الشخصيات.والنتيجة هي جيدة بما فيه الكفاية.
النهج البديل الذي يسرق من dreamlax's الإجابة-بعض الخطوط لا تدعم charpath
المشغل.
إنقاذ واستعادة الرسم السياق يبقى النقطة الحالية في المكان ، حيث أنه ليس له أي تأثير على "تدفق" من المستند الخاص بك.
آمل أن أكون قد ساعدت.
ويبدو أن هذا العمل أكثر من مرة:
/fontheight { currentfont /FontMatrix get 3 get } bind def
/lineheight { fontheight 1.2 mul } bind def
وانها لن تعمل لجميع /FontType
s.