我正在读latex listings 包的文档还有建议其中看起来像这样:
我快速浏览了一下文档的源代码事实证明,存在一个advise
环境:
\begin{advise}
\item Must I do that really?
\advisespace
Yes and no. Some books about programming say this is good.
它似乎是在包内部定义的:
% \begin{environment}{advise}
% \begin{macro}{\advisespace}
% The environment uses |\@listi|.
% \begin{macrocode}
\def\advise{\par\list\labeladvise
{\advance\linewidth\@totalleftmargin
\@totalleftmargin\z@
\@listi
\let\small\footnotesize \small\sffamily
\parsep \z@ \@plus\z@ \@minus\z@
\topsep6\p@ \@plus1\p@\@minus2\p@
\def\makelabel##1{\hss\llap{##1}}}}
\let\endadvise\endlist
% \end{macrocode}
% \begin{macrocode}
\def\advisespace{\hbox{}\qquad}
\def\labeladvise{$\to$}
% \end{macrocode}
% \end{macro}
% \end{environment}
但是,我既不理解这个代码片段,也无法让它工作(复制和粘贴不起作用,而且我不知道注释中的代码是什么意思)。
有没有可能advise
有一个 -package?有没有办法让这段代码在 listings 包之外工作?如果有,怎么做?
答案1
的代码advise
实际上是环境,尽管没有\newenvironment
语法。这是因为作者分别定义了开始\advise
和结束\endadvise
组件。无论如何,advise
是一个list
环境,并且list
接受两个参数来指定一些参数和标签样式。如今大多数人使用包来操作标签和间距(例如enumitem
),但仍可以使用 TeX 基本原理来定义。有关 的详细信息\list
,请参阅source2e.pdf
(部分56 列表和相关环境,第 218 页)。以下是摘录:
\list{<label>}{<commands>} ... \endlist
其中<label>
和\labeladvise
包含<commands>
所有间距和\makelabel
命令/重新定义。
.sty
注释掉的代码是编写在代码( )和文档(.tex
和)方面自成一体的包的一种风格.pdf
。通常,这些包写成.dtx
&.ins
对,并处理成各种输出文件。请参阅如何安装.dtx
文件?或者我可以将.dtx
文件转换为.tex
文件吗。
以下是使用该代码的示例:
\documentclass{article}
\makeatletter
\def\advise{\par\list\labeladvise
{\advance\linewidth\@totalleftmargin
\@totalleftmargin\z@
\@listi
\let\small\footnotesize \small\sffamily
\parsep \z@ \@plus\z@ \@minus\z@
\topsep6\p@ \@plus1\p@\@minus2\p@
\def\makelabel##1{\hss\llap{##1}}}}
\let\endadvise\endlist
\def\advisespace{\hbox{}\qquad}
\def\labeladvise{$\to$}
\makeatother
\begin{document}
\begin{advise}
\item Must I do that really?
\advisespace
Yes and no. Some books about programming say this is good.
\end{advise}
\end{document}
\makeatletter
请注意和的用法\makeatother
,因为你正在将@
其用作宏的一部分。请参阅做什么\makeatletter
和\makeatother
做什么?