使用两个参数交叉引用自定义环境

使用两个参数交叉引用自定义环境

如果我的问题标题有歧义,请见谅。

我想编写一个名为“问题”的环境,其工作原理如下。我希望能够编写

    \begin{problem}{1}{2}
    this is a problem statement \label{myprob}
    \end{problem}

    Look at problem number \ref{myprob}

并得到以下输出:

    Problem 1.2: This is a problem statement.

    Look at problem number 1.2.

关于我该如何做到这一点,您有什么想法吗?

答案1

如果仅此而已,那么这样做就可以了:

在此处输入图片描述

\documentclass{article}
\makeatletter
\newenvironment{problem}[2]
  {\def\@currentlabel{#1.#2}%
  \noindent\textbf{Problem~\@currentlabel}:\space\ignorespaces}
  {\par}
\makeatother
\begin{document}
\begin{problem}{1}{2}
This is a problem statement. \label{myprob}
\end{problem}
\end{document}

这依赖于使用 进行引用的事实\@currentlabel。因此,适当设置它。将宏作为参数传递给problem可能需要一些扩展。

答案2

这是另一种解决方案定理来自包的环境amsthm

\documentclass{report}
\usepackage{amsthm}

\newcounter{problemH}
\setcounter{problemH}{1} % set up the first number
\newtheorem{problem}{Problem}[problemH]

\begin{document}    
\begin{problem} 
 this is a problem statement \label{myprob}
\end{problem}

Look at problem number \ref{myprob}

\begin{problem}
  this is a problem statement 
\end{problem}
\end{document}

在此处输入图片描述

.冒号代替句号:

%\newtheoremstyle{stylename}{spaceabove}{spacebelow}{bodyfont}{indentamt}{headfont}{headpunct}{headspace}{headspec}
\newtheoremstyle{problemH}{3pt}{3pt}{}{}{\bfseries}{:}{.5em}{}
\theoremstyle{problemH}
\newtheorem{problem}{Problem}[problemH]

获得

在此处输入图片描述

相关内容