リストがあります
\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 のfind
、sub
、およびgsub
文字列関数を使用します。
また、関数をアクティブ化および非アクティブ化する、 および という\DisplayOn
2つのユーティリティ LaTeX マクロもあります。「アクティブ化」とは、関数が入力ストリームのプリプロセッサとして動作するLuaTeX のコールバックにを割り当てることを意味します。\DisplayOff
switch2displaystyle
switch2displaystyle
process_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}