我创建了一个方法\makeExample
来创建一个名为 的新计数器example
。你能告诉我如何修改它,以便我可以引用计数器吗example
?这样我就可以写:some text.... \vref{label} ....
。
您可以在此处找到一个工作示例:https://www.sharelatex.com/project/541ffc3e05c84a5c4060ae58
我的方法是这样的:
\newcounter{example}[section]
\newenvironment{example}[1][]{\refstepcounter{example}\par\medskip
\LARGE\textsc{Eksempel~\thechapter.\theexample #1}}{\medskip}
\newcommand\makeExample{%
{%
\begin{center}%
\begin{example}%
\end{example}%
\end{center}%
}%
}
答案1
对代码最简单的修改是添加一个可选参数,\makeExample
您可以在其中放置任意代码,例如\label
。我在底部发布了一个示例,但我强烈怀疑这不是您想要的。您提供的示例正在设置一个mdframed
环境,最简单的方法是使用包提供的类似定理的机制,mdframed
如下所示:
\documentclass{memoir}
\usepackage[utf8]{inputenc}
\usepackage{mathtools,varioref}
\usepackage[framemethod=TikZ]{mdframed}
\mdfdefinestyle{cexamplestyle}{%
frametitlefont=\normalfont\Large\scshape,
frametitlealignment=\center
}
\mdtheorem[style=cexamplestyle]{centerexample}{Example}[chapter]
\begin{document}
\vref{todo} is a sample. The fist is a sample of how I would like it to be
\begin{centerexample}
\label{todo}
\noindent
\textbf{Data:} 1011
\newline
\textbf{Function:} $a\cdot x^3+b\cdot x^2+c\cdot x+d\cdot 1$
\noindent
Værdierne fra $a$, $b$, $c$ og $d$ findes som følger:
\newline
$a=1$, $b=0$, $c=1$ og $d=1$
\end{centerexample}
\end{document}
第一次修改后的结果如下:
\documentclass{book}
\usepackage{mdframed}
\newcounter{example}[section]
\newenvironment{example}[1][]{\refstepcounter{example}\par\medskip
\LARGE\textsc{Example~\thechapter.\theexample #1}}{\medskip}
\newcommand{\makeExample}[1][\relax]{%
{%
\begin{center}%
\begin{example}%
#1%
\end{example}%
\end{center}%
}%
}
\begin{document}
\chapter{A chapter}
\label{cha:chapter}
\begin{mdframed}
\makeExample[\label{cex:sample}]
A centered example.
\end{mdframed}
That was Example~\ref{cex:sample}.
\end{document}
我认为第一种方法更简单。
答案2
提问时,你应该提供完整的最小工作示例(MWE),既是为了展示你正在尝试做什么,也是为了帮助别人帮助你——如果别人给你一些可以借鉴的东西,那么帮助他们就容易多了。MWE 应该以一个\documentclass
声明开始,包含你想要的所有包,然后拥有\begin{document}...\end{document}
。MWE 应该编译并包含接近解释/演示你要求的内容所需的最少代码量。这为每个人节省了大量时间。
在这种情况下,在我看来,你只是试图定义一个显示示例的环境。如果这就是你想要做的,那么你就太努力了,因为你只需使用\newtheorem{example}[section]{Eksempel}
。完整的 MWE,包括交叉引用,是
\documentclass{article}
\usepackage{amsmath}
\newtheorem{example}{Eksempel}% implicitly defines a counter
\numberwithin{example}{section}% numbers it within sections
\begin{document}
\section{Important examples}
\begin{example}\label{MyExample}% \label creates the reference
1+1=2.
\end{example}
My Eksempel~\ref{MyExample} is great.% \ref creates the cross-reference
\end{document}
得出的结果为:
查看文档阿姆斯特丹包来了解如何自定义类似定理的环境。
编辑正如我提到的,要定制风格,Eksempel
你应该阅读阿姆斯特丹包。如果您添加以下行:
\usepackage{amsmath,amsthm}
\newtheoremstyle{eksempel}
{3pt}% ⟨Space above⟩
{3pt}% ⟨Space below⟩
{}% ⟨Body font⟩
{0pt}% ⟨Indent amount⟩
{\scshape}% ⟨Theorem head font⟩
{}% ⟨Punctuation after theorem head⟩
{0pt}% ⟨Space after theorem head⟩2
{\centerline{\thmname{#1} \thmnumber{#2}}}% ⟨Theorem head spec⟩
\theoremstyle{eksempel}
\newtheorem{example}{Eksempel}% implicitly defines a counter
然后你就会得到你想要定义的风格:
请注意,\hfill
“定理头规范”的 s 位于 Eksempel 标题的中心。
如果你试图做更多的事情,那么你的代码仍然过于努力,因为你不需要同时定义\newenvironment{example}
和\makeExample
命令:环境本身就是命令。在这种情况下,你可能需要类似
\newenvironment{example}[1][]{\refstepcounter{example}\par\medskip
\center\LARGE\textsc{Eksempel~\thechapter.\theexample #1}}
{\endcenter\medskip}
(但是,我建议删除\par
和\medskips
,因为它们在我看来是错误的。)
正如您所使用,\refstepcounter
您可以使用上面的 MWE 中的命令和\label
创建\ref
交叉引用。话虽如此,最好\theexample
在环境定义中使用并添加:
\renewcommand\theexample{\thechapter.\arabic{example}}
最后,由于您将示例计数器定义为部分的子计数器,我怀疑您真正想要的是:
\renewcommand\theexample{\thesection.\arabic{example}}
答案3
这是一个具有自动标签生成的版本,但是,重置计数器后可能会失败。
\documentclass{book}
\newcounter{example}[section]
\renewcommand{\theexample}{\thesection.\arabic{example}}
\newenvironment{example}[1][]{\refstepcounter{example}\label{mysophisticatedexample::\number\value{example}}
\LARGE\textsc{Eksempel~\theexample #1}\par\medskip
}{\medskip}
\newcommand\makeExample{%
{%
\begin{center}%
\begin{example}%
This is some dummy example with \theexample as counter and it references \ref{mysophisticatedexample::1}
\end{example}%
\end{center}%
}%
}
\begin{document}
\chapter{First}
\section{First}
\makeExample
\makeExample
\makeExample
\end{document}