Mengapa \vspace, setelah bagian judul, kadang-kadang melompat/snap di diskrit langkah?

Nah, ini adalah salah satu pertanyaan yang saya've telah untuk waktu yang lama, dan salah satu yang selalu membuat saya sangat jengkel. Namun, kali ini saya'm bahkan agak senang bahwa saya dapat ask pertanyaan at all; dan itu adalah berkat kekuatan dari animasi .gif :)

Ini adalah hal - kadang-kadang ada beberapa desain I'd ingin meniru dalam Lateks; biasanya anda membaca manual, anda mengubah panjang, hal-hal terjadi. Namun, kadang - kadang- dan terutama setelah judul bagian - I'd ingin mengatakan, mengangkat atau mendorong ke awal paragraf setelah bagian sedikit; namun, tanpa mendefinisikan bagian utama setelah melewati.

Dan jadi saya biasanya menyisipkan \vspace{\panjang} setelah judul bagian, dan mulai tuning \panjang; text mulai bergerak, dan kemudian, jika aku bergerak untuk mengatakan 1 pt, itu hampir melompat ke arah itu; aku akan menurunkan 0,5 pt - teks seolah-olah tidak bergerak sama sekali ?! (and kemudian saya mulai mencoba \vspace*, atau \ \\[\length], atau apapun works). Dan aku selalu ingin bertanya tentang ini - tapi aku tak pernah bisa memikirkan sesuatu yang lebih baik dari "Why tidak Lateks melompat vertikal space", dan bisa dibilang tidak ada-satu akan memahami apa yang terjadi pada :). Nah, akhirnya, ini adalah apa yang saya maksud dengan "melompat" atau "gertakan" dalam "langkah-langkah diskrit" (atest_animate_10_p.gif, 900KB):

MWE untuk gambar yang di bawah ini (yang disusun dengan pdflatex) - namun, itu adalah bash script yang menghasilkan 100 Pdf, dan kemudian ekstrak gambar dari mereka, dan akhirnya menyusun gambar menjadi sebuah animasi gif. Pada dasarnya, untuk masing-masing "frame" (PDF), naskah perubahan parameter yang berakhir sebagai yang panjang, \mylen, yang digunakan hanya pada satu tempat: \ \\[\mylen]. \mylen meningkat dengan langkah yang konstan (kurang dari pt) untuk setiap frame, dan ditulis sebagai kata pertama dalam paragraf.

Perhatikan bahwa bukan sebuah transisi yang mulus, ayat "bentak" ke tempatnya dan doesn't bergerak untuk nilai-nilai tertentu - dan kemudian ketika mulai bergerak lagi, "melompat" lebih banyak dari biasanya. Dan ini adalah benar-benar pada beberapa ukuran langkah (Note bahwa anda mungkin memiliki beberapa cegukan pada browser anda sementara gif beban; setelah itu dimuat, namun, melompat harus terlihat ketika ayat doesn't dan jumlah indikasi perubahan tetap... meskipun, beberapa frame dari gif masih dapat berakhir menjadi dropped)

Nah, setiap kali saya datang ke masalah ini, saya merasa frustrasi kesulitan untuk menjelaskannya secara verbal. Dan kemudian saya berpikir, baik-baik saja - biarkan aku memasak yang MWE, akan lebih mudah bagi orang lain. Kemudian aku menulis sesuatu yang minimal, toss \lipsum[1] di sana - dan saya tidak bisa menunjukkan masalah lagi !! Sialan, itu selalu membuat saya! Itu sebabnya, yang pertama .gif (dan MWE) diatur ke\lipsum[1-10]- untuk menunjukkan masalah; namun, ini adalah apa yang terjadi jika, katakanlah,\lipsum[1-2]` digunakan sebagai pengganti (atest_animate_02_p.gif, 899KB):

Itu - semuanya berjalan lancar, seperti yang diharapkan (also dibangun dengan pdflatex). Saya menemukan lebih-kurang dengan tidak sengaja, bahwa anda tidak menunjukkan hal ini "jumpiness" kecuali jika anda cukup menggunakan teks dalam paragraf, sehingga mengalir ke halaman berikutnya!

 

Akhirnya, saya berpikir, untuk menikmati, untuk menghasilkan sebuah animasi gif, tapi dengan lualatex dan lua-visual-debug - dan ini tentu menjelaskan sesuatu yang lebih (atest_animate_10_l.gif, 1599KB):

Yaitu, di sini terlihat bahwa ketika ayat "lock" ke posisi vertikal - salah satu garis biru mulai terjadi "", dan kemudian "melompat turun"; apa artinya, bagaimanapun, adalah di luar saya :)

Jadi, jika ada yang bisa menjelaskan apa yang terjadi di sini - dan apakah ada kemungkinan untuk "halus" vertikal posisi terbang paragraf, silahkan posting kembali...

Banyak terima kasih di muka untuk setiap jawaban, Cheers!

Berikut ini adalah MWE kode script (atextest.sh):

#!/bin/bash

# to force exit loop:
trap 'echo Control-C trap caught; cleanup; exit 1' 2 #traps Ctrl-C (signal 2)

MYFN="atest"
MYFNIMG="${MYFN}_img"
MYFNTEX=${MYFN}.tex
MYFNIN="${MYFN}-input"
MYFNINTEX=${MYFNIN}.tex

function cleanup() {
  echo rm ${MYFNTEX} ${MYFNINTEX} -rf ${MYFN} -rf ${MYFNIMG}
  rm ${MYFNTEX} ${MYFNINTEX}
  rm -rf ${MYFN}
  rm -rf ${MYFNIMG}
}

mkdir ${MYFN}
mkdir ${MYFNIMG}

cat > ${MYFNTEX} <<EOF
\documentclass[10pt,a4paper]{article}
\providecommand{\myparam}{0.0pt}% fallback definition
\tracingonline=0 % suppress stdout (still dumps start)

% tex.se: 47576
\usepackage{ifxetex,ifluatex}
\newif\ifxetexorluatex
\ifxetex
  \xetexorluatextrue
\else
  \ifluatex
    \xetexorluatextrue
  \else
    \xetexorluatexfalse
  \fi
\fi

\ifluatex
  \usepackage{lua-visual-debug} % tlmgr install lua-visual-debug
\fi
\ifxetexorluatex
  \usepackage{fontspec}
  \defaultfontfeatures{Ligatures=TeX}
  \setmainfont[Scale=1.0]{Junicode}
  \newfontfamily\myfontfam[Scale=1.0]{Junicode}
\fi

\usepackage[a4paper]{geometry}
\geometry{twoside,inner=2.5cm,outer=3.5cm,top=2.5cm,bottom=2.5cm}

\makeatletter
\renewcommand{\section}{\@startsection
{section}%                   % the name
{1}%                         % the level
{\z@}%                       % the indent / 0mm
{-\baselineskip}%            % the before skip / -3.5ex \@plus -1ex \@minus -.2ex
{2pt}%          % the after skip / 2.3ex \@plus .2ex
{\centering\fontsize{11}{12}\selectfont\bfseries}} % the style
\makeatother

\usepackage{lipsum}

\newlength{\mylen}
\setlength{\mylen}{0pt}
\setlength{\mylen}{\myparam}

\begin{document}

\ifxetexorluatex
  \myfontfam
\fi
  \fontsize{10}{12.3}\selectfont

\title{Testing Title}
\date{October 31, 1000}
\author{John Doe\\\\ Somewhereland}

\maketitle

\clearpage

\input{${MYFNINTEX}}
\clearpage

\end{document}
EOF

cat > ${MYFNINTEX} <<EOF

\section*{Introductory words of introduction}

\vspace{\baselineskip}
\vspace{2pt}
\begin{center}
\textbf{Something else here, some other words}
\end{center}

%\vspace{\mylen}
\ \\\\[\mylen]

\makebox[2cm][r]{\the\mylen}, \lipsum[1-10] %[1-2]

\bigskip

\bigskip

EOF

MYPARAM="2.0pt"
JOBNAME="atest1"

#~ CROPPARAMS=320x240+100+400
CROPPARAMS=400x400+150+100

CMDNAME="pdflatex"
#~ CMDNAME="xelatex"
#~ CMDNAME="lualatex"

for ix in $(seq 0 1 100); do
  iy=$(wcalc -EE -q \($ix-50\)/50*30);
  INDEX=$(printf "%03d" $ix) ;
  JOBNAME="${MYFN}${INDEX}" ;
  MYPARAM="${iy}pt"
  echo "
        $CMDNAME - $JOBNAME - $MYPARAM" ;
  (${CMDNAME} -output-directory="${MYFN}" -jobname="${JOBNAME}" "\def\myparam{${MYPARAM}}\tracingonline=0\input{${MYFNTEX}}" 2>&1 1>/dev/null);
  convert -density 150 -crop ${CROPPARAMS} +repage ${MYFN}/${JOBNAME}.pdf[1] ${MYFNIMG}/${JOBNAME}.png ;
done

GRAY=""
#~ GRAY="-type grayscale"
echo convert -delay 5 -loop 0 ${MYFNIMG}/\*.png ${GRAY} ${MYFN}_animate.gif
convert -delay 5 -loop 0 ${MYFNIMG}/*.png ${GRAY} ${MYFN}_animate.gif

# view results
#~ evince ${MYFN}/${JOBNAME}.pdf
#~ display ${MYFNIMG}/${JOBNAME}.png
eog atest_animate.gif 2>/dev/null

cleanup # remove tmp files
Mengomentari pertanyaan (5)
Larutan

Jadi, jika ada yang bisa menjelaskan apa yang terjadi di sini - dan apakah ada kemungkinan untuk "halus" vertikal posisi terbang paragraf, silahkan posting kembali...

Seperti Stephan mengatakan ini adalah pertanyaan yang hebat untuk melihat, tapi saya pikir dengan semua animasi dan coding di sekitar anda memiliki cukup efektif tersembunyi masalah.

Pelakunya adalah pusat lingkungan hanya di depan ruang yang anda ubah. Masalahnya adalah bahwa lingkungan ini mengelilingi dirinya dengan lem fleksibel (yaitu dengan meregangkan dan menyusut komponen). Nilai-nilai yang tepat dalam kasus anda adalah

10pt plus 3pt minus 5pt

Jadi di tempat di mana anda memiliki ruang anda anda benar-benar memiliki

\mylength + 10pt plus 3pt minus 5pt

Karena itu kata pada jawaban yang lain TeX upaya untuk menemukan halaman dengan minimal keburukan. Jadi, jika kita menganggap bahwa halaman istirahat TeX ditemukan secara alami sesuai (yaitu tidak menyusut atau peregangan diperlukan) maka anda hanya mendapatkan \mylength + 10pt pada titik ini. Sekarang jika anda menambahkan 1pt untuk \mylength maka baris terakhir tidak't cocok lagi pada halaman, kecuali bahwa anda poin tambahan yang dapat diserap oleh menyusut pada halaman.

Sekarang jika hanya menyusut tersedia di tempat ini (yang dalam contoh anda) maka anda poin ekstra hanya akan menelan dan ruang yang tetap sama. Cerita yang sama untuk menambahkan pt lain dan satu sama lain. (Jika ada beberapa tempat dengan shrink pada halaman kemudian menyusut akan didistribusikan malam di tempat-tempat tersebut, sehingga dalam kasus anda mungkin melihat peningkatan kecil tapi kurang dari nilai langkah.)

Tapi saat anda telah menambahkan 4pt itu dapat't akan dikompensasi dengan mengecilkan tersedia di anda contoh. Dengan demikian baris terakhir sekarang benar-benar doesn't cocok lagi pada halaman dan dengan demikian TeX kebutuhan untuk menggunakan "peregangan" untuk mengisi garis hilang (minus anda 4pt), yaitu, 8pt atau lebih tergantung pada \baselineskip pengaturan.

Sehingga tidak ada lagi menyusut dan bukan peregangan dan ruang anda membuat melompat. Menambahkan lebih lanjut pts akan meningkatkan ruang anda sementara kebutuhan untuk meregangkan mendapat kurang sampai anda mencapai titik di mana halaman lagi adalah "alam" tanpa perlu untuk meregangkan dan kemudian segala sesuatu yang berulang.

Sekarang \raggedbottom hanya pengaturan efek bagaimana akhir halaman ini mengeset (setelah melanggar itu). Pada dasarnya, cut-off page adalah dimasukkan ke dalam bot dari \textheight dan dalam kasus \raggedbottom a \vfill ditambahkan ke bawah (lebih atau kurang). Sekarang di "mengecilkan" situasi ini doesn't benar-benar membuat perbedaan sebagai halaman yang sudah overfull. Dan di peregangan situasi itu berarti bahwa peregangan pada akhirnya hanya diterapkan ke bawah dan tidak elastis di bagian tengah halaman.

Jadi, dalam ringkasan: untuk menghindari misteri anda anda perlu memastikan bahwa ruang yang anda mencoba untuk menyesuaikan tidak menyusut atau peregangan komponen baik sebagai bagian dari penyesuaian atau sebagai bagian dari ruang visual sebelahnya. Hanya maka anda dapat memastikan bahwa ruang yang benar-benar berperilaku seperti yang anda harapkan

Komentar (1)

Lateks secara default vertikal sejalan halaman konten untuk menyebar pada seluruh halaman, dari atas ke bawah, dengan pengecualian sebelum halaman manual (seperti bab baru atau penggunaan \baruhalaman atau \clearpage atau di akhir dokumen.

Untuk mencapai hal ini, setiap ruang vertikal di halaman ini dilengkapi dengan beberapa peregangan. Bahkan baseline skip memiliki stretch jadi paragraf garis-garis yang tidak perlu pada jarak yang sama. Dalam kasus anda, tampaknya bahwa Lateks menggunakan (negatif) peregangan di newline \\ yang anda gunakan untuk menghasilkan ruang. Mencoba menggunakan \vspace*{10.0 pt} sebagai gantinya.

Hal ini umumnya bukan ide yang baik untuk menghapus membentang dari format-mendefinisikan panjang, karena jika anda tidak punya vertikal peregangan pada halaman di semua (yaitu tidak ada antar ayat maupun antar baris atau bagian jarak membentang), halaman akan menjadi "short", Lateks tidak akan mampu mengisi seluruh halaman dan Peringatan: Underfull \vbox sementara \output active akan muncul dalam file log. Halaman tidak harus sama tinggi dan hal ini membuat dokumen anda terlihat jelek.

Komentar (3)

Gambar GIF yang besar dan bash script kung-fu yang lebih besar, namun ini adalah pelajaran untuk menonton kedua bagian atas serta bagian bawah halaman. Berikut adalah gambar yang sedikit berbeda halaman pertama tanpa \vspace tambahnya.

![enter image description here][1]

Perhatikan teks yang dimulai pada baris 4 dan berakhir dengan kata-kata 'hibah'.

Dua gambar set \vspace* di 16pt dan 18pt .

Set \vspace*{16pt}

![enter image description here][2]

Ditetapkan di \vspace{18pt}

![enter image description here][3]

Melompat anda mengalami (terutama jika anda menggunakan lover daripada membintangi versi`, adalah TeX's berusaha untuk selalu menghasilkan sebuah halaman dengan minimal badness.

Ini adalah masalah lama dan pertama kali diterbitkan bekerja pada tipografi (1683) oleh Joseph Moxon, Mechanick Latihan: Atau, Doktrin Berguna Karya Diterapkan untuk Seni Cetak, referensi dibuat untuk menambahkan ruang untuk menyeimbangkan teks sehingga baris terakhir selalu jatuh di tempat yang sama dan bahkan halaman.

Tempat terbaik untuk memulai untuk memahami isu-isu yang terlibat adalah Michael Plass, Ph. D. Tesis, [Optimal Pagination teknik untuk Otomatis Sistem Typesetting][4].

MWE kode untuk gambar berikut, itu akan lebih baik jika anda bisa menggabungkan dengan Gif anda. Ini adalah pelajaran untuk mencatat dan mengamati TeX's berusaha untuk selalu berakhir di sebuah halaman tampilan.


\documentclass[10pt,twoside]{article}
\usepackage{fancyhdr,lipsum}
\makeatletter
 \newsavebox{\@linebox}
 \savebox{\@linebox}[3em][t]{\parbox[t]{3em}{%
   \@tempcnta\@ne\relax
   \loop{\underline{\the\@tempcnta}}\\
     \advance\@tempcnta by \@ne\ifnum\@tempcnta
Komentar (4)

EDIT: Ok, sesuai [@tohecz][3]' benang, itu bukan't hanya tentang penggunaan membintangi \vspace*; per [@YiannisLazarides][4] thread, menghindari \begin{center} membantu - yang juga dijelaskan dalam [@FrankMittelbach][5]'s post. Jadi, dalam OP kode Latex, ditampilkan halaman:

\clearpage

\section*{Introductory words of introduction}

\vspace{\baselineskip}
\vspace{2pt}
\begin{center}
\textbf{Something else here, some other words}
\end{center}

\ \\\\[\mylen]

\makebox[2cm][r]{\the\mylen}, \lipsum[1-10] 

\bigskip
\bigskip
\clearpage

Saya diganti dengan (atextestb-sh-woc.diff):

\clearpage

\section*{Introductory words of introduction}

\vspace{\baselineskip}
\vspace{2pt}
{ % begin group 
\centering\textbf{Something else here, some other words}
} % end group

\vspace{\mylen}

\makebox[2cm][r]{\the\mylen}, \lipsum[1-10] 

\bigskip
\bigskip
\clearpage

... Dan saya bisa mengkonfirmasi bahwa: menyingkirkan center lingkungan, dan menggantinya dengan {} kelompok \berpusat, sekarang akan menyebabkan "halus" vertikal ruang transisi karena \vspace di awal paragraf; yang ditunjukkan dalam atest_animate_l_tb_woc.gif (I pikir lebih baik saya berhenti posting animasi gif inline four berat yang mungkin cukup untuk halaman ini :)). Sayangnya, \berpusat bagian tidak bekerja dengan perubahan ini (judul isn't centered); tapi setidaknya akhirnya "penyebab" untuk ruang vertikal jumpiness diidentifikasi dan dikonfirmasi.

EDIT: Ok, saya bisa mengkonfirmasi bahwa pemusatan mandiri teks dipulihkan, jika saya membungkus \berpusat bait dalam \makebox perintah, seperti di:

 
{ % begin group 
\makebox[\textwidth][c]{ 
\berpusat\textbf{Sesuatu yang lain berikut ini, beberapa kata lain} 
} 
} % end group 

namun, bagian teks ini kemudian diposisikan sedikit di bawah dari mana ia digunakan untuk menjadi; dan teks ayat isn't diposisikan pada lokasi yang sama seperti sebelumnya, dalam menanggapi sama `\vspace` range (di sini -30pt 30 pt). Tapi, `\vspace` - antara judul bab dan paragraf pertama - tidak berubah lancar; animasi dari hack ini adalah di [atest_animate_l_tb_wocm.gif](http://sdaaubckp.sourceforge.net/post/tex/atest_animate_l_tb_wocm.gif).

Untuk perbandingan lebih mudah dari animasi .gif, satu-satunya hal yang bisa saya temukan adalah pertama membuat sisi-by-side montase starter dan dimodifikasi gif menggunakan ImageMagick's `convert` (metode 2 dari "_[Animasi Modifikasi: Side by Side Menambahkan (waktu disinkronkan)][6]_"):
`mengkonversi atest_animate.gif -repage 1208x402 -menyatu null: \( atest_animate_l_tb_woc.gif -menyatu \) -geometri +604+0 -lapisan Komposit out.gif`

(_note perintah di atas akan swap dan babi CPU seperti orang gila, tetapi mungkin kurang dari yang lain methods_) dan kemudian dilihat: `display out.gif` di ImageMagick's `display`. Saya tidak't belum menemukan lain yang mirip alat-alat peraga yang dapat memungkinkan semacam langkah kontrol melalui gif animasi frame (_[merasa][7] doesn't bahkan dukungan animasi gif - hanya menunjukkan pertama frame_)
Perhatikan bahwa gif mungkin akan mulai bermain dengan tingkat yang lambat sekitar satu frame per detik dalam `tampilan`, belum't menemukan cara untuk menghentikannya namun - namun, [`display`'s cara pintas keyboard][8] SPASI dan BACKSPACE masih bekerja untuk pergi ke berikutnya dan sebelumnya gambar dalam urutan - jadi satu agak bisa fokus pada satu gif-bingkai perbandingan. ----- Dalam menanggapi @Mico dan @StephanLehmke - berikut adalah gif dengan potongan kedua kiri atas (mulai dari ayat; ke kiri dari animasi) dan kiri bawah (akhir halaman; ke kanan animasi); online script [atextest.sh](http://sdaaubckp.svn.sourceforge.net/viewvc/sdaaubckp/single-scripts/atextest.sh) telah berubah sejalan. Gambar yang di bawah kondisi yang sama seperti pada OP - kecuali yang disusun dengan `lualatex`, tapi dengan `fontspec` hal-hal yang dihapus ([atest_animate_l_tb.gif](http://sdaaubckp.sourceforge.net/post/tex/atest_animate_l_tb.gif)): HAH - sepertinya imgur dinonaktifkan animasi gif dari kemarin untuk hari ini (_either itu, atau saya belum't diaktifkan salah satu JavaScript domains_); jadi di sini's gambar asli dari sourceforge: [![][1]][1] Saya tidak melihat banyak perbedaan dengan `\raggedbottom`([atest_animate_l_tb_raggedbottom.gif](http://sdaaubckp.sourceforge.net/post/tex/atest_animate_l_tb_raggedbottom.gif)) - namun, ada perbedaan yang menarik dengan `flushbottom`([atest_animate_l_tb_flushbottom.gif](http://sdaaubckp.sourceforge.net/post/tex/atest_animate_l_tb_flushbottom.gif)): [![][2]][2] Di sini tampaknya ada interval yang lebih panjang dari kehalusan - tetapi juga melompat lebih ... [1]: https://web.archive.org/web/20150922211329/http://sdaaubckp.sourceforge.net/post/tex/atest_animate_l_tb.gif [2]: https://web.archive.org/web/20150922164743/http://sdaaubckp.sourceforge.net/post/tex/atest_animate_l_tb_flushbottom.gif [3]: https://tex.stackexchange.com/questions/56448/why-does-vspace-after-section-heading-sometimes-jump-snap-in-discrete-steps/56452#56452 [4]: https://tex.stackexchange.com/questions/56448/why-does-vspace-after-section-heading-sometimes-jump-snap-in-discrete-steps/56465#56465 [5]: https://tex.stackexchange.com/questions/56448/why-does-vspace-after-section-heading-sometimes-jump-snap-in-discrete-steps/56470#56470 [6]: https://www.imagemagick.org/Usage/anim_mods/#append [7]: https://web.archive.org/web/20140907065222/http://linuxbrit.co.uk:80/software/feh/ [8]: https://web.archive.org/web/20150508115059/http://www.urz.uni-heidelberg.de:80/UnixCluster/Hinweise/Hilfe/Anwendung/Grafik/Xpd/ImageMagick/www/display.html#keyb
Komentar (0)