动机:我想声明一个命令\tbc
(不带参数)以在环境中使用它。我希望此命令生成如下文本问题 2 继续在下一页,开始新的一页并制作问题 2 继续...我使用各种环境,例如问题、问题、练习等,但都使用带有计数器的连续编号theorem
。当然,我希望我\tbc
的 问题 2当它用于\begin{problem}
和之间\end{problem}
时问题 3当它用于\begin{question}
和之间时\end{question}
。
问题:我知道我可以用 获取环境编号\the\value{theorem}
。但我不知道如何获取环境名称。
我知道还有其他软件包可以实现这个功能,但是拥有自己的小命令可以让我更好地将其与我的文档风格相融合。
答案1
一个利用的黑客攻击amsthm
:当排版标题时,我重新定义\tbcname
扩展为#1
(定理名称)。
\documentclass{article}
\usepackage{amsthm}
\usepackage{lipsum}
\newtheoremstyle{definition-keep}
{\topsep} % ABOVESPACE
{\topsep} % BELOWSPACE
{\upshape} % BODYFONT
{0pt} % INDENT (empty value is the same as 0pt)
{\bfseries} % HEADFONT
{.} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
{\gdef\tbcname{#1}\thmname{#1} \thmnumber{#2}\thmnote{ (#3)}} % CUSTOM-HEAD-SPEC
\newtheorem{theorem}{Theorem}
\theoremstyle{definition-keep}
\newtheorem{problem}[theorem]{Problem}
\newtheorem{exercise}[theorem]{Exercise}
\newcommand{\tbc}{%
\par
\textit{\tbcname~\thetheorem\ continues on the next page}\clearpage
\textit{\tbcname~\thetheorem\ continued}\dots\par
}
\begin{document}
\begin{problem}
\lipsum[1-3]
\tbc
\lipsum[4]
\end{problem}
\end{document}
答案2
如果您的环境名称与这些环境使用的计数器名称相同,则您可以使用它\@currenvir
来获取环境名称和与该环境关联的计数器。
除此之外:
这瓦里雷夫-package 可用于获取“下一页”或“下一页”等短语。这给文本带来了一些变化。
我认为,为了从环境外部引用
\autoref
-command超链接-package 将成为你的朋友。它会将与计数器相关的名称添加到引用的前面。
这些名称来自于名称具有模式的宏 ,或者(如果未定义进一步的宏)。
\⟨counter⟩autorefname
\⟨counter⟩name
(请参阅 hyperref-package 手册第 4 节“附加用户宏”。)但有一个小问题:
当您对几个类似定理的环境使用同一个计数器时,您需要 为该计数器提供几个名称/几个宏。
\⟨counter⟩autorefname
该问题已由以下软件包解决别名作者:Heiko Oberdiek。
以下是一个小例子:
\documentclass{article}
%===================[adjust margins/layout for the example]====================
\paperwidth=8.91cm
\paperheight=5.25 cm
\csname @ifundefined\endcsname{pagewidth}{}{\pagewidth=\paperwidth}%
\csname @ifundefined\endcsname{pdfpagewidth}{}{\pdfpagewidth=\paperwidth}%
\csname @ifundefined\endcsname{pageheight}{}{\pageheight=\paperheight}%
\csname @ifundefined\endcsname{pdfpageheight}{}{\pdfpageheight=\paperheight}%
\textwidth=\paperwidth
\oddsidemargin=1.25cm
\marginparsep=.125\oddsidemargin
\marginparwidth=\oddsidemargin
\advance\marginparwidth-2\marginparsep
\advance\textwidth-2\oddsidemargin
\advance\oddsidemargin-1in
\evensidemargin=\oddsidemargin
\textheight=\paperheight
\topmargin=1.25cm
\footskip=.5\topmargin
{\normalfont\global\advance\footskip.5\ht\strutbox}%
\advance\textheight-2\topmargin
\advance\topmargin-1in
\headheight=0ex
\headsep=0ex
\pagestyle{plain}
\parindent=0ex
\parskip=0ex
\topsep=0ex
\partopsep=0ex
%==================[eof margin-adjustments]====================================
\usepackage{varioref}
% In case you wish no hyperlinks and no bookmarks:
\AtBeginDocument{\NoHyper}
\usepackage[bookmarks=false]{hyperref}
% In case you wish hyperlinks and bookmarks:
%\usepackage{hyperref}
\usepackage{aliascnt}
\newtheorem{theorem}{Theorem}
% Create fake-counters that use the same count-register as the
% theorem-counter:
\newaliascnt{problem}{theorem}
\newaliascnt{question}{theorem}
\newaliascnt{exercise}{theorem}
% Define the autoref-names of the fake-counters when referencing then
% via \autoref
\newcommand\problemautorefname{Problem}
\newcommand\questionautorefname{Question}
\newcommand\exerciseautorefname{Exercise}
% Create theorem-environments that use the fake-counters:
\newtheorem{problem}[problem]{Problem}
\newtheorem{question}[question]{Question}
\newtheorem{exercise}[exercise]{Exercise}
% Apply the fix provided by the package aliascnt for \newtheorem when
% being used with a fake-counter -- see section 1, "User Interface" of
% the manual of the aliascnt-package, URL:
% <http://mirrors.ctan.org/macros/latex/contrib/oberdiek/aliascnt.pdf>
\aliascntresetthe{problem}
\aliascntresetthe{question}
\aliascntresetthe{exercise}
\makeatletter
%
% \tbc or \tbc[<referencing-command>]
%
\newcommand\tbccnt{0}%
\newcommand{\tbc}[1][\vpageref*]{%
\par
% globally step \tbccnt:
\xdef\tbccnt{\number\numexpr\tbccnt+1\relax}%
\begingroup
% You probably wish to adjust varioref's behaviour:
% \def\reftextfaceafter{on the next page}%
% \def\reftextafter{on the next page}%
\textit{%
\csname\@currenvir autorefname\endcsname~%
\csname the\@currenvir\endcsname\ continues \null%
\hyperref[{tbc@continued@\tbccnt}]{#1{tbc@continued@\tbccnt}}.%
}%
\endgroup
\clearpage
\textit{%
\phantomsection
\label{tbc@continued@\tbccnt}%
\csname\@currenvir autorefname\endcsname~%
\csname the\@currenvir\endcsname\ continued%
}\dots\par\ignorespaces
}
\makeatother
\begin{document}
\begin{theorem}
\label{Firsttheorem}
This is a theorem.
\tbc
This is a theorem.
\end{theorem}
\vfill
\begin{problem}
\label{Firstproblem}
This is a problem.
\tbc
This is a problem.
\end{problem}
\vfill
\begin{question}
\label{Firstquestion}
This is a question.
\tbc
This is a question.
\end{question}
\vfill
\begin{exercise}
\label{Firstexercise}
This is an exercise.
\tbc[on page~\pageref*]
This is an exercise.
\end{exercise}
\newpage
\noindent Referencing:
\verb|\autoref{Firsttheorem}|: \autoref{Firsttheorem}
\verb|\autoref{Firstproblem}|: \autoref{Firstproblem}
\verb|\autoref{Firstquestion|: \autoref{Firstquestion}
\verb|\autoref{Firstexercise}|: \autoref{Firstexercise}
\end{document}