如何定义命令以创建名称中带有数字的新命令

如何定义命令以创建名称中带有数字的新命令

我想创建一个目前超出我能力范围的命令,所以我想知道周围是否有人可以帮助我。

我想要做的是定义一个类似于以下内容的新命令:

\cmd{reference001}{Title}{text A}{text B}{text C}

此命令随后会创建一个名为的新命令,\reference001其将显示:

在此处输入图片描述

但是,我还希望该\cmd命令能够定义其他仅显示输入部分内容的新命令。例如,它应该生成一个\reference001title将显示的命令Title和一个\reference001partB将显示的命令text B,等等。

重要的是,我非常希望我的命令名称中包含数字(如这个答案)。我把到目前为止尝试过的方法汇总如下,但是我无法消除所有错误,尤其是无法让数字作为命令名称的一部分。

为了实现这一点,我还考虑定义一个自定义标签/参考系统(通过这个问题) 对我来说也是一个完美的解决方案。例如,\cmd上面的代码将创建多个标签,可以引用为\ref{reference001}\ref{reference001partA}等。但是我也无法让它工作。


\documentclass{article}

\newcommand{\cmd}[5]{
    \expandafter\newcommand\csname #1\endcsname{
        \textbf{#2}

        \textbf{\textit{Part A:}} #3

        \textbf{\textit{Part B:}} #4

        \textbf{\textit{Part C:}} #5
    }
    \expandafter\newcommand\csname #1title\endcsname{#2}
    \expandafter\newcommand\csname #1partA\endcsname{#3}
    \expandafter\newcommand\csname #1partB\endcsname{#4}
    \expandafter\newcommand\csname #1partC\endcsname{#5}
}

\begin{document}

    \cmd{reference}{Title}{text A}{text B}{text C}

    \reference

    \referencepartA

    \referencepartB

    \referencepartC

\end{document}

答案1

如果您不需要在文本上换行,这可能是\cmd您所设想的核心。

\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage[usestackEOL]{stackengine}
\newcommand\cmd[5]{%
  \csdef{#1title}{#2}%
  \csdef{#1partA}{#3}%
  \csdef{#1partB}{#4}%
  \csdef{#1partC}{#5}%
  \csdef{#1}{%
    \Longunderstack[l]{
      \textbf{#2}\\
      \textbf{\textit{Part A}:} #3\\
      \textbf{\textit{Part B}:} #4\\
      \textbf{\textit{Part C}:} #5\strut
    }%
  }%
}
\cmd{reference001}{Title}{text A}{text B}{text C}
\begin{document}
Here is ``\csuse{reference001partB}'' and here is the full reference:

\csuse{reference001}
\end{document}

在此处输入图片描述

答案2

\CallMacro您可以实现一个利用大括号分隔参数的宏,并\csname..\endcsname在需要时翻转宏参数,为您完成工作 - 不需要花哨的包:

在此处输入图片描述

\documentclass{article}
%%----------------------------------------------------------------------
%% Put a control sequence token in place instead of the string denoting
%% its name:
%%......................................................................
%%  \CallMacro<emptiness or tokens other than braces>{<Name of Control Sequence>}
%%
%% yields:
%%
%%  <emptiness or tokens other than braces>\Controlsequence
%%
%% E.g.,
%%
%%   \CallMacro foo{bar} -> foo\bar
%%   \CallMacro{bar} -> \bar
%%   \CallMacro\newcommand*{wEirdName}[1]{Arg 1: (#1)}
%%       -> \newcommand*\wEirdName[1]{Arg 1: (#1)}
%%
\newcommand\CallMacroIII[2]{#2#1}%
\newcommand\CallMacro{}\long\def\CallMacro#1#{\romannumeral\CallMacroII{#1}}%
\newcommand\CallMacroII[2]{%
  \expandafter\CallMacroIII\expandafter{\csname#2\endcsname}{0 #1}%
}%
%
\newcommand\cmd[5]{%
  \CallMacro\newcommand{#1}{%
    \vtop{%
      \hbox{\noindent\textbf{#2}\strut}%
      \hbox{\textbf{\textit{Part A: }}#3\strut}%
      \hbox{\textbf{\textit{Part B: }}#4\strut}%
      \hbox{\textbf{\textit{Part C: }}#5\strut}%
    }%
  }%
  \CallMacro\newcommand{#1title}{#2}%
  \CallMacro\newcommand{#1partA}{#3}%
  \CallMacro\newcommand{#1partB}{#4}%
  \CallMacro\newcommand{#1partC}{#5}%                 
}%
\begin{document}
\cmd{reference001}{Title}{text A}{text B}{text C}

\verb|\CallMacro{reference001}|:
\CallMacro{reference001}

\hrulefill

\verb|\CallMacro{reference001title}|:
\CallMacro{reference001title}

\hrulefill

\verb|\CallMacro{reference001partA}|:
\CallMacro{reference001partA}

\hrulefill

\verb|\CallMacro{reference001partB}|:
\CallMacro{reference001partB}

\hrulefill

\verb|\CallMacro{reference001partC}|:
\CallMacro{reference001partC}

\end{document}    

相关内容