我想建立一个包含许多数学问题和解决方案的文件,例如:
问题
...
...
...
解决方案
...
...
...
我想在问题和相应的解决方案之间来回链接,反之亦然。特别是,如果能够单击问题编号(1.、2.、...)并使其跳转到相应的解决方案,反之亦然,那就太好了。
有没有办法做到这一点,而不必为每个问题和解决方案重复输入label-ref?
答案1
在这里,我定义了\addProblemPlusSolution{}{}
来定义问题/解决方案集,然后\showProblemsThenSolutions
按顺序输出所有问题,然后是所有解决方案,并前后使用超链接引用。\label
s 和不是\ref
由用户明确放置的,而是由 自动生成的\showProblemsThenSolutions
。
除了为每个问题和解决方案分别创建一个新的格式外,我没有在格式上做任何特别的事情\subsection*
。但是,可以在问题和解决方案之间添加分页符、附加部分等。
我使用 Werner 的标签解决方案(\mynameis
宏)如何强制标签为给定的字符串?
\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\usepackage{ifthen}
\makeatletter
\newcommand{\mynameis}[1]{%
\phantomsection#1% Mark hyperlink
\renewcommand{\@currentlabel}{#1}%
\renewcommand{\@currentlabelname}{#1}}
\makeatother
\newcounter{probcount}
\newcounter{pcindex}
\newcommand\addProblemPlusSolution[2]{%
\stepcounter{probcount}
\expandafter\def\csname P\romannumeral\theprobcount\endcsname{#1}%
\expandafter\def\csname S\romannumeral\theprobcount\endcsname{#2}%
}
\newcommand\showProblemsThenSolutions{%
\setcounter{pcindex}{0}%
\whiledo{\thepcindex < \theprobcount}{%
\stepcounter{pcindex}%
\subsection*{\mynameis{Problem \thepcindex}%
\label{LP\romannumeral\thepcindex}
{\small\mdseries(see \ref{LS\romannumeral\thepcindex})}}
\csname P\romannumeral\thepcindex\endcsname
}%
\setcounter{pcindex}{0}%
\whiledo{\thepcindex < \theprobcount}{%
\stepcounter{pcindex}%
\subsection*{\mynameis{Solution \thepcindex}%
\label{LS\romannumeral\thepcindex}
{\small\mdseries(see \ref{LP\romannumeral\thepcindex})}}
\csname S\romannumeral\thepcindex\endcsname
}%
}
\begin{document}
\addProblemPlusSolution
{
\lipsum[1-3]
\[ y = mx + b\]
}{
\[ m = 3, \quad b = 12 \]
\lipsum[3-4]
}
\addProblemPlusSolution
{
\lipsum[2-3]
\[E = mc^2\]
}{
\[ c = 186,000 \textrm{mi/s} \]
\lipsum[4]
}
\showProblemsThenSolutions
\end{document}