Chciałbym przekonwertować kod źródłowy kilku projektów na jeden plik do wydrukowania, aby zapisać na usb i wydrukować łatwo później. Jak mogę to zrobić?
Edytować
Po pierwsze chcę wyjaśnić, że chcę wydrukować tylko nie ukryte pliki i katalogi (więc nie ma zawartości .git
na przykład.).
Dostać lista wszystkich nie ukrytych plików w niewidocznych katalogach w bieżącym katalogu możesz uruchomić find . -type f ! -regex ".*/\..*" ! -name ".*"
polecenie jako odpowiedź w ten wątek .
Zgodnie z sugestią w tym samym wątku próbowałem utworzyć plik PDF z plikami za pomocą polecenia find . -type f ! -regex ".*/\..*" ! -name ".*" ! -empty -print0 | xargs -0 a2ps -1 --delegate no -P pdf
ale niestety wynikowy plik pdf to kompletny bałagan .
a2ps -P file *.src
możesz tworzyć pliki postscriptowe z kodu źródłowego. Jednak pliki PS muszą być konwertowane i łączone później.a2ps -1 --delegate=0 -l 100 --line-numbers=5 -P pdf
-- Dodałem-l
za 100 znaków na wiersz, aby zapobiec zawijaniu słów i numerom linii, ale to tylko osobiste preferencje.Odpowiedzi:
Zaintrygowało mnie twoje pytanie i trochę mnie poruszyło. To rozwiązanie wygeneruje ładny plik PDF z klikalnym indeksem i kodem podświetlonym kolorem. Znajduje wszystkie pliki w bieżącym katalogu i podkatalogach oraz tworzy sekcję w pliku PDF dla każdego z nich (patrz uwagi poniżej, aby uzyskać bardziej szczegółowe informacje o poleceniu find).
Wymaga zainstalowania następujących elementów (instrukcje instalacji są przeznaczone dla systemów opartych na Debianie, ale powinny być dostępne w repozytoriach twojej dystrybucji):
pdflatex
,color
ilistings
Powinno to również zainstalować podstawowy system LaTeX, jeśli go nie masz.
Po zainstalowaniu użyj tego skryptu, aby utworzyć dokument LaTeX z kodem źródłowym. Sztuczka polega na użyciu
listings
(częśćtexlive-latex-recommended
) icolor
(zainstalowane przezlatex-xcolor
) Pakiety LaTeX. The\usepackage[..]{hyperref}
to, co powoduje, że aukcje w spisie treści mogą być klikalne.Uruchom skrypt w katalogu zawierającym pliki źródłowe
Spowoduje to utworzenie pliku o nazwie
all.pdf
w bieżącym katalogu. Próbowałem tego z kilkoma przypadkowymi plikami źródłowymi, które znalazłem w moim systemie (w szczególności dwoma plikami ze źródłavlc-2.0.0
) i jest to zrzut ekranu pierwszych dwóch stron wynikowego pliku PDF:Kilka komentarzy:
! -name "*~"
aby uniknąć plików kopii zapasowej.Polecam użyć bardziej szczegółowego
find
polecenie, aby znaleźć pliki, w przeciwnym razie dowolny plik losowy zostanie dołączony do pliku PDF. Jeśli wszystkie twoje pliki mają określone rozszerzenia (.c
i.h
na przykład), powinieneś wymienićfind
w skrypcie z czymś takimlistings
opcje , możesz dostosować to tak, aby było dokładnie takie, jak chcesz.źródło
:)
src2pdf: line 36: warning: here-document at line 5 delimited by end-of-file (wanted EOF')
podczas uruchamiania skryptu musisz usuń białe znaki w linii EOF aby to zadziałało.src2pdf
następnie włóż! -name "src2pdf"
wfind
wiersz w skrypcie w ten sposóbfind . -type f ! -regex ".*/\..*" ! -name "src2pdf" ! -name ".*" ! -name "*~" |
pominąć go w pdf.find
wyniki (zapisałem skrypt w innym katalogu, który był w moim $ PATH, więc nie miałem tego problemu). Możesz także zmienić język plików źródłowych, aby uzyskać lepsze oznaczenia poprzez zmianęlanguage=C++
cokolwiek chcesz, może obsługiwać wiele różnych języków, patrz tutaj .\usepackage[utf8]{inputenc}
usepackage [german] {babel} `ale nie działa na moich testach. Podejrzewam jednak, że nie karmię go prawdziwym utf8. To może być warte własnego pytania, ale sugeruję, abyś zapytał TeX - LaTeX powinni wiedzieć.(z Przepełnienie stosu )
Spowoduje to wynik.txt zawierający:
Jeśli twój kod źródłowy ma inne rozszerzenie, zmień je w razie potrzeby. Możesz także edytować bit echa, aby dodać niezbędne informacje (być może echo „nazwa_pliku $ 1” lub zmienić separator, lub dodać separator końca pliku).
link ma inne metody, więc używaj dowolnej metody, którą lubisz najbardziej. Uważam, że ten jest najbardziej elastyczny, chociaż ma niewielką krzywą uczenia się.
Kod będzie działał doskonale z terminala bash (właśnie przetestowany na VirtualBox Ubuntu)
Jeśli nie zależy Ci na nazwie pliku i zależy Ci tylko na zawartości połączonych plików:
będzie działać doskonale.
Inną sugerowaną metodą była:
Które będą poprzedzać każdą pojedynczą linię nazwą pliku, co może być dobre dla niektórych osób, osobiście uważam, że jest to zbyt wiele informacji, dlatego moja pierwsza sugestia to pętla for powyżej.
Podziękowania dla osób z forum StackOverflow.
EDYTOWAĆ: Właśnie zdałem sobie sprawę, że jako wynik końcowy poszukujesz HTML lub PDF, niektóre rozwiązania, które widziałem, polegają na wydrukowaniu pliku tekstowego w PostScripcie, a następnie konwertowaniu PostScript na PDF. Jakiś kod, który widziałem:
następnie
(Wymaga posiadania ghostscript)
Mam nadzieję że to pomoże.
źródło
Wiem, że jestem za późno, ale ktoś szukający rozwiązania może uznać to za przydatne.
Na podstawie odpowiedzi @ terdon stworzyłem skrypt BASH, który wykonuje zadanie: https://github.com/eljuanchosf/source-code-to-pdf
źródło