全局变量到宏

全局变量到宏

我有一个eskdi.sty样式文件,其中定义了两个命令:

\newcommand{\gostorganizatia}[2]{%
  \ifnum #1 = 1% 1 - text; 2 - logo
    \gdef\gostorganizatiaopt{text}%%
    \def\gostorganizatiatext#2{\gdef\@gostorganizatiatext{#2}\relax}%
  \else%
    \gdef\gostorganizatiaopt{logo}%
    \def\gostorganizatialogo#2{\gdef\@gostorganizatialogo{#2}\relax}%
  \fi%
}

在另一个ESKD_frames.sty样式文件中:

\ifx \gostorganizatiaopt text%
  \spformedboxmm{135}{20}{185}{4.0}{s}{\@gostorganizatiatext}%
\else%
  \spformedboxmm{150}{16}{170}{4.0}{s}{\includegraphics*[keepaspectratio=true, height=10mm]{\@gostorganizatialogo}}%
\fi%

宏使用参数在 x1-x2 和 y1,y2 之间spformedboxmm绘制参数。#6s

使用方式title.tex

\gostorganizatia{1}{some text}% for drawing text

或绘制浮动图形

\gostorganizatia{2}{./path_to_logo.jpg}

定义全局变量以便在不同的文件中使用它的最佳方法是什么*.sty

更新:

其中main.log存在一些错误:

!未定义的控制序列。...age LaTeX 错误:\@gostorganizatialogo ' not found.** and **! LaTeX Error: File未找到文件“。

在我看来,这\gostorganizatiaopt不起作用。

答案1

思考

\ifx \gostorganizatiaopt text%

测试是否\gostorganizatiaopt与 进行比较text。但是,它实际上是与 进行比较t,并且对于你的情况来说永远不会成立。如果你想进行文本比较,请使用 e-TeX,如果=\pdfstrcmp{<strA>}{<strB>}则返回 0 :<strA><strB>

\ifnum\pdfstrcmp{\gostorganizatiaopt}{text}=0
  % TRUE <text>
\else
  % FALSE <logo>
\fi

答案2

A柜台对我来说是最好的方法。

eskdi.sty文件中声明宏

\newcounter{gostorgcounter}% 0=text; 1=logo
\newcommand{\gostorganizatia}[2]{%
  %
  \setcounter{gostorgcounter}{#1}%
  %
  \ifnum\thegostorgcounter=0% 0 - text; 1 - logo
    \newcommand{\gostorganizatiatext}[1]{#2}
  \fi%
  %
  \ifnum\thegostorgcounter=1%
    \newcommand{\gostorganizatialogo}[1]{#2}
  \fi%
}%

在绘图文件中,结构如下:

\ifnum\thegostorgcounter=0% text mode
  \spboxmm{125}{10}{170}{4.0}{lc}{\parbox{70mm}{\centering \gostorganizatiatext{}}}
\fi%
%
\ifnum\thegostorgcounter=1% logo mode
  \spformedboxmm{150}{10}{170}{4.0}{c}{\includegraphics[keepaspectratio=true]{\gostorganizatialogo{}}}%
\fi%

用于\gostorganizatia{0}{some text}文本模式或\gostorganizatia{1}{./path_to_logo.jpg}图像。

相关内容