Ich habe eine Liste
\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}
Ich möchte den folgenden Befehl nur auf (4) anwenden:
\newcommand{\displayit}[1]{\bgroup\allmath{\displaystyle}#1\egroup}
Die Bedingung hier ist, dass das einzige, was mit (4) passiert, ist, dass es Inline-Mathematikmaterial enthält – und sonst nichts (außer der \item
Direktive). Im Gegensatz dazu enthält (1) keine Mathematik; (2) enthält sowohl Inline- als auch Anzeigemathematik, und das „echte“ Inline-Mathematikmaterial befindet sich in der Mitte eines Satzes; und (3) befindet sich in einer ähnlichen Situation wie (2) mit „echter“ Inline-Mathematik in der Mitte eines Satzes.
Ich kann (2) nicht einfach in „(2)“ umwandeln, \[1 + 1 = 2\]
weil das zu einer unerwünschten Formatierung führt (beispielsweise zu viel mehr Leerraum um die Gleichung herum).
Antwort1
Ein Kommentar vorweg: Anstatt eine list
Umgebung auf sehr niedriger Ebene zu verwenden und dann das Erscheinungsbild jedes einzelnen \item
Etiketts manuell bearbeiten zu müssen, schlage ich vor, dass Sie das enumitem
Paket laden und eingeben \begin{enumerate}[label=(\arabic*)] ... \end{enumerate}
– kein manuelles Bearbeiten der Ausgabe jeder einzelnen \item
Anweisung mehr.
Obwohl der OP angegeben hat, LuaLaTeX nicht verwenden zu wollen, finden es andere Leser dieses Beitrags vielleicht aufschlussreich, eine LuaLaTeX-basierte Lösung in Aktion zu sehen. Die folgenden Anforderungen an das Eingabeformat sind hoffentlich nicht bindend:
\begin{enumerate}
,\item
, und\end{enumerate}
treten nie aufzusammenin einer Eingabezeile;- es gibt höchstens eine
\item
Anweisung pro Eingabezeile; - Es gibt höchstens eine Instanz von Inline-Mathematikmaterial in einer Eingabezeile; und
\(
und\)
werden zum Starten und Beenden des Inline-Mathematikmodus verwendet.
Die Lösung funktioniert folgendermaßen: Eine Lua-Funktion namens switch2displaystyle
bearbeitet jede Eingabezeile. Wenn sie sich in einer enumerate
Umgebung befindet, prüft sie, ob die Eingabezeile aus \item
(optional) und reinem Inline-Mathematikmaterial besteht (also keinen Text). Wenn diese Bedingung erfüllt ist, \displaystyle
wird nach eine Direktive eingefügt \(
. Die switch2displaystyle
Funktion verwendet Luas find
, sub
, und gsub
String-Funktionen.
Es gibt auch zwei LaTeX-Dienstprogrammmakros namens \DisplayOn
und \DisplayOff
, die die Funktion aktivieren und deaktivieren switch2displaystyle
. Mit „Aktivierung“ meine ich die Zuweisung von switch2displaystyle
an den LuaTeX- process_input_buffer
Callback, wo die Funktion als Präprozessor auf dem Eingabestrom arbeitet.
% !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}