حروفچینی فارسی در کانتکست (ConTeXt)

بحث پیرامون مسائل مربوط به قلم‌سازی، حروف‌چینی و بومی‌سازی
ارسال پست
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط mingranina »

با سلام،

نمونه‌هایی از متون تهیه‌ شده با نسخهٔ 0.20 پودمان دبیر (Dabeer Module) پیوست شده است. این پودمان که در مراحل اولیهٔ توسعه است برای حروفچینی فارسی در کانتکست (ConTeXt) نوشته شده و اخیراً منتشر گردیده است. فایل‌های TEX این نمونه‌ها در بسته dabeer-0.20 موجود می‌باشد.

با تشکر
پیوست‌ها
usage-11-reg.pdf
(62.63 KiB) 1714 مرتبه دانلود شده
usage-10-kashida.pdf
(112.6 KiB) 1051 مرتبه دانلود شده
usage-09-poem.pdf
(59.65 KiB) 1011 مرتبه دانلود شده
usage-08-table.pdf
(82.98 KiB) 993 مرتبه دانلود شده
usage-07-item.pdf
(59.47 KiB) 1056 مرتبه دانلود شده
usage-06-math.pdf
(77.78 KiB) 1052 مرتبه دانلود شده
usage-05-footnote.pdf
(68.55 KiB) 1108 مرتبه دانلود شده
usage-04-sectionno.pdf
(59 KiB) 1042 مرتبه دانلود شده
usage-03-pageno.pdf
(72.96 KiB) 1027 مرتبه دانلود شده
usage-02-quote.pdf
(45.98 KiB) 1018 مرتبه دانلود شده
usage-01-normal.pdf
(94.33 KiB) 1045 مرتبه دانلود شده
آخرین ویرایش توسط mingranina در 22 سپتامبر 2016, 08:32، در مجموع 2 بار ویرایش شده است.
آواتار کاربر
Arzhang
Site Admin
پست: 1457
تاریخ عضویت: 17 آگوست 2009, 15:06
محل اقامت: مونترآل

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط Arzhang »

به ایرماگ خوش آمدید و خسته نباشید.
همیشه جای یک نرم‌افزار حروف چینی مختص فارسی خالی بوده است و هر کوششی در این زمینه جای تقدیر دارد.
در مورد توضیحات آورده شده در متون ضمیمه، گرچه به نظرم حساسیت شما در استفاده از زبان فارسی قابل تمجید است اما گاهی سبب شده متن دشوار و یا حتی گاهی نادقیق شود. مثلاً کلمه‌ی «مستندات» برای مواردی به کار می‌رود که قضاوتی در کار باشد یا نکته‌ای بنا باشد اثبات شود. در یادداشت کوتاه بالا، کلمه‌ی «متون» دقیق‌تر است. همچنین در متن ضمیمه، استفاده از عبارت «زیرنویس» به جای پانویس، نادرست است. «پانویس» به یادداشت‌های توضیحی در پایین صفحه‌ی یک متن می‌گویند و «زیرنویس» جملات معمولاً ترجمه شده‌ی یک فیلم است که در پایین تصویر می‌آید.
موفق باشید
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط mingranina »

با سلام،

کاملاً درست می‌فرمایید. پیام اصلاح و کلمه «متون» جایگزین «مستندات» شد. اما پیوست‌های پیام متعلق به مؤلف محترم نرم‌افزار Dabeer است.

با تشکر
آواتار کاربر
Ahmad
Site Admin
پست: 1289
تاریخ عضویت: 30 می 2004, 17:33
محل اقامت: سوئد

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط Ahmad »

mingranina بہ ایرماگ خوش آمدید،

ممنون بابت اطلاعات در مورد برنامہ ConTeXt و افزونۂ Dabeer.
چنانکہ شما هم در مدارک ضمیمہ نشان داده‌اید برنامہ ConTeXt امکانات زیادی برای صفحہ‌آرائی دارد. کلا این موضوع در مورد تمام برنامہ‌های خانواده TeXt صدق می‌کند. مشکل اما رابطہ کاربری بسیار پیچده اینگونہ برنامه‌ها است کہ استفاده از آنہا را برای کاربر عادی بسیار دشوار می‌کند و از این نظر اینگونہ برنامہ‌ها جذابیت زیادی ندارند.

بعنوان مثال برای ساختن مدرک سمت چپ در عکس ضمیمہ باید کدها و تگ‌های سمت راست را در برنامہ وارد کرد !

احمد
ConTeXt.png
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط mingranina »

با سلام،
Ahmad نوشته شده: مشکل اما رابطہ کاربری بسیار پیچده اینگونہ برنامه‌ها است کہ استفاده از آنہا را برای کاربر عادی بسیار دشوار می‌کند و از این نظر اینگونہ برنامہ‌ها جذابیت زیادی ندارند.
آنچه مطرح فرموده‌اید سال‌هاست که در دنیای حروفچینی حرفه‌ای در مورد آن بحث می‌شود و البته برای مثال‌های ساده‌ای مانند‫ ‎print "Hello World"‎ مقایسه توانایی TeX (و دوستانش) با Word (و دوستانش) کار بسیار مشکلی است. در لینک‌های زیر عمده‌ترین دلایل برتری TeX ذکر شده است:
با تشکر
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

نسخهٔ پایدار LuaTeX-1.0 منتشر شد

پست توسط mingranina »

با سلام

نسخهٔ پایدار LuaTeX-1.0 منتشر شد و به این ترتیب بخشی از ConTeXt که از LuaTeX استفاده می‌کند و به آن MKIV گفته می‌شود از پایداری قابل قبولی برخوردار شده است. بنابراین از این پس آنچه را که از LuaTeX، ConTeXt، و Lua می‌آموزم در اینجا تحت عنوان «آموخته‌های من از LuaTeX، ConTeXt، و Lua» به اشتراک خواهم گذاشت.

با تشکر
آواتار کاربر
Ahmad
Site Admin
پست: 1289
تاریخ عضویت: 30 می 2004, 17:33
محل اقامت: سوئد

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط Ahmad »

جناب mingranina
گرچه بنده نه کاربر اینگونه برنامه‌ها هستم و نه از طرفداران آن بدلیلی که در پست قبلی خود ذکر کردم ولی از معرفی و توضیح شما در مورد کارکرد این برنامه استقبال می‌کنم و از شما تشکر می‌نمایم.
احمد
آواتار کاربر
AliGhz
Site Admin
پست: 2151
تاریخ عضویت: 14 نوامبر 2009, 15:55
محل اقامت: تهران

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط AliGhz »

جناب mingranina گرامی

من هم به دلیل علاقه‌ای که به ابزارهای تایپ دارم و اینکه سیستم حروفچینی این مدلی همیشه برایم یک معما بوده است (که دقیقا چیست و چطور کار می‌کند)، از آموزش‌ها و توضیحات شما در اینجا استقبال می‌کنم. من البته الان خیلی با فرمول و نوشته‌های پیچیده سروکار ندارم، و برای لی‌اوت هم از ایندیزاین استفاده می‌کنم، اما جالب است که بدانم سیستمی مثل این که شما معرفی کرده‌اید چطور کار می‌کند و چه مزایایی دارد.

البته من هم مثل احمد عزیز، ترجیح می‌دهم هم راحت‌تر یک سیستم را بفهمم و هم سهل‌تر از آن استفاده کنم. اینطور که من اینجا می‌بینم، سیستم ConTeXt در مقایسه با مثلاً ورد، مثل سیستم عامل داس است به مک (یا ویندوز، از لحاظ رابط کابری).

البته نمی‌دانم مخاطبان و کاربران اصلی ConTeXt چه کسانی هستند، اما اگر قرار باشد نرم‌افزاری با دید تجاری و استفادۀ وسیع باشد، بدون سادگی در فهم و استفاده، برد زیادی نخواهد داشت.

البته سادگی در استفاده، به معنای سطحی یا سطح پایین بودن نیست؛ مثل سخت‌افزارهاو نرم افزارهای اپل که سیستمی پیچیده دارند اما کار کردن با آنها عموماً خیلی ساده است.
 Think Different.
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط mingranina »

با سلام

جناب آقای Ahmad و جناب آقای AliGhz

ممنون از پیام‌های دلگرم‌کنندهٔ شما. البته من در زمینه ConTeXt مبتدی هستم و در حدی نیستم که بتوانم حق مطلب را ادا کنم. اما سعی می‌کنم در نشان دادن توانایی‌های این نرم‌افزار حتی‌المقدور مفید باشم.

با تشکر
آواتار کاربر
Ilia
Site Admin
پست: 6188
تاریخ عضویت: 25 سپتامبر 2006, 00:01
محل اقامت: کانادا

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط Ilia »

من چند وقت پیش برایم این سؤال پیش آمد که چرا باید کسی از این سیستم خشک برای نوشتن استفاده کند. کمی در موردش تحقیق کردم، نتیجه‌ای که به آن رسیدم این بود:

این برنامه یا هر چه اسمش را بگذارید، گذشته از اینکه یک سری امکانات برای مثلا فورمول نویسی و غیره ارائه میکند، هنر اصلیش این است که قدرت خرابکاری و بی‌سلیقگی را از کاربرش تا اندازهٔ زیادی میگیرد. یعنی هر بی‌سلیقه یا کودنی که کار کردن مشقتبار این را یاد بگیرد، نتیجهٔ نوشته‌اش تا اندازهٔ زیادی استاندارد و دارای آن ویژگی‌ای خواهد بود که در قالب‌های پیشفرض این برنامه پیشبینی شده است. یعنی مثلا رساله‌های دانشگاه بنظر استاندارد و مقبول و مشابه می‌آیند.

اگر لی‌آوت‌های یک عده را ببینید، این خودش نعمت کمی نیست. بعبارت دیگر رساله‌ای با فانت تاهومای ۱۶ روی ۲۰ و پارگراف‌بندی عجق وجق را طرف خیلی باید زحمت بکشد تا تحویل بدهد!
آواتار کاربر
AliGhz
Site Admin
پست: 2151
تاریخ عضویت: 14 نوامبر 2009, 15:55
محل اقامت: تهران

پاسخ: حروفچینی فارسی در کانتکست (ConTeXt)

پست توسط AliGhz »

مطلبی خوب دربارهٔ این سبک نرم‌افزارهای حروفچینی:
http://panevis.ir/?p=932
 Think Different.
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

آموخته‌های من از LuaTeX، ConTeXt، و Lua -‫ 1

پست توسط mingranina »

با سلام

برای استفاده و اجرای کدهایی که در اینجا ملاحظه می‌کنید باید LuaTeX، ConTeXt، و Lua را روی سیستم خود نصب کنید.

اگر مایل هستید از نسخه‌های پایدار نرم‌افزارهای فوق استفاده کنید کافی است TeXlive را نصب و آن را به‌روز نمایید. و اگر می‌خواهید از نسخهٔ به‌روز و شامل آخرین اصلاحات (نسخهٔ بتا) استفاده کنید ConTeXt Standalone را نصب فرمایید.

بهترین روش برای فراگیری LuaTeX، ConTeXt، و Lua مثل سایر برنامه‌های کامپیوتری استفاده از مثال است. پس با مثال معروف ‎print "Hello World!"‎ و مثال Font Sampler شروع می‌کنیم که برای مرور و مشاهدهٔ سریع فونت‌های لاتین در یک شاخه نوشته شده و من آن را به کمک ConTeXt Mailing List به فونت‌های فارسی تعمیم داده‌ام.

کد زیر را در فایلی به‌نام ctx-example-1.tex ذخیره کنید.

کد: انتخاب همه

\nopagenumbers
\input luaotfload.sty
\overfullrule 0pt
\font\mono = {file:lmmono8-regular.otf} at 6pt
\parindent 0pt

\def \samplestringEN {Hello World! 1234567890.}
\def \samplestringFA {سلام بر دنیا! ۰۱۲۳۴۵۶۷۸۹}

\directlua{ 
  dofile("ctx-example-1.lua")
  fontsampler_otf(arg[2])
}

\directlua{ 
  dofile("ctx-example-1.lua") 
  fontsampler_ttf(arg[2])
}

\bye
کد زیر را نیز در همان شاخه و در فایلی به‌نام ctx-example-1.lua ذخیره کنید.

کد: انتخاب همه

function dirtree(dir)
  assert(dir and dir ~= "", "directory parameter is missing or empty")
  if string.sub(dir, -1) == "/" then
    dir=string.sub(dir, 1, -2)
  end

  local function yieldtree(dir)
    for entry in lfs.dir(dir) do
      if not entry:match("^%.") then
        entry=dir.."/"..entry
     	  if not lfs.isdir(entry) then
     	    coroutine.yield(entry,lfs.attributes(entry))
     	  end
     	  if lfs.isdir(entry) then
     	    yieldtree(entry)
     	  end
      end
    end
  end

  return coroutine.wrap(function() yieldtree(dir) end)
end

function fontsampler_otf( dir )
  for entry in dirtree(dir) do
    if entry:match( "(.[ot]tf)","-4" ) then
      tex.tprint(
        {[[\mono ]]},
        {-2,"File name: "},
        {-2,entry:match( "([^/]+)$" )},
        {[[; ]]},
        {-2,"Font name: "},
        {-2,fontloader.info(entry).fontname},
        {[[\par\penalty 10000\font\sample={file:]]},
        {-2,entry},
        {[[} at 12pt\sample\samplestringEN\par\penalty 10000
          \vrule width \hsize height 0.25pt depth 0pt\par]]
        }
      )
    end
  end 
end

function fontsampler_ttf( dir )
  for entry in dirtree(dir) do
    if entry:match(".ttf","-4") then
      tex.tprint(
        {[[\mono \pardir TRT \textdir TLT ]]},
        {-2,"File name: "},
        {-2,entry:match( "([^/]+)$" )},
        {[[; ]]},
        {-2,"Font name: "},
        {-2,fontloader.info(entry).fontname},
        {[[\par\penalty 10000\font\sample={file:]]},
        {-2,entry},
        {[[:language=dflt;script=arab;ccmp=yes;init=yes;medi=yes;final=yes;rlig=yes} at 12pt 
          \sample \pardir TRT \textdir TRT \samplestringFA\par\penalty 10000
          \vrule width \hsize height 0.25pt depth 0pt\par]]
        }
      )
    end
  end 
end
تعدادی فونت ‎OpenType (OTF)‎ مثل فونت‌های Iwona و تعدادی فونت ‎TrueType (TTF)‎ را که دارای گلیف‌های فارسی باشند مثل فونت‌های HM_XNiloofar در شاخه‌ای مثل tmp/Fonts-Samples/ کپی کنید.

در همان شاخه‌ای که فایل‌های ctx-example-1.tex و ctx-example-1.lua را ذخیره کرده‌اید، در خط فرمان تایپ کنید:

کد: انتخاب همه

 luatex  ctx-example-1.tex  "/tmp/Fonts-Samples"
پس از اتمام موفق دستور فوق یک فایل PDF تولید می‌شود که شامل نام فایل، نام فونت و نمونهٔ هر یک از فونت‌هاست. نمونهٔ PDF مربوطه که روی سیستم من تولید گردیده به‌پیوست است.

فهرست مراجع و منابع (که به تدریج کامل‌تر خواهد شد) ممکن است برای درک بهتر کدهای فوق مفید باشد:
با تشکر
پیوست‌ها
ctx-example-1.pdf
(285.62 KiB) 998 مرتبه دانلود شده
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

آموخته‌های من از LuaTeX، ConTeXt، و Lua -‫ 1 (قسمت دوم)

پست توسط mingranina »

با سلام

در این قسمت از «آموخته‌های من» که ادامهٔ همان «آموخته‌های من 1» است توابع Lua به‌گونه‌ای تغییر کرده است تا در خروجی نمونه‌فونت‌ها به ترتیب حروف الفباء (انگلیسی) و شمارهٔ صفحات با فونت و نویسهٔ دلخواه حروفچینی شود.

برای تولید خروجی، کد زیر را در فایلی به‌نام ctx-example-1-1.tex ذخیره کنید.

کد: انتخاب همه

\input luaotfload.sty
\overfullrule 0pt
\font\mono = {file:lmmono8-regular.otf} at 8pt
\parindent 0pt

\def \samplestringEN {Hello World! 1234567890.}
\def \samplestringFA {سلام بر دنیا! ۰۱۲۳۴۵۶۷۸۹}

\centerline{\luatexbanner}

\def\folio{\directlua{
  dofile("ctx-example-1-1.lua") 
  PageNumToPersian(\the\pageno)
}}

\directlua{ 
  dofile("ctx-example-1-1.lua")
  fontsampler_otf(arg[2])
}

\vfill \break

\directlua{ 
  dofile("ctx-example-1-1.lua") 
  fontsampler_ttf(arg[2])
}

\bye
کد زیر را نیز در همان شاخه و در فایلی به‌نام ctx-example-1-1.lua ذخیره کنید.

کد: انتخاب همه

function PageNumToPersian( pageno )
  DigitTable = {}
  DigitTable["0"] = "۰"
  DigitTable["1"] = "۱"
  DigitTable["2"] = "۲"
  DigitTable["3"] = "۳"
  DigitTable["4"] = "۴"
  DigitTable["5"] = "۵"
  DigitTable["6"] = "۶"
  DigitTable["7"] = "۷"
  DigitTable["8"] = "۸"
  DigitTable["9"] = "۹"

  function ConvertDigits(n)
    local page_tmp = ""
    str = tostring(n)
    for w in str:gmatch"." do
       page_tmp = page_tmp .. DigitTable[w]
    end
    return page_tmp
  end

  tex.tprint(
  {[[\font\sample = {file:HM_XKayhanNavaar.ttf:language=dflt;script=arab;ccmp=yes;init=yes;medi=yes;final=yes;rlig=yes} at 12pt]]},
  {[[\sample ]]},
  {ConvertDigits(pageno)}
  )
end

function dirtree(dir)
  assert(dir and dir ~= "", "directory parameter is missing or empty")
  if string.sub(dir, -1) == "/" then
    dir=string.sub(dir, 1, -2)
  end

  local function yieldtree(dir)
    for entry in lfs.dir(dir) do
      if not entry:match("^%.") then
        entry=dir.."/"..entry
     	  if not lfs.isdir(entry) then
     	    coroutine.yield(entry,lfs.attributes(entry))
     	  end
     	  if lfs.isdir(entry) then
     	    yieldtree(entry)
     	  end
      end
    end
  end

  return coroutine.wrap(function() yieldtree(dir) end)
end

function fontsampler_otf( dir )
  local dirtree_items = {}
  for item in dirtree(dir) do
    table.insert(dirtree_items, item)
  end
  table.sort(dirtree_items)
  for i=1,#dirtree_items do
    entry=dirtree_items[i]
    if entry:match( "(.[ot]tf)","-4" ) then
      tex.tprint(
        {[[\mono ]]},
        {-2,"File name: "},
        {-2,entry:match( "([^/]+)$" )},
        {[[; ]]},
        {-2,"Font name: "},
        {-2,fontloader.info(entry).fontname},
        {[[\par\penalty 10000\font\sample={file:]]},
        {-2,entry},
        {[[} at 12pt\sample\samplestringEN\par\penalty 10000
          \vrule width \hsize height 0.25pt depth 0pt\par]]
        }
      )
    end
  end 
end

function fontsampler_ttf( dir )
  local dirtree_items = {}
  for item in dirtree(dir) do
    table.insert(dirtree_items, item)
  end
  table.sort(dirtree_items)
  for i=1,#dirtree_items do
    entry=dirtree_items[i]
    if entry:match(".ttf","-4") then
      tex.tprint(
        {[[\mono \pardir TRT \textdir TLT ]]},
        {-2,"File name: "},
        {-2,entry:match( "([^/]+)$" )},
        {[[; ]]},
        {-2,"Font name: "},
        {-2,fontloader.info(entry).fontname},
        {[[\par\penalty 10000\font\sample={file:]]},
        {-2,entry},
        {[[:language=dflt;script=arab;ccmp=yes;init=yes;medi=yes;final=yes;rlig=yes} at 12pt 
          \sample \pardir TRT \textdir TRT \samplestringFA\par\penalty 10000
          \vrule width \hsize height 0.25pt depth 0pt\par]]
        }
      )
    end
  end 
end
تعدادی فونت ‎OpenType (OTF)‎ مثل فونت‌های Iwona و تعدادی فونت ‎TrueType (TTF)‎ را که دارای گلیف‌های فارسی باشند مثل فونت‌های ‎HM_FElmi, HM_FNazli, HM_XKayhan, HM_XNiloofar‎ را در شاخه‌ای مثل tmp/Fonts-Samples/ کپی کنید.

در همان شاخه‌ای که فایل‌های ctx-example-1.tex و ctx-example-1.lua را ذخیره کرده‌اید، در خط فرمان تایپ کنید:

کد: انتخاب همه

luatex  ctx-example-1-1.tex  "/tmp/Fonts-Samples"
پس از اتمام موفق دستور فوق یک فایل PDF تولید می‌شود که شامل نام فایل، نام فونت و نمونهٔ هر یک از فونت‌هاست. نمونهٔ PDF مربوطه که روی سیستم من تولید گردیده به‌پیوست است.

فهرست مراجع و منابع چدید (که به تدریج کامل‌تر خواهد شد) ممکن است برای درک بهتر کدهای فوق مفید باشد:
References and Resources:

Lua:
[14] Lua Mailing List
حجم فایل PDF تولید شده روی سیستم من ‎1132 KB‎ است که متأسفانه از سقف مجاز در سایت IRMUG بیشتر است و بنابراین امکان آپلود آن به‌صورت پیوست وجود ندارد.

با تشکر
m
mingranina
پست: 77
تاریخ عضویت: 17 سپتامبر 2016, 07:53

آموخته‌های من از LuaTeX، ConTeXt، و Lua -‫ 1 (قسمت سوم)

پست توسط mingranina »

با سلام

برای آن دسته از کاربران گرامی که بخواهند از ConTeXt استفاده کنند مراجع و منابع زیر ممکن است مفید باشند. به‌ویژه برای دوستانی که با LaTeX آشنا باشند مراجع [15] و [16] بسیار مفید هستند.
با تشکر
ارسال پست

چه کسی حاضر است؟

کاربران حاضر در این انجمن: کاربر جدیدی وجود ندارد. و 1 مهمان