a2ps, color option by 바죠

소스코드를 프린트하는 방법으로 a2ps라는 프로그램을 많은 사람들이 사용한다.

출력물은 ps 파일 형식으로 출력된다. 각종 언어에 관련된 키워드들은 볼드형식으로 진하게 프린트되고 소스코드를 읽기에 매우 편리한 형식으로 소스 코드를 변환하여 준다. 프린트를 해서 디버깅을 하는 사람들에게는 두말할 필요없이 매우 유용한 프로그램이다.  많은 연구자들이 이 프로그램을 활용하는 것도 사실이다.

그런데, 아래의 예처럼, --prologue=color 라는 추가 옵션을 붙여주면 그야말로 화려하게 컬러로 소스코드를 출력해서 볼 수 있다.

사실 흑백 출력물만 사용하고 살았었는데, 누군가가 아주 컬러풀하게 프린트해서 들고 다니는것을 보고 질문했다.  어떻게 하면 그렇게 할 수 있습니까?

포트란 90 소스코드, 흑백 출력:

 a2ps -o th.ps th.f90                
[th.f90 (Fortran): 2 pages on 1 sheet]
[Total: 2 pages on 1 sheet] saved into the file `th.ps'
[2 lines wrapped]

gv th.ps
evince th.ps

포트란 90 소스코드, 컬러 출력:

 a2ps -o th.ps th.f90 --prologue=color
[th.f90 (Fortran): 2 pages on 1 sheet]
[Total: 2 pages on 1 sheet] saved into the file `th.ps'
[2 lines wrapped]

gv th.ps


코멘트들은 붉은색, 키워드들은 파란색, 색칠까지 동원되어서 코드 가독성을 높여준다. 프린터가 흑백만 지원하더라도 여전히 하이라이트로 처리된 부분이 살아남기 때문에 프로그램 소스의 가독성을 높이는 기능을 여전히 수행한다고 볼 수 있다.

makefile속에 a2ps를 활용한 명령으로 소스코드들을 컬러로 된 ps 파일로 저장하게 하는 항목을 아래와 같이 추가할수도 있다.
이렇게 할 경우, make a2ps라는 명령어 하나로 소스들을 ps 파일 형식으로 출력할 수 있다.

a2ps:
        a2ps -o th.ps th.f90 --prologue=color  ; a2ps -o crf.ps crf.f90 --prologue=color ; a2ps -o setup_try.ps setup_try.f90 --prologue=color 


 


:TOhtml in vim 에디터
http://incredible.egloos.com/4843301
makefile에 명령어로 추가하기:
http://incredible.egloos.com/3023399


-------------------------------------------------------------------------------------------------------

실제 사용 예제:
a2ps -o object.ps object.f90
a2ps -o object.ps object.f90 --prologue=color
a2ps main.c -P pdf
a2ps -P pdf object.f90 --prologue=color

evince object.pdf
evince object.ps

-------------------------------------------------------------------------------------------------------
a2ps 설치할 때,
gperf 설치를 요구하는 경우가 있다.
이것이 설치가 먼저 되어야 한다.
-------------------------------------------------------------------------------------------------------

a2ps 


-R option을 사용하면  좀 더 길이방향으로 길게 코드를 볼 수 있다.

      -r, --landscape
              print in landscape mode

       -R, --portrait
              print in portrait mode



   Pretty-printing:
       -E, --pretty-print[=LANG]
              enable pretty-printing (set style to LANG)

       --highlight-level=LEVEL
              set pretty printing highlight LEVEL LEVEL can be none, normal or
              heavy

       -g     alias for --highlight-level=heavy

       --strip-level=NUM
              level of comments stripping


-------------------------------------------------------------------------------------------------------
숨어 있는 버그를 잡아내는 방법 두 가지 방법:
[1] a2ps 자료를 출력한다. 알고리듬이 잘못된 곳을 찾는다. 테스트할 곳의 위치를 찾는다.
[2] 컴파일러 옵션을 사용한다. 실행을 해 가면서 찾는다. 
http://incredible.egloos.com/4811847
ifort -CB -check all -warn interface -assume realloc_lhs

-------------------------------------------------------------------------------------------------------
a2ps –-medium=A4 –-line-numbers=1  sourcefilename -o sourcefilename.ps

–line-numbers 라인 넘버가 들어갈 칸의 단위(예: 1은 1줄 마다 라인 넘버 출력, 5는 5줄 마다 라인넘버 출력)

ps2pdf -sPAPERSIZE=a4  filename.ps  filename.pdf
ps2pdf -sPAPERSIZE=a4  filename.ps 

ps 양식보다는 pdf 양식이 더 범용적이다. 출력을 위해서는 pdf 로 변환하는 것이 더 유리하다.
최종 출력이 흑백일 경우, 굳이 칼러로 파일을 만들 필요가 없다. 결국 최종적으로 잘 안 보이게 된다.


a2ps –-medium=A4 –-line-numbers=1 [소스 파일명] -o [출력 ps 파일명].ps
–line-numbers 라인 넘버가 들어갈 칸의 단위(예: 1은 1줄 마다 라인 넘버 출력, 5는 5줄 마다 라인넘버 출력)
ps2pdf -sPAPERSIZE=a4 [출력 ps 파일명].ps [출력 pdf 파일명].pdf
-------------------------------------------------------------------------------------------------------
a2ps:
        a2ps --prologue=color -o action_multi.ps action_multi.f90 ; a2ps --prologue=color -o action_lbfgs.ps action_lbfgs.f90 ; a2ps --prologue=color -o multivasp.ps multivasp.f90 ; a2ps --prologue=color -o multi_arc_length.ps multi_arc_length.f90 ; a2ps --prologue=color -o multi_eql_arc.ps multi_eql_arc.f90 ; a2ps --prologue=color -o multi_app_eql_arc.ps multi_app_eql_arc.f90 ; a2ps --prologue=color -o app_real_equal.ps app_real_equal.f90 ; a2ps --prologue=color -o opt_equal_dist.ps opt_equal_dist.f90 ; a2ps --prologue=color -o rand_path.ps rand_path.f90 ; a2ps --prologue=color -o qst_lst_path.ps qst_lst_path.f90 ; a2ps --prologue=color -o xyz2ak0.ps xyz2ak0.f90
a2psblack:
        a2ps --medium=A4 --line-numbers=1 -o action_multi.ps action_multi.f90 ; a2ps --medium=A4 --line-numbers=1 -o action_lbfgs.ps action_lbfgs.f90 ; a2ps --medium=A4 --line-numbers=1 -o multivasp.ps multivasp.f90 ; a2ps --medium=A4 --line-numbers=1 -o multi_arc_length.ps multi_arc_length.f90 ; a2ps --medium=A4 --line-numbers=1 -o multi_eql_arc.ps multi_eql_arc.f90 ; a2ps --medium=A4 --line-numbers=1 -o multi_app_eql_arc.ps multi_app_eql_arc.f90 ; a2ps --medium=A4 --line-numbers=1 -o app_real_equal.ps app_real_equal.f90 ; a2ps --medium=A4 --line-numbers=1 -o opt_equal_dist.ps opt_equal_dist.f90 ; a2ps --medium=A4 --line-numbers=1 -o rand_path.ps rand_path.f90 ; a2ps --medium=A4 --line-numbers=1 -o qst_lst_path.ps qst_lst_path.f90 ; a2ps --medium=A4 --line-numbers=1 -o xyz2ak0.ps xyz2ak0.f90
ps2pdf:
        ps2pdf -sPAPERSIZE=a4 action_multi.ps ; ps2pdf -sPAPERSIZE=a4 action_lbfgs.ps  ; ps2pdf -sPAPERSIZE=a4 multivasp.ps ; ps2pdf -sPAPERSIZE=a4 multi_arc_length.ps ; ps2pdf -sPAPERSIZE=a4 multi_eql_arc.ps ; ps2pdf -sPAPERSIZE=a4 multi_app_eql_arc.ps ; ps2pdf -sPAPERSIZE=a4 app_real_equal.ps ; ps2pdf -sPAPERSIZE=a4 opt_equal_dist.ps ; ps2pdf -sPAPERSIZE=a4 rand_path.ps ; ps2pdf -sPAPERSIZE=a4 qst_lst_path.ps ; ps2pdf -sPAPERSIZE=a4 xyz2ak0.ps


--------------------------------------------------------------------------------------------------------------------
 a2ps --help
Usage: a2ps [OPTION]... [FILE]...

 

Convert FILE(s) or standard input to PostScript.  By default, the output
is sent to the default printer.  An output file may be specified with -o.

Mandatory arguments to long options are mandatory for short options too.
Long options marked with * require a yes/no argument, corresponding
short options stand for `yes'.

Tasks:
  --version        display version
  --help           display this help
  --guess          report guessed types of FILES
  --which          report the full path of library files named FILES
  --glob           report the full path of library files matching FILES
  --list=defaults  display default settings and parameters
  --list=TOPIC     detailed list on TOPIC (delegations, encodings, features,
                   variables, media, ppd, printers, prologues, style-sheets,
                   user-options)

After having performed the task, exit successfully.  Detailed lists may
provide additional help on specific features.

Global:
  -q, --quiet, --silent      be really quiet
  -v, --verbose[=LEVEL]      set verbosity on, or to LEVEL
  -=, --user-option=OPTION   use the user defined shortcut OPTION
      --debug                enable debugging features
  -D, --define=KEY[:VALUE]   unset variable KEY or set to VALUE

Sheets:
  -M, --medium=NAME      use output medium NAME
  -r, --landscape        print in landscape mode
  -R, --portrait         print in portrait mode
      --columns=NUM      number of columns per sheet
      --rows=NUM         number of rows per sheet
      --major=DIRECTION  first fill (DIRECTION=) rows, or columns
  -1, -2, ..., -9        predefined font sizes and layouts for 1.. 9 virtuals
  -A, --file-align=MODE  align separate files according to MODE (fill, rank
                         page, sheet, or a number)
  -j, --borders*         print borders around columns
      --margin[=NUM]     define an interior margin of size NUM

The options -1.. -9 affect several primitive parameters to set up predefined
layouts with 80 columns.  Therefore the order matters: `-R -f40 -2' is
equivalent to `-2'.  To modify the layout, use `-2Rf40', or compose primitive
options (`--columns', `--font-size' etc.).

Virtual pages:
      --line-numbers=NUM     precede each NUM lines with its line number
  -C                         alias for --line-numbers=5
  -f, --font-size=SIZE       use font SIZE (float) for the body text
  -L, --lines-per-page=NUM   scale the font to print NUM lines per virtual
  -l, --chars-per-line=NUM   scale the font to print NUM columns per virtual
  -m, --catman               process FILE as a man page (same as -L66)
  -T, --tabsize=NUM          set tabulator size to NUM
  --non-printable-format=FMT specify how non-printable chars are printed

Headings:
  -B, --no-header        no page headers at all
  -b, --header[=TEXT]    set page header
  -u, --underlay[=TEXT]  print TEXT under every page
  --center-title[=TEXT]  set page title to TITLE
  --left-title[=TEXT]    set left and right page title to TEXT
  --right-title[=TEXT]
  --left-footer[=TEXT]   set sheet footers to TEXT
  --footer[=TEXT]
  --right-footer[=TEXT]

The TEXTs may use special escapes.

Input:
  -a, --pages[=RANGE]        select the pages to print
  -c, --truncate-lines*      cut long lines
  -i, --interpret*           interpret tab, bs and ff chars
      --end-of-line=TYPE     specify the eol char (TYPE: r, n, nr, rn, any)
  -X, --encoding=NAME        use input encoding NAME
  -t, --title=NAME           set the name of the job
      --stdin=NAME           set the name of the input file stdin
      --print-anyway*        force binary printing
  -Z, --delegate*            delegate files to another application
      --toc[=TEXT]           generate a table of content

When delegations are enabled, a2ps may use other applications to handle the
processing of files that should not be printed as raw information, e.g., HTML
PostScript, PDF etc.

Pretty-printing:
  -E, --pretty-print[=LANG]  enable pretty-printing (set style to LANG)
  --highlight-level=LEVEL    set pretty printing highlight LEVEL
                             LEVEL can be none, normal or heavy
  -g                         alias for --highlight-level=heavy
  --strip-level=NUM          level of comments stripping

Output:
  -o, --output=FILE          leave output to file FILE.  If FILE is `-',
                             leave output to stdout.
  --version-control=WORD     override the usual version control
  --suffix=SUFFIX            override the usual backup suffix
  -P, --printer=NAME         send output to printer NAME
  -d                         send output to the default printer
                             (this is the default behavior)

PostScript:
      --prologue=FILE        include FILE.pro as PostScript prologue
      --ppd[=KEY]            automatic PPD selection or set to KEY
  -n, --copies=NUM           print NUM copies of each page
  -s, --sides=MODE           set the duplex MODE (`1' or `simplex',
                             `2' or `duplex', `tumble')
  -S, --setpagedevice=K[:V]  pass a page device definition to output
      --statusdict=K[:[:]V]  pass a statusdict definition to the output
  -k, --page-prefeed         enable page prefeed
  -K, --no-page-prefeed      disable page prefeed

By default a2ps is tuned to do what you want to, so trust it.  To pretty
print the content of the `src' directory and a table of content, and send the
result to the printer `lw',

    $ a2ps -P lw --toc src/*

To process the files `sample.ps' and `sample.html' and display the result,

    $ a2ps -P display sample.ps sample.html

To process a mailbox in 4 up,

    $ a2ps -=mail -4 mailbox

To print as a booklet on the default printer, which is Duplex capable,

    $ a2ps -=book paper.dvi.gz -d

News, updates and documentation: visit http://www.gnu.org/software/a2ps/.
Report bugs to <bug-a2ps@gnu.org>.
--------------------------------------------------------------------------------------------------------------------

 

 ps2pdf -sPAPERSIZE=a4 -dOptimize=true -dEmbedAllFonts=true YourPSFile.ps



핑백

덧글

  • Sengoku 2009/09/10 16:39 # 답글

    네트워크 과를 하고 있어서... 이런 것만 보면 어질어질;;;
  • 바죠 2017/02/17 13:28 # 삭제 답글

    a2ps –-medium=A4 –-line-numbers=1 [소스 파일명] -o [출력 ps 파일명].ps
    –line-numbers 라인 넘버가 들어갈 칸의 단위(예: 1은 1줄 마다 라인 넘버 출력, 5는 5줄 마다 라인넘버 출력)
    ps2pdf -sPAPERSIZE=a4 [출력 ps 파일명].ps [출력 pdf 파일명].pdf
댓글 입력 영역