强制长度的字符串化

强制长度的字符串化

我试图根据两个变量\IApaperheight和包含正确大小的背景图像\IApaperwidth

为此,我将长度转换为四舍五入的文本值,并将它们与另一个变量中的前缀连接起来。

我可以正确地呈现完整路径,但是当我尝试将它传递给\includegraphics它时,它会抱怨,因为(据我所知)路径不是一个字符串,而是一堆宏。

有什么方法可以“字符串化”路径名,以便我可以将其用作文字?

我使用它将长度转换为四舍五入的整数:

% \IArndmm{\length} returns the length in mm rounded to an integer
\makeatletter%
\def\l@nunitperpt{0.351459}\def\l@nunits{mm}%
\def\@round#1.#2\@empty{#1}%
\newcommand{\IArndmm}[1]{%
    \setlength{\@tempdimc}{\l@nunitperpt #1}%
      \addtolength{\@tempdimc}{0.5pt}%
    \edef\@@round{\strip@pt\@tempdimc}%
    \expandafter\@round\@@round.\@empty%
}%
\makeatother%
%

然后包含图像:

\newcommand{\IABGImageName}[3]{#1/#2x#3.jpg}%
%
\includegraphics[
    width=\IApaperwidth,height=\IApaperheight,keepaspectratio]{%
        \IABGImageName{\IABGImage}%
                  {\IArndmm{\IApaperwidth}}%
                  {\IArndmm{\IApaperheight}}%
}}%

答案1

如果您使用此类宏,那么它们必须完全可扩展,即,它们本身只能扩展为字符串。但是,作业是不可扩展的。e-TeX 在此提供帮助,\dimexpr它可用于构建可以包含加法的维度表达式。此原语读取以下文本,直到出现无效维度(如算术符号等)。您也可以使用终止它,然后会自动删除它。如果在前面\relax放置一个,您将像往常一样获得维度字符串。您也可以在内部使用参数,这样它就不必是长度寄存器。请注意,还有整数表达式。有关详细信息,请参阅手册。\the\dimexpr\dimexpr\numexpretex

\documentclass{article}
\usepackage{graphicx}

% \IArndmm{\length} returns the length in mm rounded to an integer
\makeatletter%
\def\l@nunitperpt{0.351459}\def\l@nunits{mm}%
\def\@round#1.#2\@empty{#1}%
\newcommand{\IArndmm}[1]{%
    \expandafter\@round
    \the\dimexpr\l@nunitperpt\dimexpr#1\relax + 0.5pt\relax\@empty
}%
\makeatother%


\begin{document}

\newcommand{\IABGImageName}[3]{#1/#2x#3.jpg}%

% Dummy values
\newcommand{\IABGImage}{someimage}
\let\IApaperheight\paperheight
\let\IApaperwidth\paperwidth

\includegraphics[
    width=\IApaperwidth,height=\IApaperheight,keepaspectratio]{%
        \IABGImageName{\IABGImage}%
                  {\IArndmm{\IApaperwidth}}%
                  {\IArndmm{\IApaperheight}}%
}%

\end{document}

另一种方法是先处理输入,然后将其写入可扩展的宏,如下所示:

\ProcessIAImageName{...}% saves name in \IAimage
\includegraphics[
    width=\IApaperwidth,height=\IApaperheight,keepaspectratio]{%
    \IAimage
}%

相关内容