
Estou usando minted
para destacar código em Python. Em alguns casos, quero misturar código com saída que o usuário verá. Isso me dá as caixas vermelhas de erro de sintaxe, por exemplo:
E às vezes não dá nenhum erro, mas gostaria de desligar o destaque (segunda linha):
Então, gostaria de saber se é possível desligar o destaque de algumas linhas mas ao mesmo tempo manter as opções como numeração de linhas e fundo.
MWE:
\documentclass{article}
\usepackage{minted}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\newminted{python3}{bgcolor=bg, linenos=true, tabsize=4}
\begin{document}
I want lines 2 and 4 not to be highlighted but still keep the background and line numbering.
\begin{python3code}
>>> type(3.14)
<class 'float'>
>>> print(name)
NameError: name 'name' is not defined
\end{python3code}
\end{document}
Editar:Para esclarecer: há linhas que quero destacar que começam com >>>
e há linhas que quero destacar que não começam com >>>
. Também há linhas que não quero destacar. Portanto, o padrão deve ser destacar a linha, mas posso adicionar uma exceção a algumas linhas.
Responder1
O resumo e o resumo disso são: escreva um lexer especial. Mas você está com sorte, ele já existe, basta usar pycon
como idioma.
\newminted{pycon}{bgcolor=bg, linenos=true, tabsize=4}
Responder2
Uma solução muito simples para o seu problema é pré-processar o código adicionando um #
antes de cada linha que não comece com a >>>
, o que pelo menos parecerá OK, mesmo que não seja uma cópia perfeita da saída do console python. Isso pode ser feito com vários editores usando a opção regex ou outras ferramentas ( sed
por exemplo) no Unix.
O líder >>>
ainda pode confundir o lexer Python. Nesse caso, você pode excluí-los (você perde mais fidelidade ao original, mas será legível, pois a saída parecerá comentários).
Responder3
Olhando rapidamente a minted
documentação do , parece que o pacote não suporta esse recurso. De qualquer forma, especificar números de linha específicos parece uma maneira muito feia de fazer isso.
Mas ele usa pygmentize
como back-end e as linhas que você desejanãoignore se ajustam a um padrão muito específico, todos eles começam com >>>
e, portanto, deve ser fácil detectá-los e ignorá-los programaticamente.
Olhando paraa documentação do Pygments sobre como escrever seu próprio lexer, parece que você pode especificar que, para alguns padrões (regex), deseja permitir que outro lexer manipule a string. Você poderia então manipular as linhas que não começam com >>>
e passar aquelas que começam (sem >>>
) para o lexer regular do Python.