我试图以一种简洁的方式引用方程式的每个部分,这样每当使用符号时,人们就可以确切地知道它代表什么。我想引用一个方程式:
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
等。这是我通常做的。