\newcommand 内で \verb または類似のものを使用する方法

\newcommand 内で \verb または類似のものを使用する方法

このコマンドは\displaygraphics[width-1in]{figure=some_fig.pdf}グラフィックを表示します。グラフィック ファイルが利用できないときにタイプセットしたいことがあるので、次のようにします。

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

目的は、グラフィックを表示するのではなく、使用するファイルの名前を表示することです。グラフィック名にはアンダースコアが含まれていることに注意してください。これが、verbatim のようなものが必要な理由です。そのため、コマンドは \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]のオプションを使用して、以下のようにgraphicx任意のコマンドをブラック ボックスに置き換えることもできます\includegraphics。この場合、もちろんファイル名は出力されませんが、 を再定義する必要もありません\includegraphics

デモの出力

答え2

コードにはいくつかのエラーがあります:

\renewcommand{displaygraphics}[1][]{\verb|#2|}
  1. 最初の引数は\renewcommandマクロ名(バックスラッシュ付き(質問では修正済み))である必要があります。

  2. 再定義するコマンドは\includegraphics(質問で修正済み)

  3. 引数の数は 1 ではなく 2 である必要があります。別の括弧のペアが続く場合、その内容はオプションの引数のデフォルト値であり、#1置換テキストでは で示されます。必須の引数も必要なので、引数は 2 つになります。

  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}

関連情報