Один из способов решить проблему заключается в использовании относительного контекста:
`Pr`pB[d]
Я обычно делаю так:
1. перед началом приватного контекста перечисляю все публичные символы (всё равно нужно usage и warnings прописать)
2. определения публичных символов делаю в том же блоке, где приватные, то есть до
End[]
.
Из-за №1 публичные символы не захватываются контекстом, зато внутри приватного контекста можно его явно не писать.
Пример:
BeginPackage["P`"];
b::usage = "My b var";
Begin["`Pr`"];
a = 2;
b := a;
End[];
EndPackage[];
In[9]:= OwnValues[b]
Out[9]= {HoldPattern[b] :> P`Pr`a}