Problema ao passar argumentos para um arquivo LaTex

Problema ao passar argumentos para um arquivo LaTex

Estou tentando usar a resposta sugerida para passar argumentos para um documento LaTeX, postadoaquicomo solução#Três.

Estou passando o argumento da seguinte maneira no prompt de comando do Windows:

C:\Users\afp\projects>pdflatex "\def\InputFilename{sample}\input{myLaTeXDoc.tex}"

Caso o argumento não seja fornecido, gostaria de ter um arquivo padrão para processar. No entanto, o compilador ainda reclama do Undefined control sequence. \begin{filecontents*}{\FILENAME.csv}. Eu não sou capaz de nenhum dos dois

  • passe o argumento no prompt de comando nem
  • gerar um arquivo csv padrão.

Alguém poderia me ajudar com isso?

\documentclass[tikz, border=0mm]{standalone}

\usepackage{array}
\usepackage{readarray}
\readarraysepchar{,}

\usepackage{filecontents}

% If the argument is provided at the Windows command prompt, define \FILENAME as the input argument 
% otherwise define \FILENAME as a default comma-separated file to process.
\ifdefined\InputFilename
    \def\FILENAME{\InputFilename} 
\else
    \begin{filecontents*}{\FILENAME.csv}
        1,2,3
        4,5,6
        7,8,9
        10,11,12
    \end{filecontents*}
\fi

\begin{document}
    \wlog{filename is \FILENAME.csv}
    \readdef{\FILENAME.csv}\namedata
    \readarray\namedata\mydata[-,\ncols]
    \wlog{\FILENAME.csv has \nrows rows and \ncols columns.}
\end{document}

Responder1

Você não define \FILENAMEo caso que filecontents*é usado, provavelmente você quer algo assim que o defina para ser\jobname

\documentclass[tikz, border=0mm]{standalone}

\usepackage{array}
\usepackage{readarray}
\readarraysepchar{,}

\usepackage{filecontents}

% If the argument is provided at the Windows command prompt use it 
% otherwise create a default comma-separated file to process.
\ifdefined\InputFilename
    \def\FILENAME{\InputFilename} 
\else
    \def\FILENAME{\jobname} 
    \begin{filecontents*}{\FILENAME.csv}
        1,2,3
        4,5,6
        7,8,9
        10,11,12
    \end{filecontents*}
\fi

\begin{document}
    \wlog{filename is \FILENAME.csv}
    \readdef{\FILENAME.csv}\namedata
    \readarray\namedata\mydata[-,\ncols]
    \wlog{\FILENAME.csv has \nrows rows and \ncols columns.}
\end{document}

Responder2

A resposta não funcionou para mim, tive que mudar alguma coisa:

\documentclass[tikz, border=0mm]{standalone}

\usepackage{array}
\usepackage{readarray}
\readarraysepchar{,}


% If the argument is provided at the Windows command prompt, define \FILENAME as the input argument
% otherwise define \FILENAME as a default comma-separated file to process.
\ifdefined\InputFilename
    \def\FILENAME{\InputFilename}
\else
    \def\FILENAME{\jobname.csv}
    \begin{filecontents*}{\FILENAME}
        1,2,3
        4,5,6
        7,8,9
        10,11,12
    \end{filecontents*}
\fi

\begin{document}
    Filename is \FILENAME
    \readdef{\FILENAME}\namedata
    \readarray\namedata\mydata[-,\ncols]
    \FILENAME has \nrows rows and \ncols columns.
\end{document}

Eu criei o PDF:

O nome do arquivo é Tabela.csv Tabela.csvtem 301 linhas e 4 colunas.

informação relacionada