Como usar \verb ou algo semelhante dentro de um \newcommand

Como usar \verb ou algo semelhante dentro de um \newcommand

O comando \displaygraphics[width-1in]{figure=some_fig.pdf}exibirá um gráfico. Às vezes quero compor quando não tenho os arquivos gráficos disponíveis, então quero fazer algo como:

\renewcommand{\includegraphics}[1][]{\verb|#2|}

A intenção é que ele simplesmente exiba o nome do arquivo a ser utilizado, ao invés de tentar exibir o gráfico. Observe que os nomes dos gráficos têm sublinhados, e é por isso que eu gostaria de algo como literalmente. Portanto o comando \renewcommand{\includegraphics}[1][]{#2}não funciona.

É claro que a solução acima também não funciona, pois \verbnão pode ser usada assim dentro de um arquivo \renewcommand. Como eu faço isso?

Responder1

A razão pela qual sua redefinição não funciona é que você está especificando o número errado de argumentos no arquivo \renewcommand. Se entendi sua pergunta corretamente, você deseja apenas espaços reservados para nomes de arquivos para suas imagens. Aqui está um exemplo:

\documentclass{article}
\usepackage[]{graphicx}
\renewcommand\includegraphics[2][]{\begin{center}\texttt{\detokenize{#2}\end{center}}
\begin{document}
\begin{figure}
\includegraphics[width=\linewidth]{Path/to/your/image/file}
\caption{When I finally get the file this will be a cool image}
\end{figure}
\end{document}

saída de código

Alternativamente, você pode usar a [demo]opção graphicxque substituirá qualquer \includegraphicscomando por uma caixa preta conforme abaixo. Nesse caso, é claro, você não imprime os nomes dos arquivos, mas também não precisa redefinir o arquivo \includegraphics.

saída da demonstração

Responder2

Existem vários erros no seu código:

\renewcommand{displaygraphics}[1][]{\verb|#2|}
  1. O primeiro argumento \renewcommanddeve ser um nome de macro (com a barra invertida (corrigida na pergunta).

  2. O comando para redefinir é \includegraphics(corrigido na pergunta)

  3. O número de argumentos deve ser 2, não 1: quando outro par de colchetes segue, o conteúdo é o valor padrão do argumento opcional, que é indicado por #1no texto de substituição; você também quer um argumento obrigatório, o que dá dois.

  4. \verbnão pode ser usado no argumento para outra macro.

Solução:

\renewcommand{\includegraphics}[2][]{\texttt{\detokenize{#2}}}

Isso também permitirá sublinhados.

Responder3

Que tal primeiro verificar \IfFileExistse se já estiver lá, simplesmente \includegraphicsou não, também para sublinhados e caminhos longos, no estilo teletipo, é melhor usar um \url?

eu

\documentclass[twocolumn]{article}
\usepackage{url}
\usepackage{graphicx}
\parskip1em

\newcommand\extimg[1]{
\IfFileExists{#1}
{\includegraphics[width=.5\linewidth]{#1}} 
{\fboxsep1em\fbox{\parbox{\dimexpr.5\linewidth-2em}{\url{#1}}}}}

\begin{document}

Some already made image:

\extimg{/usr/local/texlive/2015/texmf-dist/tex/latex/mwe/example-image-a.jpg}

Some image to do:

\extimg{/home/Richard/my_funny/proyect/more_carpets/and_more/images/todo_tomorrow/my_image.jpg}

\end{document}

informação relacionada