मैं सिंटैक्स हाइलाइटिंग के साथ एक फ़ोल्डर (पुनरावर्ती) में सभी स्रोत कोड फ़ाइलों को स्वचालित रूप से एक पीडीएफ में कैसे बदल सकता हूं?


29

मैं कुछ परियोजनाओं के स्रोत कोड को एक usb पर सहेजने और बाद में आसानी से प्रिंट करने के लिए एक प्रिंट करने योग्य फ़ाइल में परिवर्तित करना चाहूंगा। मैं उसे कैसे कर सकता हूँ?

संपादित करें

सबसे पहले मैं स्पष्ट करना चाहता हूं कि मैं केवल गैर-छिपी हुई फाइलों और निर्देशिकाओं को प्रिंट करना चाहता हूं (इसलिए कोई सामग्री नहीं .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आप अपने स्रोत कोड से पोस्टस्क्रिप्ट फ़ाइलों का उत्पादन कर सकते हैं। लेकिन PS फ़ाइलों को बाद में परिवर्तित और संयोजित किया जाना चाहिए।
MPY

कन्वर्ट ( linux.about.com/od/commands/l/blcmdl1_convert.htm , imagemagick) का उपयोग करके आपको तब ps फ़ाइलों से एक पीडीएफ बनाने में सक्षम होना चाहिए।
एसबीआई

क्या आप टिप्पणी कर सकते हैं, "पूर्ण गड़बड़" के साथ आपका क्या मतलब है? यह ( i.stack.imgur.com/LoRhv.png ) मेरे लिए बहुत बुरा नहीं है, का उपयोग करते हुए a2ps -1 --delegate=0 -l 100 --line-numbers=5 -P pdf- मैंने -lकुछ शब्द आवरण और पंक्ति संख्याओं को रोकने के लिए प्रति पंक्ति 100 वर्णों के लिए जोड़ा , लेकिन यह केवल व्यक्तिगत प्राथमिकता है।
रात 13:53

इस परियोजना को परिवर्तित करने के लिए (4 गैर-खाली गैर-छिपी हुई फाइलें प्रत्येक पृष्ठ के बारे में लंबे समय तक गैर-छिपी निर्देशिकाओं में) पीडीएफ में मेरे पास स्रोत कोड के 5 पृष्ठ और अस्पष्ट के 39 पृष्ठ थे।
बेंटले 4

जवाबों:


47

मैं आपके सवाल से घबरा गया और थोड़े दूर चला गया। यह समाधान एक क्लिक करने योग्य सूचकांक और रंग हाइलाइटेड कोड के साथ एक अच्छी पीडीएफ फाइल उत्पन्न करेगा। यह वर्तमान निर्देशिका और उपनिर्देशिकाओं में सभी फाइलों को ढूंढेगा और उनमें से प्रत्येक के लिए पीडीएफ फाइल में एक अनुभाग बनाएगा (नीचे दिए गए नोट्स देखें कि आपकी खोज को और अधिक विशिष्ट कैसे बनाया जाए)।

इसके लिए आवश्यक है कि आपके पास निम्न इंस्टाल (इंस्ट्रक्शन निर्देश डेबियन-आधारित सिस्टम के लिए हों, लेकिन ये आपके वितरण के रिपॉजिटरी में उपलब्ध होने चाहिए):

  • pdflatex, colorऔरlistings

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

    यदि आपके पास एक स्थापित नहीं है, तो यह एक बुनियादी लाटेक सिस्टम भी स्थापित करना चाहिए।

एक बार ये स्थापित हो जाने के बाद, अपने स्रोत कोड के साथ एक LaTeX दस्तावेज़ बनाने के लिए इस स्क्रिप्ट का उपयोग करें। ट्रिक LaTeX पैकेज का 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
वाह, यह वही है जिसे मैं जवाब कहता हूं! :)
MPY

1
ओएमजी टेर्डन, आप उस सवाल के मालिक हैं ^ ^। स्क्रिप्ट की कोशिश कर रहे अन्य लोगों के लिए: यदि आप स्क्रिप्ट चलाते src2pdf: line 36: warning: here-document at line 5 delimited by end-of-file (wanted EOF')समय आपको ईओएफ लाइन पर व्हाट्सएप को डिलीट करना है ताकि वह काम कर सके।
बेंटले 4

1
यदि आपकी फ़ाइल को कॉल किया जाता है, src2pdfतो इसे स्क्रिप्ट में इस तरह ! -name "src2pdf"से findलाइन में डालें find . -type f ! -regex ".*/\..*" ! -name "src2pdf" ! -name ".*" ! -name "*~" |ताकि इसे पीडीएफ में छोड़ा जा सके।
बेंटले 4

1
@ बेंटले 4 धन्यवाद! मैंने व्हाट्सएप को हटा दिया (यह जोड़ा गया था जब मैंने स्क्रिप्ट को उत्तर में चिपका दिया था) और findपरिणामों से स्क्रिप्ट को हटाने के लिए फ़िल्टर जोड़ा था (मैंने स्क्रिप्ट को किसी अन्य निर्देशिका में सहेजा था जो कि मेरी $ PATH में थी इसलिए मेरे पास नहीं थी संकट)। इसके अलावा, आप स्रोत फ़ाइलों के लिए उपयोग की जाने वाली भाषा को बेहतर मार्कअप के language=C++लिए बदल सकते हैं, जो भी आप चाहते हैं उसे बदलकर , यह कई अलग-अलग भाषाओं से निपट सकता है, यहां देखें ।
टेराडॉन

1
@qubodup मैं वास्तव में नहीं जानता। LaTeX और UTF8 मुश्किल हो सकते हैं। यह \ usepackage [german] {babel} `के साथ काम करना चाहिए,\usepackage[utf8]{inputenc} लेकिन यह मेरे परीक्षणों में विफल रहता है। हालाँकि, मुझे संदेह है कि मैं इसे सही utf8 नहीं खिला रहा हूँ। यह अपने सवाल के लायक हो सकता है, लेकिन मेरा सुझाव है कि आप TeX - LaTeX पर पूछें , उन्हें पता होना चाहिए।
टेराडॉन

2

( StackOverflow से )

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

यह एक परिणाम देगा।

  • फ़ाइल का नाम
  • विभाजक (---)
  • .Src फ़ाइल की सामग्री
  • जब तक सभी * .src फाइलें नहीं हो जाती हैं तब तक ऊपर से दोहराएं

यदि आपके स्रोत कोड में अलग-अलग एक्सटेंशन हैं, तो बस आवश्यकतानुसार बदलें। आप आवश्यक जानकारी जोड़ने के लिए इको बिट को भी संपादित कर सकते हैं (शायद इको "$ 1 का नाम बदलें" या विभाजक को बदल दें, या एक एंड-ऑफ-फाइल सेपरेटर जोड़ें)।

लिंक में अन्य विधियां हैं, इसलिए जो भी विधि आपको सबसे अच्छी लगे उसका उपयोग करें। मुझे यह सबसे अधिक लचीला लगता है, हालांकि यह थोड़ा सीखने की अवस्था के साथ आता है।

कोड पूरी तरह से एक bash टर्मिनल से चलेगा (बस एक VirtualBox Ubuntu पर परीक्षण किया गया)

यदि आप फ़ाइल नाम के बारे में परवाह नहीं करते हैं और केवल एक साथ विलय की गई फ़ाइलों की सामग्री के बारे में परवाह करते हैं:

cat *.src > result.txt

पूरी तरह से ठीक काम करेगा।

एक और तरीका सुझाया गया:

grep "" *.src > result.txt

जो फ़ाइल नाम के साथ हर एक पंक्ति को उपसर्ग करेगा, जो कुछ लोगों के लिए अच्छा हो सकता है, व्यक्तिगत रूप से मुझे यह बहुत अधिक जानकारी मिलती है, इसलिए मेरा पहला सुझाव ऊपर लूप के लिए क्यों है।

StackOverflow फोरम के लोगों को इसका श्रेय।

संपादित करें: मुझे बस एहसास हुआ कि आप अंतिम परिणाम के रूप में विशेष रूप से HTML या पीडीएफ के बाद हैं, मैंने जो कुछ समाधान देखे हैं वह पोस्टस्क्रिप्ट में पाठ फ़ाइल को प्रिंट करना और फिर पोस्टस्क्रिप्ट को पीडीएफ में बदलना है। कुछ कोड मैंने देखे हैं:

groff -Tps result.txt > res.ps

फिर

ps2pdf res.ps res.pdf 

(आपको भूत-प्रेत की आवश्यकता है)

उम्मीद है की यह मदद करेगा।


यह केवल एक विशिष्ट एक्सटेंशन (.src) की फाइलों के लिए काम करता है, लेकिन मैं चाहता हूं कि हर फाइल को विस्तार की परवाह किए बिना उस पीडीएफ में डाला जाए। हालांकि मैं गैर-छिपी डायरियों और गैर-छिपी हुई फ़ाइलों को छोड़ना चाहता हूं। मैंने मूल पोस्ट को संपादित किया, क्या आप इसे देख सकते हैं?
बेंटले 4

2

मुझे पता है कि मैं बहुत देर हो चुकी हूं, लेकिन कोई समाधान ढूंढ रहा है, यह उपयोगी हो सकता है।

@ टेर्डन के उत्तर के आधार पर, मैंने एक BASH स्क्रिप्ट बनाई है जो काम करती है: https://github.com/eljuanchosf/source-code-to-pdf


कृपया संदर्भ लिंक (एस) से उत्तर के आवश्यक हिस्सों को उद्धृत करें, क्योंकि लिंक लिंक किए गए पृष्ठ बदलने पर उत्तर अमान्य हो सकता है।
DavidPostill
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.