我想将一个命令与一个文本字符串组合起来以表示第二个命令。在 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。