使用单个用户定义的命令将代码封装在 Latex 中

使用单个用户定义的命令将代码封装在 Latex 中

我使用下面的方法将我的代码括在一个框中,我喜欢这种格式,但我遇到的问题是每次我都必须写很多东西。

在此之前begin{document}我已经定义过:

\usepackage[framemethod=TikZ]{mdframed}
\mdfdefinestyle{MyFrame}{%
linecolor=blue,
outerlinewidth=2pt,
roundcorner=10pt,
innertopmargin=2pt,
innerbottommargin=2pt,
innerrightmargin=10pt,
innerleftmargin=10pt,
backgroundcolor=gray!50!white}

每当我希望我的盒子以正确的方式格式化时,我必须使用:

\begin{mdframed}[style=MyFrame]
\begin{verbatim}
# define str(x) #x
cout << str(test);
\end{verbatim}
\end{mdframed}

虽然我希望

\begin{myAmazingCodeBox}
# define str(x) #x
cout << str(test);
\end{myAmazingCodeBox}

有人能帮助我吗?

顺便说一下,我创建的盒子如下(如果有人感兴趣的话) 在此处输入图片描述

答案1

解决方案mdframed

\documentclass{article}
\usepackage{verbatim}
\usepackage[framemethod=TikZ]{mdframed}
\mdfdefinestyle{MyFrame}{%
  linecolor=blue,
  outerlinewidth=2pt,
  roundcorner=10pt,
  innertopmargin=2pt,
  innerbottommargin=2pt,
  innerrightmargin=10pt,
  innerleftmargin=10pt,
  backgroundcolor=gray!50!white
}

\newenvironment{myAmazingCodeBox}
  {\verbatim}
  {\endverbatim}
\surroundwithmdframed[style=MyFrame]{myAmazingCodeBox}

\begin{document}
\begin{mdframed}[style=MyFrame]
\begin{verbatim}
# define str(x) #x
cout << str(test);
\end{verbatim}
\end{mdframed}

\begin{myAmazingCodeBox}
# define str(x) #x
cout << str(test);
\end{myAmazingCodeBox}

\end{document}

在此处输入图片描述

答案2

正如 egreg 所说,你应该尝试一下tcolorbox。这是一个示例:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{listings}%

\newtcblisting{myAmazingCodeBox}[1][]{%
colback=gray!50!white,boxsep=2pt,left=2pt,right=2pt,top=2pt,bottom=2pt,
colframe=blue,arc=10pt,#1}

%\tcbset{listing engine={listings}}
\begin{document}

\begin{myAmazingCodeBox}[listing only]
# define str(x) #x
cout << str(test);
\end{myAmazingCodeBox}

\end{document}

在此处输入图片描述

这里的优点是tcolorbox无缝集成listings,以便您可以传递lstset选项。这意味着 C您可以对代码进行语法高亮(来自listings)。所有这些选项都留作练习。

答案3

如果您使用以下包,您可以定义自己的环境verbatim

\documentclass{article}
\usepackage[framemethod=TikZ]{mdframed}
\mdfdefinestyle{MyFrame}{%
linecolor=blue,
outerlinewidth=2pt,
roundcorner=10pt,
innertopmargin=2pt,
innerbottommargin=2pt,
innerrightmargin=10pt,
innerleftmargin=10pt,
backgroundcolor=gray!50!white}

\usepackage{verbatim}
\newenvironment{myAmazingCodeBox}%
  {\mdframed[style=MyFrame]\verbatim}%
  {\endverbatim\endmdframed}

\begin{document}
\begin{myAmazingCodeBox}
# define str(x) #x
cout << str(test);
\end{myAmazingCodeBox}
\end{document}

但我更喜欢tcolorbox已经发布的解决方案。

相关内容