为什么在框架块内定义新命令不起作用?

为什么在框架块内定义新命令不起作用?

为什么以下“最小工作示例”有效

\documentclass[a4,german]{book}
\usepackage{framed}

\begin{document}

\newcommand{\myText}{Bliblibli!}

\begin{framed}
Blabla 
\end{framed}

\myText

\end{document}

但是这里不是这样,在“框架”块内定义新命令时?

“最小非工作示例”:

\documentclass[a4,german]{book}
\usepackage{framed}

\begin{document}

\begin{framed}
    Blabla \newcommand{\myText}{Bliblibli!}
\end{framed}

\myText

\end{document}

框架包是否根本不支持此功能,或者我做错了什么?

答案1

这里没有什么特别的,framed你会看到同样的东西

\begin{empty}
    Blabla \newcommand{\myText}{Bliblibli!}
\end{empty}

要不就

{
    Blabla \newcommand{\myText}{Bliblibli!}
}

括号组或环境提供了限制所有非全局定义的范围。

答案2

TeX 旨在成为一种排版工具。这很好,除非你想在其中编写任何程序。这些所谓的范围,即单独的环境,如框架和基本上以某种方式包含的任何东西,都有自己的风格。

对于字体来说很好,因为你可以写some text {\itshape something in a different font} and with no extra command back to the old style

对于编程来说,这不太好

\def\mynumber{3} because 
the number \mynumber
{\itshape might somehow be increased or changed \def\mynumer{6} to \mynumber}
and then changes back to \mynumber, even if you only wanted your font back.

给出输出

数字 3可能会以某种方式增加或更改为 6然后变回 3,即使您只想要恢复字体。

在手册中 TeX 编程笔记 由 Christian Feuersänger (附带 pgfplots) 撰写,他写了他如何摆弄关闭环境的命令来偷偷得出结果。

相关内容