Как использовать \verb или что-то подобное внутри \newcommand

Как использовать \verb или что-то подобное внутри \newcommand

Команда \displaygraphics[width-1in]{figure=some_fig.pdf}отобразит графику. Иногда мне нужно выполнить набор, когда у меня нет доступных графических файлов, поэтому я хочу сделать что-то вроде:

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

Цель состоит в том, чтобы просто отобразить имя используемого файла, а не пытаться отобразить графику. Обратите внимание, что имена графики имеют подчеркивания, поэтому я хотел бы что-то вроде дословного. Поэтому команда \renewcommand{\includegraphics}[1][]{#2}не работает.

Конечно, решение выше тоже не работает, так как \verbего нельзя использовать таким образом внутри \renewcommand. Как мне это сделать?

решение1

Причина, по которой ваше переопределение не работает, заключается в том, что вы указываете неправильное количество аргументов в \renewcommand. Если я правильно понял ваш вопрос, вам просто нужны заполнители имен файлов для ваших изображений. Вот пример:

\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}

вывод кода

В качестве альтернативы вы можете использовать [demo]опцию graphicxwhich заменит любую \includegraphicsкоманду черным ящиком, как показано ниже. В этом случае, конечно, вы не получите распечатанных имен файлов, но вам также не нужно переопределять \includegraphics.

вывод демо

решение2

В вашем коде есть ряд ошибок:

\renewcommand{displaygraphics}[1][]{\verb|#2|}
  1. Первый аргумент \renewcommandдолжен быть именем макроса (с обратной косой чертой (исправлено в вопросе).

  2. Команда для переопределения \includegraphics(исправлена ​​в вопросе)

  3. Число аргументов должно быть 2, а не 1: когда следует еще одна пара скобок, содержимое представляет собой значение по умолчанию необязательного аргумента, которое обозначено #1в тексте замены как ; вам также нужен обязательный аргумент, то есть два.

  4. \verbне может использоваться в аргументе другого макроса.

Решение:

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

Это также позволит использовать подчеркивания.

решение3

А как насчет первой проверки \IfFileExists, и если она уже есть, просто \includegraphicsили как-то иначе, для подчеркиваний и длинных путей, а также в стиле телетайпа, лучше использовать \url?

мве

\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}

Связанный контент