Я пытаюсь реализовать эту новую среду в ЛАТЕКСЕ:
\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])
*
Кто-либо может помочь в отношении решения этой проблемы?
[Обновление]
Я попробовал его делающий его как Красноносый единорог, проинструктированный, и это работало правильно.
Но теперь я пытался добавить a \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])
*
При дальнейшем исследовании я нашел это http://www.tug.org/pipermail/texhax/2009-June/012699.html
Чтобы обойти мое решение, мне нужно использовать \ singlespacing
вместо среды singlespace
.
Теперь мой рабочий код выглядит следующим образом:
\lstnewenvironment{javacode}[2]
{\singlespacing\lstset{language=java, label=#1, caption=#2}}
{}
Это особый случай, потому что среда листинга должна проанализировать себя заранее, чтобы найти свой конец. Причина в том, что макросы внутри среды списков не должны расширяться - это, конечно, включает конечный тег среды.
Таким образом, в основном это выглядит в каждой строке, если строка содержит \ end {lstlisting}
- но в вашем случае такой строки не существует, поскольку макрос \ end {javacode}
имеет еще не расширен. Таким образом, в листингах продолжается поиск до конца файла.
В листингах определена собственная команда для решения этой проблемы. Из документации:
\lstnewenvironment
{⟨name⟩}[⟨number⟩][⟨opt. default arg.⟩]
{⟨starting code⟩}
{⟨ending code⟩}
Например:
\lstnewenvironment{javacode}[2]
{\lstset{language=java, label=#1, caption=#2}}
{}
РЕДАКТИРОВАТЬ В ответ на ваш отредактированный вопрос: Я попытался скомпилировать следующий минимальный «рабочий» пример. На самом деле, это не так уж и много - процессор latex
просто останавливается прямо посередине и ждет ввода пользователя.
Поскольку в листинговой документации не упоминается особая обработка одиночного пространства
, я думаю, что вы обнаружили ошибку. Лучше всего, вероятно, получить обратную связь от сопровождающего пакета listings.
% 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}