Проблема передачи аргументов в файл LaTex

Проблема передачи аргументов в файл LaTex

Я пытаюсь использовать предложенный ответ для передачи аргументов в документ LaTeX, размещенныйздеськак решение №3.

Я передаю аргумент в командной строке Windows следующим образом:

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

В случае, если аргумент не указан, я хотел бы иметь файл по умолчанию для обработки. Однако компилятор все еще жалуется на Undefined control sequence. \begin{filecontents*}{\FILENAME.csv}. Я не могу ни

  • не передавать аргумент в командной строке, ни
  • создать CSV-файл по умолчанию.

Может ли кто-нибудь мне с этим помочь?

\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}

решение1

Вы не определяете \FILENAMEв случае, который filecontents*используется, предположительно, вы хотите что-то вроде этого, что определяет его как\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}

решение2

Ответ мне не подошел, пришлось кое-что изменить:

\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}

Я создал PDF-файл:

Имя файла — Tabela.csv. Tabela.csv содержит 301 строку и 4 столбца.

Связанный контент