LINUX.ORG.RU

latex проблема с цитированием кода


0

1

Имеется такая собственная команда. Нужно в тексте, передаваемом в myobject включить цитирование кода. verbatim и verb почему-то вызывает ошибку.

\newcommand{\myobject}[2]{
\begin{minipage}[t][120mm]{142mm}
    \begin{center}
          \noindent
           {\it Заголовок } \\[1.5mm]
           ...
   \end{center}
   \begin{enumerate}
       \item{#1}
       \item{#2}
   \end{enumerate}
\end{minipage}
}


почему-то такой вызов приводит к ошибке
Код:
\myobject{1}{\verb|2|}
! LaTeX Error: \verb illegal in command argument.

а такой вызов нет
Код:
\myobject{1}{2}

Как устранить ошибку?

p.s. Использование listing тоже происходит с проблемами.

\myobject{
текст
\begin{lstlisting}
...
\end{lstlisting}
}{
1}

! Argument of \lst@next has an extra }.
<inserted text>
                \par

конструкция lstlisting без проблем работает вне myobject.

! Argument of \lst@next has an extra }.

О, знакомая ошибка. Почитай про хрупкие команды в латехе. Кратно, проблема решается так

\protect\myobject{1}{\verb|2|}

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

устроило бы и такое решение:

\newcommand{\myobject}[3]{
\begin{minipage}[t][120mm]{142mm}
    \begin{center}
          \noindent
           {\it Заголовок } \\[1.5mm]
           ...
   \end{center}
   \begin{enumerate}
       \item{#1}
           \begin{verbatim}
               #2
          \end{verbatim} 
       \item{#3}
   \end{enumerate}
\end{minipage}
}

но и оно не работает.

Runaway argument?
 2 \end {verbatim} \item {3}  \end \ETC.
! Paragraph ended before \@xverbatim was complete.
<to be read again> 
                   \par 
l.68 \myobject{1}{2}{3}
dmitry-d67
() автор топика
Ответ на: комментарий от unanimous

защитить с помощью \protect команду \verb внутри своего макроса не удалось

проблема не решена

p.s. хотелось бы создать свой макрос, делающий minipage и принимающий код как параметр

dmitry-d67
() автор топика
Ответ на: комментарий от dmitry-d67

Я конечно извиняюсь, а чем плохо _окружение_ verbatim \begin{verbatim} \end{verbatim}

Зачем нужно, чтобы код был аргументом? Эдак можно потребовать и equation аргументами делать — получится нечто уже отличное от LaTeX

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

ничего против verbatim, equation, lstlisting, enumerate... не имею, а наоборот хочу ими воспользоваться.

мне нужно сделать макрос, который на minipage форматирует контент по шаблону. Макрос нужен чтобы подобрать параметры один раз, а затем его просто вызывать не задумываясь, вызывать придется много раз в одном документе.

dmitry-d67
() автор топика
Ответ на: комментарий от dmitry-d67

А зачем минипэйдж? Ты код хочешь как рисунки вставлять — с подписями и обтеканием? Уверен, что для этого есть готовые пакеты.

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

более точно назвать «карточки» предопределенного размера, на которых текст, код и математические формулы (они кстати без проблем передаются) размещены в предопределенном месте.

dmitry-d67
() автор топика
Ответ на: комментарий от dmitry-d67

Почему просто не создать тогда стиль страницы?

unanimous ★★★★★
()
Ответ на: комментарий от dmitry-d67

защитить с помощью \protect команду \verb внутри своего макроса не удалось

Надо было защищать \protect вариант с listing

unanimous ★★★★★
()

Я для таких случаев написал скрипт на shell, который оборачивает исходник в вербатим и номера строка вставляет (генерится отдельный файл). Вообще для кода есть listing, но мне он не нравится (и его не ест latex2rtf).

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.