Como destacar o código XML em latex no verso

Oct 12 2020

Segui algumas respostas mencionadas aqui para destacar o conteúdo XML em meu látex e tentei combinar as melhores coisas de diferentes respostas, mas por algum motivo nada está sendo destacado em meu XML? Alguém pode me ajudar a fazer com que o conteúdo XML em meu látex pareça atraente? Tentei a seguinte resposta:https://tex.stackexchange.com/a/11134/226278

Meu XML é muito grande e se estende por 2-3 páginas, mas agora está sendo exibido em um quadro com o número da linha, então parece bom, mas nenhuma das tags ou strings está sendo destacada, exceto por algumas strings no cabeçalho XML. Gostaria de destacar as tags e strings neles para que fiquem mais bonitos.

\usepackage{listings}
\usepackage{color}
\definecolor{gray}{rgb}{0.4,0.4,0.4}
\definecolor{darkblue}{rgb}{0.0,0.0,0.6}
\definecolor{cyan}{rgb}{0.0,0.6,0.6}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\geometry{a4paper}

 \lstset{
        language=xml,
        tabsize=3,
        %frame=lines,
        caption=Bulk test data events for rail sector
        label=code:rail1,
        frame=shadowbox,
        xleftmargin=20pt,
        framexleftmargin=15pt,
        numbers=left,
        numberstyle=\tiny,
        numbersep=5pt,
        breaklines=true,
        showstringspaces=false,
        basicstyle=\footnotesize,
        basicstyle=\ttfamily,
        columns=fullflexible,
        showstringspaces=false,
        basicstyle=\ttfamily\footnotesize,
        morestring=[b]",
        moredelim=[s][\bfseries\color{Maroon}]{<}{\ },
        moredelim=[s][\bfseries\color{Maroon}]{</}{>},
        moredelim=[l][\bfseries\color{Maroon}]{/>},
        moredelim=[l][\bfseries\color{Maroon}]{>},
        morecomment=[s]{<?}{?>},
        morecomment=[s]{<!--}{-->},
        commentstyle=\color{DarkOliveGreen},
        stringstyle=\color{blue},
        identifierstyle=\color{red},
    }
    \lstinputlisting{pics/RailSector.xml}

Por exemplo, este é meu arquivo XML de amostra que desejo destacar e apresentar na pasta de fotos:

<?xml version="1.0"?>
<hello:mydocument>
  <manufacturing>court</manufacturing>
  <bend>grabbed</bend>
  <quick>613049078</quick>
  <am>
    <brief>-2019050644</brief>
    <judge>955087623.417459</judge>
    <birds>green</birds>
    <join>among</join>
    <slight>
      <box>loose</box>
      <butter>table</butter>
      <afternoon>good</afternoon>
      <suddenly>rear</suddenly>
      <kitchen>copper</kitchen>
      <locate>802538930</locate>
    </slight>
    <wagon>1157100273.040341</wagon>
  </am>
  <this>1903268890</this>
  <rule>-1380139207</rule>
</hello:mydocument>

Respostas

3 EladDen Oct 12 2020 at 04:11

Depois de corrigir duas coisas em seu MWE (adicionar \documentclass{article}, \begin{document}e \end{document}), parecia que nada estava sendo destacado além da primeira linha de seu texto.

Isso ocorre porque tudo foi definido em uma cor (Marrom) enquanto os comentários (definidos por <? ?>) eram diferentes.

mudar a cor marrom não deixava tudo em destaque. Para isso, você precisa dizer às listagens para olharem no texto, adicionando *o lstset.

MWE:

\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}

 \lstset{
        language=xml,
        tabsize=3,
        %frame=lines,
        caption=Bulk test data events for rail sector
        label=code:rail1,
        frame=shadowbox,
        xleftmargin=20pt,
        framexleftmargin=15pt,
        numbers=left,
        numberstyle=\tiny,
        numbersep=5pt,
        breaklines=true,
        showstringspaces=false,
        basicstyle=\footnotesize,
        basicstyle=\ttfamily,
        columns=fullflexible,
        showstringspaces=false,
        basicstyle=\ttfamily\footnotesize,
        morestring=[b]",
        moredelim=*[s][\bfseries\color{Maroon}]{<}{\ },
        moredelim=*[s][\bfseries\color{blue}]{</}{>},
        moredelim=*[l][\bfseries\color{red}]{/>},
        moredelim=*[l][\bfseries\color{Maroon}]{>},
        morecomment=[s]{<?}{?>},
        morecomment=[s]{<!--}{-->},
        commentstyle=\color{DarkOliveGreen},
        stringstyle=\color{blue},
        identifierstyle=\color{red},
    }
    
\begin{document}
    \lstinputlisting{RailSector.xml}
\end{document}

Quanto à pergunta nos comentários. \lstseté a definição das configurações. Você diz ao pacote qual idioma está usando e quais são os destaques das palavras-chave.

Você pode então digitar o código usando o lstlistingambiente ou inseri-lo do arquivo (como fez) usando\lstinputlisting

Usar lstlistingé considerado uma prática recomendada AO FAZER UMA PERGUNTA AQUI porque nos permite ver o código inteiro sem pular entre os arquivos. Aqui está um exemplo de MWE com o código emlstlisting

\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}

 \lstset{
        language=xml,
        tabsize=3,
        morestring=[b]",
        moredelim=*[s][\bfseries\color{Maroon}]{<}{\ },
        moredelim=*[s][\bfseries\color{blue}]{</}{>},
        moredelim=*[l][\bfseries\color{red}]{/>},
        moredelim=*[l][\bfseries\color{Maroon}]{>},
        morecomment=[s]{<?}{?>},
        morecomment=[s]{<!--}{-->},
        commentstyle=\color{DarkOliveGreen},
        stringstyle=\color{blue},
        identifierstyle=\color{red},
    }
    
\begin{document}
    \begin{lstlisting}
<?xml version="1.0"?>
<hello:mydocument>
  <manufacturing>court</manufacturing>
  <bend>grabbed</bend>
  <quick>613049078</quick>
  <this>1903268890</this>
  <rule>-1380139207</rule>
</hello:mydocument>
    \end{lstlisting}
\end{document}