আমি কীভাবে স্বয়ংক্রিয়ভাবে একটি ফোল্ডারের সমস্ত উত্স কোড ফাইলকে (পুনরাবৃত্তভাবে) সিনট্যাক্স হাইলাইটিং সহ একটি পিডিএফ এ রূপান্তর করতে পারি?


29

আমি কিছু প্রকল্পের উত্স কোডটি একটি ইউএসবিতে সংরক্ষণ করার জন্য একটি মুদ্রণযোগ্য ফাইলে রূপান্তর করতে চাই এবং পরে সহজেই মুদ্রণ করতে চাই। আমি এটা কিভাবে করবো?

সম্পাদন করা

প্রথমে আমি স্পষ্ট করতে চাই যে আমি কেবল অ-লুকানো ফাইল এবং ডিরেক্টরি মুদ্রণ করতে চাই (সুতরাং .gitউদাহরণস্বরূপ কোনও সামগ্রী নেই )।

বর্তমান ডিরেক্টরিতে অ গোপনীয় ডিরেক্টরিগুলির মধ্যে সমস্ত অ গোপনীয় ফাইলের একটি তালিকা পেতে find . -type f ! -regex ".*/\..*" ! -name ".*"আপনি এই থ্রেডের উত্তর হিসাবে কমান্ডটি চালাতে পারেন ।

একই থ্রেডে প্রস্তাবিত হিসাবে আমি কমান্ডটি ব্যবহার করে ফাইলগুলির একটি পিডিএফ ফাইল তৈরি করার চেষ্টা করেছি find . -type f ! -regex ".*/\..*" ! -name ".*" ! -empty -print0 | xargs -0 a2ps -1 --delegate no -P pdfতবে দুর্ভাগ্যক্রমে ফলাফল পিডিএফ ফাইলটি একটি সম্পূর্ণ গণ্ডগোল


এটি আপনার প্রয়োজনের সাথে খাপ a2ps -P file *.srcখায় কিনা তা জানেন না তবে আপনি আপনার উত্স কোডের বাইরে পোস্টস্ক্রিপ্ট ফাইল তৈরি করতে পারেন। তবে পিএস ফাইলগুলিকে রূপান্তর করা এবং পরে সংযুক্ত করা দরকার।
এমপি

রূপান্তর ( linux.about.com/od/commands/l/blcmdl1_convert.htm , চিত্রম্যাগিক) ব্যবহার করে আপনাকে পিএসএফ ফাইলগুলি থেকে একটি পিডিএফ তৈরি করতে সক্ষম হওয়া উচিত।
এসবিআই

আপনি "সম্পূর্ণ জগাখিচুড়ি" বলতে কি বোঝাতে পারেন? এটি ( i.stack.imgur.com/LoRhv.png ) আমার কাছে খুব খারাপ লাগছে না, ব্যবহার করে a2ps -1 --delegate=0 -l 100 --line-numbers=5 -P pdf- আমি -lকিছু শব্দ মোড়ানো এবং লাইন সংখ্যা প্রতিরোধ করতে প্রতি সারিতে 100 টি অক্ষর যোগ করেছি , তবে এটি কেবল ব্যক্তিগত পছন্দ।
এমপি

এই প্রকল্পটি (নন-লুকানো ডিরেক্টরিগুলিতে প্রতিটি পৃষ্ঠা দীর্ঘ প্রায় 4 টি খালি খালি নন-লুকানো ফাইলগুলি ) পিডিএফে রূপান্তর করার জন্য আমার কাছে সোর্স কোডের প্রায় 5 পৃষ্ঠাগুলি এবং গিব্বারিশের 39 পৃষ্ঠাগুলি ছিল।
বেন্টলে 4

উত্তর:


47

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

এটির জন্য আপনার নিম্নলিখিতটি ইনস্টল থাকা প্রয়োজন (ইনস্টল নির্দেশাবলী দেবিয়ান-ভিত্তিক সিস্টেমগুলির জন্য তবে এটি আপনার বিতরণের সংগ্রহস্থলগুলিতে উপলভ্য হওয়া উচিত):

  • pdflatex, colorএবংlistings

    sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended

    আপনার যদি ইনস্টল না করা থাকে তবে এটি একটি বেসিক ল্যাটেক্স সিস্টেমও ইনস্টল করা উচিত।

এগুলি ইনস্টল হয়ে গেলে আপনার উত্স কোড সহ একটি ল্যাটেক্স ডকুমেন্ট তৈরি করতে এই স্ক্রিপ্টটি ব্যবহার করুন। কৌশলটি listings(অংশবিশেষ texlive-latex-recommended) এবং color(ইনস্টল করা latex-xcolor) ল্যাটেক্স প্যাকেজগুলি ব্যবহার করছে। \usepackage[..]{hyperref}কি বিষয়বস্তু যোগ্য লিঙ্ক টেবিলে তালিকা করে তোলে।

#!/usr/bin/env bash

tex_file=$(mktemp) ## Random temp file name

cat<<EOF >$tex_file   ## Print the tex file header
\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color}  %% Allow color names
\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  xleftmargin=\parindent,
  language=C++,   %% Change this to whatever you write in
  breaklines=true, %% Wrap long lines
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{Gray},
  stringstyle=\color{Black},
  keywordstyle=\bfseries\color{OliveGreen},
  identifierstyle=\color{blue},
  xleftmargin=-8em,
}        
\usepackage[colorlinks=true,linkcolor=blue]{hyperref} 
\begin{document}
\tableofcontents

EOF

find . -type f ! -regex ".*/\..*" ! -name ".*" ! -name "*~" ! -name 'src2pdf'|
sed 's/^\..//' |                 ## Change ./foo/bar.src to foo/bar.src

while read  i; do                ## Loop through each file
    name=${i//_/\\_}             ## escape underscores
    echo "\newpage" >> $tex_file   ## start each section on a new page
    echo "\section{$i}" >> $tex_file  ## Create a section for each filename

   ## This command will include the file in the PDF
    echo "\lstinputlisting[style=customasm]{$i}" >>$tex_file
done &&
echo "\end{document}" >> $tex_file &&
pdflatex $tex_file -output-directory . && 
pdflatex $tex_file -output-directory .  ## This needs to be run twice 
                                           ## for the TOC to be generated    

যে ডিরেক্টরিতে উত্স ফাইল রয়েছে সেই স্ক্রিপ্টটি চালান

bash src2pdf

all.pdfএটি বর্তমান ডিরেক্টরিতে ডাকা একটি ফাইল তৈরি করবে । আমি আমার সিস্টেমে পাওয়া কয়েকটি এলোমেলো উত্স ফাইলের সাহায্যে এটি চেষ্টা করেছি (বিশেষত উত্স থেকে দুটি ফাইল vlc-2.0.0) এবং এটি ফলাফলের পিডিএফের প্রথম দুটি পৃষ্ঠার স্ক্রিনশট:

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


বেশ কয়েকটি মন্তব্য:

  • আপনার উত্স কোড ফাইলের নামগুলিতে ফাঁক থাকলে স্ক্রিপ্টটি কাজ করবে না। যেহেতু আমরা উত্স কোড সম্পর্কে কথা বলছি, আমি ধরে নিব তারা তা করবে না।
  • ! -name "*~"ব্যাকআপ ফাইলগুলি এড়াতে আমি যুক্ত করেছি ।
  • আমি আপনাকে প্রস্তাব দিচ্ছি যে findআপনার ফাইলগুলি খুঁজে পেতে আরও নির্দিষ্ট কমান্ড ব্যবহার করুন, অন্যথায় কোনও র্যান্ডম ফাইল পিডিএফে অন্তর্ভুক্ত করা হবে। আপনার ফাইলগুলির সকলের যদি নির্দিষ্ট এক্সটেনশান থাকে ( .cএবং .hউদাহরণস্বরূপ), আপনার findস্ক্রিপ্টটিতে এ জাতীয় কিছু দিয়ে প্রতিস্থাপন করা উচিত

    find . -name "*\.c" -o -name "\.h" | sed 's/^\..//' | 
  • listings অপশনগুলির সাথে চারপাশে খেলুন , আপনি এটি যেমন চান ঠিক তেমন করতে এটি টুইট করতে পারেন।

1
বাহ, এটাকেই আমি উত্তর বলি! :)
এমপি

1
ওএমজি টেরডন, আপনি এই প্রশ্নের মালিকানা পেয়েছেন ^^। স্ক্রিপ্ট চেষ্টা অন্য লোকেদের প্রতি: মধ্যে যদি আপনি চালাতে src2pdf: line 36: warning: here-document at line 5 delimited by end-of-file (wanted EOF')যখন স্ক্রিপ্ট চালাতে আপনি করতে হবে ফাইলের শেষে লাইনে হোয়াইটস্পেস মুছতে কাজ তার জন্য যাতে।
বেন্টলে 4

1
যদি আপনার ফাইল বলা হয় src2pdfতবে পিডিএফ এ বাদ দিতে স্ক্রিপ্টের লাইনে ! -name "src2pdf"এটি প্রবেশ করান । findfind . -type f ! -regex ".*/\..*" ! -name "src2pdf" ! -name ".*" ! -name "*~" |
বেন্টলে 4

1
@ বেন্টলে 4 ধন্যবাদ! আমি শ্বেতস্পেসটি সরিয়ে ফেললাম (স্ক্রিপ্টটি উত্তরে আমি পেস্ট করেছি) এবং স্ক্রিপ্টটি findফলাফল থেকে নিজেই সরিয়ে দিতে ফিল্টার যুক্ত করেছি (আমি স্ক্রিপ্টটি আমার directory রাস্তায় ছিল এমন অন্য ডিরেক্টরিতে সংরক্ষণ করেছি যাতে আমার কাছে এটি ছিল না সমস্যা)। এছাড়াও, আপনি সোর্স ফাইলগুলির জন্য আরও ভাল মার্কআপ করার জন্য যে ভাষাটি language=C++চান তা বদলে আপনি যা চান পরিবর্তন করতে পারেন, এটি বিভিন্ন বিভিন্ন ভাষার সাথে ডিল করতে পারে, এখানে দেখুন
টেরডন

1
@ কোবডআপ আমি আসলে জানি না। ল্যাটেক্স এবং ইউটিএফ 8 জটিল হতে পারে। এটি \ usepackage [জার্মানি] {বাবেল with with এর সাথে কাজ করা উচিত\usepackage[utf8]{inputenc} তবে এটি আমার পরীক্ষায় ব্যর্থ। যাইহোক, আমি সন্দেহ করি যে আমি এটি সত্য utf8 খাওয়াচ্ছি না। এটি তার নিজস্ব প্রশ্নের পক্ষে মূল্যবান হতে পারে তবে আমি আপনাকে টেক্স - ল্যাটেক্সে জিজ্ঞাসা করার পরামর্শ দিচ্ছি , তাদের জানা উচিত।
টেরডন

2

( স্ট্যাকওভারফ্লো থেকে )

for i in *.src; do echo "$i"; echo "---"; cat "$i"; echo ; done > result.txt

এটির ফলাফল হবে t

  • ফাইলের নাম
  • বিভাজক (---)
  • .Src ফাইলের সামগ্রী
  • সমস্ত * .src ফাইল শেষ না হওয়া পর্যন্ত উপরে থেকে পুনরাবৃত্তি করুন

যদি আপনার উত্স কোডের আলাদা এক্সটেনশন থাকে তবে কেবল প্রয়োজন অনুযায়ী পরিবর্তন করুন। আপনি প্রয়োজনীয় তথ্য যুক্ত করতে ইকো বিট সম্পাদনা করতে পারেন (হতে পারে "ফাইলের নাম file 1" প্রতিধ্বনি বা বিভাজক পরিবর্তন করতে পারেন, বা ফাইলের শেষের দিকে ফাইল বিভাজক যুক্ত করতে পারেন)।

লিঙ্কটিতে অন্যান্য পদ্ধতি রয়েছে, তাই আপনার পছন্দ মতো যে কোনও পদ্ধতি ব্যবহার করুন। আমি এটিকে সবচেয়ে নমনীয় বলে মনে করি, যদিও এটি সামান্য শিখনের বক্ররেখা নিয়ে আসে।

কোডটি ব্যাশ টার্মিনাল থেকে পুরোপুরি চলবে (সবেমাত্র ভার্চুয়ালবক্স উবুন্টুতে পরীক্ষা করা হয়েছে)

যদি আপনি ফাইলের নাম এবং আপনার একসাথে একত্রীকরণের ফাইলগুলির বিষয়বস্তুর যত্ন না রাখেন:

cat *.src > result.txt

পুরোপুরি সূক্ষ্ম কাজ করবে।

আরেকটি পদ্ধতির পরামর্শ দেওয়া হয়েছিল:

grep "" *.src > result.txt

যা ফাইলের নামের সাথে একক লাইনকে উপসর্গ করবে, যা কিছু লোকের পক্ষে ভাল হতে পারে, ব্যক্তিগতভাবে আমি এটি খুব বেশি তথ্য পাই, সুতরাং আমার প্রথম পরামর্শটি উপরের লুপটির জন্য কেন।

স্ট্যাক ওভারফ্লো ফোরামের লোকদের ক্রেডিট।

সম্পাদনা: আমি ঠিক বুঝতে পেরেছি যে আপনি শেষের ফলাফল হিসাবে বিশেষত এইচটিএমএল বা পিডিএফ পরে রয়েছেন, কিছু সমাধান আমি দেখেছি টেক্সট ফাইলটি পোস্টস্ক্রিপ্টে মুদ্রণ করা এবং তারপরে পোস্টস্ক্রিপ্টকে পিডিএফ তে রূপান্তর করা। কিছু কোড আমি দেখেছি:

groff -Tps result.txt > res.ps

তারপর

ps2pdf res.ps res.pdf 

(আপনাকে ভুতের স্ক্রিপ্ট থাকা দরকার)

আশাকরি এটা সাহায্য করবে.


এটি কেবলমাত্র একটি নির্দিষ্ট এক্সটেনশনের (.src) ফাইলগুলির জন্য কাজ করে তবে আমি চাই যে প্রতিটি ফাইলই পিডিএফ-তে প্রসারিত হোক না কেন। আমি যদিও গোপনীয় ডায়ারগুলি এবং গোপনীয় ফাইলগুলি বাদ দিতে চাই। আমি মূল পোস্টটি সম্পাদনা করেছি, আপনি কি এটি একবার দেখে নিতে পারেন?
বেন্টলে 4

2

আমি জানি আমি waaaay খুব দেরী করছি, তবে যে কেউ সমাধানের সন্ধান করছেন এটি সম্ভবত দরকারী find

@ টার্ডনের উত্তরের ভিত্তিতে, আমি একটি বেস স্ক্রিপ্ট তৈরি করেছি যা কাজটি করে: https://github.com/eljuanchosf/source-code-to-pdf


রেফারেন্স লিঙ্ক (গুলি) থেকে উত্তরের প্রয়োজনীয় অংশগুলি উদ্ধৃত করুন, কারণ লিঙ্কযুক্ত পৃষ্ঠা (গুলি) পরিবর্তন হলে উত্তরটি অবৈধ হতে পারে।
ডেভিডপস্টিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.