pdftex 会忽略通过 \symbol 命令插入的带有字符的连字符

pdftex 会忽略通过 \symbol 命令插入的带有字符的连字符

我对虚拟字体进行了一些更改,如下所示:

(LABEL C 9)
(LIG O 344 C L) (comment д L)
(STOP)
(LABEL O 346) (comment ж)
(LIG C 7 C 9) (comment 7 9)
(LIG O 134 C 9) (comment backslash 9)
(STOP)

它应该给我连字符转换:ж+ 7-> 9ж+ \-> 99+ д-> L。字体正向和反向编译为我提供了类似的.vpl字体源文件(只是没有注释)。在安装字体后,当我尝试.pdf从构建时.tex,结果.pdf很奇怪。规则是第一次连字符转换后使用反斜杠,第二次没有发生,而如果没有反斜杠字符,它就会发生。所以来源tex

ж\д ж7д 9д

将转换为:

9д L L

所以问题是:pdftex当使用反斜杠时,是什么阻止我呈现正确的连字?第二个是如何解决这个问题?

更新

.vpl

(VTITLE Created by afm2tfm irmucs.afm -O -u -v irmucsv.vpl -T orthucs8.enc)
(FAMILY TEX-IRMUCS)
(FACE F MRR)
(CODINGSCHEME ORTUCS8TOT2AENCODING)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 1124771264)
(FONTDIMEN
   (SLANT R 0.0)
   (SPACE R 0.5)
   (STRETCH R 0.2)
   (SHRINK R 0.1)
   (XHEIGHT R 0.487)
   (QUAD R 1.0)
   (EXTRASPACE R 0.111)
   )
(MAPFONT D 0
   (FONTNAME irmucs)
   (FONTCHECKSUM O 1124771264)
   (FONTAT R 1.0)
   (FONTDSIZE R 10.0)
   )
(LIGTABLE
   (LABEL C 9) (comment zqivete_pod_vzmetom)
   (LIG C d C L) (comment zqivete_pod_vzmetom + dobrotitlo -> zqivete_pod_dobrotitlom)
   (STOP)
   (LABEL C L)
   (KRN C q R 0.005)
   (KRN O 240 R 0.005)
   (KRN C b R 0.005)
   (KRN O 135 R -0.007)
   (KRN C W R -0.018)
   (KRN O 100 R 0.005)
   (KRN O 247 R -0.018)
   (KRN O 206 R 0.005)
   (KRN O 255 R 0.005)
   (KRN O 224 R -0.007)
   (KRN O 223 R 0.005)
   (KRN C m R -0.01)
   (KRN C l R -0.008)
   (KRN C k R -0.008)
   (KRN O 263 R -0.013)
   (KRN C h R -0.01)
   (KRN O 267 R -0.013)
   (KRN O 255 R -0.017)
   (KRN O 135 R -0.017)
   (KRN O 134 R -0.01)
   (KRN O 337 R -0.008)
   (KRN C W R -0.013)
   (KRN C U R -0.006)
   (KRN C T R -0.01)
   (KRN O 275 R -0.006)
   (KRN C R R -0.01)
   (KRN C N R -0.01)
   (KRN O 16 R -0.006)
   (KRN C G R -0.01)
   (KRN C F R -0.006)
   (KRN O 222 R -0.013)
   (KRN O 265 R -0.01)
   (KRN O 247 R -0.013)
   (KRN O 246 R -0.006)
   (KRN O 233 R -0.017)
   (KRN O 231 R -0.01)
   (KRN O 211 R -0.01)
   (KRN O 174 R -0.01)
   (KRN O 173 R -0.006)
   (KRN O 377 R -0.01)
   (KRN C 2 R -0.006)
   (KRN C w R -0.013)
   (KRN C v R -0.017)
   (KRN C u R -0.008)
   (KRN C t R -0.013)
   (KRN O 276 R -0.01)
   (KRN O 230 R -0.017)
   (KRN O 240 R -0.01)
   (KRN C n R -0.01)
   (KRN C m R -0.017)
   (KRN C f R -0.024)
   (KRN O 252 R -0.013)
   (KRN C Y R -0.006)
   (KRN O 275 R -0.01)
   (KRN O 202 R -0.013)
   (KRN O 222 R -0.013)
   (KRN O 224 R -0.017)
   (KRN O 51 R -0.051)
   (STOP)
   (LABEL O 344)
   (LIG O 267 C D)
   (STOP)
   (LABEL O 346)
   (LIG O 176 C 9)
   (LIG C 7 C 9) (comment digit7 digit9)
   (LIG O 134 C 9) (comment backslash digit9)
   (STOP)
   (LABEL O 134) (comment backslash)
   (KRN C m R -0.031)
   (KRN C l R -0.03)
   (KRN C k R -0.03)
   (KRN O 263 R -0.052)
   (KRN O 252 R -0.018)
   (KRN C d R -0.019)
   (KRN O 267 R -0.019)
   (KRN O 255 R -0.069)
   (KRN O 135 R -0.035)
   (KRN C W R -0.062)
   (KRN C V R -0.019)
   (KRN C U R -0.041)
   (KRN O 275 R -0.007)
   (KRN C R R -0.034)
   (KRN C Q R -0.015)
   (KRN O 254 R -0.014)
   (KRN C N R -0.015)
   (KRN C M R -0.008)
   (KRN C G R -0.022)
   (KRN C F R -0.012)
   (KRN O 222 R -0.011)
   (KRN O 224 R -0.008)
   (KRN O 265 R -0.068)
   (KRN O 251 R -0.015)
   (KRN O 247 R -0.062)
   (KRN O 246 R -0.041)
   (KRN O 233 R -0.069)
   (KRN O 231 R -0.034)
   (KRN O 174 R -0.031)
   (KRN O 173 R -0.007)
   (KRN C 2 R -0.007)
   (KRN C w R -0.052)
   (KRN C v R -0.069)
   (KRN C u R -0.03)
   (KRN C t R -0.052)
   (KRN C q R -0.035)
   (KRN O 230 R -0.096)
   (KRN O 240 R -0.031)
   (KRN C n R -0.031)
   (KRN C m R -0.069)
   (KRN C f R -0.019)
   (KRN O 252 R -0.011)
   (KRN C Y R -0.007)
   (KRN O 202 R -0.052)
   (KRN O 222 R -0.011)
   (KRN O 224 R -0.035)
   (KRN O 52 R -0.111)
   (KRN O 51 R -0.07)
   (LIG O 344 O 144) (comment backslash + dobro -> d)
   (STOP)
   (LABEL C d)
   (KRN C q R -0.013)
   (KRN O 240 R -0.013)
   (KRN C l R -0.011)
   (KRN C k R -0.011)
   (KRN O 210 R -0.015)
   (KRN O 263 R -0.011)
   (KRN C h R -0.015)
   (KRN C d R -0.019)
   (KRN O 267 R -0.011)
   (KRN C b R -0.013)
   (KRN O 255 R -0.042)
   (KRN O 137 R -0.015)
   (KRN O 337 R -0.008)
   (KRN C W R -0.056)
   (KRN C U R -0.033)
   (KRN C L R -0.015)
   (KRN O 221 R -0.015)
   (KRN C F R -0.012)
   (KRN O 222 R -0.011)
   (KRN C D R -0.027)
   (KRN O 224 R -0.007)
   (KRN O 100 R -0.013)
   (KRN O 265 R -0.037)
   (KRN O 261 R -0.015)
   (KRN O 247 R -0.056)
   (KRN O 246 R -0.033)
   (KRN O 233 R -0.042)
   (KRN O 211 R -0.015)
   (KRN O 206 R -0.013)
   (KRN O 377 R -0.015)
   (KRN C w R -0.011)
   (KRN C v R -0.042)
   (KRN C u R -0.011)
   (KRN C t R -0.018)
   (KRN O 276 R -0.015)
   (KRN O 230 R -0.049)
   (KRN C m R -0.042)
   (KRN C l R -0.015)
   (KRN C k R -0.015)
   (KRN C f R -0.062)
   (KRN O 252 R -0.011)
   (KRN O 255 R -0.013)
   (KRN O 275 R -0.015)
   (KRN C L R -0.015)
   (KRN O 202 R -0.011)
   (KRN O 222 R -0.011)
   (KRN C D R -0.027)
   (KRN O 223 R -0.013)
   (KRN O 57 R -0.045)
   (KRN O 54 R -0.033)
   (KRN O 52 R -0.115)
   (KRN O 51 R -0.069)
   (STOP)
   )
(CHARACTER C 7
   (CHARWD R 0.001)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (MAP
      (SETCHAR C 7)
      )
   )
(CHARACTER C 9
   (CHARWD R 0.684)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (MAP
      (SETCHAR C 9)
      )
   )
(CHARACTER C L
   (CHARWD R 0.426)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (CHARIC R 0.047)
   (MAP
      (SETCHAR C L)
      )
   )
(CHARACTER O 134
   (CHARWD R 0.001)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (MAP
      (SETCHAR O 134)
      )
   )
(CHARACTER C d
   (CHARWD R 0.001)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (MAP
      (SETCHAR C d)
      )
   )
(CHARACTER O 344
   (CHARWD R 0.402)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (MAP
      (SETCHAR O 344)
      )
   )
(CHARACTER O 346
   (CHARWD R 0.684)
   (CHARHT R 0.88)
   (CHARDP R 0.2)
   (MAP
      (SETCHAR O 346)
      )
   )

我试过有和没有这条线(LIG O 344 O 144) (comment backslash + dobro -> d)

还有.tex

$ cat hello.tex
\documentclass[12pt,a6paper,twoside,dvips,civil=antiqua,cs=irmologion]{hipbook}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\begin{document}

ж\д ж~д ж7д 9д

\end{document}

我也利用这些变化backslash我也使用了行为的这里, 作为:

\newcommand\spc[1]{%
  \symbol{`\\}% the backslash
  #1% the letter
}

\def\^^d0#1{\spc{^^d0#1}}
\def\^^d1#1{\spc{^^d1#1}}

答案1

引用的代码使用\symbol,其定义以 结尾,\relax因此抑制带有后跟字符但不带有前跟字符的连字符。

使用一个可以运行的示例:

\documentclass{article}
\begin{document}
\showoutput

1 ff
2 f\relax f 
3 \symbol{`f}f
4 f\symbol{`f}

\end{document}

生产

....\OT1/cmr/m/n/10 1
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10  (ligature ff)
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 2
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 f
....\OT1/cmr/m/n/10 f
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 3
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 f
....\OT1/cmr/m/n/10 f
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 4
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10  (ligature ff)

最后一个例子用\symbol作为第二个字符产生连字,但是用\symbol作为第一个字符则不会。

据我所知,这与观察到的行为相符,所以我猜这就是问题所在。

你可以使用

\char`\f

代替

\symbol{f}

(在您的示例中使用反斜杠代替 f )或者您可以像初始注释中指出的那样,更改 catcode 使其\成为普通字符,例如在

 \catcode`\/=0
 \catcode`\\=12

然后\将是一个普通字符,只需将其排版为其自身,并且命令名称(例如 begin 和 end)必须作为/begin和进行访问/end

相关内容