Please help.
Let me tell you why it so.
There two (before Segwitt) main address formats: P2PKH (pay to public key hash) and P2SH (pay to script hash).
Signature is one way encryption of some information using private key in priv key - pub key key pair in Public-key cryptography (asymmetric encryption). You need public key to verify it (in RSA for example without pub key you can't verify signature). In ECSDA (which bitcoin uses) you don't need public key as an entity. It's enough to know what curve were used (secp256k1 for Bitcoin), raw message and signature to derive pub key from them.
P2PKH is when address derived from public key and in general from one private key you can derive one address (I know, that there some exceptions).
So, it's easy to create one standard of signature verification in Bitcoin :
1. get raw message, signature and address
2. Derive from message + signature two (some times four) public keys.
3. use address to verify what of that two keys is needed (address is hash, so if we hash two different public keys we will get two different addresses and we must know which we needed)
That's all.
In P2SH it more complicated. There no such connections address - private key and programm don't know is signature is valid or not. P2SH sometimes called as "multisignature addresses" so, with one address there can be assosiated more than one private key. So, you can not know what pub key is needed to use to verify such signature.
To verify such kind of messages you need to attach or pub key itself or pub key hash (like in P2PKH). Because P2SH address is just a hash of bitcoin script