Next: M4wrap, Previous: Changecom, Up: Input Control [Contents][Index]
¥Þ¥¯¥í
changeword
¤È¤½¤ì¤Ë´ØÏ¢¤¹¤ëµ¡Ç½¤¹¤Ù¤Æ¤¬¼Â¸³Ãʳ¬¤Ë¤¢¤ê¤Þ¤¹¡£ GNUm4
¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëºÝconfigure
¤Ë--enable-changeword
¥ª¥×¥·¥ç¥ó¤òÍ¿¤¨¤¿¤È¤¤À¤± ¤³¤Îµ¡Ç½¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤³¤ì¤«¤éÀè¡¢¤³¤Îµ¡Ç½¤¬Êѹ¹¤µ¤ì¤¿¤ê¡¢ºï½ü¤µ¤ì¤Æ¤·¤Þ¤¦¤³¤È¤µ¤¨¤¢¤ê¤¨¤Þ¤¹¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Îµ¡Ç½¤Ë°Í¸¤·¤¿»È¤¤Êý¤Ï¤·¤Ê¤¤¤Ç²¼¤µ¤¤¡£ ¤³¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ°Õ¸«¤ò´ó¤»¤Æ¤¤¤¿¤À¤¯¤È¤¤Ï ¥Ð¥°¤òÊó¹ð¤¹¤ë¤È¤¤ÈƱ¤¸ÊýË¡¤Ç¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£
m4
¤Ë¤è¤Ã¤Æ½èÍý¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Ï¡¢¥¯¥©¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¡¢
ñ¸ì(ÀøºßŪ¤Ê¥Þ¥¯¥í̾)¡¢¤½¤·¤ÆÃ±½ã¤Ê¥È¡¼¥¯¥ó(¤½¤Î¾¤Îñ°ì¤Îʸ»ú¤¹¤Ù¤Æ)
¤Ëʬ³ä¤µ¤ì¤Þ¤¹¡£
½é¤á¤Ëñ¸ì¤Ï¼¡¤ÎÀµµ¬É½¸½¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
[_a-zA-Z][_a-zA-Z0-9]*
changeword
¤ò»È¤¨¤Ð¤³¤ÎÀµµ¬É½¸½¤òÊѹ¹¤Ç¤¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¿ô»ú¤¬µÍ¤Þ¤Ã¤¿¥Õ¥¡¥¤¥ë¤ËÃÖ´¹¤ò¤«¤±¤¿¤¤¾ì¹ç¤Ê¤É¡¢
m4
¤Î»ú¶ç¹½À®µ¬Â§¤ò´Ë¤á¤ë¤ÈÊØÍø¤Ê¤È¤¤â¤¢¤ë¤Ç¤·¤ç¤¦¡£
changeword(`[_a-zA-Z0-9]+') define(1, 0) ⇒1
»ú¶ç¹½À®µ¬Â§¤ò¸·¤·¤¯¤¹¤ë¤È ÁȤ߹þ¤ß¥Þ¥¯¥í¤Î¤¦¤Á¤¤¤¯¤Ä¤«¤¬»È¤¨¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¤³¤È¤¬Â¿¤¤¤Î¤Ç¡¢ ´Ë¤á¤ë¾ì¹ç¤Û¤ÉÊØÍø¤Ë¤Ï¤Ê¤ê¤Þ¤»¤ó¡£ ¼¡¤ÎÎã¤Î¤è¤¦¤Ë¡¢´Ö°ã¤Ã¤ÆÁȤ߹þ¤ß¥Þ¥¯¥í¤ò¸Æ¤ó¤Ç¤·¤Þ¤¦¤Î¤òÈò¤±¤ë¤¿¤á¤Ë »È¤¦¤³¤È¤Ï¤Ç¤¤ë¤Ç¤·¤ç¤¦¡£
define(`_indir', defn(`indir')) changeword(`_[_a-zA-Z0-9]*') esyscmd(foo) _indir(`esyscmd', `ls')
m4
¤Ïñ¸ì¤ò°ìʸ»ú¤º¤ÄÁȤßΩ¤Æ¤Æ¤¤¤¯¤Î¤Ç¡¢
changeword
¤ËÅϤ¹¤³¤È¤¬¤Ç¤¤ëÀµµ¬É½¸½¤Ë¤ÏÀ©¸Â¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤ì¤Ï¡¢¤â¤·»ØÄꤷ¤¿Àµµ¬É½¸½¤¬‘foo’¤ò¼õÍý¤¹¤ë¤Î¤Ê¤é
¤½¤ÎÀµµ¬É½¸½¤Ï‘f’¤È‘fo’¤â¼õÍý¤¹¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£
changeword
¤Ë¤Ï¡¢¤â¤¦°ì¤Äµ¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£
»ØÄꤷ¤¿Àµµ¬É½¸½¤ÎÃæ¤Ë¥«¥Ã¥³\( \)¤Ç¤¯¤¯¤é¤ì¤¿Éôʬɽ¸½¤¬1¤Ä°Ê¾å¸ºß¤¹¤ë
¾ì¹ç¡¢ºÇ½é¤Î¥«¥Ã¥³¤Ç¤¯¤¯¤é¤ì¤¿Éôʬɽ¸½¤Î³°Â¦¤Ë¤¢¤ë¥Æ¥¥¹¥È¤¬¡¢
¥·¥ó¥Ü¥ë¤òɽ°ú¤¤¹¤ëÁ°¤Ë¼Î¤Æ¤é¤ì¤Þ¤¹¡£
changecom(`/*', `*/') changeword(`#\([_a-zA-Z0-9]*\)') #esyscmd(ls)
¤³¤¦¤¹¤ë¤È¡¢m4
¤Ï¤¹¤Ù¤Æ¤Î¥Þ¥¯¥í¤Î¸Æ¤Ó½Ð¤·¤ÎÀèÆ¬¤Ë
‘#’µ¹æ¤òɬÍפȤ¹¤ë¤è¤¦¤Ë¤Ê¤ë¤Î¤Ç¡¢
m4
¤Ç¥·¥§¥ë¥¹¥¯¥ê¥×¥È¤ò½èÍý¤¹¤ë¤È¤¤Ë
shift
¥³¥Þ¥ó¥É¤¬m4
¤Ë°û¤ß¹þ¤Þ¤ì¤Æ¤·¤Þ¤ï¤Ê¤¤¤è¤¦¤Ë¤Ç¤¤Þ¤¹¡£
¤Þ¤¿¼ï¡¹¤Î°ìÈÌŪ¤Êñ¸ì¤ò¼º¤¦¤³¤È¤Ê¤¯¥×¥ì¡¼¥ó¥Æ¥¥¹¥È¤ò
½èÍý¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
m4
¤Î¥Þ¥¯¥íÃÖ´¹¤Ï¥Æ¥¥¹¥È¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¤¬¡¢
TeX¤Î¤â¤Î¤Ï¥È¡¼¥¯¥ó¤Ë´ð¤Å¤¤¤Æ¤¤¤Þ¤¹¡£
changeword
¤Ë¤è¤Ã¤Æ¡¢¤³¤Î°ã¤¤¤òÉâ¤Ä¦¤ê¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¼¡¤ÎÎã¤ÏƱ¤¸¥¢¥¤¥Ç¥¢¤òTeX¤Èm4
¤Çɽ¸½¤·¤¿¤â¤Î¤Ç¤¹¡£
½é¤á¤ÏTeX ¥Ð¡¼¥¸¥ç¥ó¤«¤é¤Ç¤¹¡£
\def\a{\message{Hello}} \catcode`\@=0 \catcode`\\=12 @a
¤Ä¤®¤Ëm4
¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¡£
define(a, `errprint(`Hello')') changeword(`@\([_a-zA-Z0-9]*\)') @a
TeX¤ÎÎã¤Ë¤ª¤¤¤Æ¡¢ºÇ½é¤Î¹Ô¤Ï¥Þ¥¯¥ía
¤¬‘Hello’¥á¥Ã¥»¡¼¥¸¤ò
ɽ¼¨¤¹¤ë¤è¤¦¤ËÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
2¹ÔÌܤÏ\¤ÎÂå¤ï¤ê¤Ë@¤ò¥¨¥¹¥±¡¼¥×ʸ»ú¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë
ÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
3¹ÔÌܤÏ\¤ò¥¨¥¹¥±¡¼¥×ʸ»ú¤Ç¤Ï¤Ê¤¯Ä̾ï¤Îɽ¼¨²Äǽʸ»ú¤È¤·¤Æ
ÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
4¹ÔÌܤϥޥ¯¥ía
¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤ÆTeX¤òÁö¤é¤»¤ë¤È
‘Hello’¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£
m4
¤ÎÎã¤òm4
¤ËÍ¿¤¨¤ë¤È‘errprint(Hello)’¤òɽ¼¨¤·¤Þ¤¹¡£
¤³¤ÎÍýͳ¤ÏTeX¤Ï¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤¿¤È¤¤Ë¥Þ¥¯¥íÄêµÁ¤Î»ú¶ç²òÀÏ
¤ò¹Ô¤¦¤Î¤ËÂФ·¡¢m4
¤Ïñ½ã¤Ë¥Æ¥¥¹¥È¤òÊݸ¤·¤Æ¤ª¤¡¢
»ú¶ç²òÀϤϼºݤ˥ޥ¯¥í¤¬»È¤ï¤ì¤ë¤Þ¤Ç¸å²ó¤·¤Ë¤¹¤ë¤«¤é¤Ç¤¹¡£
changeword
¤ò»ÈÍѤ¹¤ë¤È¡¢
m4
¤Î®ÅÙ¤¬7ÇܤۤÉÃÙ¤¯¤Ê¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£