Tengo que hacer una lista del entorno basado en la descripción que debería usarse para describir las funciones del código.
Aquí está el prototipo:
% !TeX program = lualatex
\documentclass[11pt]{report}
\usepackage{enumitem}
\usepackage{minted}
\usepackage{xparse}
\newlist{funcDescription}{description}{1}
\setlist[funcDescription, 1]{itemsep=2mm, style=nextline, font=\mdseries\ttfamily, align=left}
\NewDocumentCommand{\funcitem}{O{}mv}{\item[\mintinline[#1]{#2}|#3|]}
\begin{document}
\begin{funcDescription}
\funcitem{c}{int printf(const char * format, ...)}
Writes the \code{C} string pointed by format to the standard output
(stdout). If format includes format specifiers (subsequences
beginning with \code{\%}), the additional arguments following
format are formatted and inserted in the resulting string replacing
their respective specifiers.
\end{funcDescription}
\end{document}
Produce el
document.tex|32 error| Argument of \\RobustMintInline has an extra }.
document.tex|| Runaway argument?
document.tex|32 error| Paragraph ended before \\RobustMintInline was complete.
en lugar de
Si elimino O{}
de las \funcitem
opciones, todo funciona según lo previsto.
% !TeX program = lualatex
\documentclass[11pt]{report}
\usepackage{enumitem}
\usepackage{minted}
\usepackage{xparse}
\newlist{funcDescription}{description}{1}
\setlist[funcDescription, 1]{itemsep=2mm, style=nextline, font=\mdseries\ttfamily, align=left}
\NewDocumentCommand{\funcitem}{mv}{\item[\mintinline{#1}|#2|]}
\begin{document}
\begin{funcDescription}
\funcitem{c}|int printf(const char * format, ...)|
Writes the \code{C} string pointed by format to the standard output
(stdout). If format includes format specifiers (subsequences
beginning with \code{\%}), the additional arguments following
format are formatted and inserted in the resulting string replacing
their respective specifiers.
\end{funcDescription}
\end{document}
¿Lo que está sucediendo? Cómo hacer que \funcitem[]{}||
funcione conO{}
un argumento opcional?
( texdoc
La investigación xparse
no ayudó. Solo dicen que v
la clave puede ser inestable, minted
los médicos dicen que sus entornos han sido cuidadosamente diseñados para funcionar en casi todas las circunstancias).
ACTUALIZACIÓN 1
He estado jugando con la \funcitem
realización y descubrí cuando uso la siguiente implementación:
\NewDocumentCommand{\funcitem}{mv}{\item[{\mintinline[tabsize=4]{#1}|#2|}]}
produce el mismo error. Entonces el problema no es int O{}
or o
, está en el argumento opcional de \mintinline
. Además, cuando lo elimino \item
y \funcitem
lo uso fuera del fundDescription
entorno, no aparece ningún error. ¿Lo que está sucediendo?
Respuesta1
Como se señaló en los comentarios, no se admite poner cualquier comando textual en el argumento de otro comando y, en el mejor de los casos, funcionará "accidentalmente". Dicho esto, el tema específico aquí tiene una causa diferente, ajena al texto literal.
La captura de argumentos opcional 'clásica' en LaTeX nonocoincide con los niveles, por lo que \item[\mintinline[#1]{#2}|#3|]
da como resultado la \item
lectura \mintinline[#1
como argumento opcional. Luego, el \mintinline
comando intenta leer un argumento opcional, pero no logra encontrar el final ]
y, por lo tanto, obtiene un error de bajo nivel. Si se hubiera \item
definido usando ltcmd
(que sí coincide), esto no sucedería.
La solución para anidar argumentos opcionales es usar llaves para ocultar el 'interno':
\item[{\mintinline[#1]{#2}|#3|}]
Eso resolverá el problema que nos ocupa, aunque la parte literal seguirá siendo motivo de preocupación.