掌握扩展

掌握扩展

我一直在尝试阅读一些有关扩展如何工作的示例和文本,但我似乎无法理解它的实际工作原理。我尝试运行的代码如下:

\documentclass[11pt]{article}
\usepackage{lipsum, ifthen,color}

% I want to use a modified version of this command:
\newcommand{\version}[2]{\marginpar{\expandafter\colorbox{\csname \ifthenelse{\equal{#1}{1}}{green}{red}\endcsname}{\begin{minipage}{\marginparwidth}
        V.#1 #2
    \end{minipage}}}}

% Command made just for this example    
\newcommand{\versionB}[2]{\marginpar{\colorbox{red}{\begin{minipage}{\marginparwidth}
        V.#1 #2
    \end{minipage}}}}

\begin{document}
\section{incomplete sectinon}\versionB{0.9}{Need to add something, therefor this box is red.}
\lipsum[1]
\section{Complete sectinon}\versionB{1}{This section is complete, therefore this box \emph{should} be green.}
\lipsum[2]
\end{document}

在页边空白处打印注释,以显示某一部分是否已完成。如果突出显示,则背景应为绿色,否则为红色。在上面的示例中,我使用命令 \versionB 仅显示示例的注释。将其更改为简单的 \version 以使用该命令,该命令应使其根据给定的第一个参数改变颜色。

此命令目前扩展错误。

答案1

 \newcommand{\version}[2]{\marginpar{%
  \expandafter\colorbox{%
    \csname \ifthenelse{%
       \equal{#1}{1}}{green}{red}\endcsname}{%
         \begin{minipage}{\marginparwidth}

\expandafter代币\colorbox。此处is {so后面的标记\expandafter不执行任何操作,因为{它不可扩展。

\csname和之间的标记\endcsname必须扩张转换为字符标记序列,然后将其用作命令名。\ifthenelse不能通过扩展来工作,它内部有组和\def分配\let,所以根本不能在这里使用。

我认为你想要一个可扩展的测试,根据是否如此来选择红色或#1绿色1

 \newcommand{\version}[2]{\marginpar{%
    \colorbox{\ifnum#1=1 green\else red\fi}{%
         \begin{minipage}{\marginparwidth}

请注意,\colorbox使用相同的\fboxsep填充,除非您在内部小页面太宽的地方\fbox将其设置为 0pt 。\fboxsep2\fboxsep

相关内容