while for else algoritmos algoritmo algorithmic algorithm2e latex condition if-statement

else - for latex



LaTeX / newcommand default argument: is empty? (4)

En el motor TeX subyacente con el que se escribe LaTeX, la cantidad de argumentos que un comando puede tomar es fija. Lo que has hecho con el [/@empty] es pedir a LaTeX que examine el siguiente token para ver si es un corchete abierto [ . Si es así, LaTeX toma el contenido de corchetes como el argumento, si no, el próximo token se vuelve a poner en la secuencia de entrada y el argumento predeterminado /@empty se usa en su lugar. Para que su idea funcione, debe usar corchetes para delimitar el argumento opcional cuando esté presente:

/optarg /optarg[] /optarg[test]

Deberías tener mejor suerte con esta notación.

Es molesto que no puedas usar los mismos corchetes para un argumento opcional como lo usas para un argumento requerido, pero así son las cosas.

Intento escribir un comando de ejemplo simple que no imprime nada sin un argumento, pero con un argumento lo rodea con algo.

He leído que el valor predeterminado debe ser /@empty y la /ifx/@empty#1 simple /ifx/@empty#1 debería hacer el trabajo:

/newcommand{/optarg}[1][/@empty]{% /ifx/@empty#1 {} /else {(((#1)))} /fi } /optarg % (((empty))) /optarg{} % (((empty))) /optarg{test} % (((empty))) test

Los tres últimos comandos imprimen todas las palabras empty por algún motivo, y quiero que los dos primeros no impriman nada y los últimos en imprimir (((test))) .

Estoy usando TeXLive / Ubuntu. ¿Ideas?


Pruebe la siguiente prueba:

/documentclass{article} /usepackage{xifthen}% provides /isempty test /newcommand{/optarg}[1][]{% /ifthenelse{/isempty{#1}}% {}% if #1 is empty {(((#1)))}% if #1 is not empty } /begin{document} Testing /verb|/optarg|: /optarg% prints nothing Testing /verb|/optarg[]|: /optarg[]% prints nothing Testing /verb|/optarg[test]|: /optarg[test]% prints (((test))) /end{document}

El paquete xifthen proporciona la construcción /ifthenelse y la prueba /isempty .

Otra opción es usar el paquete ifmtarg (ver el archivo ifmtarg.sty para la documentación).


Usando el paquete LaTeX3 xparse:

/usepackage{xparse} /NewDocumentCommand/optarg{g}{% /IfNoValueF{#1}{(((#1)))}% }


/documentclass{article} /usepackage{ifthen} % provides /ifthenelse test /usepackage{xifthen} % provides /isempty test /newcommand{/inlinenote}[2][]{% {/bfseries{Note:}}% /ifthenelse{/isempty{#1}} {#2} % if no title option given {~/emph{#1} #2} % if title given } /begin{document} /inlinenote{ simple note } /inlinenote[the title]{ simple note with title } /end{document}