Pick a known sound and complete axiom set, let's call this set A, for propositional calculus. That ensures that any formula that gets joined to the system which is not a tautology will enable the derivation of a variable.
Now, contradictions take as axioms will also enable the derivation of a variable.
Thus, to show that a formula C is contingent without a truth-table, first join C to A. Show that a variable can get derived. Then join $\lnot$C to A. Show that a variable can get derived. And then you can concluded that C is contingent (and you can also concluded that $\lnot$C is contingent).
Example, due to Russell and Whitehead, {ANAppp, ANqApq, ANApqAqp, ANApAqrAqApr, ANANqrANApqApr} is a sound and complete axiom set under the rules of uniform substitution and {AN$\alpha$$\beta$, $\alpha$} $\vdash$ $\beta$. Embedding those axioms and those rules into a language appropriate for William McCune's Prover9 program we have:
-P(A(N(x), y)) | -P(x) | P(y).
P(A(N(A(x, x)), x)).
P(A(N(x), A(y, x))).
P(A(N(A(x, y)), A(y, x))).
P(A(N(A(x, A(y, z))), A(y, A(x, z)))).
P(A(N(A(N(x), y)), A(N(A(z, x)), A(z, y)))).
You can think of 'P' as meaning provable.
Thus, to show that ApNq is contingent, we first join ApNq to that axiom set. And very quickly Prover9 produces this:
% -------- Comments from original proof --------
% Proof 1 at 0.00 (+ 0.05) seconds.
% Length of proof is 8.
% Level of proof is 3.
% Maximum clause weight is 9.
% Given clauses 11.
1 P(x) # label(non_clause) # label(goal). [goal].
2 -P(A(N(x),y)) | -P(x) | P(y). [assumption].
5 P(A(N(A(x,y)),A(y,x))). [assumption].
8 P(A(x,N(y))). [assumption].
9 -P(c1). [deny(1)].
27 P(A(N(x),y)). [hyper(2,a,5,a,b,8,a)].
29 P(x). [hyper(2,a,27,a,b,27,a)].
30 $F. [resolve(29,a,9,a)].
Now we just need to do the same for NApNq. And also very quickly, Prover9 shows that a variable can get deduced:
% -------- Comments from original proof --------
% Proof 1 at 0.01 (+ 0.05) seconds.
% Length of proof is 10.
% Level of proof is 4.
% Maximum clause weight is 9.
% Given clauses 27.
1 P(x) # label(non_clause) # label(goal). [goal].
2 -P(A(N(x),y)) | -P(x) | P(y). [assumption].
4 P(A(N(x),A(y,x))). [assumption].
5 P(A(N(A(x,y)),A(y,x))). [assumption].
8 P(N(A(x,N(y)))). [assumption].
9 -P(c1). [deny(1)].
30 P(A(x,N(A(y,N(z))))). [hyper(2,a,4,a,b,8,a)].
113 P(A(N(A(x,N(y))),z)). [hyper(2,a,5,a,b,30,a)].
117 P(x). [hyper(2,a,113,a,b,113,a)].
118 $F. [resolve(117,a,9,a)].
Thus, we have shown that it would be inconsistent to join either ApNq or NApNq to the above axiom set. Consequently, neither NApNq nor ApNq can neither be a contradiction, nor a tautology. Therefore, ApNq is contingent.