¿Cómo se crea un comando con argumentos opcionales en LaTeX? Algo como:
\newcommand{\sec}[2][]{
\section*{#1
\ifsecondargument
and #2
\fi}
}
}
Entonces, puedo llamarlo así
\sec{Hello}
%Output: Hello
\sec{Hello}{Hi}
%Output: Hello and Hi
latex
optional-arguments
Verhogen
fuente
fuente
Respuestas:
Ejemplo de la guía :
fuente
La idea general detrás de la creación de "argumentos opcionales" es definir primero un comando intermedio que escanea hacia adelante para detectar qué caracteres aparecerán a continuación en la secuencia de tokens y luego inserta las macros relevantes para procesar los argumentos que surjan según corresponda. Esto puede ser bastante tedioso (aunque no difícil) con la programación genérica de TeX. LaTeX
\@ifnextchar
es bastante útil para tales cosas.La mejor respuesta para su pregunta es usar el nuevo
xparse
paquete. Forma parte de la suite de programación LaTeX3 y contiene amplias funciones para definir comandos con argumentos opcionales bastante arbitrarios.En su ejemplo, tiene una
\sec
macro que toma uno o dos argumentos entre paréntesis. Esto se implementaría usandoxparse
lo siguiente:El argumento
{ m g }
define los argumentos de\sec
;m
significa "argumento obligatorio" yg
es "argumento entre paréntesis opcional".\IfNoValue(T)(F)
entonces se puede usar para verificar si el segundo argumento estaba realmente presente o no. Consulte la documentación para los otros tipos de argumentos opcionales que están permitidos.fuente
(Hello and ) (Hello and Hi)
¡Todo lo anterior muestra que puede ser una función agradable, flexible (o prohibir una sobrecarga) en LaTeX! (ese código TeX me parece griego)
bueno, solo para agregar mi desarrollo reciente (aunque no tan flexible), esto es lo que he usado recientemente en mi documento de tesis, con
Inicie el comando, con el comando "opcional" en blanco por defecto:
Luego hago que la macro establezca una variable temporal, \ temp {}, de manera diferente dependiendo de si el argumento opcional está en blanco o no. Esto podría extenderse a cualquier argumento aprobado.
Luego ejecuto la macro usando la variable \ temp {} para los dos casos. (Aquí solo establece el título corto para que sea igual al título largo si no fue especificado por el usuario).
En este caso, solo verifico el argumento único "opcional" que proporciona \ newcommand {}. Si tuviera que configurarlo para, digamos, 3 args "opcionales", todavía tendría que enviar los 3 args en blanco ... por ejemplo.
lo cual es bastante tonto, lo sé, pero eso es lo más lejos que voy a ir con LaTeX: simplemente no es tan sensato una vez que empiezo a mirar el código TeX ... Sin embargo, me gusta el método xparse del Sr. Robertson, quizás Lo intentaré ...
fuente
Todo lo que necesitas es lo siguiente:
fuente
x^2+1
ox^{2+1}
Entonces tengo una pregunta, ¿su comando prueba la presencia de llaves? ¿Es posible crear un comando LaTeX que\sec
produzca: "A, b, c y d" para el comando\sec{A}[b,c,d]
, "A y b" para\sec{A}[b] and "A" for
\ sec {A} `?\sec{A}[b,c,d]
o\sec{A}[b]
o\sec{A}
.Tuve un problema similar, cuando quería crear un comando,
\dx
para abreviar\;\mathrm{d}x
(es decir, poner un espacio adicional antes del diferencial de la integral y tener la "d" en posición vertical también). Pero también quería hacerlo lo suficientemente flexible como para incluir la variable de integración como argumento opcional. Puse el siguiente código en el preámbulo.Luego
da \ dx con argumento opcional
fuente
Aquí está mi intento, aunque no sigue exactamente tus especificaciones. No completamente probado, así que tenga cuidado.
fuente