IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

¼öÇÐ ³»¿ëÀ» Æ÷ÇÔÇÏ´Â µ¿Àû À¥ »çÀÌÆ® ±¸ÃàÇϱâ
JSP ±â¼ú°ú LateX°¡ ¿Â¶óÀÎ °úÇÐ ±³À°°ú ¿¬±¸¸¦ µ½´Â´Ù

Michael Juntao Yuan
¹Ú»ç°úÁ¤ , University of Texas at Austin
2002³â 2¿ù

±ÛÀÚÀÇ À§¿Í ¾Æ·¡¿¡ ºÙ¾îÀÖ´Â ¹®ÀÚµé°ú Ư¼öÇÑ ±âÈ£¸¦ °¡Áø ¼öÇÐ °ø½ÄÀ» HTML·Î º¯È¯Çϱâ´Â ¾öû³ª°Ô ¾î·Á¿î ÀÏÀÌ´Ù. ´ëºÎºÐÀÇ °úÇÐÀÚ¿Í ¼öÇÐÀÚµéÀº ¹ÌÀûÀ¸·Î º¸±â ÁÁÀº °ø½ÄÀ» ¸¸µé¾î³»±â À§ÇØ À¯¿¬ÇÑ LateX ÅؽºÆ® 󸮱⸦ »ç¿ëÇÑ´Ù. ±×·±µ¥ ÀÌ °á°ú¹°µéÀ» ¾î¶»°Ô À¥¿¡ Ä£±ÙÇÑ ÇüÅ·Πº¯È¯ÇÒ ¼ö ÀÖÀ»±î ? ÀÌ ±Û¿¡¼­ Michael YuanÀº JSP ÆäÀÌÁö¿Í Ä¿½ºÅÒ Å±׸¦ ÀÌ¿ëÇØ LateX Æ÷¸ËÀÇ °ø½ÄÀ» ÀÛ¼ºÀÚ°¡ »ç¿ëÇϱ⠽±°í Ŭ¶óÀ̾ðÆ®¿¡µµ Ưº°ÇÑ ¼ÒÇÁÆ®¿þ¾î°¡ ÇÊ¿äÁö ¾Êµµ·Ï À¥¿¡ ¿Ã¸± ¼ö ÀÖ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ±×°¡ Á¡Â÷ È¿À²¼ºÀÌ ³ô¾ÆÁö´Â ±â¹ýµéÀ» ¹Ýº¹ÇÔ¿¡ µû¶ó ¿©·¯ºÐÀº ¼­¹öÃø ÀÚ¹Ù ±â¼úÀÌ ¼­·Î À̱âÁ¾ÀÇ third-party µµ±¸µéÀÇ ÈûÀ» ÀÌ¿ëÇÏ¿© ¿Ü°ü»ó ±î´Ù·Ó±â ±×Áö¾ø´Â ¹®Á¦µéÀ» ¾î¶»°Ô ÇØ°áÇØ°¡´ÂÁö¸¦ º¸°ÔµÉ °ÍÀÌ´Ù.

ÀÎÅͳݰú À¥Àº ¿ø·¡ °úÇÐÀÚµéÀÌ °úÇаú ¼öÇÐ ¿¬±¸ Á¤º¸¸¦ ±³È¯Çϱâ À§ÇØ ¼³°èÇÑ °ÍÀÌ´Ù. ¾ÆÀÌ·¯´ÏÄÃÇÏ°Ôµµ ÀÎÅͳÝÀÌ ³ª¿Â Áö 30¿©³âÀÌ Áö³µ°í À¥ÀÌ °³¹ßµÈÁö´Â 10³âÀÌ Áö³­ Áö±Ý±îÁöµµ À¥¿¡ ¼öÇÐÀû ³»¿ëÀÌ ¸¹Àº ÄÁÅÙÃ÷¸¦ °ø°³ÇÏ´Â °ÍÀº ¿©ÀüÈ÷ ½¬¿î ÀÏÀÌ ¾Æ´Ï´Ù. W3CÀÇ MathML ±ÇÀå»çÇ×°ú °°ÀÌ À¥¿¡¼­ÀÇ ¼öÇÐ Á¤º¸ ±³È¯À» À§ÇÑ Ç¥ÁØÀÌ °³¹ßµÇ±ä ÇßÁö¸¸, À̵éÀ» »ç¿ëÇÏ·Á¸é ÀúÀÛÀÚ¿Í µ¶ÀÚ ¸ðµÎ IBM¿¡¼­ Netscape Navigator¿Í Internet Explorer¿ëÀ¸·Î ¸¸µç ¼öÇÐ¿ë ºê¶ó¿ìÀú Ç÷¯±×ÀÎÀÎ techexplorer¿Í °°Àº Ư¼ö ¼ÒÇÁÆ®¿þ¾î°¡ ÇÊ¿äÇÏ´Ù. (Âü°íÀÚ·á) . »ç¿ëÀÚµéÀº ±â¼úÀûÀÎ ¾î·Á¿ò, ºñ¿ë ¹× º¸¾È»óÀÇ À§Çè ¶§¹®¿¡ ÀÌ·± Ư¼öÇÑ Å¬¶óÀ̾ðÆ®Ãø ¼ÒÇÁÆ®¿þ¾î¸¦ ¼³Ä¡ÇÏ´Â °ÍÀ» ²¨·ÁÇÑ´Ù. µû¶ó¼­ ±×·¯ÇÑ Ç¥ÁØÀÇ Àû¿ëÀº ¼Ò±Ô¸ð ¿¬±¸ ´Üü¿¡ ±¹ÇѵǾî ÀÖÀ¸¸ç, °ÅÀÇ ´ë´Ù¼öÀÇ ÀÎÅÍ³Ý »ç¿ëÀÚ°¡ À̸¦ »ç¿ëÇÏÁö ¸øÇÑ´Ù. ¿À´Ã³¯ À¥¿¡¼­ ¼öÇÐ Á¤º¸¸¦ °øÀ¯Çϱâ À§ÇÑ °¡Àå Æí¸®ÇÑ ¹æ¹ýÀº ÅؽºÆ® ÇüÅ°¡ ¾Æ´Ñ °ø½ÄµéÀ» À̹ÌÁö·Î Æ÷ÂøÇÏ°í ÀÌ À̹ÌÁöµéÀ» Ç¥ÁØ HTML ÆäÀÌÁö¿¡ »ðÀÔÇÏ´Â °ÍÀÌ´Ù.

´ëºÎºÐÀÇ ÃֽŠGUI ±â¹Ý ¼öÇÐ ÀúÀÛ µµ±¸µéÀº ¹®¼­¸¦ À¥ ÆäÀÌÁö·Î ÀúÀåÇÏ´Â ¿É¼ÇÀ» °¡Áö°í ÀÖ´Ù.; ÀÌ µµ±¸µéÀº °ø½ÄÀÇ À̹ÌÁö¿Í Á¤ÀûÀÎ HTML ÆäÀÌÁö¸¦ »ý¼ºÇÑ´Ù. ÀÌ°ÍÀº ´ÜÁö ¿©·¯ºÐÀÇ ³í¹®°ú °°Àº Á¤ÀûÀÎ ÄÁÅÙÃ÷¸¦ À¥¿¡ ¿Ã·Á³õ±â À§Çؼ­´Â Æí¸®ÇÑ ¹æ¹ýÀÌ´Ù. ±×·¯³ª »ç¿ëÀÚ Âü¿©°¡ ´ëºÎºÐÀÇ »çÀÌÆ®¿¡¼­ ÇʼöÀûÀÌ µÇ°í Àֱ⠶§¹®¿¡ Á¤ÀûÀÎ À¥ »çÀÌÆ®ÀÇ ½Ã´ë´Â ¿À·¡ Àü¿¡ Áö³µ´Ù. °í±Þ ¼öÇÐ À¥ »çÀÌÆ®´Â ¹é¾ØµåÀÇ µ¥ÀÌŸº£À̽º·ÎºÎÅÍ ÄÁÅÙÃ÷¸¦ µ¿ÀûÀ¸·Î À¥¿¡ °ø°³ÇÒ ¼ö ÀÖ¾î¾ß Çϸç, »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ ÄÁÅÙÆ®¸¦ ´Ù¸¥ »ç¿ëÀÚ¿Í °øÀ¯ÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. (¿¹¸¦ µé¾î, ¾ç¹æÇâ ½ÃÇè ½Ã½ºÅÛ°ú ¿¬±¸ Çù¾÷ ½Ã½ºÅÛµîÀÌ ÀÌ¿¡ ÇØ´çÇÑ´Ù)

ÀÌ ±ÛÀº ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇÑ ÇϳªÀÇ ÇØ°á ¹æ¹ýÀ» Á¦½ÃÇÒ °ÍÀÌ´Ù. »ùÇà ÄÚµå´Â ¼öÇÐ °ø½ÄÀÌ Ç¥ÇöµÈ ¸¶Å©¾÷ ÅؽºÆ®¸¦ ±× °ø½ÄÀ» ³ªÅ¸³»¸ç À¥¿¡ ¿Ã¸± ¼ö ÀÖ´Â ±×·¡ÇÈ ÆÄÀÏ·Î ½Å¼ÓÇÏ°í ½±°Ô º¯È¯½Ãų ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ÀÌ ±ÛÀ» Àд٠º¸¸é ¿©·¯ºÐÀº º¸´Ù ÀϹÝÀûÀÎ ¼ö¼ö²²³¢¸¦ Ǫ´Â Á¢±Ù ¹æ½ÄÀ» º¸°Ô µÉ °ÍÀÌ´Ù. ¿ì¸®´Â ¿©·¯ °³ÀÇ »óÈ£ ÀÌÁúÀûÀÌ°í ¿¬°áµÇÁö ¾Ê´Â µµ±¸µéÀ» ÇϳªÀÇ ÇÁ·Î±×·¥À¸·Î °áÇÕ½ÃÅ°±â À§ÇØ JSP ÆäÀÌÁö¿Í Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ´Ù·ç±â Èûµç µ¿Àû À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¾÷ÇÒ ¶§ ÀØÁö ¸»¾Æ¾ß ÇÒ °ÍÀº ¸Ç ¶¥¿¡¼­ ½ÃÀÛÇÏÁö ¸»¶ó´Â °ÍÀÌ´Ù; ¼Ö·ç¼ÇÀº ´Ù¸¥ ÇüÅ·Π¿©·¯ºÐÀÌ ÀÌ¿ëÇϱ⸦ ±â´Ù¸®°í ÀÖÀ» ¼öµµ ÀÖ´Ù.

JSP ±â¼ú º¹½À

µ¿ÀûÀÎ ¼­¹öÃø ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÇöÇϱâ À§ÇÑ ¾Õ¼± ±â¼úÁß Çϳª±â JSP (JavaServer Pages) ±â¼úÀÌ´Ù. JSP ÆäÀÌÁö´Â ¹é¾ØµåÀÇ µ¥ÀÌÅÍ°¡ ÇÁ·±Æ® ¾ØµåÀÇ À¥ ÆäÀÌÁö(ÇÁ¸®Á¨Å×ÀÌ¼Ç ·ÎÁ÷)¿¡ ¾î¶»°Ô Ç¥½ÃµÇ´ÂÁö¸¦ Á¦¾îÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. JSP ÆäÀÌÁö´Â ÀÚ¹Ù µ¥ÀÌÅÍ °´Ã¼¸¦ HTML È­¸é Ãâ·Â ¿¤¸®¸ÕÆ®¿Í °áÇÕ½ÃÅ°±â À§ÇØ HTML°ú À¯»çÇÑ ÅÂ±× ¾ð¾î¸¦ »ç¿ëÇÑ´Ù.

JSP ±â¼úÀÇ °¡Àå Å« °­Á¡Àº È®Àå°¡´ÉÇÏ´Ù´Â Á¡ÀÌ´Ù. JSP ÅÂ±× ¾ð¾î´Â Ä¿½ºÅÒ Å±׷ΠȮÀåµÉ ¼ö Àִµ¥, ÀÌ´Â ÅÂ±× Çڵ鷯 Ŭ·¡½º¿¡¼­ ÇÁ¸®Á¨Å×ÀÌ¼Ç ·ÎÁ÷À» ó¸®ÇÏ´Â ÀÚ¹ÙÄڵ带 ĸ½¶È­½ÃÅ°µµ·Ï ÇØÁÖ´Ù. À¥ ÀúÀÛÀÚµéÀº ¾Æ¹«·± ÀÚ¹Ù Äڵ带 ÀÛ¼ºÇÏÁö ¾Ê°íµµ ¹Ì¸® Á¤ÀÇµÈ ÅÂ±× ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇØ º¹ÀâÇÑ ÇÁ¸®Á¨Å×ÀÌ¼Ç ÀÛ¾÷À» ¹Ù·Î ¼öÇàÇÒ ¼ö ÀÖ´Ù.Ä¿½ºÅÒ Å±׵éÀº ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¦¾î Äڵ带 Àç»ç¿ë ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ¸ç À¥ ÆäÀÌÁö ÀÛ¼ºÀÚÀÇ ÀÛ¾÷À» »ó´çÈ÷ °£ÆíÇÏ°Ô ÇØÁØ´Ù. JSP Ä¿½ºÅÒ Å±×ÀÇ °¡Àå º¸ÆíÀûÀÎ ÇüÅ´ ÄÁÅÙÃ÷ ¹ø¿ª ű×(content translation tag)Àε¥, ÅÂ±× º»¹®¿¡ µé¾î ÀÖ´Â ÀÛ¼ºÀÚ Áß½ÉÀÇ ³»¿ëÀ» ¹æ¹®ÀÚ À§ÁÖÀÇ Ç¥½Ã ¿¤¸®¸ÕÆ®µé·Î º¯È¯½ÃÄÑÁØ´Ù.

¿ì¸®ÀÇ ¼öÇÐ À¥ »çÀÌÆ®¿¡¼­ ¿ì¸®´Â ³»¿ë ¹ø¿ª ű׸¦ »ç¿ëÇÏ¿© Àǹ̷ÐÀû ¼öÇРǥÇöµéÀ» À¥ À̹ÌÁö·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¼½¼Çµé¿¡¼­ ÀÌ ±â¹ýµé¿¡ ´ëÇØ »ó¼¼È÷ ¼³¸íÇÏ°Ú´Ù.

¹«¾ùÀÌ ÇÊ¿äÇÑ°¡

¿©±â¿¡¼­´Â ÄÁÅÙÃ÷ ¹ø¿ª űװ¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ ¼³¸íÇÏ°Ú´Ù. JSP ÄÁÅ×À̳ʰ¡ Ä¿½ºÅÒ Å±׸¦ ¹ß°ßÇϸé ÇöÀç ÆäÀÌÁöÀÇ taglib µð½ºÅ©¸³ÅÍ ÆÄÀϵ鿡¼­ ÅÂ±× À̸§À» ã´Â´Ù. ÀÏÄ¡µÇ´Â °ÍÀ» ã°ÔµÇ¸é JSP ÄÁÅ×À̳ʴ ÅÂ±× Çڵ鷯 Ŭ·¡½º¿¡°Ô ¹®¸Æ Á¤º¸¸¦ Àü´ÞÇÑ´Ù. JSP ÅÂ±× Çڵ鷯´Â ¸ÕÀú Ä¿½ºÅÒ Å±×ÀÇ º»¹®À¸·ÎºÎÅÍ ¼öÇÐ °ø½ÄÀ» Ç¥½ÃÇÏ´Â ÅؽºÆ® ¹®ÀÚ¿­À» ÃßÃâÇÑ´Ù. ±×¸®°í Àǹ̷ÐÀûÀÎ ÅؽºÆ® °ø½ÄÀ» ±â¹ÝÀ¸·Î À̹ÌÁö¸¦ ¸¸µé¾î³»°í, ±× À̹ÌÁö¿¡ ´ëÇÑ <IMG>¶ó´Â HTML ¸¶Å©¾÷ Ç¥½Ã¸¦ ºê¶ó¿ìÀú¿¡°Ô º¸³½´Ù. ÅÂ±× Çڵ鷯¿¡¼­ ÇÊ¿äÇÑ ¼öÇÐ À̹ÌÁö »ý¼º µµ±¸´Â ´ÙÀ½ÀÇ ±â´ÉÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.:

  • ¼öÇÐ °ø½ÄÀº ¹Ýµå½Ã JSP ű×ÀÇ º»¹®¿¡¼­ Áö¿øµÇ´Â À¯ÀÏÇÑ ÇüÅÂÀÎ ÆòÀÌÇÑ ÅؽºÆ®·Î Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù. ÀÌ ÆòÀÌÇÑ ÅؽºÆ®´Â ¶ÇÇÑ HTTP ÇÁ·ÎÅäÄÝÀ» ÅëÇÏ¿© Á¤º¸¸¦ Àü´ÞÇÏ°í µ¥ÀÌÅͺ£À̽º ȤÀº XML ¹®¼­¿¡ Á¤º¸¸¦ ÀúÀåÇϱâ À§ÇÑ Ç¥ÁØ Æ÷¸ËÀÌ´Ù.
  • ¼öÇÐ °ø½ÄÀ» ÆòÀÌÇÑ ÅؽºÆ®·Î Ç¥±âÇÏ´Â ¹æ¹ýÀº À¥ ÀúÀÛÀÚµéÀÌ ¸¹Àº ÈƷþøÀ̵µ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¹Ýµå½Ã Àǹ̷ÐÀûÀÌ°í Á÷°üÀûÀ̾î¾ß ÇÑ´Ù. À̸¦ À§ÇØ ±× Àǹ̷ÐÀûÀÎ ¼öÇРǥ±â ½Ã½ºÅÛÀÌ Àü¼¼°è ÇÐÀڵ鿡 ÀÇÇØ ÀÌ¹Ì »ç¿ëµÇ°í ÀÖ¾ú´ø °ÍÀ̶ó¸é ´õÇÒ ³ªÀ§¾ø´Ù.
  • ¼öÇРǥ±â µµ±¸µéÀº ¿©·¯ Ç÷§Æû¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Â ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÌÁ¡À» »ì¸®±â À§ÇØ ¸¹Àº Ç÷§Æû¿¡¼­ »ç¿ë°¡´ÉÇØ¾ß ÇÑ´Ù.

LateX ¼Ò°³

À§ÀÇ ¸ðµç ¿ä°ÇÀ» ÃæÁ·ÇÏ´Â ¼öÇÐ ÀúÀÛ ¼ÒÇÁÆ®¿þ¾î´Â ½ÄÀÚ µµ±¸µéÀÇ ÁýÇÕÀÎ ¾÷°è Ç¥ÁØÀÇ TeX/LateX(ÈÄ¿¡ Latex)ÀÌ´Ù. LateX´Â ´ÙÀ½°ú °°Àº ±â´ÉÀ» Á¦°øÇÑ´Ù.:

  • LateX´Â Ç¥ÁØ ÅؽºÆ® ÀÔ·Â ÆÄÀÏÀ» »ç¿ëÇÏ¸ç ±× Æ÷¸ËÀº ¿ÏÀüÈ÷ °ø°³µÇ¾îÀÖ´Ù. »ç½Ç ´ëºÎºÐÀÇ LateX ±¸ÇöÀº ¶ÇÇÑ ¸ðµÎ ¿ÀÇ ¼Ò½ºµéÀÌ´Ù.
  • LaTeX´Â ¸Å¿ì Á÷°üÀûÀÎ ¹®¹ýÀ» °¡Áö°í ÀÖ¾î ¹è¿ì±â ½±´Ù. ¿¹¸¦ µé¸é ´ÙÀ½ÀÇ ÀÔ·Â ÅؽºÆ®´Â
     \alpha_0^2 + \beta_0^2 = \gamma_0^2 

    LaTeX¿¡¼­ ó¸®µÈ ÈÄ ±×¸² 1¿¡¼­¿Í °°Àº °ø½ÄÀ» ¸¸µé¾î ³½´Ù.

    ±×¸² 1. LaTeX °á°ú ¿¹Á¦
    alpha_0^2+beta_0^2=gamma_0^2


  • LaTeX´Â »ç¿ëÀÚ ±â¹ÝÀÌ Àß È®¸³µÇ¾î ÀÖ´Ù. ÀÏÁ¤ ±â°£ µ¿¾È °úÇа迡¼­ Ç¥ÁØ ½ÄÀÚ ¾ð¾î·Î »ç¿ëµÇ¾ú±â ¶§¹®ÀÌ´Ù. ¼öÇаèÀÇ ´ëºÎºÐÀÇ ÀúÀÚµéÀÌ LaTeX¿¡ ÀÌ¹Ì Àͼ÷ÇØ ÀÖ´Ù.
  • LaTeX´Â Unix, Linux, Windows ¹× Mac OSÀÇ ´ëºÎºÐÀÇ º¯Á¾À» Æ÷ÇÔÇÑ ¸¹Àº Ç÷§Æû¿¡¼­ »ç¿ë°¡´ÉÇÏ´Ù. µû¶ó¼­ LaTeX ¹®¼­´Â À̽ļºÀÌ ¸Å¿ì ³ô´Ù.
  • LaTeX´Â Àü¹®ÀûÀÎ ÃâÆÇ ¼öÁØÀÇ °ø½ÄÀ» ¸¸µé¾î³½´Ù. À̵éÀº À¥ ±×·¡ÇÈ¿¡ ÀûÇÕÇÑ °Í ÀÌ»óÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ±×¸² 2´Â LaTex·Î Ç¥ÇöÇÑ MaxwellÀÇ ¹æÁ¤½ÄÀÌ´Ù.

    ±×¸² 2. LaTex·Î Ç¥ÇöÇÑ MaxwellÀÇ ¹æÁ¤½Ä
    Maxwell's equations as rendered by LaTeX

LaTex°¡ »ý¼ÒÇÑ µ¶ÀÚ´Â º»¹®À» °è¼Ó ÁøÇàÇϱâ Àü¿¡ LaTex¿Í ±× ±¸¹®¿¡ Àͼ÷ÇØ µÎ´Â ÆíÀÌ ÁÁÀ» °ÍÀÌ´Ù. ¾Æ·¡ÀÇ Âü°í ÀÚ·á ¼½¼Ç¿¡ À¯¿ëÇÑ Á¤º¸·ÎÀÇ ¸µÅ©°¡ ÀÖ´Ù.

LaTex¿¡¼­ GIF À̹ÌÁö »ý¼ºÇϱâ
LaTeX´Â Àǹ̷ÐÀûÀÎ ¼öÇÐ °ø½ÄÀ» À̹ÌÁö·Î ó¸®ÇÒ ¼ö ÀÖÁö¸¸, ÀÌ À̹ÌÁöµéÀº ´ëºÎºÐÀÇ À¥ ºê¶ó¿ìÀú¿¡¼­ ¹Ù·Î Ãâ·ÂµÉ ¼ö´Â ¾ø´Ù. ¸ðµç À¥ ºê¶ó¿ìÀú´Â GIF À̹ÌÁö¸¦ Áö¿øÇϱ⠶§¹®¿¡ LaTeX·Î µÈ °ø½Ä À̹ÌÁö¸¦ GIF Æ÷¸äÀ¸·Î º¯È¯ÇØ¾ß ÇÑ´Ù. À̹ø ¼½¼Ç¿¡¼­´Â Third-party µµ±¸¸¦ »ç¿ëÇØ LaTex ÀÔ·Â ±¸¹®À¸·ÎºÎÅÍ GIF À̹ÌÁö¸¦ »ý¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ »ìÆ캼 °ÍÀÌ´Ù. ¿ì¸®ÀÇ ±Ã±ØÀûÀÎ ¸ñÇ¥´Â ÀÌ ÀýÂ÷¸¦ °¡´ÉÇÑÇÑ ¸¹ÀÌ ÀÚµ¿È­½ÃÅ°´Â °ÍÀÌÁö¸¸, ¿ì¸®°¡ ÀÛ¾÷ÇØ¾ß ÇÏ´Â ±âº» ¿øÄ¢À» º¸´Â °Íµµ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ¿ì¸®´Â Linux/Unix ¸í·ÉÇà ÅøÀ» ¿¹Á¦·Î »ç¿ëÇÏÁö¸¸, µ¿ÀÏÇÑ ±â´ÉÀ» °¡Áø µµ±¸°¡ WiIndows¿Í Mac OS¿ëÀ¸·Î ³ª¿Í ÀÖ´Ù. PNG¿Í JPEG °°Àº ´Ù¸¥ Æ÷¸äÀÇ À̹ÌÁöµµ ºñ½ÁÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. ´ÙÀ½ ´Ü°èµéÀ» µû¸£¸é GIF À̹ÌÁö Æ÷¸äÀ¸·Î µÈ ¼öÇÐ ÄÁÅÙÃ÷°¡ ¸¸µé¾îÁú °ÍÀÌ´Ù.::

  1. ±¸¹® ÀÔ·Â ÆÄÀÏ (¿©±â¼­´Â »ùÇà ÆÄÀÏÀ» sample.tex¶ó°í ºÎ¸£ÀÚ)¿¡ LaTeX ±¸¹® µÚ¿¡ ¼öÇÐ ³»¿ëÀ» ÀÛ¼ºÇÑ´Ù.
  2. ±×¸² 3°ú °°ÀÌ LaTeX ÇÁ·Î±×·¥À» »ç¿ëÇØ sample.tex¸¦ ÀåÄ¡ µ¶¸³ÀûÀÎ ÆÄÀÏ (sample.dvi)·Î ó¸®ÇÑ´Ù. ¸í·É¹®Àº latex sample.texÀÌ´Ù. ó¸® Áß¿¡ LaTeX´Â ¶ÇÇÑ ·Î±× ÆÄÀÏ°ú º¸Á¶ ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.

    ±×¸² 3. LaTeX ½ÇÇàÇϱâ
    Running LaTeX

  3. ±×¸² 4¿Í °°ÀÌ Dvips À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇØ .dvi ÆÄÀÏÀ» Æ÷½ºÆ®½ºÅ©¸³Æ® ÆÄÀÏ·Î º¯È¯ÇÑ´Ù. ¸í·É¹®Àº dvips -o sample.ps sample.dviÀÌ´Ù. (Dvips¿¡ °üÇÑ »ó¼¼ »çÇ×Àº Âü°í ÀÚ·á ¸¦ ÂüÁ¶ÇÑ´Ù.)

    ±×¸² 4. Dvips ½ÇÇàÇϱâ
    Running Dvips

  4. ImageMagick ÅøÀÎ convert¸¦ »ç¿ëÇØ Æ÷½ºÆ®½ºÅ©¸³Æ® ÆÄÀÏ sample.ps¸¦ GIF Æ÷¸äÀ¸·Î º¯È¯ÇÑ´Ù. (ImageMagick¿¡ °üÇÑ »ó¼¼ »çÇ×Àº Resources¸¦ ÂüÁ¶ÇÑ´Ù.) ¸í·É¹®Àº convert -antialias -crop 0x0 sample.ps sample.gifÀÌ´Ù. ¿ì¸®´Â Æ÷½ºÆ®½ºÅ©¸³Æ® ÆäÀÌÁö¿¡ ÀÖ´Â °ø½Ä ÁÖÀ§ÀÇ ¿©¹éÀÌ GIF¿¡ ³ªÅ¸³ªÁö ¾Êµµ·Ï ÇÏ°í ½Í´Ù. µû¶ó¼­ ¸í·ÉÇà¿¡ -crop 0x0 ¿É¼ÇÀ» ½á¼­ ¿©¹éÀÌ ¾ø¾îÁöµµ·Ï ÇÏ¿´´Ù. ¶ÇÇÑ -antialias¸¦ »ç¿ëÇÏ¿© ¸Å²öÇÑ ÆùÆ®°¡ ¸¸µé¾îÁöµµ·Ï ÇÏ¿´´Ù.

    ±×¸² 5. ImageMagick ½ÇÇàÇϱâ
    ImageMagick convert command



    ¿©·¯ºÐÀÌ ¸í·ÉÇà¿¡¼­ ImageMagick¿¡ ºÙÀÎ Ãâ·Â ÆÄÀÏ¸í¿¡ ´õÇØÁø ÆÄÀÏ È®ÀåÀÚ´Â Ãâ·Â À̹ÌÁö Æ÷¸äÀ» °áÁ¤ÇÑ´Ù. À§ÀÇ ¿¹Á¦¿¡¼­ Ãâ·Â À̹ÌÁö´Â sample.gif·Î ÁöÁ¤µÇ¾ú´Âµ¥, ÀÌ´Â ImageMagick¿¡°Ô GIF À̹ÌÁö¸¦ Ãâ·ÂÇ϶ó´Â Áö½ÃÀÌ´Ù. Æ÷½ºÆ®½ºÅ©¸³Æ®¸¦ GIF·Î º¯È¯ÇÏ´Â µ¥ °üÇÑ »ó¼¼ »çÇ×Àº º¸Ãæ ÀÚ·á "º¤ÅÍ ±×·¡ÇÈ ´ë ºñÆ®¸Ê ±×·¡ÇÈ"À» ÂüÁ¶ÇÑ´Ù.
º¤ÅÍ ±×·¡ÇÈ ´ë ºñÆ®¸Ê ±×·¡ÇÈ

LaTeX/Dvips°¡ »ý¼ºÇÑ Æ÷½ºÆ®½ºÅ©¸³Æ® ÆäÀÌÁö ´Â º¤ÅÍ¿¡ ±â¹ÝÇÑ À̹ÌÁöÀ̸ç, ¾î¶² Å©±â·Îµµ ÀÚ¿¬½º·´°Ô Å©±â Á¶Á¤ÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª GIF, PNG, JPEC°ú °°Àº À¥ À̹ÌÁö´Â ¸ðµÎ ºñÆ®¸Ê À̹ÌÁö¿¡ ±â¹ÝÇÏ°í ÀÖ´Ù. MageMagick»ùÇÃÀº Ãß°¡ÀûÀΠó¸® °úÁ¤À» °ÅÄ¡±â Àü¿¡´Â ±âº»ÀûÀ¸·Î Æ÷½ºÆ®½ºÅ©¸³Æ® ÆäÀÌÁö¸¦ 612 x 792 Çȼ¿ ºñÆ®¸Ê À̹ÌÁö·Î »ùÇøµÇÑ´Ù. ºñÆ®¸Ê À̹ÌÁöÀÇ ÇÑ °¡Áö Å« ´ÜÁ¡Àº »çÀÌÁ Á¶ÀýÇϸé ƯÈ÷ »çÀÌÁ Å°¿ï °æ¿ì º¸±â ½È¾îÁø´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ °ø½ÄÀÇ À̹ÌÁö¸¦ ImageMagicÀÌ »ùÇøµÇÑ °Íº¸´Ù ÈξÀ Å©°Ô´Â ÀÚ¿¬½º·´°Ô Ç¥½ÃÇÒ ¼ö ¾ø´Ù.

ImageMagick ÆÐÅ°Áö´Â ¿ÀÇ ¼Ò½º ¶óÀ̼±½º·Î Ãâ½ÃµÇ¾îÀֱ⠶§¹®¿¡ ¼Ò½º Äڵ带 º¯°æÇÏ¿© Æ÷½ºÆ®½ºÅ©¸³Æ® ÆäÀÌÁö¿¡ ´ëÇØ º¸´Ù ³ªÀº Çػ󵵸¦ °¡Áø À̹ÌÁö¸¦ »ý¼ºÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. magick/image.h ÆÄÀÏ¿¡¼­ ±âº»°ªÀ¸·Î ¼³Á¤µÇ¾î ÀÖ´Â 612 x 792 Çػ󵵸¦ º¯°æÇÏ°í Àüü ÆÐÅ°Áö¸¦ ÀçÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù . ´õ ³ª¾Æ°¡ º¯È¯ ÇÁ·Î±×·¥ÀÇ ¼Ò½º Äڵ带 ÆíÁýÇÏ¿© ·±Å¸Àӽÿ¡ ÁöÁ¤µÈ Æ÷½ºÆ®½ºÅ©¸³Æ® »ùÇøµ Çػ󵵸¦ »ç¿ëÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¼Ò½º Äڵ带 ¼öÁ¤ÇÏ´Â °ÍÀº ´ëºÎºÐÀÇ »ç¿ëÀÚ¿¡°Ô ¸Å¿ì ¾î·Æ´Ù.

°íÇ°ÁúÀÇ ´ëÇü À̹ÌÁö ÀÛ¼ºÀ» ½±°Ô ÇØÁÖ´Â ´Ù¸¥ À̹ÌÁö º¯È¯ Åøµéµµ ³ª¿Í ÀÖ´Ù. Unix/Linux ÇÁ·Î±×·¥ÀÎ Textogif (Âü°í ÀÚ·á ÂüÁ¶)´ÂÆ÷½ºÆ®½ºÅ©¸³Æ® Çؼ®±âÀÎ GhostScript¿Í À̹ÌÁö º¯È¯ ¶óÀ̺귯¸®ÀÎ Netpbm°ú °áÇÕÇÏ¿© Æ÷½ºÆ®½ºÅ©¸³Æ® ÆäÀÌÁö¿¡ ´ëÇØ °íÇ°ÁúÀÇ GIF À̹ÌÁö¸¦ ¾î¶² Çػ󵵷εµ ¸¸µé ¼ö ÀÖ´Ù. ±×·¯³ª Textogif´Â Unix/Linux ÇÁ·Î±×·¥¿¡¼­¸¸ ÀÛµ¿Çϱ⠶§¹®¿¡ ÇÊÀÚ´Â À̹ø ¿¹Á¦¿¡¼­´Â »ç¿ëÇÏÁö ¾Ê°Ú´Ù.

ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¿ÜºÎ ÇÁ·Î±×·¥ ½ÇÇàÇϱâ
Áö±Ý±îÁö ¿ì¸®°¡ °£·«ÇÏ°Ô »ìÆ캻 ÀýÂ÷µéÀº »óÈ£ ¿¬°áµÇÁö ¾ÊÀº ´Ù¼öÀÇ ¸í·ÉÇà ÇÁ·Î±×·¥µéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. ¼öÇÐ À̹ÌÁö¸¦ À¥¿¡ ½±°Ô Ç¥ÇöÇÏ·Á¸é ÀÌ ¼öÇÐ ÀúÀÛ ÅøµéÀ» JSP À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î ÅëÇÕÇØ¾ß ÇÑ´Ù. ÀÚ¹Ù ÇÁ·Î±×·¥Àº java.lang.Runtime API¸¦ »ç¿ëÇØ JVM ¿ÜºÎÀÇ È£½ºÆ® ¿î¿µÃ¼Á¦ÀÇ ÇÁ·Î¼¼½º¸¦ ±¸µ¿½ÃÅ°°í °ü¸®ÇÒ ¼ö ÀÖ´Ù. »õ·Î¿î ÇÁ·Î¼¼½º´Â ´ÙÀ½°ú °°ÀÌ ±¸µ¿½ÃŲ´Ù. :


Process p = 
  Runtime.getRuntime().exec(cmd, envp, dir); 

À§¿¡¼­ cmd ¸Å°³º¯¼ö¿¡´Â ¸í·É¾î°¡ Æ÷ÇÔµÈ ÇϳªÀÇ ¹®ÀÚ¿­ÀÌ ¿Ã ¼öµµ ÀÖ°í ¸í·É¾î¿Í ¿É¼ÇÀÌ Æ÷ÇÔµÈ ÀÏ·ÃÀÇ ¹®ÀÚ¿­ÀÌ ¿Ã ¼öµµ ÀÖ´Ù. envp¿¡´Â À̸§=°ª Æ÷¸äÀ¸·Î ȯ°æ º¯¼ö°¡ ¼³Á¤µÈ´Ù.; ±×¸®°í dir ¸Å°³º¯¼ö´Â java.io.File À¯ÇüÀ̸ç ÇÁ·Î¼¼½ºÀÇ ÀÛ¾÷ µð·ºÅ丮¸¦ ³ªÅ¸³½´Ù. ÇÁ·Î¼¼½º°¡ ±¸µ¿µÇ¸é ÀÔ·Â ½ºÆ®¸²À» ÅëÇØ ÇÁ·Î¼¼½º¿¡ µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ ¼ö ÀÖ´Ù.:

InputStream ins = p.getInputStream();

¶ÇÇÑ Ãâ·Â ½ºÆ®¸²À¸·ÎºÎÅÍ ÇÁ·Î¼¼½ºÀÇ °á°ú¹°À» ¾òÀ» ¼ö ÀÖ´Ù. :

OutputStream ous = p.getOutputStream();

¿ÜºÎ ÇÁ·Î¼¼½º°¡ Á¾·áµÉ¶§±îÁö ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» ÁßÁö½ÃÅ°°í ½Í´Ù¸é ´ÙÀ½ Äڵ带 »ç¿ëÇÑ´Ù. :

p.waitFor(); // Move on to other tasks. 

¿¹Á¦
Áö±Ý±îÁö µ¿ÀûÀÎ ¼öÇÐ ÄÁÅÙÃ÷°¡ ´ã±ä À¥ »çÀÌÆ®¸¦ ±¸ÇöÇϴµ¥ ÇÊ¿äÇÑ Åø°ú ±âº» ±â¹ýµéÀ» »ìÆ캸¾Ò´Ù. ÀÌÁ¦ À̵éÀ» ÅëÇÕÇÒ Â÷·ÊÀÌ´Ù. ±× ¹æ½ÄÀ» °¡Àå Àß º¸¿©ÁÖ´Â ¹æ¹ýÀº ÀÌ ±Û°ú ÇÔ²² Á¦°øµÇ´Â ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î ÀÛ¾÷ÇÏ´Â °ÍÀÌ´Ù.

¿¹Á¦ ¾ÖÇø®ÄÉÀÌ¼Ç ¹èÄ¡ ¹æ¹ý

  1. zip archive Äڵ带 ´Ù¿î¹Þ¾Æ¼­ Ǭ´Ù.
  2. support, SlowMathTag ¹× MathTagCompile ÆÐÅ°Áö¸¦ ÄÄÆÄÀÏÇÑ´Ù. Ŭ·¡½º °æ·Î¿¡ J2EE v1.3 j2ee.jar ÆÄÀÏÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù.
  3. ¿©·¯ºÐÀÇ JSP ¼­¹ö¿¡ »õ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÑ´Ù. ¿¹¸¦ µé¾î, Tomcat ¼­¹ö¿¡¼­´Â Å×½ºÆ® ¾ÖÇø®ÄÉÀ̼ǿëÀ¸·Î ebapps/JSPMath µð·ºÅ丮¸¦ »ý¼ºÇÑ´Ù.
  4. ÄÄÆÄÀÏµÈ ÆÐÅ°ÁöÀÎ support, SlowMathTag ¹× MathTag¸¦ Webapps/JSPMath/WEB-INF/classes µð·ºÅ丮¿¡ º¹»çÇÑ´Ù.
  5. taglib µð½ºÅ©¸³ÅÍ ÆÄÀÏÀÎ tlds/*.tld¸¦ Webapps/JSPMath/WEB-INF/tlds µð·ºÅ丮¿¡ º¹»çÇÑ´Ù.
  6. JSP¿Í HTML ÆÄÀÏÀÎ jsp/*À» Webapps/JSPMath ³»ÀÇ ÇÑ µð·ºÅ丮¿¡ º¹»çÇÑ´Ù.
  7. ÀÌÁ¦ ¿©·¯ºÐÀº ºê¶ó¿ìÀú·Î Test01.htmlÀ̳ª Test02.htmlÀ» ÁöÁ¤ÇÏ¿© Å×½ºÆ®¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´Ù.

ÀÏ´Ü ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼³Ä¡ÇßÀ¸¸é º» ¼½¼ÇÀÇ ´Ü°èµéÀ» ¹â¾Æ ¿¹Á¦°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö º¼ ¼ö ÀÖ´Ù.

¿¹Á¦ ÄÚµå ½ÇÇàÇϱâ
»ùÇà ÄÚµå´Â µÎ °³ÀÇ »õ·Î¿î À¯ÇüÀÇ JSP Ä¿½ºÅÒ Å±׸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. <LatexRaw> ű״ ¿ø·¡ÀÇ LaTeX ÅؽºÆ®¸¦ HTML À̹ÌÁö ű׷Π¹øȯÇÑ´Ù. ÀÌ Å±״ ÇϳªÀÇ À̹ÌÁö¿¡ ¿©·¯ °³ÀÇ °ø½Ä, Ç¥, ȤÀº ªÀº ¼³¸í¹®À» Ç¥½ÃÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. <LatexMath> ű״ ¼öÇÐÀû ¸ðµåÀÇ LaTeX ÅؽºÆ®¸¸ HTML À̹ÌÁö ű׷Π¹Ù²Ù¾î ÇÑ °³ÀÇ ¼öÇÐ °ø½Ä À̹ÌÁö·Î ³ªÅ¸³½´Ù. ÀÌ Å±״ °ø½ÄÀ» ½Å¼ÓÇÏ°Ô Ç¥½ÃÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

°¢ ű״ height¿Í width¶ó´Â µÎ °³ÀÇ ¼Ó¼ºÀ» °¡Áö°í Àִµ¥, °á°ú·Î ³ª¿À´Â <IMG> ű×ÀÇ height¿Í width ¼Ó¼º¿¡ ´ëÀÀµÈ´Ù. ÀÌµé ¼Ó¼ºÀº Çʼö »çÇ×Àº ¾Æ´Ï´Ù.

¾Æ·¡ÀÇ È­¸éÀº ½ÇÇàÁßÀÎ Ä¿½ºÅÒ Å±׸¦ º¸¿© ÁÖ°í ÀÖ´Ù. Test01.htmlÀº LaTeX ÅؽºÆ® ¹®ÀÚ¿­À» µÎ°³ÀÇ Å« ÅؽºÆ® Çʵ忡 ÀÔ·ÂÇÑ´Ù. ÆäÀÌÁö À§ÂÊ¿¡ ÀÖ´Â µÎ °³ÀÇ ÀÛÀº ÅؽºÆ® ÀÔ·Â »óÀÚ¿¡´Â °á°ú·Î ³ª¿Ã À̹ÌÁö¿¡ ´ëÇØ »ç¿ëÀÚ°¡ ¿øÇÏ´Â ³ôÀÌ¿Í ³Êºñ¸¦ ÀÔ·ÂÇÑ´Ù. Ä¿½ºÅÒ Å±׿¡¼­ dimenstion ¼Ó¼ºÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ±â À§ÇØ, ¿©±â¿¡¼­ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ¸éÀûÀ¸·Î µÈ À̹ÌÁö¿Í ImageMagickÀÌ ÁöÁ¤ÇÑ ±âº» ¸éÀûÀ¸·Î µÈ À̹ÌÁö¸¦ Test01.jsp¿¡¼­ µÑ ´Ù Ç¥½ÃÇÏ°Ú´Ù. ÀÛ¼ºµÈ HTML ¾ç½ÄÀº ºê¶ó¿ìÀú¿¡¼­ ±×¸² 6°ú °°ÀÌ ³ªÅ¸³­´Ù.

±×¸² 6. LaTeX ¼öÇÐ ÀÔ·Â ¾ç½Ä
LaTeX Math input form

Text01.htmlÀÇ ¾ç½ÄÀ» Àü¼ÛÇϸé JSP ÆäÀÌÁöÀÎ Test01.jsp·Î µ¥ÀÌÅ͸¦ °Ô½ÃÇÏ°í, ±×·¯¸é ±×¸² 7°ú °°ÀÌ ¼öÇÐ °ø½Ä À̹ÌÁö°¡ °á°ú·Î Ç¥½ÃµÈ´Ù. ù¹ø° À̹ÌÁö´Â ÀÔ·Â HTML ¾ç½ÄÀÇ MathText Çʵå (ÇÑÁÙ·Î µÈ ÅؽºÆ® Çʵå)ÀÇ ¼öÇÐ ¸ðµå LaTeX ÅؽºÆ®¸¦ »ç¿ëÇØ <LatexMath> űװ¡ »ý¼ºÇÑ °ÍÀÌ´Ù. ù¹ø° À̹ÌÁö¿¡ ´ëÇÑ <LatexMath> űװ¡ µÎ°¡Áö ¼Ó¼ºÀ» °¡Áö°í ÀÖÀ½¿¡ ÁÖÀÇÇÑ´Ù. ±×·¯¸é »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ height¿Í width ¼Ó¼º¿¡ µû¸¥ ¸éÀûÀÇ À̹ÌÁö°¡ Ç¥½ÃµÈ´Ù. µÎ¹ø° À̹ÌÁö´Â ±âº»À¸·Î ÁöÁ¤µÇ¾î ÀÖ´Â ¸éÀûÀ¸·Î Ç¥½ÃµÇ¾ú´Ù´Â °Í ¿Ü¿¡´Â ù¹ø° À̹ÌÁö¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î »ý¼ºµÇ¾ú´Ù. (µÎ¹ø° À̹ÌÁö¸¦ »ý¼ºÇϴ ű״ dimension ¼Ó¼ºÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù.) ¼¼¹ø° À̹ÌÁö´Â RawMathText Çʵå (Å« ¿©·¯ÇàÀÇ ÅؽºÆ® Çʵå) ¿¡ ÀÔ·ÂµÈ LaTeX ÅؽºÆ®·ÎºÎÅÍ <LatexRaw> ű׿¡ ÀÇÇØ »ý¼ºµÇ¾úÀ¸¸ç ÅؽºÆ®¿Í ¼öÇÐÀû ±âÈ£¿Í È¥ÇÕµÈ ¿¹Á¦ÀÌ´Ù. ÁöÁ¤µÈ ³ôÀÌ¿Í ³Êºñ Çʵå´Â ÀÌ À̹ÌÁö¿¡ Àû¿ëµÇÁö ¾Ê¾Ò´Ù.

±×¸² 7. ¼öÇÐ À̹ÌÁö Ãâ·Â
Math image output

Listing 1Àº ÀÌ ¸ðµç ÀÛ¾÷À» ¼öÇàÇÏ´Â Test01.jspÀÇ ÄÚµåÀÌ´Ù.

Listing 1. Test01.jsp


<%@ taglib uri="/WEB-INF/tlds/SlowMathTaglib.tld" prefix="SlowMathTag" %>

<%
   String mathText = request.getParameter( "MathText" );
   String rawMathText = request.getParameter( "RawMathText" );
   String height = request.getParameter( "height" );
   String width = request.getParameter( "width" );
%>

<html>
<head>
  <title>JSPMath test without image cache</title>
</head>
<body bgcolor=white>

<p><font color=green> Math formula in desired dimensions: </font>
<p>

<SlowMathTag:LatexMath height="<%=height%>" width="<%=width%>">
  <%=mathText%>
</SlowMathTag:LatexMath>


<p><font color=green> Math formula in default dimensions: </font>
<p>

<SlowMathTag:LatexMath>
  <%=mathText%>
</SlowMathTag:LatexMath>


<p><font color=green> Latex segment in default dimensions: </font>
<p>

<SlowMathTag:LatexRaw>
  <%=rawMathText%>
</SlowMathTag:LatexRaw>


</body>
</html>

ÇÑ ¹øÀÇ ½ÇÇàÀ¸·Î JSP ÄÁÅ×À̳ʰ¡ À¥ ºê¶ó¿ìÀú¿¡°Ô º¸³»´Â ½ÇÁ¦ HTML ÄÚµå´Â Listing 2¿Í °°´Ù.

Listing 2. Test01.jsp°¡ ºê¶ó¿ìÀú¿¡ º¸³»´Â HTML ÄÚµå


<html>
<head>
  <title>JSPMath test without image cache</title>
</head>

<body bgcolor=white>

<p><font color=green> Math formula in desired dimensions: </font>
<p>

<IMG 
SRC="http://localhost:8080/JSPMath/images/image1009709773390.gif" 
height=20 width=150 />


<p><font color=green> Math formula in default dimensions: </font>
<p>

<IMG 
SRC="http://localhost:8080/JSPMath/images/image1009709776535.gif" />


<p><font color=green> Latex segment in default dimensions: </font>
<p>

<IMG 
SRC="http://localhost:8080/JSPMath/images/image1009709777612.gif" />


</body>
</html>

¿©±âÀÇ GIF À̹ÌÁö´Â ÅÂ±× Çڵ鷯°¡ »ý¼ºÇÑ °ÍÀÌ´Ù. ±×¸² 7¿¡¼­ º¸¾ÒµíÀÌ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ¸éÀûÀ¸·Î È®´ëµÈ À̹ÌÁö´Â ¸Å²ô·´°Ô Ç¥ÇöµÇÁö ¾Ê´Â´Ù. ¿Ö ±×·±Áö¿Í Unix/Linux ½Ã½ºÅÛ¿¡¼­ ÀÌ ¹®Á¦¿¡ ´ëÇØ ¾î¶»°Ô ´ëÀÀÇÒÁö¿¡ ´ëÇؼ­´Â ¾ÕÀÇ º¸Ãæ ÀÚ·á "º¤ÅÍ ±×·¡ÇÈ ´ë ºñÆ®¸Ê ±×·¡ÇÈ"À» ÂüÁ¶ÇÑ´Ù.

ÀÌ·¯ÇÑ Ä¿½ºÅÒ ÅÂ±× ÀÛ¾÷À» ¾î¶»°Ô ±¸ÇöÇÏ¿´´Â°¡? ¾Ë°í ½Í´Ù¸é °è¼Ó Àб⠹ٶõ´Ù.

°£´ÜÇÑ (ÇÏÁö¸¸ ´À¸°) ¹æ½Ä
À§ÀÇ ¿¹Á¦´Â ¸Å¿ì °£´ÜÇÏ°í Á÷Á¢ÀûÀÎ ¹æ½ÄÀ¸·Î ±¸ÇöµÉ ¼ö ÀÖ´Ù. À̱ۿ¡¼­ ¿©·¯ºÐÀº ÀÌ¹Ì JSP Ä¿½ºÅÒ ÅÂ±× Çڵ鷯 ±¸Çö ¹æ¹ýÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ±â¾ïÀ» µÇ»ì¸®°í ½Í´Ù¸é ¾Æ·¡ÀÇ Âü°í »çÇ× ¼½¼ÇÀ» ÂüÁ¶ÇÑ´Ù.

<SlowMathTag:*> ÅÂ±× Çڵ鷯´Â Á¤ÀûÀÎ ¸Þ¼ÒµåÀÎ support.MathUtil.latex2gif()À» È£ÃâÇÏ¿© GIF À̹ÌÁö¸¦ »ý¼ºÇÑ´Ù. ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ º¸±â À§ÇØ ÀÌ ¸Þ¼ÒµåÀÇ ¼Ò½º Äڵ带 »ìÆ캸ÀÚ.

Listing 3°ú °°ÀÌ ¸Þ¼Òµå´Â ¿ì¼± ÇöÀçÀÇ Å±װ¡ »ý¼ºÇÑ GIF À̹ÌÁö¿Í ÁßÀç ÆÄÀϵéÀÇ À̸§À» °áÁ¤ÇÑ´Ù. ÀÌ ÆÄÀϵéÀÇ ·çÆ®³×ÀÓÀº ÇöÀç ½Ã°£ÀÇ 1/1000ÃÊ °ªÀÌ´Ù.

Listing 3. ÆÄÀÏ À̸§ »ý¼ºÇϱâ


Date now = new Date ();
String filename = "image" + Long.toString(now.getTime());
// ...
File f = new File(path + filename + ".tex");

´ÙÀ½¿¡ ¸Þ¼Òµå´Â Listing 4¿Í °°ÀÌ ÅÂ±× º»¹®¿¡¼­ ³»¿ëÀ» ÃëÇØ ¿ÏÀüÇÑ LaTeX ÀÔ·Â ÆÄÀÏÀ» ±¸¼ºÇÑ´Ù. JSP ÄÁÅ×À̳ʴ ÅÂ±× º»¹®À» ¹®ÀÚ¿­ º¯¼ö latexStrÀÇ latex2gif() ¸Þ¼Òµå¿¡ Àü´ÞÇÑ´Ù. \pagestyle{empty} ¸í·É¾î´Â °á°ú ÆäÀÌÁöÀÇ ÇÏ´Ü¿¡ ÆäÀÌÁö ¹øÈ£°¡ ³ª¿ÀÁö ¾Êµµ·Ï Çϴµ¥ »ç¿ëµÈ´Ù. \batchmode ¸í·É¾î´Â LaTeX ÇÁ·Î¼¼¼­°¡ ºñ´ëÈ­Çü ¸ðµå·Î ½ÇÇàµÇµµ·Ï Çϴµ¥ »ç¿ëµÈ´Ù.

Listing 4. LaTeX ÀÔ·Â ÆÄÀÏ ±¸¼ºÇϱâ


private static String latexHead = "\\batchmode\n" +
                                  "\\documentclass[12pt]{article}\n" +
                                  "\\pagestyle{empty}\n" +
                                  "\\begin{document}\n";
private static String latexEnd  = "\\end{document}\n";

// ...

// String variable "latexStr" contains the body of the current tag.

// Process modes.
if ( mode.equals("displaymath") ) {
  latexStr = "\\Large\n\\begin{displaymath}\n" +
             latexStr.trim() +
             "\\end{displaymath}\n";
} else {
  // Unrecognized modes are raw latex strings.
}

// Write content into a latex file.
FileWriter fw = new FileWriter(f);
fw.write( latexHead, 0, latexHead.length() );
fw.write( latexStr, 0, latexStr.length() );
fw.write( latexEnd, 0, latexEnd.length() );

ÀÌÁ¦ ¸Þ¼Òµå´Â Listing 5¿Í °°ÀÌ latex, dvips ¹× convert ¸í·É¾î¸¦ ½ÇÇàÇÏ¿© ¼­¹öÃø¿¡ ¹Ì¸® ¼³Á¤µÈ µð·ºÅ丮 °æ·Î¿¡ ÃÖÁ¾ÀûÀÎ GIF À̹ÌÁö¸¦ ¸¸µç´Ù.

Now the method executes the commands latex, dvips, and convert to produce the final GIF image in a preconfigured directory path on the server side, as shown in Listing 5.

Listing 5. GIF ÆÄÀÏ »ý¼º Generating the GIF file

private static String latexCommand = "/usr/bin/latex";
private static String dvipsCommand = "/usr/bin/dvips";
private static String convertCommand = 
    "/usr/X11R6/bin/convert -antialias -crop 0x0";

// ...

public static synchronized String latex2gif (String path, String mode,
                                String latexStr) throws Exception {

  // Generate root file name and create ".tex" file
  // ...

  // Get Runtime.
  Runtime r = Runtime.getRuntime();
  Process p;
  File imagePath = new File( path );

  // ...

  // Run latex in directory "imagePath".
  p = r.exec(latexCommand + " " + filename + ".tex", null, imagePath);
  if ( p.waitFor() != 0 ) throw new Exception("Error in Latex\n");

  // Run dvips in directory "imagePath".
  p = r.exec(dvipsCommand + " -o " + filename + ".ps " +
             filename + ".dvi", null, imagePath);
  if ( p.waitFor() != 0 ) throw new Exception("Error in dvips\n");

  // Run convert in directory "imagePath".
  p = r.exec(convertCommand + " " + filename + ".ps " +
             filename + ".gif", null, imagePath);
  if ( p.waitFor() != 0 ) throw new Exception("Error in convert\n");

  // ...
}

¸¶Áö¸·À¸·Î ¸Þ¼Òµå´Â Listing 6°ú °°ÀÌ ¸ðµç ÁßÀç ÆÄÀÏÀ» »èÁ¦ÇÑ´Ù. .

Listing 6. ÁßÀç ÆÄÀÏ »èÁ¦Çϱâ

f = new File(path + filename + ".tex");
f.delete();
f = new File(path + filename + ".log");
f.delete();
f = new File(path + filename + ".aux");
f.delete();
f = new File(path + filename + ".dvi");
f.delete();
f = new File(path + filename + ".ps");
f.delete();

ÀÌÁ¦ ÅÂ±× Çڵ鷯´Â °á°ú·Î ³ª¿À´Â GIF À̹ÌÁö¿¡ ´ëÇÑ <IMG> HTML ű׸¦ ¼­¹ö Ãâ·Â ½ºÆ®¸²¿¡ ÀÛ¼º ¼ö ÀÖ´Ù.

Áö±Ý °£·«È÷ ¼³¸íÇÑ ¹æ½ÄÀº °£´ÜÇÏÁö¸¸ ¸Å¿ì ´À¸®°í ¿¡·¯°¡ ³ª±â ½±´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼­´Â ¼Ö·ç¼ÇÀÇ ¼º´É°ú °­·Â¼ºÀ» Çâ»ó½ÃÅ°´Â ¹æ¹ý¿¡ °üÇØ ¼³¸íÇÏ°Ú´Ù.

ij½ÌÀ» ÀÌ¿ëÇÑ ¼º´É Çâ»ó½ÃÅ°±â
LaTeX ÀԷ¹®À¸·ÎºÎÅÍ À̹ÌÁö¸¦ »ý¼ºÇÏ´Â ÀýÂ÷´Â ¿©·¯°³ÀÇ ¿ÜºÎ ÇÁ·Î±×·¥ÀÌ °ü¿©µÇ¾î Àֱ⠶§¹®¿¡ ¼Óµµ°¡ ´À¸®´Ù. À§ ¼½¼Ç¿¡¼­ »ìÆ캻 °£´ÜÇÑ ±¸Çö¿¡¼­ <SlowMathTag:*> Ä¿ ½ºÅÒ ÅÂ±× Çڵ鷯´Â È£ÃâµÉ ‹š¸¶´Ù »õ·Î¿î À̹ÌÁö¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù. ÀÌ´Â ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù. ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â Test01.jsp³» µÎ °³ÀÇ <SlowMathTag:LatexMath> űװ¡ ´ÜÁö ´Ù¸¥ ¸éÀûÀ¸·Î À̹ÌÁö¸¦ Ç¥½ÃÇϱâ À§ÇØ ¹æ¹®ÀÚ°¡ ÀÖÀ» ¶§¸¶´Ù µ¿ÀÏÇÑ ¼öÇÐ °ø½Ä À̹ÌÁö¸¦ µÎ ¹ø »ý¼ºÇØ¾ß ÇÑ´Ù. ½Ç¼¼°è ¾ÖÇø®ÄÉÀ̼ÇÀº ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼Ǻ¸´Ù ÈξÀ º¹ÀâÇÏ°í ºÒÇÊ¿äÇÑ À̹ÌÁö »ý¼ºÀ¸·Î ÀÎÇÑ ¼º´É °úºÎÇÏ°¡ ½É°¢ÇÒ ¼ö ÀÖ´Ù. ¿ì¸® »çÀÌÆ®°¡ µ¿ÀûÀÎ ¼öÇÐ ¿¹Á¦¸¦ Á¦°øÇØ¾ß ÇÏ°í ¸¹Àº ¹æ¹®ÀÚ°¡ µ¿ÀÏÇÑ Å×½ºÆ® ¹®Á¦¸¦ º¸¾Æ¾ß ÇÑ´Ù°í »ó»óÇØ º¸¶ó. µ¿ÀÏÇÑ °ø½ÄÀ» °¢ ¹æ¹®ÀÚ¿¡ ´ëÇØ µÇÇ®ÀÌÇؼ­ »ý¼ºÇÏ´Â °ÍÀº ºñ¿ëÀÌ ¸Å¿ì ¸¹ÀÌ µç´Ù.

È®À强 ÀÖ´Â ¼Ö·ç¼ÇÀ» À§ÇØ ¿ì¸®´Â ¿ì¸®°¡ »ý¼ºÇÑ À̹ÌÁö¸¦ ij½¬¿¡ ÀúÀåÇÏ¿© ÇâÈÄ ÇÊ¿äÇÒ ¶§ À̸¦ Àç»ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿ì¸®´Â LaTeX ÅؽºÆ®¸¦ À̹ÌÁö À̸§¿¡ ´ëÇÑ keys·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÅÂ±× Çڵ鷯°¡ µ¿ÀÏÇÑ LaTeX ÅؽºÆ®¸¦ µÎ¹ø° ¸¸³ª¸é ij½ÌµÈ À̹ÌÁöÀÇ ÆÄÀϸíÀ» ¹ß°ßÇÏ¿© À̸¦ ¹Ù·Î º¸¿©ÁÙ ¼ö ÀÖ´Ù. LaTex ÅؽºÆ®¿Í À̹ÌÁö À̸§ÀÇ ½ÖÀ» SQL µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÏ¿© Àå±â º¸°üÇÏ°í ½Å¼ÓÇÑ °Ë»öÀ» ÇÒ ¼öÀÖ´Ù. ij½¬¿¡ ÀúÀåµÈ À̹ÌÁö¿¡ ¾×¼¼½ºÇÏ´Â °ÍÀº ¿©·¯ ´Ù¸¥ ¹üÁÖÀÇ µ¥ÀÌÅͺ£À̽º ¾×¼¼½º JavaBeansÀ» »ç¿ëÇØ ´õ Á¶À²µÉ ¼öÀÖ´Ù. ±×·¯ÇÑ Æ©´×Àº ÀÌ ±ÛÀÇ ¹üÀ§¸¦ ¹þ¾î³ªÁö¸¸, µ¶ÀÚ¿¡°Ô´Â ¸Å¿ì Èï¹ÌÀÖ´Â ¿¬½ÀÀÌ µÉ °ÍÀÌ´Ù.

¿©±â¼­ ¿ì¸®´Â ij½ÌµÈ À̹ÌÁö¸¦ ÅÂ±× Çڵ鷯 helper Ŭ·¡½º¿¡ Á¤ÀûÀÎ µ¥ÀÌÅÍ ¸â¹ö·Î ÀúÀåÇÒ °ÍÀÌ´Ù. ±×·¯ÇÑ Á¤Àû µ¥ÀÌÅÍ ¸â¹ö´Â JSP ¼­¹ö ÄÁÅ×ÀÌ³Ê¿Í µ¿ÀÏÇÑ ¼ö¸íÁֱ⸦ °¡Áø´Ù. À¥ »çÀÌÆ®¸¦ º¯°æÇÏ°í ¼­¹ö¸¦ À籸µ¿½ÃÅ°¸é ÀÌÀü ij½¬¸¦ Æ÷±âÇØ¾ß ÇÑ´Ù. ij½ÌµÈ LaTeX ±¸¹®°ú À̹ÌÁö À̸§Àº µÎ°³ÀÇ Á¤ÀûÀÎ º¤ÅÍ¿¡ ÀúÀåµÈ´Ù. ÅÂ±× Çڵ鷯°¡ LaTeX ±¸¹®À» ¸¸³ª¸é ij½¬µÈ LaTeX ±¸¹® º¤Å͸¦ ¹Ýº¹ °Ë»öÇÑ´Ù. ÀÏÄ¡µÇ´Â °ÍÀ» ãÀ¸¸é ´ëÀÀµÇ´Â À̹ÌÁö À̸§À» ¹ÝȯÇÑ´Ù. ÀÏÄ¡µÇ´Â °ÍÀÌ ¾øÀ¸¸é »õ·Î¿î °ø½Ä À̹ÌÁö¸¦ »ý¼ºÇÏ°í, »õ·Î¿î LaTeX ±¸¹®/À̹ÌÁö ½ÖÀ» ij½¬¿¡ ÀúÀåÇÑ´Ù. Listing 7¿¡ ÀÌ ¹æ½ÄÀÌ ³ª¿Í ÀÖ´Ù.

Listing 7. MathUtil.getImage()


public static synchronized String getImage (String path, String mode,
                               String latexStr) throws Exception {

  // Formatted string stored in the latexStrVec vector.
  String comp =  "MODE=" + mode + "\nLaTeX=" + latexStr.trim();

  // Iterate through the "latexStrVec" cache and check if any
  // element matches the input string and mode.
  for (int i = 0; i < latexStrVec.size(); i++) {
    String l = (String) latexStrVec.elementAt(i);
    if ( comp.equals(l) ) {
      // Return the cached image name if a match is found.
      return (String) imageNameVec.elementAt(i);
    }
  }

  // If no match is found, generate a new image
  // and store it in the cache.
  return storeImage(mode, latexStr, latex2gif(path, mode, latexStr) );
}

Test02.html°ú Test02.jsp´Â <MathTag:*> ű׿¡ ´ëÇØ Ä³½¬·Î ¼º´ÉÇâ»óµÈ ÅÂ±× Çڵ鷯¸¦ »ç¿ëÇÑ´Ù. À̸¦ ½ÃÇèÇØ º¸°í <SlowMathTag:*> ű׿¡ ºñÇØ ¼º´É Çâ»óÀ» °æÇèÇØ º¸¶ó.

ÁßÀç ÆÄÀÏ ÁÙÀ̱â
Áö±Ý±îÁö »ìÆì ºÃµíÀÌ, À¯Æ¿¸®Æ¼ ÇÁ·Î±×·¥µéÀº ¼Óµµ°¡ ´À¸° µð½ºÅ© ÆÄÀÏÀ» »ç¿ëÇØ »óÈ£ Åë½ÅÇÏ¸ç ¿ì¸®´Â ¸¶Áö¸·¿¡ ¸ðµç ÁßÀç ÆÄÀÏÀ» »èÁ¦ÇØ¾ß ÇÑ´Ù. ±×·¯ÇÑ ÁßÀç ÆÄÀϵéÀº ºÒÇÊ¿äÇÑ °úºÎÇϸ¦ ¸¸µé¾î³¾ »Ó ¾Æ´Ï¶ó µð½ºÅ©¿Í ÆÄÀÏ ½Ã½ºÅÛÀÇ ¿¡·¯¸¦ ³»±â ½±´Ù. Unix/Linux ½Ã½ºÅÛ¿¡¼­ ¿ì¸®´Â ´Ù¸¥ ÇÁ·Î±×·¥µéÀÇ ÀԷ°ú Ãâ·ÂÀ» ¿¬°á½ÃÅ°°í ÁßÀç ÆÄÀÏÀÇ Çʿ伺À» ºÎºÐÀûÀ¸·Î ¾ø¾Ö±â À§ÇØ ÆÄÀÌÇÁ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÚ¹Ù ·±Å¸ÀÓÀº Unix ÆÄÀÌÇÁ¸¦ Á÷Á¢ Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ Listing 8¿¡¼­¿Í °°ÀÌ À̵éÀ» ½©¿¡¼­ ºÒ·¯¿Í¾ß ÇÑ´Ù.

Listing 8. ÆÄÀÌÇÁ·Î ¿¬°áµÈ ÀÔ·Â/Ãâ·ÂÀ» »ç¿ëÇØ ¸í·É¾î È£ÃâÇϱâ


String convertCommand = "/usr/X11R6/bin/convert -antialias -crop 0x0";
String dvipsCommand = "/usr/bin/dvips";

// ...

Process p = Runtime.getRuntime().exec(
  new String[] {
    "/bin/sh",
    "-c",
    dvipsCommand + " -f < " + filename + ".dvi | " +
    convertCommand +  " - " + filename + ".gif"
  },
  null,
  imagePath
);

±×·¯³ª LaTeX ÇÁ·Î±×·¥Àº Ç¥ÁØ ÀÔ·Â/Ãâ·Â ÆÄÀÌÇÁ¸¦ Áö¿øÇÏÁö ¾Ê°í Dvips´Â ÀÔ·ÂÀ» °Ë»öÇÒ ¼ö ÀÖµµ·Ï ¿ä±¸ÇÑ´Ù (Áï ÆÄÀÌÇÁ¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.). µû¶ó¼­ ¿ì¸®´Â ¿©ÀüÈ÷ .tex¿Í .dvi ÁßÀç ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù.

ÀÌ ¹æ½ÄÀº Unix¿¡¼­¸¸ ÀÛµ¿ÇÏ°í ¸ðµç ÁßÀç ÆÄÀÏÀ» Á¦°ÅÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ÇÊÀÚ´Â ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ ÀÌ ¹æ½ÄÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼­´Â ÈξÀ ´õ ÀϹÝÀûÀÌ°í È¿°úÀûÀÎ ¹æ½ÄÀ» ¼³¸íÇÏ°Ú´Ù.

¿ÜºÎ ¾ÖÇø®ÄÉÀ̼ǿë ÀÚ¹Ù API

À§¿¡¼­ ¼öÇàÇßµíÀÌ °³º°ÀûÀÎ ÀÚ¹Ù ·±Å¸ÀÓ ÇÁ·Î¼¼½º·Î µ¶¸³Çü ÀÚ¹Ù ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. ±×·¯³ª ÀÌ ¹æ½ÄÀº ¿ì¸®°¡ ÀÌ¹Ì º»´ë·Î ÁßÀç ÆÄÀÏ ¹®Á¦¸¸ ÇØ°áÇÏÁö ¸øÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù.; º¹ÀâÇÑ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǰúµµ Àß ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ¿ÜºÎ ÇÁ·Î±×·¥À» °èÃþÀûÀÎ Àڹ٠Ŭ·¡½º ¾ÆÅ°ÅØó¿¡ ½±°Ô ÅëÇÕÇÒ ¼ö ¾ø´Ù.

LaTeX¿Í À̹ÌÁö º¯È¯ À¯Æ¿¸®Æ¼ ±â´ÉÀ» ÀÚ¹Ù ÇÁ·Î±×·¥¿¡¼­ Á÷Á¢ È£ÃâÇÏ°í ÀÚ¹Ù in-memory ¹öÆÛ¸¦ ÇÁ·Î¼¼½º°£ µ¥ÀÌÅ͸¦ ±³È¯Çϴµ¥ »ç¿ëÇÏ¸é º¸´Ù ½Å¼ÓÇÏ°í Áö¼Ó¼º ÀÖ´Â Äڵ带 »ý¼ºÇÒ ¼ö ÀÖ´Ù. À̸¦ À§Çؼ­´Â ÀÌ ±â´Éµé¿¡ ¾×¼¼½ºÇÏ´Â ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö API°¡ ÇÊ¿äÇÏ´Ù.

ºñ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ÀÚ¹Ù API¸¦ »ý¼ºÇÏ´Â ÇÑ°¡Áö Ç¥ÁØÀûÀÎ ¹æ¹ýÀº Java Native Interface (JNI)¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. JNI¸¦ »ç¿ëÇÏ·Á¸é ºñ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» »õ·Î¿î ÀÚ¹Ù ÀÎ½Ä Çì´õ·Î ÀçÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. Áö±Ý±îÁö ¾ð±ÞÇÑ ¸ðµç ¼öÇÐ µµ±¸µéÀº ¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®¿¡¼­ ³ª¿Â °ÍÀÌ°í µû¶ó¼­ ¼Ò½º Äڵ带 ¹Þ¾Æ ÀçÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. ¿ì¸®´Â µµ±¸°¡ ÆÄÀϺ¸´Ù´Â ÀÔ·Â/Ãâ·Â ¹öÆÛ¸¦ Çڵ鸵ÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ ¼Ò½º ÄÚµåÀÇ ÀÔ·Â/Ãâ·Â ºÎºÐÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. »ç½Ç JMagick°ú °°ÀÌ JNI ÀÚ¹Ù API¸¦ ImageMagick ¶óÀ̺귯¸®¿¡ Ãß°¡Çϱâ À§ÇÑ ½Ãµµ°¡ ÀÌ¹Ì ÀÖ¾ú´Ù. (ResourcesÂüÁ¶) ¸ðµç ¼öÇÐ Åø¿¡ ´ëÇÑ JNI API¸¦ ¸¸µå´Â °ÍÀº ÀÌ ±ÛÀÇ ¹üÀ§¸¦ ¹þ¾î³­´Ù. ±×·¯³ª ¿©·¯ºÐÀÌ º¹ÀâÇÑ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇØ ÀÌ¿Í °°Àº ¾ÆÅ°ÅØó ±¸ÇöÀ» °í·ÁÇÏ°í ÀÖ´Ù¸é ÀÌ ¹æÇâÀ¸·Î ¿òÁ÷ÀÌ´Â °ÍÀ» °ËÅäÇÏ°í ½ÍÀ» °ÍÀÌ´Ù. JNI¿¡ °üÇÑ »ó¼¼ Á¤º¸´Â ¾Æ·¡ÀÇ Âü°í ÀÚ·á ¼½¼ÇÀ» ÂüÁ¶ÇÑ´Ù.

°á·Ð
º» ±â»ç¿¡¼­ ¿©·¯ºÐÀº JSP Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇØ LaTeX À¯ÇüÀÇ ÅؽºÆ®¸¦ ¼öÇÐÀû À̹ÌÁö·Î º¯È¯ÇÒ ¶§ÀÇ È¿À²¼ºÀ» Áõ´ë½ÃÅ°´Â ¸î°¡Áö ±â¹ý¿¡ ´ëÇØ ¹è¿ü´Ù. ÀÌ ¹æ½ÄÀº XSLT¿Í °°Àº ¿©Å¸ °í±Þ ÄÁÅÙÃ÷ °ü¸® ±â¼ú¿¡ ´ëÇÑ ÀÚ¹Ù È®ÀåÀÚ¸¦ »ý¼ºÇϴµ¥µµ ½±°Ô È®ÀåµÉ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº ¿©·¯ºÐÀÌ ¼öÁ¤Çؼ­ ÀÚ½ÅÀÇ À¥ »çÀÌÆ®¿¡ ÅëÇÕÇÒ ¼ö ÀÖ´Â ´Ù¸¥ Åøµé¿¡ ¾î¶² °ÍÀÌ ÀÖ´ÂÁö¸¦ °ËÅäÇØ¾ß ÇÑ´Ù. ¿©±â¼­ °£·«È÷ ¼³¸íÇÑ ±â¹ýµé·Î ¿ì¸®´Â ÀÌÁ¦ dzºÎÇÑ ¼öÇÐ ÄÁÅÙÃ÷¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â °í±Þ À¥ »çÀÌÆ®¸¦ ¸¸µé ¼ö ÀÖ´Â µµ±¸¸¦ °¡Áö°Ô µÇ¾ú´Ù.

Âü°í ÀÚ·á

µµ±¸

  • LaTeX ÇÁ·ÎÁ§Æ® ȨÆäÀÌÁö

  • ImageMagick À̹ÌÁö ó¸® µµ±¸

  • JMagick, ImageMagick Java APIÀÎ JMagick¿¡ °üÇÑ ÀÛ¾÷

  • Textogif Tex/Æ÷½ºÆ®½ºÅ©¸³Æ® ÆÄÀÏÀ» ¾î¶² ÇØ»óµµÀÇ GIF À̹ÌÁö·Îµµ º¯È¯

Java Native Interface.

  • MathML W3CÀÇ Ç¥ÁØ ¼öÇÐ ¸¶Å©¾÷ ¾ð¾î

  • techexplorer IBMÀÇ ¼öÇÐ ¹®¼­¿ë ºê¶ó¿ìÀú

¸ñ Â÷:
JSP±â¼ú º¹½À
¹«¾ùÀÌ ÇÊ¿äÇÑ°¡
LaTeX¿¡¼­ GIF À̹ÌÁö »ý¼ºÇϱâ
ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÇÁ·Î±×·¥ ½ÇÇàÇϱâ
¿¹Á¦
°£´ÜÇÑ ¹æ½Ä
¼º´É Çâ»ó½ÃÅ°±â
ÁßÀç ÆÄÀÏ ÁÙÀ̱â
¿ÜºÎ ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇÑ ÀÚ¹Ù API
°á·Ð
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
JSP ±â¼ú °³¿ä
JSP taglibs: ¼³°è¿¡ ÀÇÇÑ À¯¿ë¼º Áõ´ë
ÀÚ¹Ù¿Í XSLT·Î µ¿ÀûÀÎ À¥ ÆäÀÌÁö »ý¼ºÇϱâ
Ä¿½ºÅÒ Å±׷ΠJSP ÆäÀÌÁö¿¡ ´ëÇÑ Á¦¾î·Â ³ôÀ̱â
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ ¼Ò°³
Michael YuanÀº University of Texas at Austin¿¡¼­ ¹Ú»ç °úÁ¤À» ¹â°í ÀÖÀ¸¸ç, ¼­¹öÃø ÀÚ¹Ù ±â¼úÀ» »ç¿ëÇÏ¿© °úÇÐ ±³À°°ú ¿¬±¸¸¦ ¿ëÀÌÇÏ°Ô Çϴµ¥ °ü½ÉÀ» °¡Áö°í ÀÖ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ