【问题标题】:Problem with creating a newenvironment in LaTeX在 LaTeX 中创建新环境的问题
【发布时间】:2010-04-09 10:56:05
【问题描述】:

我正在尝试在 LaTeX 中实现这个新环境:

\newenvironment{javacode}[2]
{\begin{lstlisting}[language=java, label=#1, caption=#2]}
{\end{lstlisting}}

然后像这样使用它:

\begin{javacode}{c}{some code}
int x = 5;
\end{javacode}

但我收到以下错误:

Overfull \hbox (6.0pt too wide) in paragraph at lines 6--6
[][][][][][][] 
[1] [2]) [3])
*

谁能帮忙解决这个问题?

[更新]

我尝试按照Red-nosed unicorn 的指示进行操作,并且运行正常。

但现在我尝试像这样添加\begin{singlespace}

\lstnewenvironment{javacode}[2]
{
\begin{singlespace}
\lstset{language=java, label=#1, caption=#2}}
{
\end{singlespace}
}

我得到了同样的错误:

Overfull \hbox (6.0pt too wide) in paragraph at lines 6--6
[][][][][][][] 
[1]) [2] [3])
*

【问题讨论】:

    标签: latex newenvironment


    【解决方案1】:

    这是一种特殊情况,因为列表环境需要提前解析自身以找到自身的结尾。原因是列表环境中的宏不能被扩展——当然包括环境的结束标记。

    因此,如果该行包含\end{lstlisting},基本上它会在每一行中查找 - 但在您的情况下,由于\end{javacode} 宏尚未扩展,因此不存在这样的行。所以listings会继续搜索直到文件结束。

    Listings 定义了一个自己的命令来解决这个问题。来自文档:

    \lstnewenvironment 
      {⟨name⟩}[⟨number⟩][⟨opt. default arg.⟩]
      {⟨starting code⟩}
      {⟨ending code⟩}
    

    例如:

    \lstnewenvironment{javacode}[2]
      {\lstset{language=java, label=#1, caption=#2}}
      {}
    

    编辑针对您编辑的问题:我尝试编译以下最小的“工作”示例。实际上,它并没有那么多工作——latex 处理器只是停在中间并等待用户输入。

    由于列表文档没有提到对singlespace 的特殊处理,我认为您可能已经发现了一个错误。最好的做法可能是从列表包的维护者那里获得反馈。

    % mini.dvi
    \documentclass{article}
    
    \usepackage{listings}
    \usepackage{setspace}
    \doublespacing
    
    \lstnewenvironment{javacode}
     {\begin{singlespace}
      \lstset{language=java}}
     {\end{singlespace}}
    
    \begin{document}
    \begin{javacode}
    int a = 1;
    int b = 2;
    \end{javacode}
    \end{document}
    

    【讨论】:

    • 我现在需要在listing之前添加一个\begin{singlespace},我尝试过这样:\lstnewenvironment{javacode}[2]{\begin{singlespace}\lstset{language=java, label=#1, caption=#2}}{\end{singlespace}}但它仍然给了我同样的错误。 (注意:它在没有单一空间环境的情况下工作)
    • 感谢您的更新。我会尝试就这个问题联系 Brooks Moses,因为如果我没记错的话,他目前正在维护listings
    • 我找到了解决方案。在这里发布:stackoverflow.com/questions/2606794/…
    【解决方案2】:

    经过进一步研究,我发现了这个http://www.tug.org/pipermail/texhax/2009-June/012699.html

    要解决我的解决方案,我需要使用 \singlespacing 而不是 singlespace 环境。

    以下是我的工作代码:

    \lstnewenvironment{javacode}[2]
    {\singlespacing\lstset{language=java, label=#1, caption=#2}}
    {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多