使用 \pgfsetfillopacity 时,由于文本中的 \par 原因导致编译失败

使用 \pgfsetfillopacity 时,由于文本中的 \par 原因导致编译失败

我构造了一个宏,用 fromopacity为文本赋予一个功能。它工作正常,但当第二个参数包含时,会导致 .tex 文件编译失败。为什么以及如何修复它?\pgfsetfillopacitytikz\par

\documentclass{article}
\usepackage{geometry,tikz,xparse}
\geometry{showframe}

\NewDocumentCommand{\opacity}{g g}{%
    \IfNoValueTF{#2}
      {\IfNoValueTF{#1}
        {\pgfsetfillopacity{1}}
        {\pgfsetfillopacity{#1}}
      }%
      {\pgfsetfillopacity{#1}#2\pgfsetfillopacity{1}}%
}

\begin{document}
\opacity{0.5}{some text\par some text some text some text some text some text some text some text some text some text \\some text}

\end{document}

答案1

Phelype 建议使用 来{g +g}解决这个问题,但这种方法实在是太简单了。由于我经常为了好玩而重新发明轮子,所以这里有一种方法可以搜索参数\par并应用于\opacity输入的每个段落长度部分。我称之为\oparcity,以完善 PhARce。

\documentclass{article}
\usepackage{geometry,tikz,xparse}
\geometry{showframe}

\NewDocumentCommand{\opacity}{g g}{%
    \IfNoValueTF{#2}
      {\IfNoValueTF{#1}
        {\pgfsetfillopacity{1}}
        {\pgfsetfillopacity{#1}}
      }%
      {\pgfsetfillopacity{#1}#2\pgfsetfillopacity{1}}%
}

\long\def\oparcity#1#2{\iftrue\def\opvalue{#1}\oppar#2\par\fi}
\long\def\oppar#1\par#2\fi{\fi
  \opacity{\opvalue}{#1}\ifx\relax#2\relax\else\par\oppar#2\fi}

\begin{document}
\oparcity{0.5}{some text\par some text some text some text 
some text some text some text some\\ 
text some text some text \\some text}
\end{document}

在此处输入图片描述

相关内容