【问题标题】:user defined commands in verbatim environment逐字环境中的用户定义命令
【发布时间】:2011-05-25 07:30:12
【问题描述】:

是否可以在逐字环境和一些缩进中创建带有参数的新命令?

\newcommand{codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}}

这不起作用。还有其他方法吗?

【问题讨论】:

标签: latex verbatim


【解决方案1】:

\begin{verbatim} 的工作原理。简单粗暴。

  1. \begin{verbatim} 扩展为 \verbatim
  2. 然后\verbatim将每个特殊字符的类别代码设置为12。 现在所有字符都像数字或点。
  3. 然后\verbatim 设置字体、parindent 并调用\@xverbatim
  4. \@xverbatim 使用以下技巧逐字记录结尾:

    \def\@xverbatim#1\end{#1\end}
    
  5. 然后\end{verbatim} 完成工作。

\newcommand{\codeblock}[1]{\begin{quote}\begin{verbatim}#1\end{verbatim}\end{quote}} 的工作原理。

  1. 首先\codeblock{Some {}$&%^_} 读取它的参数。
  2. #1 --> Some code {}$&%^_

    注意: {,},$,&,%,^,_ 有类别 1,2,3,4,6 ,7,8 而不是 11 或 12!!!)

  3. \codeblock 扩展为 \begin{quote}\begin{verbatim} Some {}$&%^_\end {verbatim}\end {quote}重要提示:\end 的反斜杠具有类别 0 而不是 11。 此外,{} 具有类别 1 和 2 而不是 11。 而$,&,%,^,_ 有类别 3,4,6,7,8。
  4. \begin{quote} 扩展为 \quote\quote 执行。
  5. 然后\begin{verbatim} 扩展为\varbatim\varbatim 更改所有类别和字体。但是(重要) 反斜杠的类别(在 \end 中)仍然等于 0。{}$&%^_ 的类别在 @987654365 之后键入@ 仍然存在,因为在 \verbatim 更改所有类别之前执行“参数读取”。但是您需要所有 char 的类别都为 11 o 12。
  6. 然后\verbatim 调用\@xverbatim
  7. \@xverbatim 尝试使用以下技巧捕捉您的论点:

    \def\@xverbatim#1\end{#1\end}
    

    但这是不可能的,因为\@xverbatim 试图抓住 \end,其中所有字母 (\,e,n,d) 都有类别 12 和 11。 但实际上有四个字母与其他类别代码: \ 类别 0 和 e,n,d 类别 11。

    有可能(我不确定)这个技巧更熟练:

    红色字符的类别为 12。绿色字符的类别为 11。 \def\@xverbatim\end 是带有 \(类别 0)和字母(类别 11)的宏。

  8. \@xverbatim 正在尝试并尝试找到 \end,其中反斜杠 (\) 的类别为 11,但是.... File ended while scanning use of \@xverbatim

如果你想创建新的宏 \codeblock 你必须像上面的文字那样做。

【讨论】:

    【解决方案2】:

    看起来您希望在文档中包含代码,在这种情况下,包列表可能比逐字记录更好。清单还为您提供了许多常用语言的行号和语法突出显示等不错的功能。如果您的 LaTeX 发行版尚未安装,请参阅 http://www.ctan.org/tex-archive/macros/latex/contrib/listings/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2011-08-20
      • 2013-07-28
      • 2019-12-16
      • 2021-05-10
      • 2016-10-08
      • 1970-01-01
      相关资源
      最近更新 更多