学习pgf manual.pdf。 (运行命令行:texdoc pgf,打开pgf manual.pdf。) 在阅读源代码时,查找到C:\texlive\2019\texmf-dist\doc\generic\pgf\text-en\pgfmanual-en-introduction.tex,其中第二段代码: ```tex I wish to…… For example, the code |\tikz \draw (0pt,0pt) -- (20pt,6pt);| ``` 效果为: I wish to…… For example, the code `\tikz \draw (0pt,0pt) -- (20pt,6pt);` 用`||`夹着代码表示引用代码,但我没有作者设置的cls文件或是说明。哪个可以帮我找一下在哪里,或是如何实现的?

2 回答2

3
`tikz`原文中的命令就是你在群里发的那一串代码 ```tex { \catcode`\|=12 \gdef\pgfmanualnormalbar{|} \catcode`\|=13 \AtBeginDocument{\gdef|{\ifmmode\pgfmanualnormalbar\else\expandafter\verb\expandafter|\fi}} } ``` 解释一下这个代码的意思, `\catcode`用于设置字符的`分类码`(category code),所以第一句是设置`|`的分类码为12,也就是其他字符类, 然后第二句全局定义了一个宏`\pgfmanualnormalbar`,这个宏展开的结果就是当前的`|`的意思, 然后第三句设置`|`的分类码为13,也就是活动字符,简单来说,此时`|`就相当于一个宏。最后一句则是在`document`环境开始时插入一段代码,这段代码是全局重定义宏`|`,如果在数学模式下,它就相当于是普通的竖线`|`,如果不是,它就相当于是`\verb|`,当再次输入一个`|`时,就刚好变成了`\verb| |`。 实际上这里并没有实现真正的`global`,真正要`global`的话,代码如下 ```tex \documentclass{article} { \global\catcode`\|=12 \gdef\pgfmanualnormalbar{|} \global\catcode`\|=13 \AtBeginDocument{\gdef|{\ifmmode\pgfmanualnormalbar\else\expandafter\verb\expandafter|\fi}} } \begin{document} |\tikz \draw (0pt,0pt) -- (20pt,6pt);| \[|aaa|\] \end{document} ``` `\expandafter`这种命令确实太黑科技了,我反正自己写的话写不出来
  • 回复 undefined :大概懂了,谢谢 – sikouhjw 2020-04-03 00:29 回复
  • 对原书的代码解答的非常详细,并给出了用法。看源代码时,没有读懂。多谢解释。 – skysea575 2020-04-02 08:52 回复
  • 回复 undefined :效果使得\verb先展开为自己,先展开得到\verb的参数之后再展开\verb,否则直接按顺序展开就会出错 – 合肥-Renascence_5.1 2020-04-02 08:49 回复
  • 回复 undefined :\expandafter<toks1><toks2>顾名思义就是展开<toks2>以后再展开<toks1>,这里就是暂时性的 – 合肥-Renascence_5.1 2020-04-02 08:48 回复
  • \expandafter\verb\expandafter| 中的 \expandafter| 作用是啥,看不太懂这里 – sikouhjw 2020-04-02 08:22 回复
0
自定义方法是 ```tex \documentclass{article} \usepackage{expl3} \usepackage{fancyvrb} \ExplSyntaxOn % 允许使用 |...| 作为行内抄录 \AtBeginDocument { \DefineShortVerb { \| } } \AtEndDocument { \UndefineShortVerb { \| } } % 公式中仍会用到(vl = vertical line) \cs_set_eq:NN \vl | \ExplSyntaxOff \begin{document} hello world |\usepackage{tikz}| \end{document} ``` 主要就是借助 `fancyvrb` 包。 以上代码是从别处抄来的。
  • 简单,好用。原来是想研究一下原书的代码。 – skysea575 2020-04-02 08:51 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。