如何使 skt.c 预处理器工作

如何使 skt.c 预处理器工作

将 ubuntu 更新至 16.04 后,似乎“skt”包已完全停止工作。

预处理器的工作skt如下。假设我给出命令

\documentclass{article}
\usepackage{skt}
\begin{document}
{\skt rama.h "siva.h brahma}
\end{document}

并将此文件保存为 example.skt,然后运行命令 skt example.skt,然后我将获得输出文件作为 example.tex,然后我必须运行 example.tex 文件才能获得所需的天城体输出。

但是每当我在终端中输入命令 skt 时,它都会显示错误消息,即未找到 skt 命令。有一个类似的预处理器 devnag,它运行良好,并且被 ubuntu 终端识别,但我更喜欢这个skt软件包,因为它有很多优点(比如 Vedic Accents 等)。

有人可以帮忙吗?

答案1

skt.c代码看起来确实很古老。我只需要对 Cygwin 进行一点调整就可以再次编译:

diff --git a/skt.c b/skt.c
index 1d34f11..8f8b2f4 100644
--- a/skt.c
+++ b/skt.c
@@ -43,7 +43,7 @@ void   search      (void);
 void   write_outbuf(void);
 void   write_line  (char *);
 char * str_find    (char *, char *);
-void   getline     (void);
+void   get_line     (void);
 char * command     (char *);
 void   error       (char *, int);
 void   process     (void);
@@ -136,9 +136,9 @@ int  intraspace;          /* intra-syllable space, from above and option 1    */
 /*                       MAIN                                                 */
 /******************************************************************************/

-main(argc,argv)
-int argc;
-char *argv[];
+int
+main(int argc,
+     char *argv[])
 { char *p; int k;

 /* INITIALIZATION */
@@ -151,7 +151,7 @@ char *argv[];
   o_ptr = outbuf; *o_ptr = '\0';
   for (k=0; k<total_options+1; k++) option[k] = FALSE; /* disable everything  */

-  printf("SKT.C Version 2.2 02-Jan-2002\n");
+  printf("SKT.C Version 2.2.1 2016-08-31\n");

 #if (DEBUG == 0)

@@ -186,7 +186,7 @@ char *argv[];
   printf("Enter text (blank line terminates program) :\n");
 #endif

-  getline(); if (eof_flag) { printf("No input text.\n"); exit(1); }
+  get_line(); if (eof_flag) { printf("No input text.\n"); exit(1); }

 #if (DEBUG == 0)

@@ -238,7 +238,7 @@ char *p,*q;
       if (p == 0)
         { if (sktline == TRUE) { strcat(outbuf,i_ptr); write_outbuf(); }
           else { write_line(inbuf); o_ptr = outbuf; *o_ptr = '\0';  }
-          getline(); 
+          get_line(); 
           continue; 
         }
       q = i_ptr; i_ptr = p;
@@ -270,8 +270,8 @@ char c, d, e;
     if (strlen(outbuf) < 81) { write_line(outbuf); break; }
     if (option[9])                                  /* if obey-lines enabled */
       { if (strlen(outbuf) > 250) 
-         { printf("Line %4d    Warning: Very long output line: %d characters\n",
-                   line_cnt, strlen(outbuf) );
+         { printf("Line %4d    Warning: Very long output line: %u characters\n",
+                  line_cnt, (unsigned)strlen(outbuf) );
          }
         write_line(outbuf); break;
       }
@@ -324,13 +324,13 @@ char * str_find(char *buf, char *str)
 }

 /******************************************************************************/
-/*                       GETLINE                                              */
+/*                       GET_LINE                                              */
 /******************************************************************************/

 /* Function: get another line from input file; reset i_ptr, increments        */
 /*           line_cnt, and sets eof_flag if EOF.                              */

-void getline(void)
+void get_line(void)
 { 
 char *p;
   i_ptr = inbuf;
@@ -445,12 +445,12 @@ unsigned char *i, c,d;
     c = *i_ptr; d = *(i_ptr+1);
 /* END OF LINE */
     if ((c == '\0') || (c == '\n'))
-      { sktword(); strcat (outbuf,i_ptr); write_outbuf(); getline(); CC; }
+      { sktword(); strcat (outbuf,i_ptr); write_outbuf(); get_line(); CC; }
 /* COMMENT DELIMITER */
     if (c == '%')
     { if (*(i_ptr+1) == '\n') sktcont();
       else sktword();
-      strcat(outbuf,i_ptr); write_outbuf(); getline(); CC;
+      strcat(outbuf,i_ptr); write_outbuf(); get_line(); CC;
     }
 /* ILLEGAL CHARS */
     if (strchr("&fqwxzFQWXZ\177",c))

也可以看看skt.c在 Gist 上修改

更新:我不小心使用了反向差异。这个问题现在已经解决了。

相关内容