在环境内部定义变量,但在环境外部使用它

在环境内部定义变量,但在环境外部使用它

如何在设置变量的环境之外使用变量?

按照下面给出的 MWE,如何在两个地方(环境内部和外部)打印变量?

\documentclass{article}
\usepackage[utf8]{inputenc}

\newcommand\referenceSente{}
\newcommand{\defReferenceSente}[1]{\renewcommand{\referenceSente}{#1}} 
\newcommand{\printReferenceSente}{\referenceSente}
\newenvironment{myEnvironment}[1]{\defReferenceSente{#1}}

\begin{document}
\begin{myEnvironment}{keyword}
Inside environment : \printReferenceSente
\end{myEnvironment}
Outside environment : \printReferenceSente

\end{document}

答案1

LaTeX2e 没有提供在全局范围内定义宏的命令;您必须借助于类似 TeX 的东西\gdef(读作“全局定义”)来实现这一点。

此外,你\printReferenceSente在这里是多余的。

下面的代码应该可以完成您想要的操作。

在此处输入图片描述

\documentclass{article}

% initialise macro
\newcommand\referenceSente{}

% command for defining \referenceSente macro globally
\newcommand{\gdefReferenceSente}[1]
  {\gdef\referenceSente{#1}}


\newenvironment{myEnvironment}[1]
  {\gdefReferenceSente{#1}} % before
  {\par}                    % after

\begin{document}
\begin{myEnvironment}{keyword}
Inside environment : \referenceSente
\end{myEnvironment}
Outside environment : \referenceSente

\end{document}

答案2

更接近您的代码的版本,\gdef仅在真正重要的地方使用(正如 Jubobs 正确识别的那样) - “捕获”您的关键字,并使用他的简化而不需要特殊的打印命令......

\documentclass{article}
\usepackage[utf8]{inputenc}

\newcommand\referenceSente{}
\newcommand{\defReferenceSente}[1]{\gdef\referenceSente{#1}} 
\newenvironment{myEnvironment}[1]{\defReferenceSente{#1}}{}

\begin{document}
\begin{myEnvironment}{keyword}
Inside environment : \referenceSente
\end{myEnvironment}
Outside environment : \referenceSente

\end{document}

编辑:原始示例在 的定义中只有一个(开始)组件;它通过在定义和 之间\newenvironment{myEnvironment}添加一个空行(“静默”)来“保存” ,因为被解释为环境定义的第二个(必需)组件。如果删除空行,则会导致错误:\par\begin{document}\par

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.7 \begin{d
            ocument}
?

解决这个问题很容易——只需添加一个空组 {}作为结束组件,不做任何事,只是使定义在语法上正确。(感谢 Jubobs 发现了这个故障。)

相关内容