If this question is beating a dead horse about `Hold`

, `Inactivate`

etc., a close vote is fair enough. That being said, I’m curious about ways to achieve this.

I have an expression, the result of an integral,

```
(-3 ArcTan((1 - a)/Sqrt(1 - a^2))^2 - ArcSin(a) (2 ArcTan((1 - a)/Sqrt(1 - a^2)) +
ArcTan(a/Sqrt(1 - a^2))) /. a -> 1/2) - (-3 ArcTan((1 - a)/Sqrt(1 - a^2))^2 -
ArcSin(a) (2 ArcTan((1 - a)/Sqrt(1 - a^2)) + ArcTan(a/Sqrt(1 - a^2))) /. a -> 0)
```

I want to evaluate the two `ReplaceAll`

‘s, and all `ArcTan`

‘s and `ArcSin`

‘s, but not any nodes higher than them in the expression tree. I obtained the full expression with

```
Inactive((# /. a -> 1/2) - (# /. a -> 0)) &@
Integrate((# /. b -> 1 - a) - (# /. b -> a) &@ Integrate(1/(1 + b^2 - a^2), b), a)
```

Bumbling around a bit, here’s what I got:

```
Activate(Inactivate((# /. a -> 1/2) - (# /. a -> 0)), ReplaceAll) /.
{
Inactive(ArcTan)(x_) :> Activate(ArcTan@x),
Inactive(ArcSin)(x_) :> Activate(ArcSin@x)
}&@
Integrate((# /. b -> 1 - a) - (# /. b -> a) &@ Integrate(1/(1 + b^2 - a^2), b), a)
```

I suppose this (activating `ReplaceAll`

‘s, then replacing selected inactive expressions with their activated versions) is a pretty straightforward way of achieving this — is it a rightheaded approach? Are there more concise approaches, perhaps with `Hold`

?