如何让自定义的 face 只继承部分现有的 face?

我在写一个插件,希望让里面的某个 face 继承只继承另一个 face 的 background,其他的则继承 parent(这种情况下似乎不能用 inherit 了)。

我目前的做法是让新 face 的属性是通过当前 face 的颜色来计算得到。例如

  `((t (:inherit 'mode-line
                 :background ,(face-background 'mode-line-inactive))))

但是切换了 theme 后,这个 face 不会同步更新,还停留在老的样子。此时颜色看上去就不对头。(如果是 inherit 的话,可以实时更新但是必须全部继承)

一般这种情况是怎么解决的?我现在能想到的是给 load-themeadvice,但是太丑了,有没有更优雅的解决方案?

(defface sort-tab-current-tab-face
  '((((background light))
     :background "#d5c9c0" :foreground "#282828" :bold t)
    (t
     :background "#504945" :foreground "#fbf1c7" :bold t))
  "Face for current tab.")

上面是 sort-tab 的代码, 其实 defface 支持同时定义深浅色的颜色, 这样切换主题都可以正常工作。