如何在 \newcommand 中使用 \verb 或類似的內容

如何在 \newcommand 中使用 \verb 或類似的內容

該命令\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]的選項,如下所示。當然,在這種情況下,您不會列印出文件名,但也不需要重新定義.graphicx\includegraphics\includegraphics

演示的輸出

答案2

您的程式碼中有很多錯誤:

\renewcommand{displaygraphics}[1][]{\verb|#2|}
  1. 第一個參數必須\renewcommand是巨集名稱(帶有反斜線(在問題中已修復)。

  2. 重新定義的命令是\includegraphics(問題中已修復)

  3. #1參數的數量應該是 2,而不是 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}

相關內容