Como você cria um comando com argumentos opcionais no LaTeX? Algo como:
\newcommand{\sec}[2][]{
\section*{#1
\ifsecondargument
and #2
\fi}
}
}
Então, eu posso chamar assim
\sec{Hello}
%Output: Hello
\sec{Hello}{Hi}
%Output: Hello and Hi
latex
optional-arguments
Verhogen
fonte
fonte
Respostas:
Exemplo do guia :
fonte
A idéia geral por trás da criação de "argumentos opcionais" é definir primeiro um comando intermediário que avança para detectar quais caracteres serão apresentados a seguir no fluxo de tokens e, em seguida, insere as macros relevantes para processar os argumentos apresentados conforme apropriado. Isso pode ser bastante tedioso (embora não seja difícil) usando a programação TeX genérica. O LaTeX's
\@ifnextchar
é bastante útil para essas coisas.A melhor resposta para sua pergunta é usar o novo
xparse
pacote. Faz parte do conjunto de programação LaTeX3 e contém recursos abrangentes para definir comandos com argumentos opcionais bastante arbitrários.No seu exemplo, você tem uma
\sec
macro que aceita um ou dois argumentos entre chaves. Isso seria implementado usandoxparse
o seguinte:O argumento
{ m g }
define os argumentos de\sec
;m
significa "argumento obrigatório" eg
é "argumento opcional".\IfNoValue(T)(F)
pode então ser usado para verificar se o segundo argumento estava realmente presente ou não. Consulte a documentação para os outros tipos de argumentos opcionais permitidos.fonte
(Hello and ) (Hello and Hi)
Todas as opções acima mostram que pode ser difícil criar uma função agradável e flexível (ou proibir uma sobrecarga) no LaTeX !!! (esse código TeX parece grego para mim)
bem, apenas para adicionar meu desenvolvimento recente (embora não tão flexível), eis o que eu usei recentemente no meu documento de tese, com
Inicie o comando, com o comando "opcional" definido em branco por padrão:
Em seguida, a macro define uma variável temporária, \ temp {}, de maneira diferente, dependendo se o argumento opcional está em branco ou não. Isso pode ser estendido a qualquer argumento passado.
Então eu executo a macro usando a variável \ temp {} para os dois casos. (Aqui, apenas define a legenda curta para igualar a legenda longa, se não tiver sido especificada pelo usuário).
Nesse caso, só verifico o argumento único "opcional" fornecido por \ newcommand {}. Se você configurá-lo para, digamos, 3 args "opcionais", ainda precisará enviar os 3 args em branco ... por exemplo.
o que é bem bobo, eu sei, mas é o mais longe que eu vou usar o LaTeX - não é tão sensato assim que começo a olhar para o código TeX ... Eu gosto do método xparse do Sr. Robertson, talvez eu vou tentar ...
fonte
Tudo o que você precisa é o seguinte:
fonte
x^2+1
oux^{2+1}
então eu tenho uma pergunta, seu comando testa a presença de chaves? É possível criar um comando LaTeX\sec
produzindo: "A, b, c e d" para o comando\sec{A}[b,c,d]
, "A e b" para\sec{A}[b] and "A" for
\ s {A} `?\sec{A}[b,c,d]
ou\sec{A}[b]
ou\sec{A}
.Eu tive um problema semelhante, quando quis criar um comando,
\dx
abreviar\;\mathrm{d}x
(ou seja, colocar um espaço extra antes do diferencial da integral e ter o "d" na vertical também). Mas também queria torná-lo flexível o suficiente para incluir a variável de integração como argumento opcional. Coloquei o seguinte código no preâmbulo.Então
dá \ dx com argumento opcional
fonte
Aqui está minha tentativa, mas não segue exatamente suas especificações. Não totalmente testado, portanto, tenha cuidado.
fonte