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}