我想修改一段代码,即Friedhelm Sowa的picinpar.sty。
有命令
\figwindow[#1,#2,#3,#4]
在段落开头下方位置 #2 处插入一张图片 (#3) #1 行,标题为 #4
在 picinpar.sty 文件中,此命令定义为
\long\def\figwindow[#1,#2,#3,#4] {%
\advance\c@figure -1
\begin{window}[#1,#2,{#3},{\def\@captype{figure}%
\wincaption#4\par}] %
}
我不会在这里进一步探讨窗口环境的含义,这与我的问题无关。我想要实现的是不打印标题的选项。如果我将 figwindow 重写为
\long\def\figwindow[#1,#2,#3,#4] {%
\advance\c@figure -1
\begin{window}[#1,#2,{#3},{}]%
}
我的想法是使用一个条件,如果 #4 是 {},则不打印标题,否则打印标题。我的尝试是:
\long\def\figwindow[#1,#2,#3,#4] {%
\advance\c@figure -1
\begin{window}[#1,#2,{#3},\if #4{} {} \else {\def\@captype{figure}%
\wincaption#4\par}\fi]
}
不幸的是,这不起作用。如果我调用
\figwindow[#1,#2,#3,{}]
或 \figwindow[#1,#2,#3,]
但是,将样式修改为与“*”进行比较而不是与空标记进行比较则可以完美地工作:
\long\def\figwindow[#1,#2,#3,#4] {%
\advance\c@figure -1
\begin{window}[#1,#2,{#3},\if #4* {} \else {\def\@captype{figure}%
\wincaption#4\par}\fi]
}
\figwindow[#1,#2,#3,*]
虽然我有一个可行的解决方案,但我更愿意让 {} 起作用(对我来说它看起来更直观令人惊讶的是
\newcommand{\Compare}[2]{#1 \if #2{} EMPTY \else --- #2 ---\fi\par}
\Compare{EMPTY}{}
\Compare{FILLED}{HOW?}
正如我预期的那样,它的输出是
空 - 空 -
已填充 - 如何填充? -
有什么建议吗?现在就提前谢谢您
答案1
\if #2{}\else ...#2...\fi
扩展#2
并比较前两个不可扩展的标记,因此
如果#2
为aabbcc
真,则采用分支并扩展为bbcc{}
如果#2
是,则a
比较并采用错误分支,跳过a
{
}
如果#2
为空,则{
与}
false进行比较
你可以#2
使用以下命令测试是否为空
\if\relax\detokenize{#2}\relax\else ...#2...\fi
因为\detokenize
永远不会返回一个用 测试为真的命令标记\relax
(所有不可扩展的命令标记用 测试相等\if
),但如果#2
为空,则为\if\relax\relax
真。