KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
You have had a long-term stimulation relative to business.
FrontPage › 파일입출력
TeX 역시 프로그래밍 언어이기 때문에 파일 입출력이 가능하다. 예를 들어서 명령어를 수행하면 그 내용을 출력하는 것 이외에 파일에 저장하고 싶다면 다음과 같이 하면 된다.


\newcommand\bme{\newwrite\example@out\immediate\openout \example@out hello.exa}% fopen
\newcommand\hello[2][\@empty]{%
  \ifx#1\@empty%1 No option
    \def\temp@val{1 : }%
  \else% Option
     \def\temp@val{#1 : }%
  \fi%
  \immediate\write\example@out{\temp@val #2}#2}% fwrite
\newcommand\eme{\immediate\closeout\example@out}% fclose

사용예는 나음과 같다.


\bme
\hello[3]{With parameter}
\hello{Without parameter}
\eme

루비를 이용하여 생성된 파일을 텍코드로 변환

위의 텍프로그램을 돌리면 hello.exa 가 생성되고 이 파일에는 앞에서 본 문장들이 기록되어 있다. 이를 ruby 를 이용하면(물론 다른 언어 -perl/python/lua/tcl 등도 사용할 수 있지만 가장 쉽게 이용할 수 있는 루비를 예로 들었다.) itemize/enumerate 를 포함하는 텍코드로 바꿀 수 있다. 이는 다음과 같다.

# Program : Filter.rb
#  Input : File name
#  Output : LaTeX - description or item source code that is intended to be \input{}

# Global variable __LEVEL__ sets the level that is to be printed.
#  example) if __LEVEL__ = 2, 1 XXX is not printed 
$LEVEL = 1
$WHAT = "enumerate"

def process(filename_)
  f = File.new('res.tex','w')
  f << "\\begin{#{$WHAT}}\n"
  File.open(filename_) do |file|
    file.each_line do
      |line|
      if line =~ /^(\d+)\s:\s(.*)$/ # $1 -> number, $2 -> string 
        if ($LEVEL <= $1.to_i)
          f << '\item ' << $2 << "\n"
        end
      else
        puts 'No match'
      end
    end
  end
  f << "\\end{#{$WHAT}}\n"
  f.close()
end

if $0 == __FILE__
  # Argument Check
  if ARGV.length > 1
    puts "Usage : " + $0 + " filename"
    exit
  end
  puts 'processing >> ' + ARGV[0]
  file = ARGV[0]
  process(file)
end

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-02-05 08:53:38
Processing time 0.0306 sec