29 번째 수정본 소스 보기 : UseModWiki소스수정/LaTeX
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/LaTeX 는 읽기 전용 페이지입니다.
== LaTeX 수식 지원 == LaTeX의 수식 기능을 사용하여 수식과 기호를 쉽게 표시하도록 함 * 필수 요구 사항: 많다 -_-; ** 당연히 [http://www.latex-project.org LaTeX] 패키지가 설치되어 있어야 한다 ** 당연히 [http://www.tug.org/teTeX/ TeX]도 설치되어 있어야 한다 ** 변환을 위해서 [http://www.imagemagick.org/ ImageMagick]의 convert 바이너리가 있어야 한다. ** 위키에서 실행하는 명령어는 pwd, latex, dvips, convert 이다. * 선택 요구 사항: ** Digest::MD5 펄 모듈이 있으면 좋다. (아래 부작용 참조) * 사용법: ** [[/Configuration]] 파일에서 *** $UseLatex = 1 로 세팅한다. (기본값은 0) *** $EVN{PATH} 에 다음 네 가지 명령이 있는 경로를 포함해 준다: pwd, latex, dvips, convert **** 예) $ENV{PATH}="/bin:/usr/bin:/usr/texmf/bin"; **
$$수식$$
- inline 수식이 된다. **
\[수식\]
- 별도 라인의 수식이 된다. ** 위의 수식을 입력하면 wiki.pl은 다음의 동작을 수행한다. *** 수식의 내용을 MD5로 해쉬값을 얻어서 그것을 그림파일의 이름으로 한다. 확장자는 png이다. 이 파일 이름을 "그림파일.png"라고 하자. *** 이 "그림파일.png"가 $UploadDir([[/화일업로드]] 참조)에 지정된 디렉토리 아래 latex 디렉토리 아래에 존재하면 img 태그를 써서 출력한다. **** 따라서, 하나의 수식은 처음 한 번만 latex 를 통해 변환하고 그 다음부터는 여기에 저장된 그림파일을 바로 보여준다. *** $DataDir/temp/ 아래에 임시 디렉토리를 만들고, 그 디렉토리에 srender.tex 파일을 저장한다. **** srender.tex 파일은 $DataDir/latex.template 파일(제일 처음 LaTeX변환을 할 때 자동으로 생성되며, 사용자가 고쳐서 사용할 수 있다)에서, <math>라고 되어 있는 부분을 사용자가 입력한 수식으로 대체한 것이다. *** 저장한 tex 파일에 대해 latex, dvips, convert 명령을 차례로 실행하여 png 파일을 만든다. *** 만들어진 png 파일을
$UploadDir/latex
라는 디렉토리를 만들어 그 아래 저장한다. *** 임시 디렉토리를 삭제한다. *** 원래 수식이 입력된 자리에 img 태그를 써서 $UploadUrl/latex/만든파일.png 를 출력한다. * 사용예: (GyparkWiki에는 LaTeX이 설치되어 있지 않아 테스트는 불가능하다. 아래의 사용예는 다른 서버에서 생성된 그림을 가져온 것이다. 더 많은 예제는 [http://ssrnet.snu.ac.kr/~gypark/cgi-bin/testwiki/wiki.pl?LaTex 여기]에서 볼 것) ** 아래와 같이 입력하면 {{{ $$y = x^2 + \frac{2}{3}\cdot x - 1$$이므로 다음 식이 성립한다. \[\displaystyle{\int\frac{e^{3x}}{1+e^{3x}}\,dx}=\displaystyle\frac13\ln(1+e^{3x})+\mathcal C.\] ok? }}} ** 아래와 같이 보인다.
이므로 다음 식이 성립한다.
ok? * 부작용: 뭐 딱히 부작용이랄 것은 없어 보이고.. ** Digest::MD5 모듈이 없을 경우는, crypt() 함수를 써서 파일이름을 결정하는데, 이 함수의 특성상 해쉬가 썩 잘 되지 않는다
. 그래서 수식의 일부를 변경했는데도 파일의 이름이 달라지지 않아서 기존의 그림파일이 그대로 출력되어 버릴 수 있다. === config.pl 수정 === 다음 항목 수정 및 추가 {{{#!vim perl $ENV{PATH} = "/bin:/usr/bin/"; # 기존의 값 뒤에 콜론(:)을 써서 각 프로그램들이 있는 경로를 붙여적는다. ### LaTeX 변환 지원 $UseLatex = 1; # 1 = Use LaTeX conversion 2 = Don't convert }}} === wiki.pl 수정 === {{{#!vim perl ### 패치를 위해 추가된 환경설정 변수 use vars qw( ... $UseLatex # 추가 ); ### }}} {{{#!vim perl sub CommonMarkup { ... s/\&__LT__;code\&__GT__;((.|\n)*?)\&__LT__;\/code\&__GT__;/&StorePre($1, "code")/ige; ############### ### added by gypark ### LaTeX 지원 - 이 단락 추가 if ($UseLatex) { # s/\$\$((.|\n)*?)\$\$/&StoreRaw(&MakeLaTeX("\$"."$1"."\$", "display"))/ige; # s/\$((.|\n)*?)\$/&StoreRaw(&MakeLaTeX("\$"."$1"."\$", "inline"))/ige; s/\\\[((.|\n)*?)\\\]/&StoreRaw(&MakeLaTeX("\$"."$1"."\$", "display"))/ige; s/\$\$((.|\n)*?)\$\$/&StoreRaw(&MakeLaTeX("\$"."$1"."\$", "inline"))/ige; } ### ############### ... } }}} 다음 함수 통채로 추가 {{{#!vim perl sub UnquoteHtmlForPageContent { my ($html) = @_; $html =~ s/&__GT__;/>/g; $html =~ s/&__LT__;/ b$ \mathchardef\lt="313C % type $a\lt b$ instead of $a < b$ \pagestyle{empty} \begin{document} \thispagestyle{empty} % the first hbox make the depth of the equation right \sboxit{\hbox to 0pt{\phantom{g}}
} \end{document} EOT if (not -d $hashdir) { mkdir($hashdir,0775) or return "[Unable to create $hash dir]"; } if (not -f $TemplateFile) { &WriteStringToFile($TemplateFile, $DefaultTemplate); } my $template = &ReadFile($TemplateFile); $template =~ s/
/$latex/ige; my $pwd = `pwd`; $pwd =~ s/(.*)((\n|\r)*)?/$1/; chdir ($hashdir); # 원본 tex 생성 open (OUTFILE, ">srender.tex"); print OUTFILE $template; close OUTFILE; open SAVEOUT, ">&STDOUT"; open SAVEERR, ">&STDERR"; open STDOUT, ">hash.log"; open STDERR, ">&STDOUT"; # 그림 생성 qx(latex -interaction=nonstopmode srender.tex); qx(dvips srender.dvi); qx(convert -transparent "white" -density 100x100 -trim -shave 0x2 srender.ps $hashimage); close STDOUT; close STDERR; open STDOUT, ">&SAVEOUT"; open STDERR, ">&SAVEERR"; # upload 경로 그림 옮김 chdir($pwd); if (-f "$hashdir/$hashimage" && not -z "$hashdir/$hashimage") { my $png = &ReadFile("$hashdir/$hashimage"); &WriteStringToFile("$LatexDir/$hashimage", $png); } else { return "[Error retrieving image from $hashdir:$pwd]"; } unlink (glob("$hashdir/*")) or return "[[unlink fail]]"; rmdir ($hashdir) or return "[[rmdir fail]]"; } # IMG 태그 출력 if ($type eq "inline") { $imgpath = "
"; } elsif ($type eq "display") { $imgpath = "
". "
". ""; } return $imgpath; } }}} === 추가 업데이트 내역 === ext1.71 - UnquoteHtmlForPageContent 함수가 고쳐졌습니다.
ext1.74d - png 파일명을 결정하는 부분 개선. 특수 문자를 삭제하지 않고 아스키코드로 표현하게 함
ext1.74e - 1.74d 에서, 특수문자를 "%16진수"의 형태로 만들었더니 문제가 있어서, "_16진수"의 형태로 만들도록 함
=== 관련 링크 === 이 패치는 다음 세 가지 구현의 코드를 섞어서(-_-;) ext버전에 맞게 수정한 것이다. * UseMod:LatexPatch - UseModWiki 홈피에 누군가 올린 패치 * http://moonstone.math.ncku.edu.tw/cgi-bin/um.pl?LaTeXPatch - 윈도XP를 서버로 쓰는 사람이 자신의 환경에 맞춰 작성한 패치 * http://www.oddmuse.org/cgi-bin/oddmuse/LaTeX_Extension - OddMuse의 구현. 제일 훌륭해 보이지만 ext버전에 적용하기가 너무 힘들다... 해 보았으나 실패. === 사용자 의견 === 오. 드디어 들어가는 겁니까. 사실 저 같은 계정 사용자는 LaTeX를 실행시킬 수 있을지가 고민입니다. (예전에 해보려다 포기)
: 저도 마찬가지로, 이 계정에는 tetex부터 설치를 해야 될 판이라... -_-; 이 작업은 제 연구실 서버에 따로 위키 깔아서 하고 있습니다. 제 홈에서는 예제를 보이기 힘들 것 같네요.
[http://ssrnet.snu.ac.kr/~gypark/cgi-bin/testwiki/wiki.pl?LaTex 여기]에 현재까지 작업된 결과를 볼 수 있습니다.
왕입니다요 !!!
LaTeX 변환을 위한 문법을 어떻게 해야 될지 고민 중입니다. {{{ 1) usemod 구현 $a
$$와 \[ 로 결정
뭔가 좀 부족한 게 있을 듯 합니다만 일단 여기까지 하고 마칩니다~
---- [[위키위키분류]]
UseModWiki소스수정/LaTeX
페이지로 돌아가기 |
다른 수정본 보기