Only needs to be a latching piston if you want the ‘but if’ part to turn off the light when trigger switch is turned off.
The random colour example above uses a basic piston.
From the CoRE wiki:
This is the most complex piston in CoRE. It acts as a bi-stable (or flip-flop), flipping it’s state based on two independent conditional sets.
IF (conditions1) THEN (actions1) BUT IF (conditions2) THEN (actions2)
The state of the latching piston is a bit more complex. It only changes under certain circumstances. It will change to FALSE when and only if it is TRUE and (conditions2) is true. It will change to TRUE when and only if it is :FALSE and (conditions1) is true. If both (conditions1) and (conditions2) are true, the state flips. If neither of (conditions1) nor (conditions2) is true, the state remains unchanged.
The (actions1) are executed if (conditions1) is true, (actions2) are executed if (conditions2) is true