将 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 上修改。
更新:我不小心使用了反向差异。这个问题现在已经解决了。