You may say the second question is duplicated. There are so many discussions about how to control the position of float. But they don't meet my needs. I want to reduce the blank area whilst float element should be surrounded with text. That is said, it can't place on the top or the bottom. I want to place it on the center of body. But I don't care it floats before or after text.
So, just to make sure that I understood your request correctly: you want to place floats in the middle of a page, but not on top, not on the bottom, and not on a separate page?
In that case, you may have bad luck (but perhaps someone proves me wrong). I believe that TeX only supports "top of page", "bottom of page", and "separate page containing only floats". And, of, course "here" where "here" refers to the line of code where you entered the float (which, however, is NOT the center of the page in general).
I would say that the closest answer to your request is to use
which will place the figure at EXACTLY the position where you entered it in your source code. It may also work without the
In addition, you may want to adjust the space between text and figure.
The following variables control the vertical spacing with figures
plus the hidden parameters for float pages:
The vertical space between a graphic and the caption below it is
[END OF QUOTE].
That page also contains more details on how to configure the number of floats on top/bottom of a page or how much text should be present on a separate float page.
You may also want to consider http://people.cs.uu.nl/piet/floats/node1.html for details.
To reduce the vertical spacing above and below a float that's somewhere in the middle of a page, i.e., that has text both above and below it, you could change the value of the
A separate matter: In your in-text floats, do you maybe use