Create Shortcode shows only posts with custom_field meta

You need your shortcode to accept attributes. A shortcode with attributes would look like:

[publication year="2017"]

Then in your add_shortcode callback function you receive attributes in the first parameter of the function:

function wpse_279094_publication_shortcode( $atts ) {
    echo $atts['year'];
}
add_shortcode( 'publication', 'wpse_279094_shortcode' );

You want to be able to account for a user not using any attributes, so you use the shortcode_atts() function to populate $atts with defaults if they aren’t set. In your use case the current year seems like a logical default. So that would look like:

function wpse_279094_publication_shortcode( $atts ) {
    $atts = shortcode_atts( 
        array(
            'year' => date('Y')
        ),
        $atts
    );
}
add_shortcode( 'publication', 'wpse_279094_shortcode' );

So, all together that your code should look like:

function wpse_279094_publication_shortcode(){
    $atts = shortcode_atts( array( 'year' => date('Y') ), $atts );

    $args = array(
        'post_type'      => 'publication',
        'posts_per_page' => -1,
        'meta_key'       => 'release-date',
        'meta_value'     => $atts['year'],
        'orderby'        => 'meta_value',
        'order'          => 'DESC',
        'post_status'    => 'publish'
    );

    $query = new WP_Query( $args );

    ob_start();

    while ( $query->have_posts() ) : $query->the_post();
        echo the_field( 'autor' ). " (" ;
        echo the_field( 'release-date' ). ") ";
        echo the_field( 'buch' ). ". ";
        echo '<b>' . get_the_title() . '</b>'. ", ";
        echo the_field( 'verleger' ). ". " ;
        if ( get_field( 'seiten' ) ) {
            echo "S. ";
            echo the_field( 'seiten' ). ". <p />" ;
        }
        echo '<p>';
        echo '&nbsp;';
    endwhile;

    wp_reset_postdata();

    return ob_get_clean();
}
add_shortcode( 'publication', 'wpse_279094_publication_shortcode' );

Now you can use [publication year="2017"], [publication year="2012"] etc. to get publications from different years, or [publication] to get publications from the current year.

Also note one other change I made to your code. In your code you just echoed your output. Shortcodes need to return their output, otherwise the contents won’t appear in the right place.

One way to do this is to just build up a large string:

$output = get_the_title();
$output .= get_the_content();

return $output;

But I find that cumbersome. Instead, I used ob_start() which will ‘capture’ all the output without echoing it to the screen. Then, I return ob_get_clean() to return the captured output.