LaTeX newcommand с дословным или листинговым сообщением: проблема с `#` (ключ хеша) - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь определить макрос с \newcommand, используя verbatim или listings. Кажется, что хеш-ключ в #1 (обозначающий аргумент) экранирован из-за verbatim и listings.

Я новичок в макросах, поэтому я попробовал что-то простое: оно работает с \begin{center} ... \end{center}.

\documentclass[a4paper,oneside,11pt]{report}
\newcommand{\script}[1]{
  \begin{center}
    #1
  \end{center}
}
\begin{document}
  \script{blabla}
  blibli
\end{document}

Когда я заменяю center на verbatim, я получаю эту ошибку:

Файл завершен при сканировании с использованием @ xverbatim.

или lstlisting:

Текст пропущен после начала листинга

Я не нашел ничего ни в stackoverflow, ни в https://tex.stackexchange.com: что бы вы посоветовали использовать в этих средах в макросах (\newcommand или, может быть, \newenvironment)?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Дословное содержание сложно. Вы должны спросить себя, каково намерение. Если это печатный код, то король горы будет listings. Я бы предложил это и определил вашу собственную среду для больших кусков специфичного для кода вывода.

Вот пример:

enter image description here

\documentclass{article}

\usepackage{listings}

\lstnewenvironment{code}[1][]
  {\lstset{#1}}% Add/update settings locally
  {}

\lstset{% Global options
  frame = single,
  basicstyle = \ttfamily\small,
  language = PHP
}

\begin{document}

My first PHP ``Hello World'' page:

\begin{code}
<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?> 
 </body>
</html>
\end{code}

When you write \lstinline!<title>PHP Test</test>!, it sets the \textit{title} of the page.

\end{document}
0 голосов
/ 18 января 2019

Найден обходной путь для verbatim с командой \verb и использованием тильды в качестве разделителя (если я хочу использовать тильду внутри скрипта, я должен использовать \textasciitilde):

\documentclass{article}

\newcommand{\scr}[1]{
    \begin{minipage}{0.9\textwidth} 
        \fbox{
            \parbox{\textwidth}{            
                \verb~#1~               % <-- HERE
            }
        }
    \end{minipage}  
}   

\begin{document}        
    \scr{Some script code here... 

    here a tilde : \textasciitilde
    }
\end{document}

Но ничего для listings ...


РЕДАКТИРОВАТЬ: Я только что заметил, что этот обходной путь не позволяет избежать «автоматического» выхода персонажа, поэтому это не то, что я искал. Я хотел бы иметь возможность вставлять код без экранирования специальных символов.

...