在 includegraphics 中使用 \Makelowercase

在 includegraphics 中使用 \Makelowercase

我觉得这应该非常简单,但即使使用多个其他 SE 解决方案,我仍无法弄清楚。

我想传递一个类似于Evans1963我定义的命令的参数:

\newcommand{\placefigure}[1]{
    \begin{wrapfigure}{O}{0.47\textwidth}
        \centering
        \includegraphics[width=0.45\textwidth]{\MakeLowercase{#1}_results}
        \caption{\citeauthor{#1} study results}
        \label{fig:#1_results}
    \end{wrapfigure}
}

\MakeLowercase我需要在调用中使用\includegraphics,因为即使我的引用键采用了该Evans1963格式(我稍后用 调用cite),但我的数字仍保存在该evans1963格式中。

然后我就可以打电话:

\placefigure{Evans1963}

这样我的图像就会被包含在内并且引用也会正确起作用。

但是,我收到了错误:

Missing input file '\MakeLowercase {Evans1963}_results'

答案1

非常抱歉,我无法非常优雅地解决您的问题,我认为下面的代码应该可以让您的项目正常工作:

\ExplSyntaxOn
\cs_set_eq:NN \Lowercase \str_lowercase:n
\ExplSyntaxOff
\newcommand{\placefigure}[1]{
    \begin{wrapfigure}{O}{0.47\textwidth}
        \centering
        \includegraphics[width=0.45\textwidth]{\Lowercase{#1}_results}
        \caption{\citeauthor{#1} study results}
        \label{fig:#1_results}
    \end{wrapfigure}
}

我猜你的问题就在这里

\includegraphics{\MakeLowercase{#1}_results}

一开始我以为是宏展开顺序的问题:于是,我尝试了如下方法

\expandafter\includegraphics\expandafter{\MakeLowercase{#1}_results}

它仍然不起作用,宏\MakeLowercase没有扩展?

我尝试:

\def\a{evans1963_results}
\includegraphics{\a}

这是正常的!抱歉我没有找到更可行的方法,或者我没有弄清楚原因,希望有人能解释一下!

答案2

LaTeX宏\Makelowercase使用\lowercaseTeX 原语,此命令不能用作表示文件名的参数。此参数仅被扩展,但\lowercase无法在此处处理类似命令。

但你的问题的解决方案很简单。你可以\lowercase先执行,然后\incudegraphics调用。相反:

\includegraphics[width=0.45\textwidth]{\lowercase{#1}_results}

使用

\lowercase{\includegraphics[width=0.45\textwidth]{#1_results}}

我们利用单词widthresults已经是小写的优势,它们不需要改变。

答案3

如果\includegraphics' 可选参数包含不应小写的内容和/或文件名的某些部分不应小写,则可以使用宏来组成对\includegraphics多个参数的调用,其中第一个参数包含应小写的内容:

\documentclass{article}
\begin{filecontents*}{\jobname.bib}
@book{Evans1963,
    author    = "Ex and Amp and Le",
    title     = "Example book",
    year      = "1234",
    publisher = "Example's publisher",
    address   = "Address of Example's publisher"
}
\end{filecontents*}

\usepackage{graphicx, wrapfig}
\usepackage[round,sort,authoryear]{natbib}

\newcommand\PassFirstAndSecondToThird[3]{#3{#1#2}}
\newcommand{\placefigure}[1]{%
    \begin{wrapfigure}{O}{0.47\textwidth}%
        \centering
        \lowercase{\PassFirstAndSecondToThird{#1}}{_results}{%
          \includegraphics[width=0.45\textwidth]%
        }%
        \caption{\citeauthor{#1} study results}%
        \label{fig:#1_results}%
    \end{wrapfigure}%
}

\begin{document}

\placefigure{Evans1963}

Text.

\newpage

\bibliographystyle{authordate1}
\bibliography{\jobname}

\end{document}

在此处输入图片描述

在此处输入图片描述

如果你坚持使用,\MakeLowercase你需要应用一些粗略的括号破解,以便从由以下方式产生的额外括号中得到东西\MakeLowercase——但不建议这么做因为\MakeLowercase可能会插入生成字体字形而不是字符的命令,除此之外,在具有 utf8 编码的 .tex 输入文件的 8 位引擎上,您可能对 ASCII 范围之外的 utf8 字符的处理不满意——您最好使用expl3's \str_lowercase:n

\documentclass{article}
\begin{filecontents*}{\jobname.bib}
@book{Evans1963,
    author    = "Ex and Amp and Le",
    title     = "Example book",
    year      = "1234",
    publisher = "Example's publisher",
    address   = "Address of Example's publisher"
}
\end{filecontents*}

\usepackage{graphicx, wrapfig}
\usepackage[round,sort,authoryear]{natbib}

\makeatletter
\newcommand\PassFirstAndSecondToThird[3]{#3{#1#2}}
\newcommand{\placefigure}[1]{%
    \begin{wrapfigure}{O}{0.47\textwidth}%
        \centering
        \MakeLowercase{%
          \unexpanded{%
            \expandafter\@gobble\string{}%
            \expandafter\expandafter\expandafter\@firstofone
            \expandafter\expandafter\expandafter{%
            \expandafter\@gobble\string}%
            \PassFirstAndSecondToThird
          }%
          {#1}%
        }{_results}{%
          \includegraphics[width=0.45\textwidth]%
        }%
        \caption{\citeauthor{#1} study results}%
        \label{fig:#1_results}%
    \end{wrapfigure}%
}%
\makeatother

\begin{document}

\placefigure{Evans1963}

Text.

\newpage

\bibliographystyle{authordate1}
\bibliography{\jobname}

\end{document}

在此处输入图片描述

在此处输入图片描述

相关内容