如何在方程式中引用标签,使其看起来像一个参数

如何在方程式中引用标签,使其看起来像一个参数

我试图以一种简洁的方式引用方程式的每个部分,这样每当使用符号时,人们就可以确切地知道它代表什么。我想引用一个方程式: I_{(x)} = I_0*e^{\mu x}但所有这些参数都是来自符号列表的引用

\documentclass[10pt,twoside,leqno,fleqn]{article}
\usepackage{amsmath}

\usepackage{enumitem}
\usepackage{hyperref}
\makeatletter
\newcommand{\leqnomode}{\tagsleft@true}
\newcommand{\reqnomode}{\tagsleft@false}
\makeatother
\begin{document}
\reqnomode
\begin{gather}
\eqref{eq:Ix}= \eqref{eq:I0}\eqref{eq:e}^{-\eqref{eq:mu} \eqref{eq:x}}  
\end{gather}
%works but the parenthesis..
%\begin{gather}
%\ref{eq:Ix}= \ref{eq:I0}\ref{eq:e}^{-\ref{eq:mu} \ref{eq:x}}  
%\end{gather}
%! Missing \endgroup inserted.

\leqnomode
\setlength{\abovedisplayskip}{0pt}
\setlength{\belowdisplayskip}{0pt}
\begin{itemize}[label=]
    \leftskip=1cm
    \item \begin{equation}
    \tag*{$I_{(x)}$}\label{eq:Ix} \textnormal{: text1}
\end{equation}
    \item \begin{equation}
    \tag*{$I_0$}\label{eq:I0} \textnormal{: text2 }
\end{equation}
    \item \begin{equation}
    \tag*{$e$}\label{eq:e} \textnormal{: text3}
\end{equation}
    \item \begin{equation}
    \tag*{$\mu$}\label{eq:mu} \textnormal{: text4}
\end{equation}
    \item \begin{equation}
    \tag*{$x$}\label{eq:x} \textnormal{: text5}
\end{equation}
\end{itemize}
\end{document}

答案1

如果我理解了这个问题,那么您希望能够在文档中的某个地方定义符号,比如在符号列表表中,然后使用此符号,并稍后使用某些命令创建超链接。假设这就是您想要的,下面的代码可以做到这一点。

符号列表在环境内部定义。该工作由具有以下语法的命令ListOfSymbols完成:\Symbol

 \Symbol{ref}{symbol}{description}

这里ref是稍后使用此符号时将使用的参考文本,symbol是实际的符号文本,description是符号的描述。例如,

\Symbol{I0}{I_0}{Initial current}

给出下面“符号列表”表的第一行。

符号列表表有三列,分别给出符号、描述和使用该符号的文档的第一页。例如,下面的 MWE 产生:

在此处输入图片描述

稍后,可以使用命令在文档中添加符号以及返回符号列表表的超链接\sref。例如,下面的图像是通过\sref{I0}在文档中键入内容而生成的,然后$I_0$鼠标悬停时会显示超链接(嗯,这取决于您选择的 PDF 浏览器...acrobat 不够智能,无法做到这一点,但 skim 等可以!):

在此处输入图片描述

以下是完整的 MWE:

\documentclass{article}
\usepackage{longtable}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{lipsum}% only needed for random text in MWE

\makeatletter
\newcommand\Symbol[3]{% \Symbol{reference}{symbol}{description}
   \csgdef{sym@#1}{#2}% define \sym@#1 to be the symbol text 
   % add line to list of symbols table
   \hypertarget{sym@#1}{$#2$} & #3 & \pageref{sym@page@#1}\\
}
\newcommand\sref[1]{% usage: \sref{reference}
  % add symbol with hyperlink
  \hyperlink{sym@#1}{\csuse{sym@#1}}% print symbol
  % create a link if this is the first time symbol is used
  \ifcsdef{sym@first@#1}{}%
     {\phantomsection\label{sym@page@#1}\csgdef{sym@first@#1}{\relax}}%
}
\makeatother
\newenvironment{ListOfSymbols}{% list of symbols environment
  % this is really just a wrapper around a long table environment, 
  % which is used because the list of symbols may run over many pages
  \longtable{@{}lp{0.8\textwidth}r}
  \multicolumn{3}{c}{List of symbols}
  \endhead\\
  }{\endlongtable}

\begin{document}

\begin{ListOfSymbols}
  \Symbol{I0}{I_0}{Initial current}
  \Symbol{Ix}{I_x}{Current at $x$}
  \Symbol{mu}{\mu}{Flux}
\end{ListOfSymbols}

\lipsum% some random text to get a page break

\[
     \sref{Ix} = \sref{I0}e^{\sref{mu}}.
\]

We can use $\sref{Ix}$ again.

\lipsum

and again $\sref{Ix}$...

\end{document}

答案2

接下来是一些肮脏的把戏,可能会导致一些布局问题。以下内容使用pdfLaTeX和运行LuaLaTeX

\documentclass[10pt,twoside,leqno,fleqn]{article}
\usepackage{amsmath}

\usepackage{enumitem}
\usepackage{hyperref}
\makeatletter
\newcommand{\leqnomode}{\tagsleft@true}
\newcommand{\reqnomode}{\tagsleft@false}
\makeatother


\newcommand{\mref}[1]{\textup{\ref{#1}}}

\begin{document}
\reqnomode

\begin{align}
    \mref{eq:Ix}
        &= \mref{eq:x}\mref{eq:I0}\mref{eq:e}^{-\mref{eq:mu} \mref{eq:x}}  \\
    \eqref{eq:Ix}
        &= \eqref{eq:x}\eqref{eq:I0}\eqref{eq:e}^{-\eqref{eq:mu} \eqref{eq:x}}\\
    \textup{\TeX}
        &\neq\mref{eq:x}\frac 1 {\mref{eq:x} \frac 1 {\mref{eq:x} \frac 1 {\mref{eq:x}\frac 1 {\mref{eq:x}}}}}
\end{align}

%works but the parenthesis..
\begin{gather}
    \mref{eq:Ix}= \mref{eq:I0}\mref{eq:e}^{-\mref{eq:mu} \mref{eq:x}}  
\end{gather}
%! Missing \endgroup inserted.

\leqnomode
\setlength{\abovedisplayskip}{0pt}
\setlength{\belowdisplayskip}{0pt}
\begin{itemize}[label=]
    \leftskip=1cm
    \item \begin{equation}
    \tag*{$I_{(x)}$}\label{eq:Ix}\textnormal{: text1}
\end{equation}
    \item \begin{equation}
    \tag*{$I_0$}\label{eq:I0} \textnormal{: text2 }
\end{equation}
    \item \begin{equation}
    \tag*{$e$}\label{eq:e} \textnormal{: text3}
\end{equation}
    \item \begin{equation}
    \tag*{$\mu$}\label{eq:mu} \textnormal{: text4}
\end{equation}
    \item \begin{equation}
    \tag*{$x$}\label{eq:x} \textnormal{: text5}
\end{equation}
\end{itemize}

\end{document}

在此处输入图片描述

我想我理解了你的问题:你想定义一个符号列表,并且你想确保列表中的更改会更改文本中的所有符号。选择将是每个符号的直接​​命令,带有\newcommand\DeclareMathOperator等。这是我通常做的。

相关内容