命令语法介绍(样式)

命令语法介绍(样式)

如何实现\pdfbookmark如下所示的命令语法样式?这是纯粹的吗verb

在此处输入图片描述

原始文件

答案1

链接的文档来自 TUGBoat 88 (28.2),因此作者很可能使用了该类ltugboatltugboat包(两者都有)。

命令序列正在用 排版\cs{foo},参数可以用[\meta{arg}]或排版\tubbraced{\meta{arg}},当然,这取决于宏的类型。

\cs定义为:

\DeclareRobustCommand{\cs}[1]{{\tt \char`\\#1}}

\documentclass{ltugboat}

\begin{document}
    \cs{pdfbookmark}[\meta{level}]\tubbraced{\meta{text}}\tubbraced{\meta{key}}
\end{document}

pdf书签

例如,以下语法类似ltxdoc.cls

\documentclass{ltxdoc}
\begin{document}

\cs{pdfbookmark}\oarg{level}\marg{text}\marg{key}
\end{document}

答案2

这可以处理任意数量的参数:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\syntax}{mO{}}
 {
  \group_begin:
  \tl_clear:N \l__belford_syntax_args_tl
  \normalfont\ttfamily
  \token_to_str:N #1
  \keys_set:nn { belford/syntax } { #2 }
  \tl_use:N \l__belford_syntax_args_tl
  \group_end:
 }
\NewDocumentCommand{\meta}{m}
 {
  \group_begin:
  \normalfont$\langle$\textit{#1}$\rangle$
  \group_end:
 }

\tl_new:N \l__belford_syntax_args_tl
\keys_define:nn { belford/syntax }
 {
  m .code:n = \__belford_syntax_addarg:nnn { \symbol{`\{} } { \symbol{`\}} } { #1 },
  o .code:n = \__belford_syntax_addarg:nnn { [ } { ] } { #1 },
  p .code:n = \__belford_syntax_addparg:nn #1,
 }
\cs_new_protected:Nn \__belford_syntax_addarg:nnn
 {
  \tl_put_right:Nn \l__belford_syntax_args_tl { #1 \meta{#3} #2 }
 }
\cs_new_protected:Nn \__belford_syntax_addparg:nn
 {
  \tl_put_right:Nn \l__belford_syntax_args_tl { ( \meta{#1} , \meta{#2} ) }
 }
\ExplSyntaxOff

\NewDocumentCommand{\pkg}{m}{\textsf{#1}}

\begin{document}

For this \pkg{hyperref} provides
\syntax{\pdfbookmark}[o=level,m=text,m=key]

We also have
\begin{itemize}
\item \syntax{\makebox}[o=width,o=char,m=text]
\item \syntax{\makebox}[p={x}{y},o=char,m=text]
\end{itemize}

\end{document}

在此处输入图片描述

对于实际示例,您可以直接使用\verb

相关内容