数式環境内において\textを改行する

数式環境内において\textを改行する

- あ い の投稿
返信数: 9

【環境】:MacBook / luaLaTeX / TeXShop

【目標】コードAをコードBで再現する。


〈コードA〉

\begin{equation}

\begin{split}

\begin{textmath}

\text{aaa}\\

\text{ddd}

\end{textmath}

\end{split}

\end{equation}

〈コードB〉

\begin{equation}

\begin{split}

\begin{textmath}

\TEXT{aaa\\ddd}

\end{textmath}

\end{split}

\end{equation}


(数式環境内で\textを用いたいが,その中で改行できるようにしたい)


調べてもわからなかったので,方法をご教授願いたいです。


「equationとsplitを用いる」というのは変えないでいただけると幸いです。

あ い への返信

Re: 数式環境内において\textを改行する

- TONE Kozaburo の投稿
元のソースが不完全なので試せませんが。

\text{\parbox{5zw}{ほげ\par ふがふが}}

のように \text の中に \parbox 入れてそこで \par を用い改行できないでしょうか。
TONE Kozaburo への返信

Re: 数式環境内において\textを改行する

- あ い の投稿
TONE Kozaburo さま,回答ありがとうございます。

当初はこの質問で解決できると思っていましたが,自分で作っていたマクロを色々変えていたら思っていたシチュエーションと全然違うことになってしまいました。申し訳ありませんが,ソースを貼らせていただきます。

大変汚く長ったらしいソースですが,助言をくだされば幸いです。
あ い への返信

Re: 数式環境内において\textを改行する

- 和田 勇 の投稿
ううむ、幅や高さの計算だと思うのですがその処理に時間要してますね。
提供された equation のブロックを一つ処理するのに私の環境で50秒くらいかかる。
下に添付したものを含めて2ブロックにするとほぼ2分になるので、
この種のデータがたくさんあるケースでは問題になると思います。

またOverfull \hbox (6.015pt too wide) は多発しているのが気になります。

で助言としてですが&可能であればスクラッチから書き直して見ると問題点がわかる場合があります。

現在、あいさんのマクロを追いかけている時間はあまりないので「妥協案」です

equation + split 必須ということなので
\fold (\subfold) で改善するのが一番かと思いますが
以下のように \phrases を利用すると、とりあえずは改行が入りますので
\phrasesB のようなもので取り敢えず対処は可能なようです。


+\begin{equation}%
+  \begin{split}%
+    \fold
+    (p)[\fold[sample sentences sample sentences sample sentences sample sentences]  % これを利用しようと思ったけど頓挫
+    <\phrases{sample sentences\\sample sentences\\sample sentences\\sample sentences}> % 代替案でこれを利用
+    (b)[sample sentences sample sentences sample sentences sample sentences]
+    \phrases{Here is the place\\I want to break.}]% phrasesB などを新設してみたらいかがだろうか
+  \end{split}%
+\end{equation}%
和田 勇 への返信

Re: 数式環境内において\textを改行する

- あ い の投稿
和田勇さま,回答ありがとうございます。

ご提示の方法も考えてはみたのですが,
・長い文
・括弧類が入ってきてしまうケース
において使えなくなってしまう(あるいは見るに耐えない結果となる)ので,物理的に(次の行に)改行するのが使用を想定する上では好ましいです。
また,30個ほどequationを羅列してみましたが,おっしゃる通りstack overflowのエラーが出てしまいました。
長さを取得して,という方法では機能的に不可能なのでしょうか,,,?

私の知識ではこの程度が限界なので,改善案をご教示いただければ大変嬉しい所存です。

よろしくお願いいたします。
あ い への返信

Re: 数式環境内において\textを改行する

- 和田 勇 の投稿
仕様がよくわからないので、
四つ項目があって、それぞれ等幅で横並びだとしてやっつけマクロ書いてみました。
pmatrix Bmatrix などは美文書8版 p113 6.3 行列参考にしてください。

作成した点の反省点は ....
  - 文字の中央寄せしてるのは取ったほうが良いかもしれません。
  - また幅を指定できるようにしたほうが良いかもしれません。

\def\myparbox#1{\parbox{.24\linewidth}{\begin{center}#1\end{center}}}%取り敢えず中央に
\def\mypmatrix#1{\begin{pmatrix}\myparbox{#1}\end{pmatrix}}
\def\myBmatrix#1{\begin{Bmatrix}\myparbox{#1}\end{Bmatrix}}
\def\mybmatrix#1{\begin{bmatrix}\myparbox{#1}\end{bmatrix}}
\def\myVmatrix#1{\begin{Vmatrix}\myparbox{#1}\end{Vmatrix}}
\def\myvmatrix#1{\begin{vmatrix}\myparbox{#1}\end{vmatrix}}

\begin{equation}
  \begin{pmatrix}%% これを \mypmatrix には出来ない :-(
    \myparbox{
    sample sentences sample sentences sample sentences sample
    sentences
    }
    %%%%%%%%%%空白を入れたい時は \, \hspace などで
    \myBmatrix{
    sample sentences\\%% 強制改行
    sample sentences\\
    sample sentences\\
    sample sentences
    }
    %%%%%%%%%%空白を入れたい時は \, \hspace などで
    \mybmatrix{
    \smallskip% [] の高さ調整必要なら
    sample sentences sample sentences sample sentences sample
    sentences
    \smallskip% [] の高さ調整必要なら
    }
    %%%%%%%%%%空白を入れたい時は \, \hspace などで
    \myparbox{Here is the place I want to break.}
  \end{pmatrix}
\end{equation}
\end{document}
あ い への返信

Re: 数式環境内において\textを改行する

- 大熊 一弘 の投稿
大分時間がたって,ピンボケですね。
解決済みなら,放置してください。

> 最後の「Here is the place I want to break.」の途中で,
> 改行を施したいのですが,方法がわかりません。%

改行のレベルというか,次の2つのいずれをお望みなのでしょうか。
http://emath.s40.xrea.com/temp/REsplit.zip
に含まれる
REsplit-case1.pdf
REsplit-case2.pdf
の2つのうち,ご希望の方をお答えください。
どちらでもない,ということもあるか........
大熊 一弘 への返信

Re: 数式環境内において\textを改行する

- あ い の投稿
和田 勇さま,大熊 一弘さま,回答ありがとうございます。
和田さまのソースを参考にして少し自分なりに変えていたのですが,思ったよりも時間がかかってしまい返信を長い間していませんでした,申し訳ありません。
大熊さまからご提示いただいたpdfですが,当方が想定していたのは
REsplit-case1.pdf
の方です。
あ い への返信

Re: 数式環境内において\textを改行する

- 大熊 一弘 の投稿
> 当方が想定していたのは REsplit-case1.pdf の方です。

$\left(と\right)$で囲まれたブロック内での改行はできない,
は TeX の仕様です。
それに逆らうには,いくつかの方法がありますが,
ここでは,ブロック分割をしましょう。

$\left(-----*****-----\right)$  (*)

において,

  ----- は改行の必要がない部分
  ***** は途中で改行をしたい部分

とします。
(*)を次の3つに分割します:
  $\left(-----
  *****
  -----\right)$
第1の部分末尾に \right.$ を補い,
第3の部分冒頭に $\left. を補います:

$\left(-----\right.$*****$\left.-----\right)$  (**)

ただし,この方法では,2つの括弧, \left( と \right) で,
括弧の大きさが異なる可能性があります。
その場合は,小さいほうに
\vphantom{???}
を補う必要があります。

実行したリストを
REsplit-case1a.tex
ただし,このファイルは emath パッケージを前提としていますので,
それを排除したものが
Resplit-case1b.tex
これら2つと,それらをタイプセットして得られる pdf をまとめた書庫ファイルを
http://emath.s40.xrea.com/temp/RE2split.zip
に置きました。

P.S. 以上の話は
split 環境
内に配置した
\itertext
を前提としています。
大熊 一弘 への返信

Re: 数式環境内において\textを改行する

- あ い の投稿
大熊 一弘さま,返信ありがとうございます。
おっしゃるようにマクロを組んだところ,無事結果を得ることができました。
ありがとうございました。