Usando cunhado com código e saída Python mistos

Usando cunhado com código e saída Python mistos

Estou usando mintedpara 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:

insira a descrição da imagem aqui

E às vezes não dá nenhum erro, mas gostaria de desligar o destaque (segunda linha):

insira a descrição da imagem aqui

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 pyconcomo 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 ( sedpor 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 minteddocumentaçã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 pygmentizecomo 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.

informação relacionada