Here's a minimal example of the sort of result I want to produce in LilyPond. (This was produced in Finale.)
Notice that the crescendo-stop, f, and decrescendo-start align with a note in the bottom staff only and the decrescendo-stop and last p align with a note in the top staff only.
Here's the best approximation I can write in LilyPond with its output.
\version "2.20.0"
\language "english"
\new PianoStaff <<
\new Staff {
\clef "treble"
\time 3/4
\relative c'' {c4 \p \< c2 | c4 c2 \p}
}
\new Staff {
\clef "bass"
\relative c' {r4 r4 c4~ \f \> | c2 r4 \!}
}
>>
Notice that each hairpin doesn't terminate at the dynamic marking in the other staff. I'm not surprised by that output, I just don't know how to get the output I want.
The example I'm giving here is just a toy to illustrate the type of problem I'm facing in many much more complex passages.
Is there a standard solution for connecting dynamics between staves in LilyPond?