如何组合两个文本字符串来表示命令的名称?

如何组合两个文本字符串来表示命令的名称?

我想将一个命令与一个文本字符串组合起来以表示第二个命令。在 MatLab 中,可以将这两个字符串连接成一个字符串并计算这个新字符串。但是我不知道如何在 LaTeX 中做到这一点。请参阅下面的工作示例:

\documentclass[10pt,a4paper,twosided]{article}    
    \begin{document}


        \newcommand{\CaseID}{CaseOne} 

        \newcommand{\ProbabilityCaseOne}{1.00E-04}

        \paragraph{The results for \CaseID}

        \CaseID has probabilty  \Probability\CaseID


    \end{document}

该组合\Probability\CaseID不能用作 的同义词\ProbabilityCaseOne。我该如何实现这样的功能?

答案1

这也可以在 LaTeX 中实现:

在此处输入图片描述

\documentclass{article}
\begin{document}

\newcommand{\CaseID}{CaseOne}

\newcommand{\ProbabilityCaseOne}{1.00E-04}

\paragraph{The results for \CaseID}

\CaseID{} has probabilty  \csname Probability\CaseID\endcsname

\paragraph{The results for \CaseID}

\makeatletter
\CaseID{} has probabilty  \@nameuse{Probability\CaseID}
\makeatother
\end{document}

您可以使用\csname ... \endcsname来构造控制序列,也可以使用\@nameuse{...}。当然,后者需要放置在适当的\makeatletter...\makeatother范围内。请参阅做什么\makeatletter\makeatother做什么?对于前者,请参阅参考问题到底做什么\csname\endcsname做什么?

参考自TeX 书(章节7 TeX 如何读取你输入的内容,第 40 页):

... 您可以通过说 来从字符标记列表转到控制序列。出现在和\csname\<tokens>\endcsname之间的此构造中的标记可能包含其他控制序列,只要这些控制序列最终扩展为字符而不是 TeX 基元;最终字符可以是任何类别,不一定是字母。例如, 本质上与 相同;但是 是非法的,因为扩展为包含基元的标记。此外, 将产生不寻常的控制序列 ...\csname\endcsname\csname TeX\endcsname\TeX\csname\TeX\endcsname\TeX\kern\csname\string\TeX\endcsname\\TeX


以上都使用提供的内核功能。然而,etoolbox作为包提供与\@nameuse(和\@namedef)包装器类似的构造。请参阅3.1.1 宏定义(第 5 页)etoolbox文档. 特别是它提供了\csuse{...}

答案2

定义执行连接的命令。

\documentclass[10pt,a4paper,twosided]{article}    
\begin{document}

\newcommand{\CaseID}{CaseOne} 
\newcommand{\ProbabilityCaseOne}{1.00E-04}

\newcommand{\Probability}[1]{\csname Probability#1\endcsname}

\section{The results for \CaseID}

\CaseID\ has probabilty  \Probability\CaseID

\end{document}

但是,你可以用不同的方式做:

\documentclass{article}

\makeatletter
\newcommand{\DefineCase}[3]{%
  % #1 is an identifier
  % #2 is the text
  % #3 is the probability
  \@namedef{ID@#1}{{#2}{#3}}%
}
\newcommand{\CaseID}[1]{%
  \expandafter\expandafter\expandafter\@firstoftwo\csname ID@#1\endcsname
}
\newcommand{\Probability}[1]{%
  \expandafter\expandafter\expandafter\@secondoftwo\csname ID@#1\endcsname
}
\makeatother

\DefineCase{1}{CaseOne}{1.00E-04}

\begin{document}
\section{The results for \CaseID{1}}

\CaseID{1} has probability \Probability{1}
\end{document}

第一个参数\DefineCase是用于标识案例的任意字符串;第二个参数是相应的文本,第三个参数是相关概率。这样,您可以根据需要定义任意数量的案例,并使用统一的语法,例如

\DefineCase{xyz}{Anything}{1}

将允许您在文档中说\CaseID{xyz}打印“任何内容”并\Probability{xyz}打印 1。

在此处输入图片描述

相关内容