我想要一个策略环境。到目前为止,我使用 ntheorem 包来定义这样的环境。
我这样使用它:
\begin{strategy}[bla]
bla bla
\end{strategy}
并得到:
<surrounding text>
Strategy 1 (Bla):
bla bla
<surrounding text>
这正是我想要的,除了我想用我指定的前缀对策略的编号进行分组,例如 LD.1、..LD.5 和 I.1、..I.3 等等:
<surrounding text>
Strategy A.1 (bla):
bla bla
more bla bla
<surrounding text>
因此,这个词战略我的前缀和简短描述放在非缩进行中,然后策略文本缩进。此外,我希望在策略上方和下方留出一点空间。
是否可以按如下方式使用 ntheorem:
\begin{strategy}[prefix][bla]
bla bla
\end{strategy}
或者有人有其他想法。我不需要使用 ntheorem。这只是我的第一个想法。
我将 ntheorem 用于其他环境,因此它们应该可以一起工作。
答案1
这里有一种方法;你指定
\begin{strategy}{<label>}[<optional description>]
Text
\end{strategy}
可以<label>
为空。各种策略将按标签顺序编号。如果您想重置数字,请发出
\resetstrategy{<label>}
例子:
\documentclass{article}
\usepackage{xparse}
\makeatletter
\NewDocumentEnvironment{strategy}{ m o }
{\@ifundefined{@strategy#1}
{\newtheorem{@strategy#1}{Strategy}%
\global\@namedef{the@strategy#1}{#1.\arabic{@strategy#1}}%
}%
{}%
\IfNoValueTF{#2}{\begin{@strategy#1}}{\begin{@strategy#1}[#2]}%
}
{\end{@strategy#1}}
\newtheorem{@strategy}{Strategy}
\newcommand{\resetstrategy}[1]{%
\@ifundefined{@strategy#1}
{\typeout{You have no `Strategy #1'}}
{\setcounter{@strategy#1}{0}}%
}
\makeatother
\begin{document}
\begin{strategy}{}
A
\end{strategy}
\begin{strategy}{}[Good]
B
\end{strategy}
\begin{strategy}{A}
C
\end{strategy}
\begin{strategy}{A}[Bad]
D
\end{strategy}
\begin{strategy}{X}[So and so]
E
\end{strategy}
\resetstrategy{A}
\begin{strategy}{A}
F
\end{strategy}
\end{document}
答案2
像这样?
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{lipsum}
\newcounter{mystrategy}[section]
\setcounter{mystrategy}{0}
\renewcommand{\themystrategy}{\Alph{section}.\arabic{mystrategy}}
\newenvironment{strategy}[1]{\refstepcounter{mystrategy}\textbf{Strategy \themystrategy\ (#1)}\itshape\selectfont}{\par}
\begin{document}
\section{One}
\lipsum[1]
\begin{strategy}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\subsection{one}
\lipsum[1]
\begin{strategy}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\section{Two}
\lipsum[1]
\begin{strategy}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\subsection{one}
\lipsum[1]
\begin{strategy}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\end{document}
输出
编辑1:对于可自由选择的标签:
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{lipsum}
\newenvironment{strategy}[2]{\textbf{Strategy #1 (#2)}\itshape\selectfont}{\par}
\begin{document}
\section{One}
\lipsum[1]
\begin{strategy}{Q.5}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\subsection{one}
\lipsum[1]
\begin{strategy}{X.101}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\section{Two}
\lipsum[1]
\begin{strategy}{H.42}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\subsection{one}
\lipsum[1]
\begin{strategy}{S.19}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\end{document}
编辑2:带缩进 (感谢 Werner) 和空格:
代码
\documentclass{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{lipsum}
\newenvironment{strategy}[2]{\vspace{5mm}\noindent\textbf{Strategy #1 (#2)}\\\phantom{}\hfill\begin{minipage}{\dimexpr\textwidth-5mm} \itshape\selectfont}{\end{minipage}\par\vspace{5mm}}
\begin{document}
\section{One}
\lipsum[1]
\begin{strategy}{Q.5}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\subsection{one}
\lipsum[1]
\begin{strategy}{X.101}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\section{Two}
\lipsum[1]
\begin{strategy}{H.42}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\subsection{one}
\lipsum[1]
\begin{strategy}{S.19}{Bla}
\lipsum[2]
\end{strategy}
\lipsum[3]
\end{document}
结果
答案3
如果你使用hyperref
and ntheorem
。你可以尝试这样的操作:
\newtheorem{strategy}{\normalfont{\textbf{Strategy}}}
\numberwithin{strategy}{chapter}
\newcommand{\strategyautorefname}{Strategy}
\begin{document}
...
\chapter{chapter something}
\begin{strategy}\label{str:first}
bla bla
\end{strategy}
In \autoref{str:first} you can see...
第一个命令定义策略环境。第二个命令定义策略之前的计数器,在本例中为章节编号。最后一个命令允许您引用环境并自动获取附加在编号前的字符串 Strategy。当您引用它时,将产生类似以下内容:
- 章节某事。
策略 2.1。bla bla
在策略 2.1 中您可以看到...
其中 2 是章节编号,1 是第二章内策略的计数器。