![負のvspaceを動作させる](https://rvso.com/image/330738/%E8%B2%A0%E3%81%AEvspace%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%82%8B.png)
曲の歌詞シートとコードシートを作成する私の TeX コード (コマンド定義内のパラメータを含む) は、データベース データにアクセスして行ごとに処理する他のコードによって動的に生成されるため、簡素化された私の MWE は奇妙に見えるかもしれませんが、ご容赦ください。
ご覧のコード スニペットの意図は、2 つのフォント サイズに関連付けられた基本的な行間隔 (行が折り返される場合に重要) に加えて、各「段落」(歌詞の行) の間に 0.3em を追加してわかりやすくすることです。ただし、ローマ字の行が日本語の行の直後に来るときは、余分な行間は不要であるため、\vspace
同じ量の負の でそれを否定するようにしています。ここまでは順調です。次のファイルは機能します。
\documentclass{ujarticle}
\usepackage[a4paper, margin=6mm]{geometry}
\usepackage{needspace}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont
{#1}\endgroup}
\newenvironment{stanza}
{
\vspace{1em}
\setlength{\parskip}{0.3em}
\fontsize{12}{13.5}\selectfont
\begin{samepage}
}
{
\end{samepage}
}
\begin{document}
\sffamily
\gtfamily
\raggedright
\raggedbottom
\pagestyle{empty}
\begin{stanza}
賛美して目を向けてる あなたに\par
\vspace{-0.3em}\nopagebreak
\romaji{sambi\ shite\ me\ o\ muketeru,\ anata\ ni\par}
\nopagebreak
もとめて待ち望んでる あなたを\par
\vspace{-0.3em}\nopagebreak
\romaji{motomete\ machi\ nozonderu,\ anata\ o\par}
\end{stanza}
\end{document}
しかし、ローマ字のスタイルが追加されると (私のテストケースでは斜体)、スタイルが崩れ、余分なスペースが大量に生じます。以下の左と右のスクリーンショットの唯一の違いは、\textit{...}
ローマ字コマンド定義に が追加されていることです。
\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont
\textit{{#1}}\endgroup}
2 つの出力は次のとおりです。
不思議な間隔 http://l4jp.com/tmp/TeX-tests.png
ログ ファイル内の苦情は次のとおりです。
Runaway argument?
{{sambi\ shite\ me\ o\ muketeru,\ anata\ ni !
Paragraph ended before \text@command was complete.
それは理にかなっています。しかし、そのエラーは が\textit{}
ある場合にのみ発生します。おそらく、パーサーは二重中括弧をナビゲートできないのでしょうか? を\par
閉じ中括弧の後に移動するとエラーはなくなりますが、 は\vspace
すべてのケースで無視されます。
答え1
問題は、\romaji
斜体を使用するように指示する方法にあります。 コマンドは\textit{}
引数を期待するため、段落区切りを処理できません。 に遭遇するとエラーが発生するのはこのためです。 1 つのオプションは、すべてのコマンドの末尾から を\par
省略することです。 おそらく、より良いオプションは を使用することです。は、後続のすべてに適用され、段落区切りを処理できます。 例については、次の MWE を参照してください。\par
\romaji
{\itshape …}
\documentclass{article}
\newcommand{\romaji}[1]{\begingroup\fontsize{10}{11.5}\selectfont{\itshape {#1}}\endgroup}
\begin{document}
\textit{sambi\ shite\ me\ o\ muketeru,\ anata\ ni}
{\itshape sambi\ shite\ me\ o\ muketeru,\ anata\ ni\par}
\romaji{sambi\ shite\ me\ o\ muketeru,\ anata\ ni\par}
\end{document}