如何在 \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. 参数的数量应该是 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}

相关内容