কোনও কাগজের জন্য কোড লেখার সর্বাধিক সহায়ক উপায় কী হবে যাতে পাঠকরা স্পষ্টতই ফলাফলগুলি তাদের তৈরি করা কোডের সাথে মেলে?


14

আমি একটি পুনরুত্পাদনযোগ্য কাগজ লিখছি, এবং কাগজটি একটি পাইথন স্ক্রিপ্ট দ্বারা উত্পাদিত গুণগত ফলাফল রয়েছে (অনুরূপ একটি ম্যাটল্যাব স্ক্রিপ্ট প্রায় অভিন্ন ফলাফল উত্পন্ন করে)। আমি অনুভব করি যে পাঠকরা কোডটিতে গণনার সাথে কাগজের হিসাব মেলাতে পারলে পাঠকরা তাদের পক্ষে বুঝতে সহজ হবে। কাজটি একটি বিমূর্ত আনুষ্ঠানিকতার প্রস্তাব দেয় এবং কাগজের উদাহরণগুলি পাঠকদের জন্য এই আনুষ্ঠানিকতাটিকে আরও কংক্রিট করার কথা বলেছে (যাদের মধ্যে অনেকে প্রকৌশলী হবে); কোডটি সম্ভবত গণনাগুলি কীভাবে সম্পাদন করা যায় তার সর্বাধিক বিস্তারিত রেকর্ড হবে এবং এটি পরিষ্কার করা আমাদের পর্যালোচনা প্রক্রিয়ার সময় সহায়তা করতে পারে help

কোড এবং গণনার ফলাফলের (চিত্র, সমীকরণ) আরও সুস্পষ্টভাবে কীভাবে যুক্ত করা যায় সে সম্পর্কে কারও কি কোনও পরামর্শ রয়েছে?

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

def example_1():
    # Insert code corresponding to first example
    pass

def figure_1():
    # Insert code that generates Figure 1
    pass

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


1
আপনি ফিগারটিতে কোড এবং চিত্র উভয়ই পোস্ট করতে পারেন । প্রত্যেকটি একটি ডিওআই-এর মতো সনাক্তকারী পাবেন যা আপনি যেখানে প্রয়োজন সেখানে উল্লেখ করতে পারেন।
ডেভিড কেচসন

সফ্টওয়্যার অবিচ্ছিন্ন রক্ষণাবেক্ষণ প্রয়োজন। কাগজপত্র প্রকাশিত হয় এবং এই তারিখে তারা পাথর স্থাপন করা হয়। লক্ষ্যটি প্রশংসনীয় তবে এটি কখনই কার্যকর হবে না। (আমি ভুল প্রমাণিত হতে পেরে খুশি হব: যার সাথে সম্পর্কিত যে সফ্টওয়্যারটি এখনও 5 বছরের বেশি বয়সী একটি কাগজ খুঁজে পায় সে আমাকে কল করতে পারে myself নিজের জন্য, আমি কোনও কাগজের সাথে যুক্ত এমন কোনও কোড পাইনি যা আসলে কাজ করে, অন্যটি ছাড়া "ফ্রেমওয়ার্ক বিবরণ কাগজপত্র",
এফএফটিডাব্লু হুইটপেপারের

উত্তর:


7
  1. আপনি পুরো কাগজটি নয়েবে লেখার বিষয়ে বিবেচনা করতে পারেন । এটি সেট আপ করা কিছুটা ক্লান্তিকর, তবে কোড এবং ল্যাটেক্স-ফর্ম্যাটযুক্ত পাঠ্য, সমীকরণ এবং চিত্রগুলি মেশানোর এটি খুব শক্তিশালী উপায়। দীর্ঘ প্রোগ্রামের জন্য, এটি আপনার কোডটিকে কোনও নিবন্ধের চেয়ে বেশি বইতে রূপান্তরিত করবে, তবে সংক্ষিপ্ত প্রোগ্রামগুলির জন্য এটি বেশ ভালভাবে কাজ করতে পারে।

  2. আপনি যদি এতদূর যেতে না চান তবে লটেক্স ব্যবহার করে আপনার কোড তালিকার মন্তব্য বিভাগগুলিকে বিন্যাস করার পক্ষে যুক্তিসঙ্গতভাবে সরল হওয়া উচিত। listingsপ্যাকেজ আপনি এটি বন্ধ টান সাহায্য করতে পারেন। একটি সংক্ষিপ্ত উদাহরণ এখানে:

\ Documentclass {নিবন্ধ}
\ Usepackage {amsmath}
\ Usepackage {তালিকা}
\ শুরু {ডকুমেন্ট}
\ শুরু {সমীকরণ}
  \ ট্যাগ {EQ: এক}
  কুঠার = খ
\ শেষ {সমীকরণ}
\ শুরু {lstlisting} [escapechar = \%]
  # সমীকরণ% ~ q একরেফ {এক: একটি one% সমেত একটি রেফারেন্স সহ মন্তব্য
  ডিএফ চ (ক):
    একটি + 1 প্রদান করুন
\ শেষ {lstlisting}
\ শেষ {ডকুমেন্ট}

কিছু অতিরিক্ত ম্যানিপুলেশন সহ, আপনার রেফারেন্সযুক্ত সমীকরণ নম্বরগুলি সমীকরণের তালিকার জন্য ব্যবহার করা মনোস্পেস ফন্টে উপস্থিত হতে সক্ষম হওয়া উচিত।


1
তালিকাভুক্ত পরিবেশটি আসলে আপনাকে একটি প্রোগ্রামিং ভাষা নির্দিষ্ট করার অনুমতি দেয় এবং এটি প্রতিটি ভাষার বিভিন্ন উপাদানকে সুন্দরভাবে রঙিন কোড / স্টাইল কোড দেয়।
ওল্ফগ্যাং ব্যাঙ্গার্থ

হ্যাঁ, আমি এর প্রিন্টিং-প্রিন্টিংয়ের বিশাল ফ্যান নই, তবে ওল্ফগ্যাং ঠিকই আছে।
বিল বার্থ

5

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

আপনার কথাটি আরও বলা যায় যে, "পুনরুত্পাদনযোগ্য গবেষণা" কাগজ সরবরাহ করার লক্ষ্য নিয়ে "সোয়েভ" শিরোনামের অধীনে নয়েব Rসম্প্রদায়ের কিছু সময়ের জন্য উন্নত হয়েছে (ভাল মূলত Sসম্প্রদায়টি, সুতরাং নাম), যেখানে কোডটি আসলে চালিত হয় যখন লেটেক্স ফাইলটি সংকলিত হয় (এবং বিকল্প হিসাবে এটিও প্রদর্শিত হয়)। বেশ কয়েকটি একাডেমিক কাগজপত্র সোয়েভে লেখা রয়েছে (সহ আমি বিশ্বাস করি, সমস্ত আর-জার্নাল; তবে বায়োস্টাটিক্সের জার্নালটিও দেখুন এবং এটি পুনরুত্পাদনযোগ্য কাগজগুলির নীতি))

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

পাইথনের নিজস্ব সমাধান রয়েছে যা একই রকম, আইপথন নোটবুক , যা এইচটিএমএল, সম্ভবত লটেক্সকে রেন্ডার করতে পারে তবে আমি এ সম্পর্কে কম জানি।

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

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


3

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

আরেকটি বিকল্প হ'ল একই লেখক / রক্ষণাবেক্ষকের কাছ থেকে পাইথনটেক্স ব্যবহার করা যা ল্যাটেক্স উত্সটি সংকলন করার সময় গণনা চালানোর অনুমতি দেয়, সুতরাং কাগজ এবং কোডের ফলাফলগুলি সর্বদা একসাথে উত্পন্ন হয় এবং তাই সর্বদা সুসংগত হয়। দেখুন PythonTeX গ্যালারি এখানে।

\documentclass[a4paper,notitlepage,11pt]{article}

\usepackage{amsmath}
\usepackage{cases}
\usepackage{minted}

\begin{document}

The mathematical definition of the Fibonacci
series is given in~Equations~(\ref{eq:fibdef:init1}--\ref{eq:fibdef:rule})
It can be implemented using either a recursive or iterative algorithm
in Python.

\begin{numcases}{f(n)=}
  \label{eq:fibdef}
    0               & n = 0 \label{eq:fibdef:init1}\\
    1               & n = 1 \label{eq:fibdef:init2}\\
    f(n-1) + f(n-2) & \text{otherwise} \label{eq:fibdef:rule}
\end{numcases}

The algorithms below are an implementation of both variants.
Listing~\ref{alg:fib_recursive} shows the recursive variant (see
line~\ref{alg:fibo_rec:line_rec} in listing~\ref{alg:fib_recursive}) while
listing~\ref{alg:fib_iterative} shows the iterative variant. Both can be
optimized, of course.

\begin{listing}[ht]
  \begin{minted}[linenos, escapeinside=||]{python}
def fibo_rec(N):
    if N == 0:
        result = 1 |[Comment: See case (\ref{eq:fibdef:init1})]|
    elif N == 1:
        result = 1 |[Comment: See case (\ref{eq:fibdef:init2})]|
    else:
        result = fibo_rec(N-1) + fibo_rec(N-2) |\label{alg:fibo_rec:line_rec}[Comment: See case (\ref{eq:fibdef:rule})]|

    return result
  \end{minted}
\caption{Fibonacci recursive}
\label{alg:fib_recursive}
\end{listing}

\begin{listing}[ht]
  \begin{minted}[linenos, escapeinside=||]{python}
def fibo_iter(N):
    if N == 0:
        fib_N = 1
    elif N == 1:
        fib_N = 1
    else:
        fib_Nmin2 = 1
        fib_Nmin1 = 1
        for i in range(2,N+1):
            fib_N = fib_Nmin2 + fib_Nmin1
            fib_Nmin2 = fib_Nmin1
            fib_Nmin1 = fib_N
    return fib_N
  \end{minted}
\caption{Fibonacci iterative}
\label{alg:fib_iterative}
\end{listing}

\end{document}

এখানে চিত্র বর্ণনা লিখুন


0

Org- মোডের লিটারেট প্রোগ্রামিং কার্যকারিতা ব্যবহার করুন

সর্বাধিক সংস্থা-মোড ব্যবহারকারীদের পারেন বিল্ট-ইন প্রকল্প / সময় ব্যবস্থাপনা কার্যকারিতা বা একাধিক জনপ্রিয় ফাইল ফরম্যাট মধ্যে রপ্তানি কাগজপত্র করার ক্ষমতা, যেমন উপর একচেটিয়াভাবে ফোকাস ঝোঁক পিডিএফ , সহজে থেকে বজায় রাখার জন্য টেক্সট ফাইল।

যাইহোক, org- মোডের সেরা বৈশিষ্ট্যটি হ'ল ওপেন সোর্স সম্প্রদায় দ্বারা প্রতি মাসে আরও বেশি ভাষাগুলি যুক্ত 30 টিরও বেশি ভাষায় শিক্ষিত প্রোগ্রাম তৈরি করার দক্ষতা।

নীচে রুবি এবং পাইথন ব্যবহার করে তুচ্ছ কোডের উদাহরণ দেওয়া হল:

 #+NAME: trivial-code-ex1
 #+BEGIN_SRC ruby 
   "hello world!"
 #+END_SRC

 #+RESULTS: trivial-code-ex1
 : hello world!


 #+NAME: func-of-x-and-y
 #+BEGIN_SRC python :var x=1 :var y=2 :session
   x + y
 #+END_SRC

 #+RESULTS: func-of-x-and-y
 : 3

পেশাদাররা

  • আর, পাইথন, রুবি, পার্ল, সি, সি ++, জাভা, ক্লোজার, জাভাস্ক্রিপ্ট, কমন লিস্প, শেল, এসকিউএল, সহ 30 টিরও বেশি প্রোগ্রামিং ভাষার জন্য সমর্থন ...
  • ক্ষমতা:

    • SRCআউটপুট এবং / বা মান হিসাবে ব্লক ফলাফল ক্যাপচার
    • SRCকোড, তালিকা, টেবিল, ল্যাটেক্স, এইচটিএমএল হিসাবে ব্লক ফলাফল ফর্ম্যাট করুন
    • SRCব্লকের ভেরিয়েবলের জন্য বাহ্যিক এবং অভ্যন্তরীণ উভয় ডেটা ব্যবহার করুন ।
    • নামযুক্ত SRCব্লকগুলির আউটপুট SRCব্লকগুলিতে ভেরিয়েবল হিসাবে ব্যবহার করুন।
    • ব্লকের nowebভিতরে সিনট্যাক্স ব্যবহার করুন SRC

      প্রো টিপ: আপনি nowebসিনট্যাক্স এতে ব্যবহার করতে পারেন :

      • নামযুক্ত SRCব্লক থেকে কোড প্রবেশ করান , উদাহরণস্বরূপ func-of-x-and-y, অন্য একটি SRCব্লকের ভিতরে ।

        #+BEGIN_SRC python :session :noweb yes 
          x=2
          y=3
          "f(x,y) is\n\n <<func-of-x-and-y>> \n\nso f({0},{1}) equals\n\n {2}".format(x,y,<<func-of-x-and-y>>)
        #+END_SRC
        
        #+RESULTS:
        : f(x,y) is
        : 
        :  x + y 
        : 
        : so f(2,3) equals
        : 
        :  5
      • নামযুক্ত SRCব্লকের ফলাফলগুলি সন্নিবেশ করান , যেমন func-of-x-and-yঅন্য কোনও SRCব্লকের ভিতরে

        #+BEGIN_SRC python :session :noweb yes 
          "f(x,y) is\n\n <<func-of-x-and-y>> \n\nso f(3,4) equals\n\n <<func-of-x-and-y(x=3,y=4)>>"
        #+END_SRC
        
        #+RESULTS:
        : f(x,y) is
        : 
        :  x + y 
        : 
        : so f(3,4) equals
        : 
        :  7
      • বাহ্যিক উত্স ফাইলগুলিতে শিরোনাম বা রফতানির কোডটি SRCপঠনযোগ্যতার জন্য এবং org- মোড ফাইলে ব্লকের নামকরণ করুন :tangle

  • ওপেন সোর্স প্রকল্প - বিয়ারের মতো বিনামূল্যে এবং স্বাধীনতার মতো মুক্ত।

  • গিটের মতো সংস্করণ নিয়ন্ত্রণ সফ্টওয়্যার সহ টেক্সট ফাইল ফর্ম্যাট দুর্দান্ত কাজ করে।
  • অন্যান্য বৈশিষ্ট্যগুলির ওডলগুলি যা আমি প্রবেশ করব না কারণ এই উত্তরটি দীর্ঘ হচ্ছে।

কনস

  • Org- মোড ব্যবহার করতে gnu emacs ইনস্টল করা এবং কনফিগার করা দরকার।

    দ্রষ্টব্য: আপনি বেশিরভাগই এই উত্তরটি পড়া বন্ধ করে দিয়েছিলেন gnu emacs পড়ার পরে। বাকি সাহসী আত্মার জন্য, আপনি আপনার প্রিয় পাঠ্য সম্পাদকটি ব্যবহার করতে পারেন এবং কমান্ড-লাইন থেকে আপনার org- মোড ফাইলগুলি প্রসেস করার জন্য কেবল ইম্যাক্স কল করতে পারেন।

  • আপনার প্রয়োজনীয় সমস্ত প্রোগ্রামিং সফ্টওয়্যার ইনস্টল এবং কনফিগার করা দরকার।

  • আপনি পিডিএফ তৈরি করতে চাইলে ল্যাটেক্স ইউটিলিটিগুলি ইনস্টল এবং কনফিগার করতে হবে।
  • org- মোডটি তেমন জানে না ipython notebooksবা Sweaveতাই আপনি সম্ভবত ২০০৮ সালে লিটারেট প্রোগ্রামিং কার্যকারিতা যুক্ত করার পরেও অনেকগুলি পোস্ট পোস্ট দেখতে পাবেন না।
  • Org- মোড মার্কআপ সিনট্যাক্স শেখা
  • Org- মোডের সাথে কাজ করে এমন অন্যান্য দুর্দান্ত সরঞ্জামগুলির মধ্যে সর্বাধিক পেতে চাইলে gnu emacs বা স্পেসম্যাকগুলি কীভাবে ব্যবহার করতে হয় তা সম্ভবত শিখছি।

সম্পূর্ণ প্রকাশ: আমি পরমাণু সম্পাদকের জন্য org- মোড প্যাকেজের প্রাথমিক রক্ষণাবেক্ষণকারী ।


এই উত্তরের কোডটি ব্যবহার করে যাচাই করা হয়েছে:
ইমাস সংস্করণ: জিএনইউ ইমা্যাকস 25.2.1 org-
মোড সংস্করণ: 9.1.2

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.