টেক্স / ল্যাটেক্সে গল্ফ করার টিপস


28

টেক্স / ল্যাটেক্সে গল্ফ করার জন্য লোকেরা কী পরামর্শ দেয়? দয়া করে উত্তরে প্রতি একটি টিপ পোস্ট করুন, প্রতিটি কমপক্ষে কিছুটা টেক্স / ল্যাটেক্সের সাথে সুনির্দিষ্টভাবে সুনির্দিষ্ট।


প্রসঙ্গ: আমি এই উত্তরটি লক্ষ্য করেছি এবং টেক্স / ল্যাটেক্সের জন্য কোনও টিপসের প্রশ্ন নেই, তাই আমি এটি তৈরি করছি। টিকজেডে গল্ফ করার জন্য সংকীর্ণ প্রশ্ন টিপসের সাথে কিছুটা ওভারল্যাপ রয়েছে (যেহেতু টিকজেড টেক্স / ল্যাটেক্সের শীর্ষে একটি নির্দিষ্ট ম্যাক্রো প্যাকেজ) এই প্রশ্নের উত্তর সম্ভবত সেখানেও প্রয়োগ হবে তবে অন্যভাবে নয়।


আপনি কীভাবে একটি অ-প্রোগ্রামিং ভাষা গল্ফ করতে পারেন?
দ্য গ্রেট ডাক

1
@TheGreatDuck খুব দুর্বল :-)
ShreevatsaR

@TheGreatDuck বাস্তবিক, TeX হয় একটি প্রোগ্রামিং ভাষা, এমনকি সাধারণত যদি এটি শুধুমাত্র একটি বানান ও অন্যান্য এক হিসাবে ব্যবহৃত হচ্ছে।
gvgramazio

উত্তর:


15

নথিভুক্তগুলির চেয়ে অভ্যন্তরীণ ল্যাটেক্স ম্যাক্রোগুলি বিবেচনা করুন

উদাহরণস্বরূপ, \romanএকটি ডকুমেন্টেড লাটেক্স ম্যাক্রো যা ল্যাটেক্স কাউন্টারে কাজ করে। চালু করতে 42বা XLIVআপনার মত কিছু ব্যবহার করতে হবে চাই

\newcounter{z}
\setcounter{z}{42}
\roman{z}

পরিবর্তে, কীভাবে \romanকার্যকর করা হয় তা সন্ধান করে ( \show\romanউত্স ফাইলগুলি পড়ার পরিবর্তে এটি ইন্টারেক্টিভভাবে পাওয়ার জন্য ব্যবহার করুন ), কেউ দেখতে পাবে যে এটি কার্যকর একটি ম্যাক্রোর নামে কার্যকর করা হয়েছে \@romanএবং পরিবর্তে এটি সরাসরি ব্যবহার করুন:

\catcode`@11
\@roman{42}

\catcode`@11লেখার গোলাপি উপায় \makeatletter(ল্যাটেক্সে পরিষ্কার উপায়) বা \catcode`\@=11(প্লেইন টেক্সে পরিষ্কার উপায়)। শুরুতে এটি একবারে প্রয়োজন হয়, এর পরে আপনি ম্যাক্রোযুক্ত ধারণাগুলি ব্যবহার করতে পারেন @


13

~ম্যাক্রো হিসাবে ব্যবহার করা যেতে পারে (অন্যান্য সক্রিয় অক্ষরের মতো)

উদাহরণ

আগে:

\def\a{...some definition...} ... use \a...

পরে:

\def~{...some definition...} ... use ~...

ব্যাখ্যা : সাধারণত TeX মধ্যে ম্যাক্রো "নিয়ন্ত্রণ সিকোয়েন্স" আছে: আপনি নির্ধারণ করতে পারেন \somethingবা \a। তবে আপনি সক্রিয় চরিত্রটি ব্যবহার করে আরও খাটো যেতে পারেন। ডিফল্টরূপে উপস্থিত থাকা কেবলমাত্র সক্রিয় চরিত্রটি (প্লেইন টেক্স / ল্যাটেক্সে) ~ব্যবহৃত হয় ("বন্ধনগুলির জন্য" ব্যবহৃত হয়, অর্থাত্ \penalty \@M \প্লেইন টেক্স হিসাবে সংজ্ঞায়িত (একটি স্থানের পরে 10000 এর জরিমানা)) এবং \nobreakspace {}ল্যাটেক্সের মতো)। তবে আপনাকে যা প্রয়োজন তার জন্য এটি নতুন করে সংজ্ঞায়িত করতে কিছুই থামায় না।

আরও : আপনি অন্য কোনও চরিত্রের ক্যাটকোড \active(13) এ সেট করে একই কাজ করতে পারেন । উদাহরণস্বরূপ, উপার্জন Zএকটি সক্রিয় চরিত্র একটি 12 বাইট "cost" রয়েছে: \catcode`Z13। তারপরে আপনি Zম্যাক্রোর মতো পরিবর্তে সর্বত্র সর্বত্র ব্যবহার করতে পারেন \z। কিছু অক্ষরের জন্য যা একটি বিশেষ অর্থ দিয়ে শুরু হয়, সরাসরি ব্যাকটিক পদ্ধতির কাজ হয় না এবং আপনার আরও একটি চরিত্রের প্রয়োজন: \catcode`\Z13বা \catcode90=13


9

\def স্থির নিদর্শন মেলাতে পারেন

ধরা যাক আপনার ছিল \def\a #1 #2 {...some definition here...}। তারপরে আপনি যখন এটিকে স্ট্রিংয়ের মতো কল করেন \a Act42, Scene26, ম্যাক্রোর ভিতরে যুক্তিগুলি # 1 <- Act42,, # 2 <- এর মতো বরাদ্দ করা যেতে পারে Scene26এবং তারপরে আপনাকে প্রাসঙ্গিক অংশগুলি বের করার জন্য আরও কিছু কাজ করতে হবে d পরিবর্তে, এক সরাসরি লিখতে পারে

\def\a Act#1, Scene#2 {...some definition here...}

এবং তারপরে এটিকে কল করা \a Act42, Scene26সরাসরি # 1 <- 42এবং # 2 <- সেট করে 26

(এটি মূলত সংজ্ঞা \def, তবে এটি সহজেই ভুলে যাওয়া সহজ যেহেতু কেউ সাধারণত ল্যাটেক্সে এটি করে না, যুক্তিগুলি পছন্দ করতে পছন্দ করে {}যেন তারা ফাংশন কল হয়))


8

প্লেইন টেক্স এবং ল্যাটেক্সের মধ্যে নির্বাচন করা

এ সম্পর্কে অনেক কিছু বলা যায়, তবে সংক্ষেপে, একটি সাধারণ প্লে টেক্স ডকুমেন্টের তুলনা করুন যা "হ্যালো" প্রিন্ট করে তার জন্য একটি সাধারণ ল্যাটেক্স নথির সাথে:

Hello
\bye

বনাম

\documentclass{article}
\begin{document}
Hello
\end{document}

LaTeX (আর্ট কোড গল্ফ) এর "ব্যয়" সুস্পষ্ট; অবশ্যই "বেনিফিট" হ'ল লটেক্স অনেকগুলি প্রাক-লিখিত ম্যাক্রো এবং প্যাকেজগুলির একটি লাইব্রেরি নিয়ে আসে, যার মধ্যে কিছু হাতের কাজটির জন্য দরকারী হতে পারে।


আমি লেটেক্স ব্যবহারের কারণে আটকে গিয়েছিলাম \@Roman( প্লেইনে বড় হাতের কাজ করার জন্য অনেকটা বাইটের দাম পড়তে পারে) - তবে প্লেইন টেক্সটি প্রায়শই খাটো হত।
ক্রিস এইচ

8

\input ... এর চেয়ে কম \usepackage{...}

উদাহরণস্বরূপ, আপনি লিখতে পারেন

\input color

পরিবর্তে

\usepackage{color}

যা less কম বাইট


8
\usepackageআপনার অন্তর্ভুক্ত প্যাকেজগুলির সংখ্যা যত বাড়বে ততই এটি আরও কার্যকর হয়ে ওঠার জন্য এটি দরকারী । যেহেতু আপনি কেবলমাত্র একটি \usepackageবিবৃতি দিয়ে একাধিক প্যাকেজ ব্যবহার করতে পারেন তবে \inputপ্রতিটি প্যাকেজের জন্য একটি প্রয়োজন , আপনি যদি 3 বা ততোধিক প্যাকেজ ব্যবহার করেন \usepackageতবে ভাল বিকল্প হয়ে ওঠে।
গম উইজার্ড

7

যদি ল্যাটেক্স ব্যবহার করে থাকেন তবে একটি সংক্ষিপ্ত ব্যবহার করুনdocumentclass ( ক্রিস এইচ দ্বারা ধারণা )

টিপিক্যাল দিয়ে শুরু করার পরিবর্তে

\documentclass{article}

যে কোনও একটি bookএমনকি ছোট ডকুমেন্ট ক্লাস চয়ন করতে পারেন choose

\documentclass{ecv}

অথবা

\documentclass{tui}

আপনি প্রশ্নের চশমা মধ্যে থাকা মনে রাখতে হবে, articleএর পৃষ্ঠাগুলি ডিফল্ট সংখ্যা দ্বারা এটি অতিরিক্ত আউটপুট হিসাবে বিবেচনা করা যেতে পারে। কোন নথি ক্লাসের অনুমতি দেওয়া উচিত তা নির্ধারণ করার জন্য সম্ভবত একটি মেটা প্রশ্ন রয়েছে is
গম উইজার্ড

@ ওয়েট উইজার্ড ভাল পয়েন্ট। আমি মনে করি পৃষ্ঠা নম্বরগুলি অতিরিক্ত আউটপুট হিসাবে বিবেচিত হবে কিনা তা স্বতন্ত্র প্রশ্নের মধ্যে থাকতে পারে।
শ্রীভাতসারআর

আমি মনে করি একটি ন্যূনতম শ্রেণি একটি ভাল ধারণা হবে - একটি একক অক্ষরের নাম এবং কোনও পৃষ্ঠা নম্বর নেই
ক্রিস এইচ

আমি এক সাথে রেখেছি g.clsযা ঠিক article.clsআছে \pagenumbering{gobble}তবে গিথুব ডাউন থাকায় আমি আপাতত তা রাখতে পারি না
ক্রিস এইচ


7

নামক পরিবেশ myenvironmentতৈরি করা কমান্ড উত্পন্ন করে \myenvironmentএবং \endmyenvironment। এগুলি অভ্যন্তরীণভাবে পরিবেশের শুরু এবং শেষ করতে ব্যবহৃত হয়। কিছু ক্ষেত্রে এগুলি শর্টকাট হিসাবে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, পরিবর্তে

\begin{itemize}
\item abc
\end{itemize}

এক করতে পারেন

\itemize
\item abc
\enditemize

সমর্থিত নয়, নির্ভরযোগ্য নয়, সব ক্ষেত্রেই কাজ করে না, নিজের বিপদে ব্যবহার করুন ইত্যাদি


সাইটে স্বাগতম!
ডিজেএমসিএমহেম

3
আপনি \itemize{...}আরও বেশি সঞ্চয়ের জন্য প্রায়শই করতে পারেন ।
গম উইজার্ড

4

\usepackage{packagea,packageb,packagec} কাজ করে, আপনি প্যাকেজগুলিতে বিকল্পগুলি পাস না করা পর্যন্ত।


4

একসাথে লাইন চালান। অনেক দীর্ঘ-রূপের ভাষার তুলনায় ল্যাটেক্স / টেক্সে লাইন বিরতি খুব কমই প্রয়োজন।


3

কিছু ম্যাক্রো যা আপনি আশা করতে পারেন তাদের আর্গুমেন্টগুলির চারদিকে ধনুর্বন্ধনী প্রয়োজন হয় না, বিশেষত যখন অন্য ম্যাক্রোর ভিতরে ব্যবহার করা হয় #1 স্টাইল আর্গুমেন্টের ।

যুক্তিতে একাধিক টোকেন (চরিত্র বা নিয়ন্ত্রণের অনুক্রম) থাকলে কেবলমাত্র ম্যাক্রোর কেবল ধনুর্বন্ধনী প্রয়োজন।

\mymacro1          % equivalent to \mymacro{1}
\mymacro{12}       % equivalent to \mymacro{12}
\mymacro a         % equivalent to \mymacro{a}
\mymacro{ab}       % equivalent to \mymacro{ab}
\mymacro\foo       % equivalent to \mymacro{\foo}
\mymacro{\foo x}   % equivalent to \mymacro{\foo x}

3

যদি আপনাকে বেশ কয়েকবার দীর্ঘ নামের সাথে একই ম্যাক্রো ব্যবহার করার প্রয়োজন হয় তবে আপনি \letএকটি সংক্ষিপ্ত নাম ব্যবহার করতে পারেন ।

\let\a\mymacrowithalongname
\a{foo}\a{bar}\a{qux}

এটি দুটি বাইট সাশ্রয় করে \def\a{\mymacrowithalongname}সংজ্ঞাটিতে যদি আপনার একাধিক টোকেনের প্রয়োজন না হয় তবে ।

ম্যাক্রো নামের পরিবর্তে আপনার একটি সক্রিয় চরিত্র থাকতে পারে ব্যাকস্ল্যাশগুলিতে সঞ্চয় করার জন্য থাকতে পারে।

নোট করুন যে \letকেবল ম্যাক্রো নামগুলি নিয়েই নয় বিল্ট-ইন আদিমগুলির সাথেও কাজ করে না। উদাহরণস্বরূপ, আপনি \ifnum ... \fiযদি নিজের কোডে প্রচুর পরিমাণে কনস্ট্রাক্ট \let\i\ifnumব্যবহার করেন , সংজ্ঞা এবং পরিবর্তে ব্যবহার \i ... \fiকরে আপনাকে কয়েকটি বাইট সংরক্ষণ করতে পারে। এমনকি জন্য কাজ করে \letনিজেই: \let\l\let


3

স্থানীয় {... }গোষ্ঠীগুলি বুদ্ধিমানের সাথে ব্যবহার করুন

এই উত্তরে যেমন উল্লেখ করা হয়েছে , সক্রিয় চরিত্রগুলি ~ম্যাক্রোর নাম হিসাবে ব্যবহার করা যেতে পারে। দুর্ভাগ্যক্রমে, ~কেবলমাত্র ডিফল্টরূপে সক্রিয় চরিত্রটি এবং অন্য একটি চরিত্রের জন্য ক্যাটকোড পরিবর্তন করা ব্যয়বহুল: \catcode`!1312 বাইট লাগে যদি নতুন ম্যাক্রো সংজ্ঞাটি কেবল আপনার কোডের একটি ছোট অঞ্চলে প্রয়োজন হয়, স্থানীয় গোষ্ঠীগুলি সমাধান হতে পারে।

টেক্স যখন খোলা একটি নতুন স্থানীয় গোষ্ঠীতে প্রবেশ করে {, এটি অভ্যন্তরীণ সংরক্ষণের স্ট্যাকের উপর একটি নতুন গ্রুপিং স্তর তৈরি করে। এর অর্থ হ'ল বর্তমান সমস্ত ম্যাক্রোগুলি এবং রেজিস্টারগুলি সংরক্ষিত হয়েছে। তাদের কোনও পরিবর্তন (স্পষ্টভাবে চিহ্নিত হিসাবে চিহ্নিত না করা \global) এখন কেবলমাত্র গ্রুপটি বন্ধ না হওয়া পর্যন্ত সক্রিয় থাকবে }। এই যে মানে~ একটি গোষ্ঠীর মধ্যে নতুন সংজ্ঞা দেওয়া যেতে পারে, নতুন সংজ্ঞা দিয়ে সেখানে ব্যবহার করা যেতে পারে এবং গোষ্ঠীটি শেষ হয়ে গেলে পুরানো সংজ্ঞাটি স্বয়ংক্রিয়ভাবে পুনরুদ্ধার হবে।

এখানে একটি উদাহরণ:

\def~{abc}
~ -- {\def~{123}~} -- ~

এই ফলাফল

abc - 123 - abc

এই গোষ্ঠীকরণ ব্যবস্থার একটি আকর্ষণীয় পার্শ্ব প্রতিক্রিয়া হ'ল পুরানো মানগুলি এখনও সেখানে পরিবর্তন না হওয়া পর্যন্ত গ্রুপের অভ্যন্তরে উপলব্ধ। এটি চিত্রিত করার জন্য, কল্পনা করুন যে আমরা একটি কাউন্টারের মানের উপর ভিত্তি করে বেশ কয়েকটি অক্ষর মুদ্রণ করতে চাই, একটি নির্দিষ্ট দৈর্ঘ্য পর্যন্ত ফাঁকা স্থান দিয়ে তাদের প্যাড করতে চাই এবং মূল পাল্টা মানটি দিয়ে যেতে চাই। এটি নিম্নলিখিত দ্বারা অর্জন করা যেতে পারে:

\newcount\x
\x=3
Print a char \the\x\ times,
{\x=-\x \advance\x 10 pad with \the\x\ spaces,}
and go on with x=\the\x.

যা ফলাফল

একটি চর 3 বার মুদ্রণ করুন, 7 স্পেস সহ প্যাড করুন এবং এক্স = 3 দিয়ে এগিয়ে যান।

এই গ্রুপিং আচরণটি বিশেষত গুরুত্বপূর্ণ যদি আপনি লুপিং \loop ... \repeatনেস্ট করার জন্য টেক্সের মানক ম্যাক্রো ব্যবহার করতে চান । এই ম্যাক্রোগুলি অভ্যন্তরীণ কমান্ডগুলি সংজ্ঞায়িত করে এবং কীভাবে এগিয়ে যায় তা নির্ধারণের জন্য এগুলি ব্যবহার করে। অভ্যন্তরীণ লুপটি বন্ধনীগুলিতে না রেখে তাদের বাসা বাঁধা অভ্যন্তরীণ আদেশগুলি বিভ্রান্ত করবে এবং অপ্রত্যাশিত আচরণের দিকে পরিচালিত করবে।


1

কাউন্টারগুলির অগ্রগতি, যেমন

\advance\u by 1
\multiply\u by 3
\divide\u by 2

হিসাবে কাজ

\advance\u1        % \u = \u + 1
\advance\u-1       % \u = \u - 1
\multiply\u3       % \u = \u * 3
\multiply\u\u      % \u = \u * \u
\divide\u2         % \u = \u / 2

একই নীতিটি আরম্ভের জন্যও কাজ করে:

\newcount\u\u1

কাউন্টারটিকে 1 এ সেট করে।

মনে রাখবেন যে এগুলির পরে তাদের (বা ক \relax, তবে শ্বেত স্থানটি একই কাজ করে) একটি সাদা বর্ণচিহ্নের অক্ষর (লাইনব্রেক বা স্পেস ) প্রয়োজন so সুতরাং পরবর্তী কমান্ড উপেক্ষা করা হবে না। উদাহরণ স্বরূপ,

\u1\the\u

আপনাকে মুদ্রণ করে না, তবে \theআদেশটি উপেক্ষা করে ।


1

\enddocumentপরিবর্তে \end{document}দুটি অক্ষর সংরক্ষণ করে


যদিও \begin{document}=> এর জন্য কাজ করছে বলে মনে হচ্ছে না\document
তিনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.