負のvspaceを動作させる

負のvspaceを動作させる

曲の歌詞シートとコードシートを作成する私の 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}

ここに画像の説明を入力してください

関連情報