如何在新环境中包装LaTex命令

问题描述 投票:0回答:1

这个问题已经被回答过一次(wrap LaTeX command in environment),但是我仍然很难使自己的相当简单的新环境命令起作用。

我想做的是将下面显示某些代码输出的LaTex块转换为我可以重用的命令。

\fbox{\begin{minipage}{\textwidth}
\texttt{
>> CODE OUTPUT
\end{minipage}}

显然,为了制作一个新的环境命令来复制我在上面所做的工作,我将不得不使用包装器。 (由于\ fbox和\ texttt命令。)

我想这样做,而不必下载另一个软件包,也不必使用一些预定义的\ dir命令进入LaTex的秘密领域,而该命令只可以执行两次相同的工作。

从以前检查链接,看来有效的解决方案是使用\ bgroup和\ egroup。因此,我会这样写:

\newenvironment{CodeOutput}
{\fbox\bgroup\begin{minipage}{\textwidth}\texttt\bgroup}
{\egroup\end{minipage}\egroup}

然而,这仍然行不通。 (至少在Overleaf上。)如果有一种直接的方法来制作这样的命令,那将是很好的。感谢您提供任何有用的建议!

latex newenvironment
1个回答
0
投票

如果要编写执行所需操作的command,则可以使用以下命令:

\newcommand{\mycmd}[1]{%
  \fbox{%
    \begin{minipage}{\dimexpr\linewidth-2\fboxrule-2\fboxsep}
      \ttfamily #1
    \end{minipage}%
  }%
}

这里的想法起作用,因为提供给<arg>\mycmd{<arg>} ument被全部#1取代。如果您想将其重写为environment,则由于\fbox的原因,这会有些困难。 \fbox没有与\texttt具有\ttfamily(从技术上来说是字体切换)相同的environment形式。 environ提供了一种快速解决方案-它允许您在宏environ中捕获环境的内容:

\BODY

但是,您可以通过捕获框内环境的内容,然后将框设置为\usepackage{environ} \NewEnviron{myenvA}{% \fbox{% \begin{minipage}{\dimexpr\linewidth-2\fboxrule-2\fboxsep} \ttfamily \BODY \end{minipage}% }% } 内的选项:

\fbox

以下最小示例显示了以上所有情况:

\newsavebox{\codebox}% To store the content of myenvB \newenvironment{myenvB}{% \begin{lrbox}{\codebox}% \ttfamily\ignorespaces }{% \end{lrbox}% \fbox{\begin{minipage}{\dimexpr\linewidth-2\fboxrule-2\fboxsep} \usebox{\codebox}% \end{minipage}}% }

enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.