\list環境の\itemの内容が完全にインライン数式モードになっているかどうかを確認する

\list環境の\itemの内容が完全にインライン数式モードになっているかどうかを確認する

リストがあります

\begin{list}{}{}
    \item[(1)] First things first.
    \item[(2)] There are \(1 + 1 = 2\) types of "normal" math
        \[e^{2\pi i} + 1 = 2\]
    \item[(3)] Third time's \(\frac{1}{3}\) of a charm.
    \item[(4)] \(f(x) = 4\)
\end{list}

以下のコマンドを(4)のみに適用します。

\newcommand{\displayit}[1]{\bgroup\allmath{\displaystyle}#1\egroup}

ここでの条件は、(4) で起きていることは、インライン数式素材が含まれていることだけであり、他には何も (ディレクティブ以外\item) 含まれていないことです。対照的に、(1) には数式が含まれていません。(2) にはインライン数式と表示数式の両方が含まれており、「実際の」インライン数式素材は文の途中にあります。(3) は (2) と同様の状況で、「実際の」インライン数式が文の途中にあります。

(2) をそのままにすることはできません。\[1 + 1 = 2\]そうすると、望ましくない書式設定 (式の周囲に多くの空白スペースができるなど) が作成されます。

答え1

最初にコメントします: 非常に低レベルのlist環境を採用して、各ラベルの外観を手動で編集する代わりに、パッケージを\itemロードして入力することをお勧めします。これにより、各ディレクティブの出力を手動で編集する必要がなくなります。enumitem\begin{enumerate}[label=(\arabic*)] ... \end{enumerate}\item

OP は LuaLaTeX を使いたくないと述べていますが、この投稿の他の読者は、LuaLaTeX ベースのソリューションが機能しているのを見て参考になるかもしれません。次の入力形式の要件は、拘束力がないことを願っています。

  • \begin{enumerate}、、\itemそして\end{enumerate}決して発生しない一緒に入力行で;
  • \item入力行ごとに最大 1 つのディレクティブがあります。
  • 入力行にはインライン数式が最大で 1 つ存在します。
  • \(\)インライン数式モードを開始および終了するために使用されます。

解決策は次のように機能します。 と呼ばれる Lua 関数がswitch2displaystyle入力の各行に対して動作します。 環境内にある場合enumerate、入力行が\item(オプション) と純粋なインライン数式 (つまり、テキストなし) で構成されているかどうかを確認します。 この条件が満たされると、\displaystyleの後にディレクティブが挿入されます\(switch2displaystyle関数は、Lua のfindsub、およびgsub文字列関数を使用します。

また、関数をアクティブ化および非アクティブ化する、 および という\DisplayOn2つのユーティリティ LaTeX マクロもあります。「アクティブ化」とは、関数が入力ストリームのプリプロセッサとして動作するLuaTeX のコールバックにを割り当てることを意味します。\DisplayOffswitch2displaystyleswitch2displaystyleprocess_input_buffer


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

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{enumitem}
\usepackage{luacode} % for 'luacode' envenvironment

\begin{luacode}
in_list_env = false -- initiate a Boolean flag
function switch2displaystyle ( s ) 
  if s:find ( "\\begin{enumerate}" ) then
    in_list_env = true
  elseif s:find ( "\\end{enumerate}" ) then
    in_list_env = false
  elseif in_list_env == true then -- there's something to do
    if s:find ( "\\item" ) then
      s = s:gsub ( "^%s-\\item%s-(\\%(.-\\%))$" , 
                   function ( x )
                      return "\\item \\( \\displaystyle " .. x:sub(3) 
                   end ) 
    else
      s = s:gsub ( "^%s-(\\%(.-\\%))$" , 
                   function ( x )
                      return "\\( \\displaystyle " .. x:sub(3)
                   end )
    end
    return s
  end
end
\end{luacode}

% Define 2 LaTeX utility macros
\newcommand\DisplayOn{\directlua{%
   luatexbase.add_to_callback(
     "process_input_buffer" , switch2displaystyle , 
     "switchtodisplaystyle" )}}
\newcommand\DisplayOff{\directlua{%
   luatexbase.remove_from_callback(
     "process_input_buffer" , 
     "switchtodisplaystyle" )}}

\begin{document}

\DisplayOn % activate the Lua function

% Verify that nothing happens if we're not in an 'enumerate' env.
\( \frac{1}{2}+\frac{1}{2}=1 \)

\begin{enumerate}[label=(\arabic*)]
\item First things first.
\item There are \( \frac{2}{2}+\frac{3}{3}=2 \) types of ``normal'' math
      \[ \textstyle \frac{1}{2}+\frac{1}{2}=1 \]
\item Third time's \( \frac{1}{2}+\frac{1}{2}=1 \) not a charm.
\item \( \frac{1}{2}+\frac{1}{2}=1 \)
     
      \( \frac{1}{4}+\frac{1}{4}=\frac{1}{2} \)
     
\DisplayOff % deactivate the Lua function

      \(\frac{1}{2}+\frac{1}{2}=1\)
\end{enumerate}

\end{document}

関連情報